软件设计师笔记-12008-06-05 20:141.        SIMD单指令流多数据流 一个控制部分,多个处理器,多个主存模块,各处理器以同步执行同一条指令,代表有并行处理机,阵列处理机,超级向量处理机,矩阵运算。
2.        运算器和控制器组成中央处理器。运算器由ALU、累加器、寄存器、多路转换器、数据总线组成;控制器由程序计数器、指令寄存器、指令译码器、状态/条件寄存器、时序发生器、微操作信号发生器组成。
3.        总线数据传输率=时钟频率/每个总线包含的时钟周期数×每个总线周期传送的字节数
每秒指令数=时钟频率/每个总线包含的时钟周期数/指令平均占用总线周期数。
4.        立即寻址:直接给出操作数,而非地址,ADD AX, 100;直接寻址:直接给出操作数地址,ADD AX, [100]或所在寄存器号(寄存器寻址, ADD AX, BX);间接寻址:给出的是操作数地址的地址, ADD AX, [DX]/[[100]];变址寻址:给出的地址需与特定的地址值累加从而得出操作数地址, ADD AX, [DI+100],相对寻址:PC加上偏移量,ADD AX, *100。
5.        移位指令:算术移位(左移则在空位补0,右移则补符号位)、逻辑移位(左移右移都补0)
6.        RISC编译后产生的机器指令数增多了,但是指令所需的周期数和每个周期的时间都减少了,以硬
布线逻辑控制为主。
7.        多处理系统MIMD,需专门并行指令来控制并发执行,需要专门的同步措施。并行处理机和采用流水线结构的单机系统都是SIMD系统,但是区别是,并行处理机采用资源重复技术,后者采用的是时间重叠技术。
8.        Cache,相联存取,根据内容而非地址来选择读写点。依据的是程序的局部性原理。淘汰算法:随机淘汰、FIFO、LRU。写操作方法:写直达(同时写主存和Cache)、写回(写Cache不马上写主存)、标记法。
9.        格式化容量=每道扇区数×扇区容量×总磁道数;非格式化容量=位密度×pi×最内圈直径×总磁道数;平均数据传输速率=每道扇区数×扇区容量×盘片转数。
10.    RAID0:无冗余无校验;RAID1:镜像模式;RAID2:纠错海明码;RAID3:位交叉奇偶校验;RAID4:块交叉奇偶校验;RAID5:无独立校验的奇偶校验。
11.    常见的I/O总线类型:IDE(最常用的磁盘接口),EIDE,ESDI,Ultra DMA,SCSI(用雏菊链的方式连接多个I/O设备)。系统总线:ISA,EISA,VESA,PCI,AGP,USB,IEEE1394,PCMCIA,MCA。
12.    进程的五态模型:运行,就绪,阻塞,挂起。
13.    死锁的必要条件:互斥条件、保持和等待条件、不剥夺条件、环路等待条件。解决死锁的策略:死锁预防(破坏其必要条件)、死锁避免(银行家算
法)、死锁检测、死锁解除(与死锁检测结合使用,采用剥夺方式)。
14.    存储分配算法:最佳适应法(最接近作业的自由区)、首次适应法(第一个可用的自由区)、最差适应法(选择最大的自由区)、循环首次适应法。
15.    程序设计语言分类:命令式/过程式(FORTRAN/C/PASCAL),函数式(Lisp/ML),面向对象(C++/SmallTalk/Java/C#),逻辑程序设计(Prolog)。
16.    解释型(接受所输入的用程序语言编写的源程序,然后直接解释执行,如Basic,现在的Java/C#也是一种半解释型的语言),翻译型(汇编和编译两类)
17.    编译的主要过程:词法分析(识别一个个单词符号),语法分析,语义分析(雪是红的,语法正确,语义不正确),中间代码生成、代码优化、目标代码生成。
18.    以太网常用传输介质:10Base-T中T表示双绞线,100Base-TX采用的是5类的UTP(非屏蔽双绞线,100m),1000Base-SX(多模光纤)
19.    组网技术:X.25(面向连接,虚拟电路,分组,64Kbps,链路标准LAPB),帧中继(没有专门定义物理层接口,只做检错、不重传、只有拥塞控制,链路标准LAP-D),ISDN(N-ISDN 基速率接口2B+D 主速率接口,30B+2D/23B+1D),ATM(信元53B 统计时分复用模式 150Mb/s 5种业务类型:CBR固定比特率,RT-VBR实时变化比特率, NRT-VBR非实时变化比特率,ABR有效比特率,UBR不定比特率(无连接)),ADSL(上行512K~1M,下行1~8M,接入方式:专线接入和虚拟拨号)
20.    TCP支持的应用协议:Telnet(23)、FTP(21)、SMTP(25),HTTP(80) DNS(53)。UDP支持的应用协议:DNS(53)、SNMP(161)、TFTP(69)。
21.    对称密钥加密技术典型算法是DES和IDEA算法。DES密钥长度为56位,对64位的数据块进行加密,攻击DES的主要技术是穷举,为了提高安全性,就出现了使用112位密钥对数据进行三次加密的算法,称为3DES。采用DES的一个著名的网络安全系统是Kerberos。IDEA算法:其明文和密文都是64位,密钥长度是128位。(2)非对称密钥加密系统,其特点是加密和解密使用不同的密钥。典型算法是RSA,其安全性基于大数分解的困难性,可以用于数字签名。
22.    认证技术:Hash函数和信息摘要,又称散列函数,单向的Hash函数用于产生信息摘要,常见的算法是MD5(输入512位,输出128位)和SHA(安全散列算法,输入512,输出160),数字签名技术可以解决否认、伪造、篡改和冒充问题即数据的完整性和不可抵赖性。一般采用公钥算法。数字证书采用
公钥体制,一般使用X.509国际标准,还有一种PGP,用来提供数字证书,用来证明通信双方的真实身份。keberros并非为每一个服务器构造
一个身份认证协议,而是提供一个中心认证服务器,提供用户到服务器以及服务器到用户的认证服务,其核心是利用了DES加密技术。为了防止重放攻击,它使用了一次性的Ticket和时间戳。
23.    实现VPN的关键技术是隧道技术、加解密技术、密钥管理技术和身份认证技术。VPN的关键技术是隧道技术,它是一种数据封装协议,也就是将一种协议封装在另一种协议中传输,从而实现被封装协议对封装协议的透明性。根据其工作的层次可分为以下两类:a. 二层隧道技术:包括PPP基础上的PPTP(点到点隧道协议)和L2F(二层转发协议)、L2TP(二层隧道协议)b. 三次隧道技术:主要代表是IPSec(IP层安全协议,它是IPv4和IPv6的安全标准)、移动IP协议和虚拟隧道协议(VTP)
如何成为优秀软件设计师收藏2008-08-25 16:081. 人远比技术重要
你开发软件是为了供别人使用,没有人使用的软件只是没有意义的数据的集合而已。许多在软件方面很有成就的行家在他们事业的初期却表现平平,因为他们那时侯将主要精力都集中在技术上。显然,构件(components),EJB(Enterprise Java Beans)和代理(agent)是很有趣的东西。但是对于用户来说,如果你设计的软件很难使用或者不能满足他们的需求,后台用再好的技术也于事无补。多花点时间到软件需求和设计一个使用户能很容易理解的界面上。
2. 理解你要实现的东西
好的软件设计人员把大多数时间花费在建立系统模型上,偶尔写一些源代码,但那只不过是为了验证设计过程中所遇到的问题。这将使他们的设计方案更加可行。
3. 谦虚是必须的品格
你不可能知道一切,你甚至要很努力才能获得足够用的知识。软件开发是一项复杂而艰巨的工作,因为软件开发所用到的工具和技术是在不断更新的。而且,一个人也不可能了解软件开发的所有过程。在日常生活中你每天接触到的新鲜事物可能不会太多。但是对于从事软件开发的人来说,每天可以学习很多新东西(如果愿意的话)。
4. 需求就是需求
如果你没有任何需求,你就不要动手开发任何软件。成功的软件取决于时间(在用户要求的时间内完成)、预算和是否满足用户的需求。如果你不能确切知道用户需要的是什么,或者软件的需求定义,那么你的工程注定会失败。
5. 需求其实很少改变,改变的是你对需求的理解
Object ToolSmiths公司的Doug Smith常喜欢说:“分析是一门科学,设计是一门艺术”。他的意思是说在众多的“正确”分析模型中只存在一个最“正确”分析模型可以完全满足解决某个具体问题的需要(我理解的意思是
需求分析需要一丝不苟、精确的完成,而设计的时候反而可以发挥创造力和想象力 - 译者注)。
如果需求经常改动,很可能是你没有作好需求分析,并不是需求真的改变了。
你可以抱怨用户不能告诉你他们想得到什么,但是不要忘记,收集需求信息是你工作。
你可以说是新来的开发人员把事情搞得一团糟,但是,你应该确定在工程的第一天就告诉他们应该做什么和怎样去做。
如果你觉得公司不让你与用户充分接触,那只能说明公司的管理层并不是真正支持你的项目。
你可以抱怨公司有关软件工程的管理制度不合理,但你必须了解大多同行公司是怎么做的。
你可以借口说你们的竞争对手的成功是因为他们有了一个新的理念,但是为什么你没先想到呢?
需求真正改变的情况很少,但是没有做好需求分析工作的理由却很多。
6. 经常阅读
在这个每日都在发生变化的产业中,你不可能在已取得的成就上陶醉太久。
每个月至少读2、3本专业杂志或者1本专业书籍。保持不落伍需要付出很多的时间和金钱,但会使你成为一个很有实力的竞争者。
7. 降低软件模块间的耦合度
高耦合度的系统是很难维护的。一处的修改引起另一处甚至更多处的变动。
你可以通过以下方法降低程序的耦合度:隐藏实现细节,强制构件接口定义,不使用公用数据结构,不让应用程序直接操作数据库(我的经验法则是:当应用程序员在写SQL代码的时候,你的程序的耦合度就已经很高了)。
耦合度低的软件可以很容易被重用、维护和扩充。
8. 提高软件的内聚性
如果一个软件的模块只实现一个功能,那么该模块具有高内聚性。高内聚性的软件更容易维护和改进。
判断一个模块是否有高的内聚性,看一看你是否能够用一个简单的句子描述它的功能就行了。如果你用了一段话或者你需要使用类似“和”、“或”等连词,则说明你需要将该模块细化。
只有高内聚性的模块才可能被重用。
9. 考虑软件的移植性
移植是软件开发中一项具体而又实际的工作,不要相信某些软件工具的广告宣传(比如java 的宣传口号write once run many ? 译者注)。
pascal是系统软件吗即使仅仅对软件进行常规升级,也要把这看得和向另一个操作系统或数据库移植一样重要。
记得从16位Windows移植到32位windows的“乐趣”吗 ?当你使用了某个操作系统的特性,如它的进程间通信(IPC)策略,或用某数据库专有语言写了存储过程。你的软件和那个特定的产品结合度就已经很高了。
好的软件设计者把那些特有的实现细节打包隐藏起来,所以,当那些特性该变的时候,你的仅
仅需要更新那个包就可以了。
10. 接受变化
这是一句老话了:唯一不变的只有变化。
你应该将所有系统将可能发生的变化以及潜在需求记录下来,以便将来能够实现(参见“Architecting for Change”,Thinking Objectively, May 1999)
通过在建模期间考虑这些假设的情况,你就有可能开发出足够强壮且容易维护的软件。设计强壮的软件是你最基本的目标。
11. 不要低估对软件规模的需求
Internet 带给我们的最大的教训是你必须在软件开发的最初阶段就考虑软件规模的可扩充性。
今天只有100人的部门使用的应用程序,明天可能会被有好几万人的组织使用,下月,通过因特网可能会有几百万人使用它。
在软件设计的初期,根据在用例模型中定义的必须支持的基本事务处理,确定软件的基本功能。然后,在建造系统的时候再逐步加入比较常用的功能。
在设计的开始考虑软件的规模需求,避免在用户突然增大的情况下,重写软件。
12. 性能仅仅是很多设计因素之一
关注软件设计中的一个重要因素--性能,这好象也是用户最关心的事情。一个性能不佳的软件将不可避免被重写。
但是你的设计还必须具有可靠性,可用性,便携性和可扩展性。你应该在工程开始就应该定义并区分好这些因素,以便在工作中恰当使用。性能可以是,也可以不是优先级最高的因素,我的观点是,给每个设计因素应有的考虑。
13. 管理接口
“UML User Guide”(Grady Booch,Ivar Jacobson和Jim Rumbaugh ,Addison Wesley, 1999)中指出,你应该在开发阶段的早期就定义软件模块之间的接口。这有助于你的开发人员全面理解软件的设计结构并取得一致意见,让各模块开发小组相对独立的工作。一旦模块的接口确定之后,模块怎样实现就不是很重要了。从根本上说,如果你不能够定义你的模块“从外部看上去会是什么样子”,你肯定也不清楚模块内要实现什么。
14. 走近路需要更长的时间
在软件开发中没有捷径可以走。
缩短你的在需求分析上花的时间,结果只能是开发出来的软件不能满足用户的需求,必须被重写。
在软件建模上每节省一周,在将来的编码阶段可能会多花几周时间,因为你在全面思考之前就动手写程序。
你为了节省一天的测试时间而漏掉了一个bug,在将来的维护阶段,可能需要花几周甚至几个月的时间去修复。与其如此,还不如重新安排一下项目计划。
避免走捷径,只做一次但要做对(do it once by doing it right)。
15. 别信赖任何人
产品和服务销售公司不是你的朋友,你的大部分员工和高层管理人员也不是。
大部分产品供应商

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。