下载

3下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Softeem-JAVA面试攻略-目录

Softeem-JAVA面试攻略-目录.doc

Softeem-JAVA面试攻略-目录

李浩
2018-09-08 0人阅读 举报 0 0 暂无简介

简介:本文档为《Softeem-JAVA面试攻略-目录doc》,可适用于IT/计算机领域

《JAVA面试攻略》JAVA面试攻略面向对象的基本概念的理解?继承:封装:多态性:、String是最基本的数据类型吗、int和Integer有什么区别、String和StringBuffer的区别、运行时异常与一般异常有何异同?、说出Servlet的生命周期并说出Servlet和CGI的区别。、说出ArrayList,Vector,LinkedList的存储性能和特性、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别StatefulBean和StatelessBean的区别。、Collection和Collections的区别。、HashMap和Hashtable的区别。、final,finally,finalize的区别。、sleep()和wait()有什么区别、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型、error和exception有什么区别、同步和异步有何异同在什么情况下分别使用他们?举例说明。、abstractclass和interface有什么区别、heap和stack有什么区别。、forward和redirect的区别、EJB与JAVABEAN的区别?、StaticNestedClass和InnerClass的不同。、JSP中动态INCLUDE与静态INCLUDE的区别?、什么时候用assert。、GC是什么为什么要有GC、shorts=s=s有什么错shorts=s=有什么错、Mathround()等於多少Mathround()等於多少、EJB包括(SessionBean,EntityBean)说出他们的生命周期及如何管理事务的?、应用服务器有那些?、给我一个你最常见到的runtimeexception。、接口是否可继承接口抽象类是否可实现(implements)接口抽象类是否可继承实体类(concreteclass)、List,Set,Map是否继承自Collection接口、说出数据连接池的工作机制是什么、abstract的method是否可同时是static,是否可同时是native是否可同时是synchronized、数组有没有length()这个方法String有没有length()这个方法?、Set里的元素是不能重复的那么用什么方法来区分重复与否呢是用hersponacity=pcityorderbyppubnameasc,aaulnameasc,aaufnameasc左外联接usepubsselectaaufname,aaulname,ppubnamefromauthorsaleftjoinpublishersponacity=pcityorderbyppubnameasc,aaulnameasc,aaufnameasc使用子查询USEpubsGOselectdistinctpubnameFROMpublishersWHEREpubidIN(selectpubidFROMtitlesWHEREtype='business')GO如果平均价格少于$WHILE循环就将价格加倍然后选择最高价。如果最高价少于或等于$WHILE循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过$USEpubsGOWHILE(selectAVG(price)FROMtitles)<$BEGINupdatetitlesSETprice=price*selectMAX(price)FROMtitlesIF(selectMAX(price)FROMtitles)>$BREAKELSECONTINUEEND如果平均价格少于$WHILE循环就将价格加倍然后选择最高价。如果最高价少于或等于$WHILE循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过$USEpubsGOWHILE(selectAVG(price)FROMtitles)<$BEGINupdatetitlesSETprice=price*selectMAX(price)FROMtitlesIF(selectMAX(price)FROMtitles)>$BREAKELSECONTINUEENDCREATEPROCEDUREauinfolastnamevarchar(),firstnamevarchar()ASselectaulname,aufname,title,pubnameFROMauthorsaINNERJOINtitleauthortaONaauid=taauidINNERJOINtitlestONttitleid=tatitleidINNERJOINpublisherspONtpubid=ppubidWHEREaufname=firstnameandaulname=lastnameGOEXECUTEauinfo'Dull','Ann'或者EXECUTEauinfolastname='Dull',firstname='Ann'创建存储过程CREATEPROCEDUREtitlessumTITLEvarchar(),SUMmoneyOUTPUTASselectSUM=SUM(price)FROMtitlesWHEREtitleLIKETITLEGODECLARETOTALCOSTmoneyEXECUTEtitlessum'The',TOTALCOSTOUTPUTselectTOTALCOSTgoCREATEPROCEDUREOaklandauthorsASselectaufname,aulname,address,city,zipFROMauthorsWHEREcity='Oakland'andstate='CA'ORDERBYaulname,aufnameGOsphelptextOaklandauthorsALTERPROCEDUREOaklandauthorsASselectaufname,aulname,address,city,zipFROMauthorsWHEREstate='CA'ORDERBYaulname,aufnameGOsphelptextOaklandauthors提交事务后所有书籍支付的版税增加。begintransactionMyTransactionupdateroyschedsetroyalty=royalty*committransactionMyTransactionrollbacktransactionMyTransactionselectroyaltyfromroyschedselecttrancount创建试验实验表createtabletemptrigger(idtempvarchar()notprimarykey,tempnamevarchar(),tempageint)goinserttemptriggervalues('','张三','')inserttemptriggervalues('','李四','')inserttemptriggervalues('','王五','')inserttemptriggervalues('','赵六','')select*fromtemptriggergo创建insert,update触发器createtriggertemptriggermodifyontemptriggerforinsert,updateasbeginif(selecttempagefrominserted)>beginrollbacktransactionprint'年龄不能超过岁!'endendinserttemptriggervalues('','大朋','')inserttemptriggervalues('','大朋','')inserttemptriggervalues('','大朋','')updatetemptriggersettempage=''whereidtemp=''updatetemptriggersettempage=''whereidtemp=''创建delete触发器droptriggertemptriggerdeletecreatetriggertemptriggerdeleteontemptriggerfordeleteasbeginprintrowcountifrowcount>beginrollbacktransactionprint'一次删除记录不能多于条'endenddeletefromtemptriggerdeletefromtemptriggerwhereidtemp=''创建聚集索引createclusteredindexclindxtitleidonroysched(titleid)sphelproysched创建非聚集索引createnonclusteredindexunclindxtitleidonroysched(titleid)sphelproysched查看索引统计dbccshowstatistics(roysched,titleidind)更新索引统计updatestatisticsauthors重建索引dbccdbreindex('roysched',unclindxtitleid)删除索引dropindexroyschedunclindxtitleidsphelproysched创建ssn(社会保险号)的基于varchar的自定义数据类型。用于存储位社会保险号()的列。该列不能为。usepubsexecspaddtypessn,'varchar()','NOT'查看创建的数据类型sphelpssn使用创建的数据类型createtablemytable(myidvarchar()primarykey,myssnssn)删除创建的数据类型droptablemytableexecspdroptypessn批是包含一个或多个TransactSQL语句的组从应用程序一次性地发送到MicrosoftSQLServer执行。批作为一个整体执行以GO命令结束。批处理是客户端作为一个单元发出的一个或多个SQL语句的集合。每个批处理编译为一个执行计划。触发器触发器是在对表进行插入、更新或删除操作时自动执行的存储过程触发器通常用于强制业务规则触发器可以确保数据的完整性和一致性事务是用户定义的一个操作序列这些操作要么全做要么全不做是一个不可分割的工作单位(构成单一逻辑工作单元的操作集合)如果某一事务成功则在该事务中进行的所有数据更改均会提交成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚则所有数据更改均被清除锁是在多用户环境中对数据访问的限制封锁就是事务T在对某个数据对象(如表、记录等)操作之前先向系统发出请求对其加锁。加锁后事务T就对该数据对象有了一定的控制在事务T释放它的锁之前其它的事务不能更新此数据对象。(锁蕴含的基本概念是用户需要对表的排它访问)从程序员的角度看:分为乐观锁和悲观锁。乐观锁:完全依靠数据库来管理锁的工作。悲观锁:程序员自己管理数据或对象上的锁处理。子查询:一个select语句嵌套在另一个select语句中。索引是一个数据库对象它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单,然后根据指定的排序次序排列这些指针优点提高查询执行的速度。强制实施数据的唯一性。提高表之间联接的速度。缺点存储索引要占用磁盘空间。数据修改需要更长的时间因为索引也要更新。视图是一种虚拟表通常是作为来自一个或多个表的行或列的子集创建的。视图本质上讲就是保存在数据库中的select查询视图并不是数据库中存储的数据值的集合。对最终用户的好处–结果更容易理解–获得数据更容易对开发人员的好处–限制数据检索更容易–维护应用程序更方便存储过程使用一个名称存储的预编译TSQL语句和流程控制语句的集合由数据库开发人员或数据库管理员编写用来执行管理任务或应用复杂的业务规则优点执行速度更快首次运行时进行优化和编译得到执行计划并将该计划存储在系统表中以后直接运行。实现多个程序共享应用程序逻辑组件式编程能够屏蔽数据库的结构实现更高的安全性减少网络流通量数据库设计和建模必要性好的数据库结构有利于:节省数据的存储空间能够保证数据的完整性方便进行数据库应用系统的开发设计不好的数据库结构将导致数据冗余、存储空间浪费内存空间浪费不管数据库的大小和复杂程度如何可以用下列基本步骤来设计数据库:–收集信息–标识对象–设计数据模型–标识每个对象存储的信息类型–标识对象之间的关系数据模型是一种标识实体类型及其实体间联系的模型。典型的数据模型由网状模型、层次模型和关系模型。什么是规范化从关系数据库的表中除去冗余数据的过程称为规范化。精简数据库的结构从表中删除冗余的列标识所有依赖于其它数据的数据三级范式第一范式的定义:如果一个表中没有重复组(即行与列的交叉点上只有一个值而不是一组值)则这个表属于第一范式(常记成NF)。简而言之:"每一字段只存储一个值"。例如:职工号姓名电话号码组成一个表(一个人可能有一个办公室电话和一个家里电话号码)第二范式的定义:如果一个表属于NF任何属性只依赖于关键字则这个表属于第二范式(常记成NF)。简而言之:必须先符合NF的条件且每一行都能被唯一的识别。将NF转换成NF的方法是添加主键。学号,课程名,成绩第三范式的定义:如果一个表属于NF且不包含传递依赖性则这个表是第三范式(常记成NF)。满足NF的表中不包含传递依赖。简而言之:没有一个非关键属性依赖于另一个非关键属性。学号课程号成绩学分学号姓名所在系系名称系地址什么是类与对象?所谓对象就是真实世界中的实体对象与实体是一一对应的也就是说现实世界中每一个实体都是一个对象它是一种具体的概念。类是具备某些共同特征的实体的集合它是一种抽象的概念用程序设计的语言来说类是一种抽象的数据类型它是对所具有相同特征实体的抽象。属性与方法?不同对象具有相同特点就可能抽象为一定的类那么这些特点基本上可以分为两类一类是描述对象静态状态的就是对象的属性在程序设计中可以称之为变量另一类是描述对象的动作就是对象的方法在程序设计中我们称之为函数。属性和方法是一个对象所具备的两大基本要素也是我们后面编程工作的核心。什么是封装?只要有足够的方法就没必要直接去操作对象属性只要调用这些方法就可以实现要完成的任务这种现象称为封装它通过对象方法对其属性的操作把对象属性封装在一个对象内部对象与外界打交道全部通过其自身的方法来实现有效的把对象属性隐藏在对象内部。编写java文件的注意事项?在记事本中编写java文件在保存时一定要把文件名和扩展名用双引号括起来否则将默认保存为文本文件如果要保存的java文件名为Programjava,则在保存时在文件名文本框中一定要输入”Programjava”。如何编译java程序?单击开始|运行命令在命令行上输入cmd按回车键(在window中输入command按回车键)即可打开一个命令窗口将目录转换到编写java源程序所在的目录输入javacfilenamejava如何执行java程序?同样在命令窗口中输入javafilename基本数据类型?Java的数据类型可以划分为大类:整数浮点数字符型布尔型。其中整数可以划分为:byte,short,int,long浮点数可以划分为float,doubleC语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格这就给编程人员留下“灵活的余地”但还是由于这个灵活给程序的调试带来了许多不便尤其对初学C语言的人来说经常会出一些连自己都不知道错在哪里的错误。看着有错的程序不知该如何改起本人通过对C的学习积累了一些C编程时常犯的错误写给各位学员以供参考。书写标识符时忽略了大小写字母的区别。main(){inta=printf("d",A)}编译程序把a和A认为是两个不同的变量名而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上符号常量名用大写变量名用小写表示以增加可读性。忽略了变量的类型进行了不合法的运算。main(){floata,bprintf("d",ab)}是求余运算得到ab的整余数。整型变量a和b可以进行求余运算而实型变量则不允许进行“求余”运算。将字符常量与字符串常量混淆。charcc="a"在这里就混淆了字符常量与字符串常量字符常量是由一对单引号括起来的单个字符字符串常量是一对双引号括起来的字符序列。C规定以“”作字符串结束标志它是由系统自动加上的所以字符串“a”实际上包含两个字符:‘a'和‘'而把它赋给一个字符变量是不行的。忽略了“=”与“==”的区别。在许多高级语言中用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写if(a=)then…但C语言中“=”是赋值运算符“==”是关系运算符。如:if(a==)a=b前者是进行比较a是否和相等后者表示如果a和相等把b值赋给a。由于习惯问题初学者往往会犯这样的错误。忘记加分号。分号是C语句中不可缺少的一部分语句末尾必须有分号。a=b=编译时编译程序在“a=”后面没发现分号就把下一行“b=”也作为上一行语句的一部分这就会出现语法错误。改错时有时在被指出有错的一行中未发现错误就需要看一下上一行是否漏掉了分号。{z=xyt=zprintf("f",t)}对于复合语句来说最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。多加分号。对于一个复合语句如:{z=xyt=zprintf("f",t)}复合语句的花括号后不应再加分号否则将会画蛇添足。又如:if(a==)I本是如果整除a则I加。但由于if(a==)后多加了分号则if语句到此结束程序将执行I语句不论是否整除aI都将自动加。再如:for(I=I<I){scanf("d",x)printf("d",x)}本意是先后输入个数每输入一个数后再将它输出。由于for()后多加了一个分号使循环体变为空语句此时只能输入一个数并输出它。输入变量时忘记加地址运算符“”。inta,bscanf("dd",a,b)这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“a”指a在内存中的地址。输入数据的方式与要求不符。①scanf("dd",a,b)输入时不能用逗号作两个数据间的分隔符如下面输入不合法:输入数据时在两个数据之间以一个或多个空格间隔也可用回车键跳格键tab。②scanf("d,d",a,b)C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:此时不用逗号而用空格或其它字符是不对的。:又如:scanf("a=d,b=d",a,b)输入应如以下形式:a=,b=输入字符的格式与要求不一致。在用“c”格式输入字符时“空格字符”和“转义字符”都作为有效字符输入。scanf("ccc",c,c,c)如输入abc字符“a”送给c字符“”送给c字符“b”送给c因为c只要求读入一个字符后面不需要用空格作为两个字符的间隔。输入输出的数据类型与所用格式说明符不一致。例如a已定义为整型b定义为实型a=b=printf("fdn",a,b)编译时不给出出错信息但运行结果将与原意不符。这种错误尤其需要注意。输入数据时企图规定精度。scanf("f",a)这样做是不合法的输入数据时不能规定精度。switch语句中漏写break语句。例如:根据考试成绩的等级打印出百分制数段。switch(grade){case'A':printf("~n")case'B':printf("~n")case'C':printf("~n")case'D':printf("<n")default:printf("errorn")由于漏写了break语句case只起标号的作用而不起判断作用。因此当grade值为A时printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break”。例如case'A':printf("~n")break忽视了while和dowhile语句在细节上的区别。()main(){inta=,Iscanf("d",I)while(I<=){a=aII}printf("d",a)}()main(){inta=,Iscanf("d",I)do{a=aII}while(I<=)printf("d",a)}可以看到当输入I的值小于或等于时二者得到的结果相同。而当I>时二者结果就不同了。因为while循环是先判断后执行而dowhile循环是先执行后判断。对于大于的数while循环一次也不执行循环体而dowhile语句则要执行一次循环体。定义数组时误用变量。intnscanf("d",n)intan数组名后用方括号括起来的是常量表达式可以包括常量和符号常量。即C不允许对数组的大小作动态定义。在定义数组时将定义的“元素个数”误认为是可使的最大下标值。main(){staticinta={,,,,,,,,,}printf("d",a)}C语言规定:定义时用a表示a数组有个元素。其下标值由开始所以数组元素a是不存在的。初始化数组时未使用静态存储。inta={,,}这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。应改为:staticinta={,,}在不应加地址运算符的位置加了地址运算符。scanf("s",str)C语言编译系统对数组名的处理是:数组名代表该数组的起始地址且scanf函数中的输入项是字符数组名不必要再加地址符。应改为:scanf("s",str)同时定义了形参和函数中的局部变量。intmax(x,y)intx,y,z{z=x>yx:yreturn(z)}形参应该在函数体外定义而局部变量应该在函数体内定义。应改为:intmax(x,y)intx,y{intzz=x>yx:yreturn(z)}c语言数据类型所谓数据类型是按被说明量的性质表示形式占据存储空间的多少构造特点来划分的。在C语言中数据类型可分为:基本数据类型构造数据类型指针类型空类型四大类。基本数据类型基本数据类型最主要的特点是其值不可以再分解为其它类型。也就是说基本数据类型是自我说明的。对于基本数据类型量按其取值是否可改变又分为常量和变量两种。在程序执行过程中其值不发生改变的量称为常量取值可变的量称为变量。它们可与数据类型结合起来分类。例如可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中常量是可以不经说明而直接引用的而变量则必须先说明后使用。整型量整型量包括整型常量、整型变量。整型常量整型常量就是整常数。在C语言中使用的整常数有八进制、十六进制和十进制三种。八进制整常数八进制整常数必须以开头即以作为八进制数的前缀。数码取值为~。八进制数通常是无符号数。以下各数是合法的八进制数:(十进制为)(十进制为)(十进制为)以下各数不是合法的八进制数:(无前缀)A(包含了非八进制数码)(出现了负号)十六进制整常数十六进制整常数的前缀为X或x。其数码取值为~A~F或a~f。以下各数是合法的十六进制整常数:XA(十进制为)XA(十进制为)XFFFF(十进制为)以下各数不是合法的十六进制整常数:A(无前缀X)XH(含有非十六进制数码)十进制整常数十进制整常数没有前缀。其数码为~。以下各数是合法的十进制整常数:以下各数不是合法的十进制整常数:(不能有前导)D(含有非十进制数码)在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。整型常数的后缀在位字长的机器上基本整型的长度也为位因此表示的数的范围也是有限定的。十进制无符号整常数的范围为~有符号数为~。八进制无符号数的表示范围为~。十六进制无符号数的表示范围为X~XFFFF或x~xFFFF。如果使用的数超过了上述范围就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。例如:十进制长整常数L(十进制为)L(十进制为)八进制长整常数L(十进制为)L(十进制为)L(十进制为)十六进制长整常数XL(十进制为)XAL(十进制为)XL(十进制为)长整数L和基本整常数在数值上并无区别。但对L因为是长整型量C编译系统将为它分配个字节存储空间。而对因为是基本整型只分配个字节的存储空间。因此在运算和输出格式上要予以注意避免出错。无符号数也可用后缀表示整型常数的无符号数的后缀为“U”或“u”。例如:u,xAu,Lu均为无符号数。前缀后缀可同时使用以表示各种类型的数。如XALu表示十六进制无符号长整数A其十进制为。整型变量整型变量可分为以下几类:基本型类型说明符为int在内存中占个字节其取值为基本整常数。短整量类型说明符为shortint或short'CF。所占字节和取值范围均与基本型相同。长整型类型说明符为longint或long在内存中占个字节其取值为长整常数。无符号型类型说明符为unsigned。无符号型又可与上述三种类型匹配而构成:()无符号基本型类型说明符为unsignedint或unsigned。()无符号短整型类型说明符为unsignedshort()无符号长整型类型说明符为unsignedlong各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位故不能表示负数。在书写变量说明时应注意以下几点:允许在一个类型说明符后说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。最后一个变量名之后必须以“”号结尾。变量说明必须放在变量使用之前。一般放在函数体的开头部分。实型量包括实型常量和实型变量。实型常量实型常量也称为实数或者浮点数。在C语言中实数只采用十进制。它有二种形式:十进制数形式指数形式十进制数形式由数码~和小数点组成。例如:等均为合法的实数。指数形式由十进制数加阶码标志“e”或“E”以及阶码(只能为整数可以带符号)组成。其一般形式为aEn(a为十进制数n为十进制整数)其值为a*,n如:E(等于*,),E(等于*,)*)E(等于*,),E(等于*,)*)以下不是合法的实数(无小数点)E(阶码标志E之前无数字)(无阶码标志)E(负号位置不对)E(无阶码)标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如f和是等价的。下例说明了这种情况:voidmain(){printf("fnfn",,f)}void指明main不返回任何值利用printf显示结果结束实型变量实型变量分为两类:单精度型和双精度型其类型说明符为float单精度说明符double双精度说明符。在TurboC中单精度型占个字节(位)内存空间其数值范围为E~E只能提供七位有效数字。双精度型占个字节(位)内存空间其数值范围为E~E可提供位有效数字。实型变量说明的格式和书写规则与整型相同。例如:floatx,y(x,y为单精度实型量)doublea,b,c(a,b,c为双精度实型量)实型常数不分单、双精度都按双精度double型处理。字符型量字符型量包括字符常量和字符变量。字符常量字符常量是用单引号括起来的一个字符。例如'a','b','=','',''都是合法字符常量。在C语言中字符常量有以下特点:字符常量只能用单引号括起来不能用双引号或其它括号。字符常量只能是单个字符不能是字符串。字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如''和是不同的。''是字符常量不能参与运算。转义字符转义字符也是一种特殊的字符常量。转义字符以反斜线""开头后跟一个或几个字符。转义字符具有特定的含义不同于字符原有的意义故称“转义”字符。例如在前面各例题printf函数的格式串中用到的“n”就是一个转义字符其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义n回车换行t横向跳到下一制表位置v竖向跳格b退格r回车f走纸换页反斜线符""'单引号符a鸣铃ddd~位八进制数所代表的字符xhh~位十六进制数所代表的字符广义地讲C语言字符集中的任何一个字符均可用转义字符来表示。字符变量字符变量的取值是字符常量即单个字符。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。字符串常量是由一对双引号括起的字符序列。例如:"CHINA""Cprogram:"$"等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别:字符常量由单引号括起来字符串常量由双引号括起来。字符常量只能是单个字符字符串常量则可以含一个或多个字符。可以把一个字符常量赋予一个字符变量但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。这是与BASIC语言不同的。但是可以用一个字符数组来存放一个字符串常量。在数组一章内予以介绍。字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加。增加的一个字节中存放字符""(ASCII码为)。这是字符串结束的标志。例如字符串"Cprogram"在内存中所占的字节为:Cprogram。字符常量'a'和字符串常量"a"虽然都只有一个字符但在内存中的情况是不同的。'a'在内存中占一个字节可表示为:a"a"在内存中占二个字节可表示为:a符号常量符号常量在C语言中可以用一个标识符来表示一个常量称之为符号常量。符号常量在使用之前必须先定义其一般形式为:#define标识符常量其中#define也是一条预处理命令(预处理命令都quot#"开头)称为宏定义命令(在第九章预处理程序中将进一步介绍)其功能是把该标识符定义为其后的常量值。一经定义以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母变量标识符用小写字母以示区别。#definePIvoidmain(){floats,rr=s=PI*r*rprintf("s=fn",s)}由宏定义命令定义PI为s,r定义为实数>rPI*r*r>s显示程序结果floats,rr=s=PI*r*r本程序在主函数之前由宏定义命令定义PI为在程序中即以该值代替PI。s=PI*r*r等效于s=*r*r。应该注意的是符号常量不是变量它所代表的值在整个作用域内不能再改变。也就是说在程序中不能再用赋值语句对它重新赋值。构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中构造类型有以下几种:·数组类型·结构类型·联合类型指针类型指针是一种特殊的同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽然指针变量的取值类似于整型量但这是两个类型完全不同的量因此不能混为一谈。空类型在调用函数值时通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的应在函数定义及函数说明中给以说明但是也有一类函数调用后并不需要向调用者返回函数值这种函数可以定义为“空类型”。其类型说明符为void。你们的项目组使用源代码管理工具了么?应该用。VSS、CVS、PVCS、ClearCase、CCCHarvest、FireFly都可以。我的选择是VSS。你们的项目组使用缺陷管理系统了么?应该用。ClearQuest太复杂我的推荐是BugZilla。你们的测试组还在用Word写测试用例么?不要用Word写测试用例(TestCase)。应该用一个专门的系统可以是TestManager也可以是自己开发一个ASPNET的小网站。主要目的是Track和Browse。你们的项目组有没有建立一个门户网站?要有一个门户网站用来放ContactInfo、BaselinedSchedule、News等等。推荐SharepointPortalServer来实现分钟就搞定。买不起SPS可以用WSS(WindowsSharepointService)。你们的项目组用了你能买到最好的工具么?应该用尽量好的工具来工作。比如应该用VSNET而不是Notepad来写C#。用Notepad写程序多半只是一种炫耀。但也要考虑到经费所以说是“你能买到最好的”。你们的程序员工作在安静的环境里么?需要安静环境。这点极端重要而且要保证每个人的空间大于一定面积。你们的员工每个人都有一部电话么?需要每人一部电话。而且电话最好是带留言功能的。当然上这么一套带留言电话系统开销不小。不过至少每人一部电话要有千万别搞得经常有人站起来喊:“某某某电话”。《人件》里面就强烈谴责这种做法。你们每个人都知道出了问题应该找谁么?应该知道。任何一个Feature至少都应该有一个Owner当然Owner可以继续Dispatch给其他人。你遇到过有人说“我以为…”么?要消灭“我以为”。Neverassumeanything。你们的项目组中所有的人都坐在一起么?需要。我反对VirtualTeam也反对Dev在美国、Test在中国这种开发方式。能坐在一起就最好坐在一起好处多得不得了。你们的进度表是否反映最新开发进展情况?应该反映。但是应该用Baseline的方法来管理进度表:维护一份稳定的Schedule再维护一份最新更改。Baseline的方法也应该用于其它的Spec。Baseline是变更管理里面的一个重要手段。你们的工作量是先由每个人自己估算的么?应该让每个人自己估算。要从下而上估算工作量而不是从上往下分派。除非有其他原因比如政治任务工期固定等。你们的开发人员从项目一开始就加班么?不要这样。不要一开始就搞疲劳战。从项目一开始就加班只能说明项目进度不合理。当然一些对日软件外包必须天天加班那属于剥削的范畴。你们的项目计划中BufferTime是加在每个小任务后面的么?不要。BufferTime加在每个小任务后面很容易轻易的就被消耗掉。BufferTime要整段的加在一个Milestone或者checkpoint前面。值得再多花一些时间从做到好值得非常值得。尤其当项目后期人困马乏的时候要坚持。这会给产品带来质的区别。登记新缺陷时是否写清了重现步骤?要。这属于Dev和Test之间的沟通手段。面对面沟通需要详细填写ReproSteps也需要。写新代码前会把已知缺陷解决么?要。每个人的缺陷不能超过个或个否则必须先解决老的bug才能继续写新代码。你们对缺陷的轻重缓急有事先的约定么?必须有定义。Severity要分、、约定好:蓝屏和DataLost算SevFunctionError算Sev界面上的算Sev。但这种约定可以根据产品质量现状适当进行调整。你们对意见不一的缺陷有三国会议么?必须要有。要有一个明确的决策过程。这类似于CCB(ChangeControlBoard)的概念。所有的缺陷都是由登记的人最后关闭的么?Bug应该由Opener关闭。Dev不能私自关闭Bug。你们的程序员厌恶修改老的代码么?厌恶是正常的。解决方法是组织CodeReview单独留出时间来。XP也是一个方法。你们项目组有TeamMoraleActivity么?每个月都要搞一次吃饭、唱歌、Outing、打球、开卡丁车等等一定要有。不要剩这些钱。你们项目组有自己的Logo么?要有自己的Logo。至少应该有自己的Codename。你们的员工有印有公司Logo的TShirt么?要有。能增强归属感。当然TShirt要做的好看一些最好用支的棉来做。别没穿几次就破破烂烂的。总经理至少每月参加次项目组会议要的。要让teammember觉得高层关注这个项目。你们是给每个Dev开一个分支么?反对。Branch的管理以及Merge的工作量太大而且容易出错。有人长期不CheckIn代码么?不可以。对大部分项目来说最多两三天就应该CheckIn。在CheckIn代码时都填写注释了么?要写的至少一两句话比如“解决了BugNo”。如果往高处拔这也算做“配置审计”的一部分。有没有设定每天CheckIn的最后期限?要的要明确CheckInDeadline。否则会BuildBreak。你们能把所有源码一下子编译成安装文件吗?要的。这是每日编译(DailyBuild)的基础。而且必须要能够做成自动的。你们的项目组做每日编译么?当然要做。有三样东西是软件项目产品开发必备的:bugmanagementsourcecontroldailybuild。你们公司有没有积累一个项目风险列表?要。RiskInventory。否则下个项目开始的时候又只能拍脑袋分析Risk了。设计越简单越好越简单越好。设计时候多一句话将来可能就带来无穷无尽的烦恼。应该从一开始就勇敢的砍。这叫scopemanagement。尽量利用现有的产品、技术、代码千万别什么东西都自己Coding。BizTalk和Sharepoint就是最好的例子有这两个作为基础可以把起点提高很多。或者可以尽量多用现成的Control之类的。或者尽量用XML而不是自己去Parse一个文本文件尽量用RegExp而不是自己从头操作字符串等等等等。这就是“软件复用”的体现。你们会隔一段时间就停下来夯实代码么?要。最好一个月左右一次。传言去年年初Windows组在Stevb的命令下停过一个月增强安全。Btw“夯”这个字念“hang”第一声。你们的项目组每个人都写DailyReport么?要写。五分钟就够了写句话左右告诉自己小组的人今天我干了什么。一则为了沟通二则鞭策自己(要是游手好闲一天自己都会不好意思写的)。你们的项目经理会发出WeeklyReport么?要。也是为了沟通。内容包括目前进度可能的风险质量状况各种工作的进展等。你们项目组是否至少每周全体开会一次?要。一定要开会。程序员讨厌开会但每个礼拜开会时间加起来至少应该有小时。包括teammeeting,specreviewmeeting,bugtriagemeeting。千万别大家闷头写code。你们项目组的会议、讨论都有记录么?会前发meetingrequest和agenda会中有人负责主持和记录会后有人负责发meetingminutes这都是effectivemeeting的要点。而且每个会议都要形成agreements和actionitems。其他部门知道你们项目组在干什么么?要发一些Newsflash给整个大组织。Showyourteam’svalue。否则当你坐在电梯里面其他部门的人问:“你们在干嘛”你回答“ABC项目”的时候别人全然不知那种感觉不太好。通过Email进行所有正式沟通Email的好处是免得抵赖。但也要避免矫枉过正最好的方法是先用电话和当面说然后Email来确认。为项目组建立多个MailingGroup如果在ADExchange里面就建DistributionList。比如我会建ABCProjectCoreTeamABCProjectDevTeamABCProjectAllTestersABCProjectExtendedTeam等等。这样发起Email来方便而且能让该收到email的人都收到、不该收到不被骚扰。每个人都知道哪里可以找到全部的文档么?应该每个人都知道。这叫做知识管理(KnowledgeManagement)。最方便的就是把文档放在一个集中的FileShare更好的方法是用Sharepoint。你做决定、做变化时告诉大家原因了么?要告诉大家原因。Empowerteammember的手段之一是提供足够的information这是MSF一开篇的几个原则之一。的确如此tellmewhy是人之常情tellmewhy了才能有understanding。中国人做事喜欢搞限制限制信息似乎能够看到某一份文件的人就是有身份的人。大错特错。权威、权力不在于是不是能accessinformationdata而在于是不是掌握资源。Stayagileandexpectchange要这样。需求一定会变的已经写好的代码一定会被要求修改的。做好心理准备对change不要抗拒而是expectchange。你们有没有专职的软件测试人员?要有专职测试。如果人手不够可以peertest交换了测试。千万别自己测试自己的。你们的测试有一份总的计划来规定做什么和怎么做么?这就是TestPlan。要不要做性能测试?要不要做Usability测试?什么时候开始测试性能?测试通过的标准是什么?用什么手段自动的还是手动的?这些问题需要用TestPlan来回答。你是先写TestCase然后再测试的么?应该如此。应该先设计再编程、先testcase再测试。当然事情是灵活的。我有时候在做第一遍测试的同时补上testcase。至于先testcase再开发我不喜欢因为不习惯太麻烦至于别人推荐那试试看也无妨。你是否会为各种输入组合创建测试用例?不要不要搞边界条件组合。当心组合爆炸。有很多testcase工具能够自动生成各种边界条件的组合但要想清楚你是否有时间去运行那么多testcase。你们的程序员能看到测试用例么?要。让Dev看到TestCase吧。我们都是为了同一个目的走到一起来的:提高质量。你们是否随便抓一些人来做易用性测试?要这么做。自己看自己写的程序界面怎么看都是顺眼的。这叫做审美疲劳臭的看久了也就不臭了不方便的永久了也就习惯了。你对自动测试的期望正确么?别期望太高。依我看除了性能测试以外还是暂时先忘掉“自动测试”吧忘掉WinRunner和LoadRunner吧。对于国内的软件测试的现状来说只能“矫枉必须过正”了。你们的性能测试是等所有功能都开发完才做的么?不能这样。性能测试不能被归到所谓的“系统测试”阶段。早测早改正早死早升天。你注意到测试中的杀虫剂效应了么?虫子有抗药性Bug也有。发现的新Bug越来越少是正常的。这时候最好大家交换一下测试的area或者用用看其他工具和手法就又会发现一些新bug了。你们项目组中有人能说出产品的当前整体质量情况么?要有。当老板问起这个产品目前质量如何TestLeadManager应该负责回答。你们有单元测试么?单元测试要有的。不过没有单元测试也不是不可以我做过没有单元测试的项目也做成功了可能是侥幸可能是大家都是熟手的关系。还是那句话软件工程是非常实践、非常工程、非常灵活的一套方法某些方法在某些情况下会比另一些方法好反之亦然。你们的程序员是写完代码就扔过墙的么?大忌。写好一块程序以后即便不做单元测试也应该自己先跑一跑。虽然有了专门的测试人员做开发的人也不可以一点测试都不做。微软还有TestReleaseDocument的说法程序太烂的话测试有权踢回去。你们的程序中所有的函数都有输入检查么?不要。虽然说做输入检查是writesecurecode的要点但不要做太多的输入检查有些内部函数之间的参数传递就不必检查输入了省点功夫。同样的道理未必要给所有的函数都写注释。写一部分主要的就够了。产品有统一的错误处理机制和报错界面么?要有。最好能有统一的errormessage然后每个errormessage都带一个errornumber。这样用户可以自己根据errornumber到usermanual里面去看看错误的具体描述和可能原因就像SQLServer的错误那样。同样ASPNET也要有统一的Exception处理。可以参考有关的ApplicationBlock。你们有统一的代码书写规范么?要有。CodeConvention很多搞一份来发给大家就可以了。当然要是有FxCop这种工具来检查代码就更好了。你们的每个人都了解项目的商业意义么?要。这是Vision的意思。别把项目只当成工作。有时候要想着自己是在为中国某某行业的信息化作先驱者或者时不时的告诉teammember这个项目能够为某某某国家部门每年节省多少多少百万的纳税人的钱这样就有动力了。平凡的事情也是可以有个崇高的目标的。产品各部分的界面和操作习惯一致么?要这样。要让用户觉得整个程序好像是一个人写出来的那样。有可以作为宣传亮点的CoolFeature么?要。这是增强团队凝聚力、信心的。而且“一俊遮百丑”有亮点就可以掩盖一些问题。这样对于客户来说会感觉产品从质量角度来说还是acceptable的。或者说coolfeature或者说亮点可以作为质量问题的一个事后弥补措施。尽可能缩短产品的启动时间要这样。软件启动时间(StartUptime)是客户对性能好坏的第一印象。不要过于注重内在品质而忽视了第一眼的外在印象程序员容易犯这个错误:太看重性能、稳定性、存储效率但忽视了外在感受。而高层经理、客户正相反。这两方面要兼顾协调这些是PM的工作。你们根据详细产品功能说明书做开发么?要这样。要有设计才能开发这是必须的。设计文档应该说清楚这个产品会怎么运行应该采取一些讲故事的方法。设计的时候千万别钻细节别钻到数据库、代码等具体实现里面去那些是后面的事情一步步来不能着急。开始开发和测试之前每个人都仔细审阅功能设计么?要做。FunctionSpecreview是用来统一思想的。而且review过以后形成了一致意见将来再也没有人可以说“你看当初我就是反对这么设计的现在吃苦头了吧”所有人都始终想着TheWholeImage么?要这样。项目里面每个人虽然都只是在制造一片叶子但每个人都应该知道自己在制造的那片叶子所在的树是怎么样子的。我反对软件蓝领反对过分的把软件制造看成流水线、车间。参见第条。Dev工作的划分是单纯纵向或横向的么?不能单纯的根据功能模块分或者单纯根据表现层、中间层、数据库层分。我推荐这么做:首先根据功能模块分然后每个“层”都有一个Owner来Review所有人的设计和代码保证consistency。你们的程序员写程序设计说明文档么?要。不过我听说微软的程序员年以前也不写。所以说写不写也不是绝对的偷懒有时候也是可以的。参见第条。你在招人面试时让他写一段程序么?要的。我最喜欢让人做字符串和链表一类的题目。这种题目有很多循环、判断、指针、递归等既不偏向过于考算法也不偏向过于考特定的API。你们有没有技术交流讲座?要的。每一两个礼拜搞一次内部的TechTalk或者ChalkTalk吧。让组员之间分享技术心得这笔花钱送到外面去培训划算。你们的程序员都能专注于一件事情么?要让程序员专注一件事。例如说一个部门有两个项目和个人一种方法是让个人同时参加两个项目每个项目上每个人都花时间另一种方法是个人去项目A个人去项目B每个人都在某一个项目上。我一定选后面一种。这个道理很多人都懂但很多领导实践起来就把属下当成可以任意拆分的资源了。你们的程序员会夸大完成某项工作所需要的时间么?会的这是常见的尤其会在项目后期夸大做某个change所需要的时间以次来抵制change。解决的方法是坐下来慢慢磨磨掉程序员的逆反心理一起分析并把估算时间的颗粒度变小。尽量不要用VirtualHeads最好不要用VirtualHeads。Virtualheads意味着resourceisnotsecuresharedresource会降低resource的工作效率容易增加出错的机会会让一心二用的人没有太多时间去reviewspec、reviewdesign。一个dedicated的人要强过两个只能投入时间和精力的人。我是吃过亏的:个parttime的tester发现的Bug和干的活加起来还不如两个fulltime的。参见第条。条是针对程序员的条是针对ResourceManager的。我现在做的项目是采用如下方法管理的:BD:基础设计。在这个文档里我们把程序的界面全部画出来界面上的功能全部描述完整。如:一个查询界面的条件是什么查询出来的结果如何显示等等。FD:功能设计。在这个文档里对BD阶段的各个页面里包含的数据逻辑处理做说明。如:查询时调用的数据处理函数该如何设计入口参数返回参数关联的表等等各方面的说明。因为程序的界面已经定了数据处理逻辑也定了。所以就开始编码阶段。当编码过程中发生什么问题程序的整个功能还是必须满足BD和FD设计文档中的要求。程序中的各种疑问都以BD和FD文档中的说明为准。基本上我们一个小项目的开发周期为个月BD为周FD周PG(编程)周CT(测试)周。测试完毕后交出去的就是成品基本上不会再有系统要求变更的问题了。如果有变更且不在BD设计范围内那就是新增需求。就是一个新项目了

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/95

Softeem-JAVA面试攻略-目录

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利