阅兵时间、地点
国庆庆典的时间和地点毋庸质疑是10月1日上午10时、天安门广场。1984年和1999年的两次庆典都是在上午10时开始的,1999年庆典的开始由时任中共中央政治局常委、中共北京市委书记的贾庆林同志宣布。由此推断,这次的程序和开始时间也不会相差太多。
升旗仪式
随后礼炮将响起,1999年庆典的上是由56门礼炮交替鸣放,本次庆典可能会延续这一程序。在礼炮声中,国旗护卫队官兵将在庆典活动中第一个出场,踏着礼炮声护送国旗至天安门广场升旗处,进行升旗仪式。
根据新华社之前的报道,伴随第一声炮响,国旗护卫队队员将托q从人民英雄纪念碑出发,到达国旗杆基座后列队站好、放下q。这时,最后一声礼炮刚好结束,护旗行动全程的时间共4分20秒。同一篇报道中还指出国旗护卫队行进过程中将迈出正步169步,寓意"从1840年至今169年的不平凡历程,中华民族不畏艰难,满怀信心,走向未来";升旗时间则是47秒,感兴趣的读者可以留意一下。
按照1999年的程序,升旗仪式之后,阅兵领导人将乘阅兵车辆出天安门,过金水桥,阅兵总指挥汇报后,阅兵式开行进行,领导人依次检阅各方队。阅兵式结束后,领导人将发表讲话,随后阅兵分列式进行。
按照阅兵联合指挥部办公室常务副主任、联合指挥部新闻发言人高建国少将23日下午在新闻发布会上的介绍,阅兵式和分列式,这两个步骤总时间约66分钟。
一般而言,在分列式中各方队将依次通过天安门广场。本次阅兵敬爱那该有14个徒步方队、30个装备方队、12个空中梯队受阅。据新华社报道,大部分方队的"编队等式"是25×14+2=352,也就是排面25人,前后共14排,再加上2个领队,总数为352人。30个装备方队包括坦克、各类步战车、各类火炮、各种导d、各种保障装备方队。大部分装备方队的"编队等式"为4×4+2=18,也就是正面4辆装备,纵深4辆装备,领队2辆装备,总数为18辆。
徒步方队
按照历次阅兵的惯例,首先走过天安门接受检阅的是徒步方队。本次阅兵的14个徒步方队由陆、海、空、二炮、武警和后备力量6大阵容组成。
陆军阵容由3个方队组成,分别是陆军学员方队、步兵方队和特种兵方队。海军阵容由3个方队组成,分别是海军学员方队、水兵方队和海军陆战队方队。空军阵容由2个方队组成,分别是飞行学员方队和空降兵方队。第二炮兵阵容由二炮学员方队组成。武警阵容由武警方队组成。后备力量阵容由2个方队组成,分别是女民兵方队和预备役方队。另外还有三军女兵方队。这些信息都已见诸于公开报道。
在陆军阵容中,特种兵方队是第一次在国庆阅兵中亮相,他们由北京军区某集团军特种兵大队组成。海军阵容的海军学员方队和水兵方队都是第14次参加国庆阅兵,他们分别由海军大连舰艇学院和青岛海军潜艇学院组成。第二炮兵徒步方队也是首次参加国庆阅兵。此外,武警方队的队员还包含关注度很高的雪豹突击队成员,预备役方队将是通过天安门的唯一劈q方队,本次阅兵亮相的女兵包含三军女兵方队和后备力量阵容中的女民兵方队。这些都是阅兵徒步方队中可供留意的地方。
装备方队
根据本次国庆阅兵总指挥、北京军区司令员房峰辉的介绍,将有30个装备方队通过天安门广场,展出的装备主要是国产现役主战装备,重在集中反映中国特色武装力量体系建设的主要成果。而《2008年中国国防白皮书》中指出,我国军队的武器装备以二代为主体、三代为骨干,由此可见此次阅兵将主要展示我国研制的三代装备。因此,徒步方队后的30个装备方队应当会展示我军自主研制的现役三代装备。
作为此次阅兵的核心,对于30个装备方队所展示装备的公开报道很少,现在我们能看到的更多是媒体的推断和网友的希望。
阅兵联合指挥部办公室常务副主任、联合指挥部新闻发言人高建国少将23日的介绍让我们的了解有所具体化:30个装备方队包括坦克、战车、火炮、导d和有关的保障装备。陆军展示的新装备主要有各类战车、火炮、防空导d、直升机、无人机和卫星通信等;海军展示的新装备主要有反舰导d、岸舰导d、舰空导d、陆战队战车和歼轰机等;空军展示的新装备主要有预警机、歼击机、新型雷达、空降兵战车和地空导d等;第二炮兵展示的新装备主要有常规导d、核导d和巡航导d。这次展示的装备100%是国产装备,近90%是首次参阅。
根据各个媒体的推测,作为中国自主研发的第三代主战坦克,99式应当出现在阅兵式上,而且按照惯例将组成装备方队的头阵。据该型坦克副总设计师王哲荣介绍,99式的综合性能处于世界第三代坦克的前三位。今年早些时候99坦克还曾在"和平使命--2009"联合演习中与俄罗斯主战坦克同场献技,它出现的理由很充分。另外作为与99式高低搭配的96式坦克也应当现身。
据中新网猜测被军事爱好者与99式坦克并称为中国的"陆战五虎"86A步兵战车、122履带式火炮、红箭-8导d发射车、100毫米轮式突击炮可能同时亮相。
其中至少有一点值得商榷,在1999年阅兵中,红箭-9导d发射车就对外亮相,本次阅兵没有理由使用较早的二代反坦克导d型号,因此红箭-9反坦克导d有可能出现在本次阅兵之中。
综合人民网、中新网、《三联生活周刊》的报道,中国的VN1型8×8轮式步兵战车、新型两栖步兵战车、155毫米自行榴d炮也都很有可能在本次阅兵中亮相。高建国少将23日还提到了空降兵战车,因此我新型空降兵战车也有望出现在阅兵装备方队。
根据《环球时报》的报道,有熟悉二炮部队的消息人士称,本次大阅兵,中国将向世界公开展示5款最新型国产导d。报道中表示军迷们期待在阅兵上看到东风41洲际d道导d、巨浪2潜射d道导d,军迷们甚至还希望看到反舰型东风21导d。
在2008年的珠海航展上,航天科工集团C系导d悉数亮相。23日下午高建国少将表示海军展示的新装备主要有反舰导d、岸舰导d、舰空导d等。因此有理由相信航天科工集团C系列导d将在本次阅兵出现。
据《广州日报》的报道,在2008年的珠海航展上,我国第四代先进超视距空空导dSD-10A亮相,可配备歼-10战机。《环球时报》称其整体技术达到世界同类产品的先进水平,可能在本次阅兵中亮相。
从开国大典到1999年世纪大阅兵,还从没有一辆后勤装备走过天安门。但是据《京华时报》报道,10月1日,后勤装备方队将参加国庆阅兵。后勤装备方队由北京军区某装甲师抽组,受阅装备代表着我国后勤装备建设的最新成果。如野战主食车能在一个小时内完成800人份的主副食加工。新型手术车安装了远程卫星系统,可在数千公里外进行远程专家视频会诊。
空中阅兵式
在阅兵分列式的各个环节犹如运行的齿轮环环相扣,精确进行的时候,一支空中力量将在首都的上空集结……
据新华社的报道,9月21日北京上空按国庆当天受阅程序,成功进行了阅兵前唯一一次天安门上空全编队预演。报道中称空军有关部门介绍,这次预演的组织指挥和实施方法,出动飞机数量、梯队和中队间隔、梯队总长和通过天安门时间等,与正式受阅完全一样。
那么综合已有的报道和21日当天空军演练的实况便可以推断出国庆空中阅兵的大体情况:10月1日,上百架飞机将在预定时间从北京周边7个军用机场起飞,到达空中编组点后,开始编队飞行。在11时左右,空军预警机作为领队机第一个准时通过天安门广场上空,担任护卫机的空军八一表演队飞机拉着彩色烟雾飞越天安门广场。
从21日的空军演练大家可以看到在他们身后的是预警机编队。据媒体报道,目前中国空军已拥有"空警-2000"、"空警-200"等预警机。至于这次的领队机和预警机编队的机种,相信明眼人可以一目了然。而空军八一表演队驾驶的歼七轻型歼击机则早已不是秘密。
通过这样一张图表,空中阅兵的轮廓就更加清晰了。
1999年国庆阅兵,受阅的空中编队混编了空、海、武装直升机等7个机种17种机型。中国独立研制的第一种战斗轰炸机歼轰-7"飞豹"、"轰油-6"空中加油机、首次公开亮相的陆军航空兵武直-9编队成为是次阅兵亮点。现在他们仍是我军的空中主战装备,相信此次阅兵会与公众再次见面。
有几点值得关注的是,首先,在歼击机梯队中歼-10和歼-11可能占据其中两席之地。根据媒体的表述,歼-10是我国第一种自行研制的具有自主知识产权的第三代战斗机,其诞生令我国成为了世界上第五个独立研制第三代战斗机的国家。歼-11则是我国在引进的俄罗斯战机基础之上进行国产化,并进行了记载航电设备和武器系统升级的第三代重型歼击机,可以与歼-10形成高低搭配。另外,作为我国空军的现役主力机种,我们也有理由盼望在10月1日目睹它们。
在歼击机梯队之后的是搜救、运输直升机梯队,在去年那场令整个中国铭记的大地震中,各方都认识到了直升机在搜救和运输中的巨大作用。中国研制的现役中型运输直升机直-8应当亮相。
搜救、运输直升机梯队后的侦察直升机和武装直升机直-9和直-11都具有可能。直-9在1999年阅兵便公开亮相,引起轰动,而直-11在2002年完成首飞,去年其在珠海航展亮相兼具军民型号。
位于空军阅兵队列末尾的教练机梯队,K-8教练机的呼声应当最高。K-8喷气教练机是我国自主研发的一种具有国际先进水平的高级/基础喷气式教练机,可承担飞行员的基础训练及部分高级特技训练任务。该机型是我国首个向国外输出飞机整机及生产线的机种,曾于2002年获得国家科学技术进步一等奖。目前,K8飞机已出口亚非十多个国家达250多架,占据了中级教练机国际市场70%的份额。此外,媒体已披露中国战斗机女飞行员将驾教练机拉烟飞过天安门,这也是一大亮点,相信会在当天吸引大家的注意。
空中梯队在飞过天安门上空后,将在解编点解除飞行编队,各自前往指定机场。
空中阅兵式结束后,国庆庆典进入群众游行,整个阅兵也宣告告一段落。
第一章:导论1. 要养成一个习惯,经常花时间阅读别人编写的高品质代码。3. 要注意并重视代码中特殊的非功能性需求,这些需求也许会导致特定的实现风格。
4. 在现有的代码上工作时,请与作者或维护人员进行必须的协调,以避免重复劳动或因此而产生厌恶情绪。
5. 请将从开放源码软件中得到的益处看作是一项贷款,尽可能地寻找各种方式来回报开放源码社团。
7. 在寻找 BUG时,请从问题的表现形式到问题的根源来分析代码。不要沿着不相关的路径(误入岐途)
8. 我们要充分利用调度器,编译器给出的警告或输出的符号代码,系统调用跟踪器,数据库结构化查询语言的日志机制、包转储工具和Windows的消息侦查程序,定出BUG的位置。
9. 对于那些大型且组织良好的系统,您只需要最低限度地了解它的全部功能,就能够对它做出修改。
10. 当向系统中增加新功能时,首先的任务就是找到实现类似特性的代码,将它作为待实现功能的模板。
11. 从特性的功能描述到代码的实现,可以按照字符串消息,或使用关键词来搜索代码。
12. 在移植代码或修改接口时, 您可以通过编译器直接定位出问题涉及的范围,从而减少代码阅读的工作量。
13. 进行重构时,您从一个能够正常工作的系统开始做起,希望确保结束时系统能够正常工作。一套恰当的测试用例可以帮助您满足此项约束。
14. 阅读代码寻找重构机会时,先从系统的构架开始,然后逐步细化,能够获得最大的效益。
15. 代码的可重用性是一个诱人的,但难以掌握的思想;降低期望就不会感到失望。
16. 如果您希望重要的代码十分棘手,难以理解与分离,可以试着寻找粒度更大一些的包,甚至其他代码。
17. 在复查软件系统时,要注意,系统是由很多部分组成的,不仅仅只是执行语句。还要注意分析以下内容:文件和目录结构、生成和配置过程、用户界面和系统的文档。
18. 可以将软件复查作为一个学习、讲授、援之以手和接受帮助的机会。第二章:基本编程元素
19.第一次分析一个程序时, main是一个好的起始点.20.层叠if-else if-...-else序列可以看作是由互斥选择项组成的选择结构.21.有时, 要想了解程序在某一方面的功能, 运行它可能比阅读源代码更为恰当.22.在分析重要的程序时, 最好首先识别出重要的组成部分.23.了解局部的命名约定, 利用它们来猜测变量和函数的功能用途.24.当基于猜测修改代码时, 您应该设计能够验证最初假设的过程. 这个过程可能包括用编译器进行检查|引入断言|或者执行适当的测试用例.25.理解了代码的某一部分, 可能帮助你理解余下的代码.26.解决困难的代码要从容易的部分入手.27.要养成遇到库元素就去阅读相关文档的习惯这将会增强您阅读和编写代码的能力.28.代码阅读有许多可选择的策略: 自底向上和自顶向下的分析|应用试探法和检查注释和外部文档, 应该依据问题的需要尝试所有这些方法.29.for (i=0i<ni++)形式的循环执行n次其他任何形式都要小心.30.涉及两项不等测试(其中一项包括相等条件)的比较表达式可以看作是区间成员测试.31.我们经常可以将表达式应用在样本数据上, 借以了解它的含义.32.使用De Morgan法则简化复杂的逻辑表达式.33.在阅读逻辑乘表达式时, 问题可以认为正在分析的表达式以左的表达式均为true在阅读逻辑和表达式时, 类似地, 可以认为正在分析的表达式以左的表达式均为false.34.重新组织您控制的代码, 使之更为易读.35.将使用条件运行符? :的表达式理解为if代码.36.不需要为了效率, 牺牲代码的易读性.37.高效的算法和特殊的优化确实有可能使得代码更为复杂, 从而更难理解, 但这并不意味着使代码更为紧凑和不易读会提高它的效率.38.创造性的代码布局可以用来提高代码的易读性.39.我们可以使用空格|临时变量和括号提高表达式的易读性.40.在阅读您所控制的代码时, 要养成添加注释的习惯.41.我们可以用好的缩进以及对变量名称的明智选择, 提高编写欠佳的程序的易读性.42.用diff程序分析程序的修订历史时, 如果这段历史跨越了整体重新缩排, 常常可以通过指定-w选项, 让diff忽略空白差异, 避免由于更改了缩进层次而引入的噪音.43.do循环的循环体至少执行一次.44.执行算术运算时, 当b=2n-1时, 可以将a&b理解为a%(b+1).45.将a<<n理解为a*k, k=2n.46.将a>>n理解为a/k, k=2n.47.每次只分析一个控制结构, 将它的内容看作是一个黑盒.48.将每个控制结构的控制表达式看作是它所包含代码的断言.49.return, goto, break和continue语句, 还有异常, 都会影响结构化的执行流程. 由于这些语句一般都会终止或重新开始正在进行的循环,因此要单独推理它们的行为.50.用复杂循环的变式和不变式, 对循环进行推理.51.使用保持含义不变的变换重新安排代码, 简化代码的推理工作.第三章: 高级C数据类型
52.了解特定语言构造所服务的功能之后, 就能够更好地理解使用它们的代码.53.识别并归类使用指针的理由.54.在C程序中, 指针一般用来构造链式数据结构|动态分配的数据结构|实现引用调用|访问和迭代数据元素|传递数组参数|引用函数|作为其他值的别名|代表字符串|以及直接访问系统内存.55.以引用传递的参数可以用来返回函数的结果, 或者避免参数复制带来的开销.56.指向数组元素地址的指针, 可以访问位于特定索引位置的元素.57.指向数组元素的指针和相应的数组索引, 作用在二者上的运算具有相同的语义.58.使用全局或static局部变量的函数大多数情况都不可重入(reentrant).59.字符指针不同于字符数组.60.识别和归类应用结构或共用体的每种理由.61.C语言中的结构将多个数据元素集合在一起, 使得它们可以作为一个整体来使用, 用来从函数中返回多个数据元素|构造链式数据结构|映射数据在硬件设备|网络链接和存储介质上的组织方式|实现抽象数据类型|以及以面向对象的方式编程.62.共用体在C程序中主要用于优化存储空间的利用|实现多态|以及访问数据不同的内部表达方式.63.一个指针, 在初始化为指向N个元素的存储空间之后, 就可以作为N个元素的数组来使用.64.动态分配的内在块可以电焊工地释放, 或在程序结束时释放, 或由垃圾回收器来完成回收在栈上分配的内存块当分配它的函数退出后释放.65.C程序使用typedef声明促进抽象, 并增强代码的易读性, 从而防范可移植性问题, 并模拟C++和Java的类声明行为.66.可以将typedef声明理解成变量定义: 变量的名称就是类型的名称变量的类型就是与该名称对应的类型.第四章: C数据结构
67.根据底层的抽象数据类型理解显式的数据结构 *** 作.68.C语言中, 一般使用内建的数组类型实现向量, 不再对底层实现进行抽象.69.N个元素的数组可以被序列for (i=0i<Ni++)完全处理所有其他变体都应该引起警惕.70.表达式sizeof(x)总会得到用memset或memcpy处理数组x(不是指针)所需的正确字节数.71.区间一般用区间内的第一个元素和区间后的第一个元素来表示.72.不对称区间中元素的数目等于高位边界与低位边界的差.73.当不对称区间的高位边界等于低位边界时, 区间为空.74.不对称区间中的低位边界代表区间的第一个元素高位边界代表区间外的第一个元素.75.结构的数组常常表示由记录和字段组成的表.76.指向结构的指针常常表示访问底层记录和字段的游标.77.动态分配的矩阵一般存储为指向数组列的指针或指向元素指针的指针这两种类型都可以按照二维数组进行访问.78.以数组形式存储的动态分配矩阵, 用自定义访问函数定位它们的元素.79.抽象数据类型为底层实现元素的使用(或误用)方式提供一种信心的量度.80.数组用从0开始的顺序整数为键, 组织查找表.81.数组经常用来对控制结构进行高效编码, 简化程序的逻辑.82.通过在数组中每个位置存储一个数据元素和一个函数指针(指向处理数据元素的函数), 可以将代码与数据关联起来.83.数组可以通过存储供程序内的抽象机(abstract machine)或虚拟机(virtual machine)使用的数据或代码, 控制程序的运作.84.可以将表达式sizeof(x) / sizeof(x[0])理解为数组x中元素的个数.85.如果结构中含有指向结构自身|名为next的元素, 一般说来, 该结构定义的是单向链表的结点.86.指向链表结点的持久性(如全局|静态或在堆上分配)指针常常表示链表的头部.87.包含指向自身的next和prev指针的结构可能是双向链表的结点.88.理解复杂数据结构的指针 *** 作可以将数据元素画为方框|指针画为箭头.89.递归数据结构经常用递归算法来处理.90.重要的数据结构 *** 作算法一般用函数参数或模板参数来参数化.91.图的结点常常顺序地存储在数组中, 链接到链表中, 或通过图的边链接起来.92.图中的边一般不是隐式地通过指针, 就是显式地作为独立的结构来表示.93.图的边经常存储为动态分配的数组或链表, 在这两种情况下, 边都锚定在图的结点上.94.在无向图中, 表达数据时应该将所有的结点看作是等同的, 类似地, 进行处理任务的代码也不应该基于它们的方向来区分边.95.在非连通图中, 执行遍历代码应该能够接通孤立的子图.96.处理包含回路的图时, 遍历代码应该避免在处理图的回路进入循环.97.复杂的图结构中, 可能隐藏着其他类型的独立结构.第五章: 高级控制流程
98.采用递归定义的算法和数据结构经常用递归的函数定义来实现.99.推理递归函数时, 要从基准落伍测试开始, 并认证每次递归调用如何逐渐接近非递归基准范例代码.100.简单的语言常常使用一系列遵循该语言语法结构的函数进行语法分析.101.推理互递归函数时, 要基于底层概念的递归定义.102.尾递归调用等同于一个回到函数开始处的循环.103.将throws子句从方法的定义中移除, 然后运行Java编译器对类的源代码进行编译, 就可以容易地找到那些可能隐式地生成异常的方法.104.在多处理器计算机上运行的代码常常围绕进程或线程进行组织.105.工作群并行模型用于在多个处理器间分配工作, 或者创建一个任务池, 然后将大量需要处理标准化的工作进行分配.106.基于线程的管理者/工人并行模型一般将耗时的或阻塞的 *** 作分配给工人子任务, 从而维护中心任务的响应性.107.基于进程的管理者/工人并行模型一般用来重用现有的程序, 或用定义良好的接口组织和分离粗粒度的系统模块.108.基于流水线的并行处理中, 每个任务都接收到一些输入, 对它们进行一些处理, 并将生成的输出传递给下一个任务, 进行不同的处理.109.竞争条件很难捉摸, 相关的代码常常会将竞争条件扩散到多个函数或模块因而, 很难隔离由于竞争条件导致的问题.110.对于出现在信号处理器中的数据结构 *** 作代码和库调用要保持高度警惕.111.在阅读包含宏的代码时, 要注意, 宏既非函数, 也非语句.112.do…while(0)块中的宏等同于控制块中的语句.113.宏可以访问在它的使用点可见的所有局部变量.114.宏调用可改变参数的值115.基于宏的标记拼接能够创建新的标记符.第六章: 应对大型项目
116.我们可以通过浏览项目的源代码树—包含项目源代码的层次目录结构, 来分析一个项目的组织方式. 源码树常常能够反映出项目在构架和软件过程上的结构.117.应用程序的源代码树经常是该应用程序的部署结构的镜像.118.不要被庞大的源代码集合吓倒它们一般比小型的专门项目组织得更出色.119.当您首次接触一个大型项目时, 要花一些时间来熟悉项目的目录树结构.120.项目的源代码远不只是编译后可以获得可执行程序的计算机语言指令一个项目的源码树一般还包括规格说明|最终用户和开发人员文档|测试脚本|多媒体资源|编译工具|例子|本地化文件|修订历史|安装过程和许可信息.121.大型项目的编译过程一般声明性地借助依赖关系来说明. 依赖关系由工具程序, 如make及其派生程序, 转换成具体的编译行动.122.大型项目中, 制作文件常常由配置步骤动态地生成在分析制作文件之前, 需要先执行项目特定的配置.123.检查大型编译过程的各个步骤时, 可以使用make程序的-n开关进行预演.124.修订控制系统提供从储存库中获取源代码最新版本的方式.125.可以使用相关的命令, 显示可执行文件中的修订标识关键字, 从而将可执行文件与它的源代码匹配起来.126.使用修订日志中出现的bug跟踪系统内的编号, 可以在bug跟踪系统的数据库中找到有关的问题的说明.127.可以使用修订控制系统的版本储存库, 找出特定的变更是如何实现的.128.定制编译工具用在软件开发过程的许多方面, 包括配置|编译过程管理|代码的生成|测试和文档编制.129.程序的调试输出可以帮助我们理解程序控制流程和数据元素的关键部分.130.跟踪语句所在的地点一般也是算法运行的重要部分.131.可以用断言来检验算法运作的步骤|函数接收的参数|程序的控制流程|底层硬件的属性和测试用例的结果.132.可以使用对算法进行检验的断言来证实您对算法运作的理解, 或将它作为推理的起点.133.对函数参数和结果的断言经常记录了函数的前置条件和后置条件.134.我们可以将测试整个函数的断言作为每个给定函数的规格说明.135.测试用例可以部分地代替函数规格说明.136.可以使用测试用例的输入数据对源代码序列进行预演.第七章: 编码规范和约定
137.了解了给定代码库所遵循的文件组织方式后, 就能更有效率地浏览它的源代码.138.阅读代码时, 首先要确保您的编辑器或优美打印程序的tab设置, 与代码遵循的风格规范一致.139.可以使用代码块的缩进, 快速地掌握代码的总体结构.140.对编排不一致的代码, 应该立即给予足够的警惕.141.分析代码时, 对标记为XXX, FIXME和TODO的代码序列要格外注意: 错误可能就潜伏在其中.142.常量使用大写字母命名, 单词用下划线分隔.143.在遵循Java编码规范的程序中, 包名(package name)总是从一个顶级的域名开始(例如, org, com), 类名和接口名由大写字母开始, 方法和变量名由小写字母开始.144.用户界面控件名称之前的匈牙利记法的前缀类型标记可以帮助我们确定它的作用.145.不同的编程规范对可移植构造的构成有不同的主张.146.在审查代码的可移植性, 或以某种给定的编码规范作为指南时, 要注意了解规范对可移植性需求的界定与限制.147.如果GUI功能都使用相应的编程结构来实现, 则通过代码审查可以轻易地验证给定用户界面的规格说明是否被正确地采用.148.了解项目编译过程的组织方式与自动化方式之后, 我们就能够快速地阅读与理解对应的编译规则.149.当检查系统的发布过程时, 常常可以将相应发行格式的需求作为基准.第八章: 文档
150.阅读代码时, 应该尽可能地利用任何能够得到的文档.151.阅读一小时代码所得到的信息只不过相当于阅读一分钟文档.152.使用系统的规格说明文档, 了解所阅读代码的运行环境.153.软件需求规格说明是阅读和评估代码的基准.154.可以将系统的设计规格说明作为认知代码结构的路线图, 阅读具体代码的指引.155.测试规格说明文档为我们提供可以用来对代码进行预演的数据.156.在接触一个未知系统时, 功能性的描述和用户指南可以提供重要的背景信息,从而更好地理解阅读的代码所处的上下文.157.从用户参考手册中, 我们可以快速地获取, 应用程序在外观与逻辑上的背景知识, 从管理员手册中可以得知代码的接口|文件格式和错误消息的详细信息.158.利用文档可以快捷地获取系统的概况, 了解提供特定特性的代码.159.文档经常能够反映和提示出系统的底层结构.160.文档有助于理解复杂的算法和数据结构.161.算法的文字描述能够使不透明(晦涩, 难以理解)的代码变得可以理解.162.文档常常能够阐明源代码中标识符的含义.163.文档能够提供非功能性需求背后的理论基础.164.文档还会说明内部编程接口.165.由于文档很少像实际的程序代码那样进行测试, 并受人关注, 所以它常常可能存在错误|不完整或过时.166.文档也提供测试用例, 以及实际应用的例子.167.文档常常还会包括已知的实现问题或bug.168.环境中已知的缺点一般都会记录在源代码中.169.文档的变更能够标出那些故障点.170.对同一段源代码重复或互相冲突的更改, 常常表示存在根本性的设计缺陷, 从而使得维护人员需要用一系列的修补程序来修复.171.相似的修复应用到源代码的不同部分, 常常表示一种易犯的错误或疏忽, 它们同样可能会在其他地方存在.172.文档常常会提供不恰当的信息, 误导我们对源代码的理解.173.要警惕那些未归档的特性: 将每个实例归类为合理|疏忽或有害, 相应地决定是否应该修复代码或文档.174.有时, 文档在描述系统时, 并非按照已完成的实现, 而是系统应该的样子或将来的实现.175.在源代码文档中, 单词gork的意思一般是指”理解”.176.如果未知的或特殊用法的单词阻碍了对代码的理解, 可以试着在文档的术语表(如果存在的话)|New Hacker’s Dictionary[Ray96]|或在Web搜索引擎中查找它们.177.总是要以批判的态度来看待文档, 注意非传统的来源, 比如注释|标准|出版物|测试用例|邮件列表|新闻组|修订日志|问题跟踪数据库|营销材料|源代码本身.178.总是要以批判的态度来看待文档由于文档永远不会执行, 对文档的测试和正式复查也很少达到对代码的同样水平, 所以文档常常会误导读者, 或者完全错误.179.对于那些有缺陷的代码, 我们可以从中推断出它的真实意图.180.在阅读大型系统的文档时, 首先要熟悉文档的总体结构和约定.181.在对付体积庞大的文档时, 可以使用工具, 或将文本输出到高品质输出设备上, 比如激光打印机, 来提高阅读的效率.第九章: 系统构架
182.一个系统可以(在重大的系统中也确实如此)同时出多种不同的构架类型. 以不同的方式检查同一系统|分析系统的不同部分|或使用不同级别的分解, 都有可能发现不同的构架类型.183.协同式的应用程序, 或者需要协同访问共享信息或资源的半自治进程, 一般会采用集中式储存库构架.184.黑板系统使用集中式的储存库, 存储非结构化的键/值对, 作为大量不同代码元件之间的通信集线器.185.当处理过程可以建模|设计和实现成一系列的数据变换时, 常常会使用数据流(或管道—过滤器)构架.186.在批量进行自动数据处理的环境中, 经常会采用数据流构架, 在对数据工具提供大量支持的平台上尤其如此.187.数据流构架的一个明显征兆是: 程序中使用临时文件或流水线(pipeline)在不同进程间进行通信.188.使用图示来建模面向对象构架中类的关系.189.可以将源代码输入到建模工具中, 逆向推导出系统的构架.190.拥有大量同级子系统的系统, 常常按照分层构架进行组织.191.分层构架一般通过堆叠拥有标准化接口的软件组件来实现.192.系统中每个层可以将下面的层看作抽象实体, 并且(只要该层满足它的需求说明)不关心上面的层如何使用它.193.层的接口既可以是支持特定概念的互补函数族, 也可以是一系列支持同一抽象接口不同底层实现的可互换函数.194.用C语言实现的系统, 常常用函数指针的数组, 表达层接口的多路复用 *** 作.195.用面向对象的语言实现的系统, 使用虚方法调用直接表达对层接口的多嘴复用 *** 作.196.系统可以使用不同的|独特的层次分解模型跨各种坐标轴进行组织.197.使用程序切片技术, 可以将程序中的数据和控制之间依赖关系集中到一起.198.在并发系统中, 一个单独的系统组件起到集中式管理器的作用, 负责启动|停止和协调其他系统进程和任务的执行.199.许多现实的系统都会博采众家之长. 当处理此类系统时, 不要徒劳地寻找无所不包的构架图应该将不同构架风格作为独立但相关的实体来进行定位|识别并了解.200.状态变迁图常常有助于理清状态机的动作.201.在处理大量的代码时, 了解将代码分解成单独单元的机制极为重要.202.大多数情况下, 模块的物理边界是单个文件|组织到一个目录中的多个文件或拥有统一前缀的文件的集合.203.C中的模块, 由提供模块公开接口的头文件和提供对应实现的源文件组成.204.对象的构造函数经常用来分配与对象相关的资源, 并初始化对象的状态. 函数一般用来释放对象在生命期中占用的资源.205.对象方法经常使用类字段来存储控制所有方法运作的数据(比如查找表或字典)或维护类运作的状态信息(例如, 赋给每个对象一个标识符的计数器).206.在设计良好的类中, 所有的字段都应在声明为private, 并用公开的访问方法提供对它们的访问.207.在遇到friend声明时, 要停下来分析一下, 看看绕过类封装在设计上的理由.208.可以有节制地用运算符增强特定类的可用性, 但用运算符重载, 将类实现为拥有内建算术类型相关的全部功能的类实体, 是不恰当的.209.泛型实现不是在编译期间通过宏替换或语言所支持的功能(比如C++模板和Ada的泛型包)来实现, 就是在运行期间通过使用数据元素的指针和函数的指针|或对象的多态性实现.210.抽象数据类型经常用来封装常用的数据组织方案(比如树|列表或栈), 或者对用户隐藏数据类型的实现细节.211.使用库的目的多种多样: 重用源代码或目标代码, 组织模块集合, 组织和优化编译过程, 或是用来实现应用程序各种特性的按需载入.212.大型的|分布式的系统经常实现为许多互相协作的进程.213.对于基于文本的数据储存库, 可以通过浏览存储在其中的数据, 破译出它的结构.214.可以通过查询数据字典中的表, 或使用数据库专有的SQL命令, 比如show table, 来分析关系型数据库的模式.215.识别出重用的构架元素后, 可以查找其最初的描述, 了解正确地使用这种构架的方式, 以及可能出现的误用.216.要详细分析建立在某种框架之上的应用程序, 行动的最佳路线就是从研究框架自身开始.217.在阅读向导生成的代码时, 不要期望太高, 否则您会感到失望.218.学习几个基本的设计模式之后, 您会发现, 您查看代码构架的方式会发生改变: 您的视野和词汇将会扩展到能够识别和描述许多通用的形式.219.频繁使用的一些模式, 但并不显式地指出它们的名称, 这是由于构架性设计的重用经常先于模式的形成.220.请试着按照底层模式来理解构架, 即使代码中并没有明确地提及模式.221.大多数解释器都遵循类似的处理构架, 围绕一个状态机进行构建, 状态机的 *** 作依赖于解释器的当前状态|程序指令和程序状态.222.多数情况下, 参考构架只是为应用程序域指定一种概念性的结构, 具体的实现并非必须遵照这种结构.第十章: 代码阅读工具
223.词汇工具可以高效地在一个大代码文件中或者跨多个文件查找某种模式.224.使用程序编辑器和正则表达式查找命令, 浏览庞大的源代码文件.225.以只读方式浏览源代码文件.226.使用正则表达式 ^function name 可以找出函数的定义.227.使用正则表达式的字符类, 可以查找名称遵循特定模式的变量.228.使用正则表达式的否定字符类, 可以避免非积极匹配.229.使用正则表达式 symbol-1. *symbol-2, 可以查找出现在同一行的符号.230.使用编辑器的 tags 功能, 可以快速地找出实体的定义.231.可以用特定的 tag 创建工具, 增加编辑器的浏览功能.232.使用编辑器的大纲视图, 可以获得源代码结构的鸟瞰图.233.使用您的编辑器来检测源代码中圆括号|方括号和花括号的匹配.234.使用 grep 跨多个文件查找代码模式.235.使用 grep 定位符号的声明|定义和应用.236.当您不能精确地表述要查找的内容时, 请使用关键单词的词干对程序的源代码进行查找.237.用 grep 过滤其他工具生成的输出, 分离出您要查找的项.238.将 grep 的输出输送到其他工具, 使复杂处理任务自动化.239.通过对 grep 的输出进行流编辑, 重用代码查找的结果.240.通过选取与噪音模式不匹配的输出行(grep-v), 过滤虚假的 grep 输出.241.使用 fgrep 在源代码中查找字符串列表.242.查找注释, 或标识符大小写不敏感的语言编写的代码时, 要使用大小写不敏感的模式匹配(grep -i).243.使用 grep –n 命令行开关, 可以创建与给定正则表达式匹配的文件和行号的检查表.244.可以使用 diff 比较文件或程序不同版本之间的差别.245.在运行 diff 命令时, 可以使用 diff –b, 使文件比较算法忽略结尾的空格, 用–w 忽略所有空白区域的差异, 用–i 使文件比较对大小写不敏感.246.不要对创建自己的代码阅读工具心存畏惧.247.在构建自己的代码阅读工具时: 要充分利用现代快速原型语言所提供的能力从简单开始, 根据需要逐渐改进使用利用代码词汇结构的各种试探法要允许一些输出噪音或寂静(无关输出或缺失输出)使用其他工具对输入进行预处理, 或者对输出进行后期处理.248.要使编译器成为您的: 指定恰当级别的编译器警告, 并小心地评估生成的结果.249.使用C预处理器理清那些滥用预处理器特性的程序.250.要彻底地了解编译器如何处理特定的代码块, 需要查看生成的符号(汇编)代码.251.通过分析相应目标文件中的符号, 可以清晰地了解源文件的输入和输出.252.使用源代码浏览器浏览大型的代码集合以及对象类型.253.要抵制住按照您的编码规范对外部代码进行美化的诱惑不必要的编排更改会创建不同的代码, 并妨碍工作的组织.254.优美打印程序和编辑器语法着色可以使得程序的源代码为易读.255.cdecl 程序可以将难以理解的C和C++类型声明转换成纯英语(反之亦然).256.实际运行程序, 往往可以更深刻地理解程序的动作.257.系统调用|事件和数据包跟踪程序可以增进对程序动作的理解.258.执行剖析器可以找出需要着重优化的代码, 验证输入数据的覆盖性, 以及分析算法的动作.259.通过检查从未执行的代码行, 可以找出测试覆盖的弱点, 并据此修正测试数据.260.要探究程序动态动作时的每个细节, 需要在调试器中运作它.261.将您觉得难以理解的代码打印到纸上.262.可以绘制图示来描绘代码的动作.263.可以试着向别人介绍您在阅读的代码, 这样做一般会增进您对代码的理解.264.理解复杂的算法或巧妙的数据结构, 要选择一个安静的环境, 然后
东奥会计小编为您回答:阅卷前中注协的专家会组织进行集中授课,对每个题目的阅卷规则、采分点、考生可能作答的类型等进行讲解,阅卷人参加相应的规则考试,考试通过后方可进入阅卷组,关于主观题的阅卷要点主要为以下几点:
① 按得分点给分。对主观题的每个小题,专家都会确定得分点和可接受的“关键词”(每题大概10个得分点);
②判断正确才给分。涉及先判断正误再进行解释的题目,判断错误则全题判错,即使理由正确也无法得分;
③冗余信息不扣分。对于理由阐述的部分,即使存在其他非得分点的错误内容,不影响整题的给分情况,总而言之踩中“关键词”即可得分。
第二阶段:正式阅卷
在10月的20多天里,勤劳的阅卷人被分为几组,每组负责一个大题,每天都要经过9-12小时以上的伏案阅卷工作:
① 第一轮评卷。每道题会由两位阅卷人同阅一道题目,分差在合理范围内则取平均分,分差超过限定则提交上级阅卷,如果在高校阅卷,两位同学任何一个得分点评判不一致都会呈交导师定夺,因此在第一轮一套答卷就至少被阅卷两次。
② 第二轮评卷。第一轮评卷结束后,后台进行统计。将分数结果出入较大的小题目归总进行第二轮,过程和程序与第一轮相同。至此,每一道题至少经过4次、最多6次阅卷评分。
③ 第三轮评卷。第二轮结束后后台再进行结果统计。将未合格但接近60分的卷子(例如57、58、59这样的分数)再次筛选出来检查,整体坚持有利于考生的判卷原则,对于个别题目确实裁量空间很大的,无法准确判断对错,按对的给分。
最后,我们来说说CPA最神秘的“调分”到底是怎么 *** 作的,所谓调分并不是通常理解的整体加减分,或者按正态分布确定通过率乘系数到总分上,调分其实是这样的:
首先,从阅卷平均成绩中确定每个题目的难易程度;假设总分均为10分的三道题目,第一轮评卷后,范围内的考生平均得分结果为10分、6分和2分,三题按得分率评价为难度低、正常和高;
然后,评定考卷整体的难易程度;
最后,结合上述两点难易程度确定需要调分的题目,如上述第三题得分率过低,而当年整体难度又偏高,则以此题为基础进行“调分”,比如将此题总分下调为6分,调下来的差值4分按照比重进行分配到低难度与正常难度的题目上。
CPA考试不是单纯的选拔性考试,它是执业资格的基础性考试,不需要满分,只要扎实基础,把低难度题目100%做对,正常难度80-90%做对,学有余力的情况下,挑战难题,通过考试并非难事!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)