java测试面试

2024-08-14

java测试面试(精选7篇)

java测试面试 篇1

JAVA程序员面试试题及智力测试Java

面试例题1:击鼠标比赛现在开始!参赛者有拉尔夫、威利和保罗。

拉尔夫10秒钟能击10下鼠标,威利20秒钟能击20下鼠标,保罗5秒钟能击5下鼠标。以上各人所用的时间是这样计算的:从第一击开始,到最后一击结束。

他们是否打平手?如果不是,谁最先击完40下鼠标?

解析:n秒钟击n下鼠标其实是击第一下鼠标时才开始计时的,实际上击n-1下需要n秒钟,那么若击40下鼠标,拉尔夫需要(40-1)/(9/10)=39/0.9秒,威利需要

(40-1)/(19/20)=39/0.95秒,保罗需要(40-1)/(4/5)=39/0.8秒,因此威利先击完。

答案:威利先击完。

面试例题2:100美元哪里去了?

3个朋友住进了一家宾馆。结账时,账单总计3 000美元。3个朋友每人分摊1 000美元,并把这3 000美元如数交给了服务员,委托他代到总台交账。但在交账时,正逢宾馆实施价格优惠,总台退还给服务员500美元,实收2 500美元。服务员从这500美元退款中扣下了200美元,只退还3个客人300美元。3个客人平分了这300美元,每人取回了100美元。这样,3个客人每人实际支付900美元,共支付2 700美元,加上服务员扣的200美元,共计2 900美元,那么这100美元的差额到哪里去了?

答案:这道题纯粹是文字游戏,但是如果你的头脑不够清晰,很可能把你搞糊涂了。客人实际支付2 700美元,就等于总台实际结收的2 500美元加上服务员克扣的200美元。在这2 700美元上加上200美元是毫无道理的,而在这2 700美元上加退回的300美元,这是有道理的,因为这等于客人原先交给服务员的3 000美元。

面试例题3:有一种小虫,每隔2秒钟分裂一次。分裂后的2只新的小虫经过2秒钟后又会分裂。如果最初某瓶中只有一只小虫,那么2秒后变2只,再过2秒后就变4只……2分钟后,正好满满一瓶小虫。假设这个瓶内最初放入2只这样的小虫。

问:经过多少时间后,正巧也是满满的一瓶?

答案:经过1分58秒时间,也正巧是满满一瓶。因为从一只虫蜕变为2只虫只需2秒钟。在瓶内只有一只虫子的情况下,经过2秒钟后就变成2只。这时的情况和瓶内一开始就有2只虫子的情况是一样的。出现这两种情况的时间差是2秒钟。所以,经过1分58秒后,也正好是满满一瓶。

面试例题4:斯芬克斯是古代希腊神话中的带翅膀的狮子女魔。传说她在底比斯附近要人猜谜,猜不出来就要杀人。一次,她要底比斯王子猜谜:“有一种动物,早上4条腿,中午2条腿,晚上3条腿,是什么动物?”聪明的王子说:“是人。”他猜中了。

如果你是现代的斯芬克斯,会提出什么样的问题呢?比如,1和0之间加上什么符号才可以使得到的数比0大又比1小呢?你知道吗?

答案:0.1面试例题5:父亲打电话给女儿,要她替自己买一些生活用品,同时告诉她,钱放在书桌上的一个信封里。女儿找到信封,看见上面写着98,以为信封内有98元,就把钱拿出来,数也没数放进书包里。在商店里,她买了90元的东西,付款时才发现,她不仅没有剩下8元,反而差了4元。回到家里,她把这事告诉了父亲,怀疑父亲把钱点错了。父亲笑着说,他并没有数错,错在女儿身上。

问:女儿错在什么地方?

答案:拿倒了,86看成是98了。

面试例题6:3个孩子翻衣兜,他们把兜里所有的钱都掏出来,看看一共有多少钱。结果一共有320日元。其中有两枚硬币是100日元的,两枚是50日元的,两枚是10日元的。每一个孩子所带的硬币中没有相同的。而且,没带100日元硬币的孩子也没带10日元的硬币,没带50日元硬币的孩子也没带100日元的硬币。你能弄清楚这3个日本孩子原来各自带了什么硬币吗?

答案:第一个小孩:100,50,10;第二个小孩:100,50;第三个小孩:10。

java 面试试题

1,谈谈final, finally, finalize的区别。

答案:final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

2,Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以

implements(实现)interface(接口)?

答案:可以继承其他类或完成其他接口,在swing编程中常用此方式。

3,Static Nested Class 和 Inner Class的不同,说得越多越好。

答案:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

4,&和&&的区别。

答案:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).5,HashMap和Hashtable的区别。

答案:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.6,Collection 和 Collections的区别。

答案:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

7,什么时候用assert。

答案:1.4新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。

使用方法 assert ,表示如果表达式为真(true),则下面的语句执行,否则抛出AssertionError。

另外的使用方式assert < boolean表达式>:,表示如果表达式为真,后面的表达式忽略,否则后面表达式的值用于AssertionError的构建参数。

注意编译时要增加-source 1.4 参数,否则报错。]运行时要增加-ea参数,否则assert行被忽略

8,GC是什么? 为什么要有GC?

答案:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

9,String s = new String(“xyz”);创建了几个String Object?

两个

10,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 答案:Math.round(11.5)==12

Math.round(-11.5)==-11

round方法返回与参数最接近的长整数,参数加1/2后求其floor.

java测试面试 篇2

传统的java平台构建较为繁琐,不仅消耗大量的时间资源,也使得自动化的测试工作变得困难,因此,从节省资金成本和人力资源成本的角度出发对java平台进行质量提升,是很多团队工作的重点。

1 单元测试技术的具体使用流程

1.1 单元测试技术充分性的保证

在进行单元测试之前,操作团队必须对使用的软件进行规划,要保证软件能够在测试过程中充分发挥作用,当工作人员将事例信息进行输入之后,选取的软件必须能够根据简短的信息迅速进行期望值的确定,并使用网络资源进行信息表的确定,当条件输入完成之后,需要按照系统的前置条件指示进行测试环节的明确,测试环节在进行推进的过程中,要根据数据的输入情况对组成数据的因素进行明确,以便操作人员能够对期望值的具体情况具备一定的了解,要根据系统的后置条件对期望值进行估测,并且按照测试工作的需要对试用环节的状态进行明确[1]。在对示例信息进行判断的过程中,可以根据期望值的状态对已经确定的信息进行估测,并按照测试过程中不容易进行判断的信息对测试的内容进行认定,在正常的测试环节中,输入的信息数据是较为常见的数据,因此,可以根据测试的需求进行测试用例的判断,操作人员可以根据期望值判断的难易程度对测试工作的流程进行规划[2]。对数据进行基础性测试的过程中,需要将有待测试的数据进行录入,这一部分输入处理的数据仅仅是程序所需的基本数据,要将涉及测试结果的全部因素纳入测试范围,按照数据的准确性对程序的设计环节进行控制,首先,要根据源代码的具体情况对程序设计过程中的一系列信息进行判断,以便测试的信息能够保证涵盖测试工作的全部范围,如果测试工作能够根据具体的需求情况进行数据准确性的判断,则要按照充分性的要求对数据进行再次收集,

1.2 测试工作的相关准则

测试工作的流程较为复杂,在具体测试中,由于基准点不同,经常将单元测试工作分为白盒和黑盒两种,黑盒的测试工作经常以规约作为中心,而白盒的测试工作则以系统的结构作为核心,在进行黑盒测试的过程中,操作人员要首先对单元的输入情况进行调查,根据输入的具体信息对输出的环节进行策划,因此,黑盒测试的主要内涵在于将输入信息和输出信息进行对接,实现双向平衡。在进行黑盒测试的操作过程中,测试项目能够将时间进行更好的调整,如果测试工作可以将比较分散的信息进行集中处理,则可以将不同的时间点进行调整,以便不同基准面的测试工作能够实现价值的均等[3]。可以使用判定表作为主要的测试辅助手段,使不同价值的测试工作能够实现平衡。在进行白盒测试的过程中,要严格按照测试程序的需要,对不同结构的信息数据实施精准的测试,白盒测试在推行过程中,可以按照测试的具体路径对信息数据实施调查,当测试工作不能按照精准的数据流进行控制的情况下,测试工作要使用既定的程序进行测试细节的判断,要保证测试工作所使用的测试方法能够完全适应测试程序的要求,实施覆盖之前,需要了解覆盖过程的使用语句,在不同分支结构中要保证使用相同的语句形式,要对所采用的信息语句进行判断,以便使用的信息能够覆盖测试工作的全部流程。在针对所使用的程序进行数据处理的过程中,要保证信息数据能够实现循环处理,以便将数据在运行过程中能够按照多种状态共同发展的形式进行测试工作。在选择数据形式之前,必须使数据能够在更广的范围内实现覆盖,以便在白盒测试的过程中,相关数据能够同黑盒测试实现互补,使单元测试工作的进行能够拥有更广的覆盖面积,因此,可以使用不同形式的测试相结合的方式进行测试工作,以便测试工作的全面性能够得到保证。

1.3 自动生成测试的具体方式

数据的处理效率是影响自动生成测试质量的关键性因素,因此,要对自动生成程序的设计加强重视,可以通过更换测试方法的形式进行自动生成系统的设计,例如,可以随机选取不同种类的测试手段,并将多种方案进行搭配使用,也可以在程序运行的过程中进行测试手段的升级,在进行随机选取的过程中,要切实保证测试所得数据的准确性,以便测试环节所得的数据不能根据测试情况进行全面的有效性分析,使数据的精准性能够得到保证,如果在测试过程中发现搜集的数据存在缺陷,要根据数据的生成情况对测试的方法作出调整,使测试环节的准确性能够得到充分的保证。在数据测试过程中,对数据变化情况的处理是调节符号的主要手段,因此,在程序进行路径制定的过程中,对数据在收取过程中能够适应的环境进行控制,使数据的各类符号能够适应数据处理的要求。在进行符号输入的过程中,需要按照代数制定的顺序进行符号的确定,如果需要操作的程序存在指针方面的要求,要保证符号的执行过程中具备一定的简单性特点,使操作人员能够及时调整符号操作的问题,避免影响符号操作的准确性。

2 动态程序执行法

首先,要对动态程序进行制定机制的确定,在数据的执行过程中能够保证顺利升级之后,要根据输入的数据需要,按照程序执行过程中的特点进行程序代码的认定。要根据测试工作的具体需要,根据测试数据的情况为测试工作所需的程序进行认定,如果测试环节能够符合操作人员的设计方案,则需要对测试的动态程序进行数据保留,在进行数据收集之后,要按照收集到的信息对测试环节所需的成本进行明确,如果信息数据的准确性可以适应动态程序的要求,可以将此数据作为测试的主要依据,使测试环节能够更好的对接不同种类的测试方法。在进行动态测试的过程中,要对动态测试是否存在代码的漏洞进行判断,以便存在的信息漏洞可以通过信息的判断实现更好的弥补,信息收集完成之后,要按照动态程序的测试要求,对数据进行运行方法的比较,以便数据在生成的过程中能够避免出现过高的复杂性,使操作环节能够更加简便。在进行动态程序的操作过程中,需要首先对程序的复杂情况进行判断,保证程序的运行适合自动生成系统的要求,要使用子集编辑的方式对自动生成程序进行设置,以便程序能够在较为简单的操作系统运行中得以实现,可以尝试实施梯度下降的方法对程序进行控制,按照小目标函数的运算准则,对已经生成的数据进行测试处理,使数据的随机性能够得到保证。测试工作进行过程中,符合数据需要受到充分的重视,要根据前期生成数据的具体情况,结合梯度下降的状况对测试环节进行规划,保证自动生成的数据信息能够具备足够的运行效率。在时间成本的控制方面,要根据信息的初始环境对数据收集过程中的各类信息进行管理,以便操作人员能够正确的选取合适的信息进行搜索工作,使不同区域的信息可以按照优化之后的方案进行推行,要严格按照既定的自动生成方案进行搜索环节的优化,遗传手法是较为常见的搜索手法,因此,要充分发挥遗传手法的优势,提升数据运行的质量。

3 单元测试中遗传算法的特征

首先,在执行遗传算法之前,要对算法的具体运行原理进行分析,根据原理的具体要求,对遗传算法在推行过程中的具体手段进行控制,如果操作人员发现每一个运行环节都能够确定运行的具体手法,则要将现有的运行程序纳入遗传算法的运行方案中。在进行遗传算法控制的过程中,要按照已经归纳的结论进行遗传算法收敛性的控制,选取适合程序正常运行的数据信息进行保护处理,使系统在运行过程中能够拥有完整的保护基础,要在系统运行进入子代之前,使用已经发现的合格个体进行子代系统的控制,如果系统可以适应运行过程中的问题,则可以允许系统在运行过程中实施管理,以便系统的收敛性可以在整体规模的控制下实现收敛。在进行保存数据的选取过程中,需要根据遗传算法的具体要求进行收敛性处理,使已经获取的结论能够提升遗传算法的设计等级,可以引进马尔科夫理论对遗传算法的具体操作细则进行指导,根据已经获取的结论对需要解决的问题实施优化处理,在理论的运用过程中,不必要求现有理论能够完全同个体状况保持一致,可以允许同设计方案近似的个体进行选取范围,在具体执行过程中,要使用数学分析的方法对测试工作的收敛性进行判断,以便测试环节能够通过正确的使用遗传方法实现优化设计。要参考有限自动机的运行准则对遗传算法进行合理化设置,保证使用遗传算法所获得的结论能够接近准确数值,要保证和实际情况相似的问题也能通过遗传算法的方式进行解决,以便相同统计模式下的信息可以按照原有的方案进行统计。在部分运行程序结束运行之后,要将不同运行方法得出的结论进行对比,以便不同方案的使用可以实现最终数值的接近。

4 单元测试的数据分析

要根据测试工作的需要对测试工具进行必要的调整,严格按照测试所需的代码数据进行功能的提升,根据待测试系统的实际情况,选取二级制方式对文件进行管理,以便操作人员能够在文件运行的过程中对各类执行语句的情况进行掌握,并根据执行语句的操作模式进行代码信息的确定,要根据代码测试过程中的测试准确性,对测试中的具体语句进行分析,以便全部测试流程能够实现测试语句的优化处理。要保证收集系统可以将系统测试过程中的各类分支信息进行妥善的处理,使已经测试完成的分支信息可以通过覆盖状态实现覆盖率的调节,要允许测试包可以通过测试流程的分析实现测试环节的推行,根据系统执行过程中的信息覆盖情况,对现有的信息资源进行适当的延伸,以便测试工作可以按照已有的评估方法对程序的执行质量实施控制。操作人员要根据现有的测试范围,对主要测试环节进行流程图的认定,并严格根据流程图的具体信息,对不同状态下的分支功能进行监控流程的安排,以便测试环节的信息基础可以得到充分的认定,提升分支功能的监控质量,使测试报告的准确性得到充分的保证。测试环节推进过程中,要使用代码的基础信息进行运行流程的判定,并结合基础信息的具体展现模式,对单元测试的数据进行研究,以便单元测试的分析系统可以实现数据准确性的确定。

结论

随着单元测试技术的不断发展,软件的测试质量受到了越来越高的关注,在社会各界对软件测试的要求越来越高的情况下,对各类不同测试手段进行分析,是很多单元测试人员重视的问题,按照不同脚本的需要对单元测试技术进行实践,是提升软件开发质量的基础问题。

摘要:单元测试技术是提升系统平台质量的重要技术,随着我国社会对Java技术的重视程度越来越高,应用程序的稳定性成为了社会各界关注的内容,因此,对单元测试技术进行研究是很多领域重点关注的问题。

关键词:java,平台,单元测试技术

参考文献

[1]吴亚峰,王鑫磊.精通Net Beans-Java桌面、Web与企业级程序开发详解[M].北京:人民邮电出版社,2007.

[2]Martin Bond.J2EE核心技术[M].北京:人民邮电出版社,2003.

可以用来面试的人格测试 篇3

1你何时感觉最好?

A早晨B下午及傍晚C夜里

2你走路时是?

A大步地快走B小步地快走C不快,仰着头面对着世界D不快,低着头E很慢

3和人说话时,你……

A手臂交叠站着B双手紧握着C一只手或两手放在臀部D碰着或推着与你说话的人 E玩着你的耳朵、摸着你的下巴或用手整理头发

4坐着休息时,你的……

A两膝盖并拢B两腿交叉C两腿伸直D一腿蜷在身下

5碰到你感到发笑的事时,你的反应是……

A一个欣赏的大笑B笑着,但不大声C轻声地咯咯地笑D羞怯的微笑

6当你去一一个派对或社交场合时,你……

A很大声地入场以引起注意 B安静地入场,找你认识的人C非常安静地入场,尽量保持不被注意

7当你非常专心工作时,有人打断你,你会……

A欢迎他B感到非常恼怒C在上述两极端之间

8下列颜色中,你最喜欢哪一种颜色?

A红或橘色B黑色C黄色或浅蓝色D绿色E深蓝色或紫色F白色G棕色或灰色

9临入睡的前几分钟,你在床上的姿势是……

A仰躺,伸直B俯躺,伸直C侧躺,微蜷D头枕在一手臂上E被子盖过头

10你经常梦到自己在……

A落下B打架或挣扎C找东西或人D飞或漂浮E你平常不做梦F你的梦都是愉快的

现在将所有分数相加,再对照后面的分析

1(a) 2 (b) 4 (C) 6

2(a) 6 (b) 4 (C) 7 (d) 2 (e) 1

3 (a) 4 (b) 2 (C) 5 (d) 7 (e) 6

4 (a) 4 (b) 6 (C) 2 (d) 1

5(a) 6 (b) 4 (C) 3 (d) 5

6(a) 6 (b) 4 (C) 2

7 (a) 6 (b) 2 (C) 4

8(a) 6 (b) 7 (C) 5 (d) 4 (e) 3 (f) 2 (g) 1

9(a) 7 (b) 6 (C) 4 (d) 2 (e) 1

10(a) 4 (b) 2 (C) 3 (d) 5 (e) 6 (f) 1

答案分析

低于21分:内向的悲观者,人们认为你是一个害羞的、神经质的,优柔寡断的,是须人照顾、永远要别人为你做决定、不想与任何事或任何人有关。他们认为你是一个杞人忧天者,一个永远看到不存在的问题的人。有些人认为你令人乏味,只有那些深知你的人知道你不是这样的。

21分到30分:缺乏信心的挑剔者你的朋友认为你勤勉刻苦、很挑剔。他们认为你是一个谨慎的,十分小心的人,一个缓慢而稳定辛勤工作的人。如果你做任何冲动的事或无准备的事,你会令他们大吃一惊。他们认为你会从各个角度仔细地检查一切之后仍经常决定不做。他们认为对你的这种反应一部分是因为你的小心的天性所引起的。

31分到40分:以牙还牙的自我保护者别人认为你是一个明智、谨慎、注重实效的人。也认为你是一个伶俐,有天赋有才干且谦和的人。你不会很快、很容易和人成为朋友,但却是一个对朋友非常忠诚的人,同时要求朋友对你也有忠诚的回报。那些真正有机会了解你的人会知道要动摇你对朋友的信任是很难的,但相等的,一旦这信任被破坏,会使你很难熬过。

41分到50分:平衡的中道别人认为你是一个新鲜的,有活力的,有魅力的,好玩的,讲究实际的,而永远有趣的人;一个经常是群众注意力的焦点,但是你是一个足够平衡的人,不至于因此而昏了头。他们也认为你亲切,和蔼、体贴,能谅解人i一个永远会使人高兴起来并会帮助别人的人。

51分到60分;吸引人的冒险家别人认为你是一个令人兴奋的,高度活泼的,相当易冲动的个性;你是一个天生的领袖,一个做决定会很快的人,虽然你的决定不总是对的,他们认为你是大胆的和冒险的,会愿意试做任何事至少一次;是一个愿意尝试机会而欣赏冒险的人,因为你散发的激情,他们喜欢跟你在一起。

java面试 篇4

1.Java中的异常处理机制的简单原理和应用,

当Java程序违反了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是Java类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

2.Java的接口和C 的虚类的相同和不同处。

由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是publicstatic,所有方法默认情况下是public.一个类可以实现多个接口。

3.垃圾回收的优点和原理。并考虑2种回收机制。

Java语言中一个显著的特点就是引入了垃圾回收机制,使c 程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

4.线程同步的方法。

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切地唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

5.Error与Exception有什么区别?

Error表示系统级的错误和程序不必处理的异常,

Exception表示需要捕捉或者需要程序进行处理的异常。

6.在java中一个类被声明为final类型,表示了什么意思?

表示该类不能被继承,是顶级类。

7heap和stack有什么区别。

栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素。

8谈谈final,finally,finalize的区别。

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

finally—异常处理时提供finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。

finalize—方法名。Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

9AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

10StaticNestedClass和InnerClass的不同

NestedClass(一般是C 的说法),InnerClass(一般是JAVA的说法)。Java内部类与C 嵌套类最大的不同就在于是否有指向外部的引用上。

注:静态内部类(InnerClass)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

11&和&&的区别。

&是位运算符。&&是布尔逻辑运算符。

12HashMap和Hashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap类没有分类或者排序。它允许一个null键和多个null值。

Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。

13Collection和Collections的.区别。

Collection是个java.util下的接口,它是各种集合结构的父接口。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

14什么时候用assert。

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true。

如果表达式计算为false,那么系统会报告一个Assertionerror。它用于调试目的:

assert(a>0);//throwsanAssertionerrorifa<=0

断言可以有两种形式:

assertExpression1;

assertExpression1:Expression2;

Expression1应该总是产生一个布尔值。

Expression2可以是得出一个值的任意表达式。这个值用于生成显示更多调试

信息的String消息。

断言在默认情况下是禁用的。要在编译时启用断言,需要使用source1.4标记:

javac-source1.4Test.java

要在运行时启用断言,可使用-enableassertions或者-ea标记。

要在运行时选择禁用断言,可使用-da或者-disableassertions标记。

要系统类中启用断言,可使用-esa或者-dsa标记。还可以在包的基础上启用或者禁用断言。

可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

15GC是什么?为什么要有GC?(基础)。

GC是垃圾收集器。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

16Strings=newString(“xyz”);创建了几个StringObject?

两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s。

17Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

18shorts1=1;s1=s1 1;有什么错?shorts1=1;s1 =1;有什么错?

shorts1=1;s1=s1 1;有错,s1是short型,s1 1是int型,不能显式转化为short型,

可修改为s1=(short)(s1 1)。shorts1=1;s1 =1正确。

19sleep()和wait()有什么区别?搞线程的最爱

sleep()方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

20Java有没有goto?

Goto—java中的保留字,现在没有在java中使用。

21数组有没有length()这个方法?String有没有length()这个方法?

数组没有length()这个方法,有length的属性。

String有有length()这个方法。

22Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。

Overloaded的方法是可以改变返回值的类型。

23Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

24最常见到的runtimeexception。

ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFORMatException,Secur

ityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException

25error和exception有什么区别?

error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

26List,Set,Map是否继承自Collection接口?

List,Set是

Map不是

27abstractclass和interface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义staticfinal成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。

28abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

都不能

29接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concreteclass)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。

30启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

31构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

32是否可以继承String类?

String类是final类故不可以继承。

33当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

33try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

34编程题:用最有效率的方法算出2乘以8等於几?

2<<3

35两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?

不对,有相同的hashcode。

36当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

37swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一个整数表达式。因此传递给switch和case语句的参数应该是int、short、char或者byte。long,string都不能作用于swtich。

38 Hashtable和HashMap

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Mapinterface的一个实现

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在

多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。

高级java面试题 篇5

来源:58.com 2013-09-23 17:15

高级java面试题:

第一,Anonymous Inner Class(匿名内部类)是否可以继承其它类,是否可以实现接口? 匿名的内部类是没有名字的内部类。不能继承其它类,但可作为一个接口,由另一个内部类实现。

第二,谈谈final, finally, finalize的区别。

final 如果一个类被声明为final,意味着它不能再派生出新的子类,因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

finally 用来清除异常。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize()在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。它是在 Object 类中定义的,因此所有的类都继承了它。

第三,Static Nested Class 和 Inner Class的不同。

Nested Class(一般是C++的说法),Inner Class(一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。

注:静态内部类(Inner Class)意味着:创建一个static内部类的对象不能从一个static内部类的一个对象访问一个外部类对象

第四,&和&&的区别。

&是位运算符。&&是布尔逻辑运算符。

第五,HashMap和Hashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类 允许一个 null 键和多个 null 值。

Hashtable 类 不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。第六,Collection 和 Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。Collection是个java.util下的接口,它是各种集合结构的父接口。

第七,什么时候用assert。

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。

示例:

assert(a > 0);// throws an AssertionError if a <= 0

断言可以有两种形式:

assert Expression1;

assert Expression1 : Expression2;

Expression1 应该总是产生一个布尔值。

Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。

断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记: javac-source 1.4 Test.java

要在运行时启用断言,可使用-enableassertions 或者-ea 标记。

要在运行时选择禁用断言,可使用-da 或者-disableassertions 标记。

要系统类中启用断言,可使用-esa 或者-dsa 标记。还可以在包的基础上启用或者禁用断言。

可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其

参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

第八,GC是什么? 为什么要有GC?

GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

第九,String s = new String(“xyz”);创建了几个String Object?

两个对象,一个是String类型的“xyx”,一个是指向“xyx”的引用对象s。

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

都不能

第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

第二十三,启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。

这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。个人猜测,可能是以下结构:

run(){

myThread.start();

······

}

第二十四,构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。第二十五,是否可以继承String类?

String类是final类故不可以继承。

第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

第二十八,编程题: 用最有效率的方法算出2乘以8等於几?

有C背景的程序员特别喜欢问这种问题。

第二十九,两个对象值相同(x.equals(y)== true),但却可有不同的hash code,这句话对不对?

不对,有相同的hash code。

第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java 编程语言只有值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、short、char 或者byte。long,string 都不能作用于swtich。

第三十二,编程题: 写一个Singleton出来。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般Singleton模式通常有几种种形式:

第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

private Singleton(){}

//在自己内部定义自己一个实例,是不是很奇怪?

//注意这是private 只供内部调用

private static Singleton instance = new Singleton();

//这里提供了一个供外部访问本class的静态方法,可以直接访问

public static Singleton getInstance(){

return instance;

}

}

第二种形式:

public class Singleton {

private static Singleton instance = null;

public static synchronized Singleton getInstance(){

//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

//使用时生成实例,提高了效率!

if(instance==null)

Java面试题2 篇6

1.抽象:

抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2.继承:

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

3.封装:

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4.多态性:

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

2、String是最基本的数据类型吗?

基本数据类型包括byte、int、char、long、float、double、boolean和short。java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

3、int 和 Integer 有什么区别

Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。

原始类型封装类

booleanBoolean

charCharacter

byteByte

shortShort

intInteger

longLong

floatFloat

doubleDouble

引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

4、String 和StringBuffer的区别

JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

5、运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

6、说出Servlet的生命周期,并说出Servlet和CGI的区别。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

7、说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。

EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。

SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。

对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。

Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看,Stateful Session Bean 与 Stateless

Session Bean 比较,Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。

9、Collection 和 Collections的区别。

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

10、&和&&的区别。

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

11、HashMap和Hashtable的区别。

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(如果是ArrayList:List lst =

Collections.synchronizedList(new ArrayList());如果是HashMap:Map map = Collections.synchronizedMap(new HashMap());)。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

12、final, finally, finalize的区别。

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

13、sleep()和 wait()有什么区别?

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

15、error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

17、abstract class和interface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

18、heap和stack有什么区别。

栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。

堆是栈的一个组成元素

19、forward 和redirect的区别

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

20、EJB与JAVA BEAN的区别?

Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

21、Static Nested Class 和 Inner Class的不同。

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

22、JSP中动态INCLUDE与静态INCLUDE的区别?

动态INCLUDE用jsp:include动作实现

flush=“true” />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。

静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file=“included.htm” %>

23、什么时候用assert。

assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。

24、GC是什么? 为什么要有GC?

GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

25、short s1 = 1;s1 = s1 + 1;有什么错? short s1 = 1;s1 += 1;有什么错?short s1 = 1;s1 = s1 + 1;(s1+1运算结果是int型,需要强制转换类型)short s1 = 1;s1 += 1;(可以正确编译)

26、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)==12

Math.round(-11.5)==-11

java测试面试 篇7

测试工作日益重要,越来越多的公司使用自动化测试工具。正确选择和使用自动化测试工具,能提高测试效率和质量,降低测试成本。根据测试方法的不同,自动化测试工具分为白盒测试工具、黑盒测试工具和测试管理工具。这些工具主要是Mercury Intera ctive(MI)、Segue、 IBM/Rational Compuware Empirix等公司的产品[1]。

国内外主流的白盒测试工具中都有MC/DC测试覆盖分析,如McCabe、C++ Test、CodeCover等。与白盒测试逻辑覆盖相比,MC/DC覆盖强度高于语句、判定和条件覆盖,覆盖范围大于条件判定组合覆盖,测试性能接近多条件覆盖,但测试用例数却只是线性增加,远小于多条件覆盖的指数级增加,符合精简高效原则。因此,很有必要在白盒测试中对程序实现MC/DC测试覆盖算法,生成最小测试用例集,达到自动测试程序目的。

1核心技术

1.1插桩技术

程序插桩技术最早由J.C.Huang教授[1]提出,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针,通过探针的执行并抛出程序运行的特征数据。 通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的。 插桩就是在代码中插入一段自定义的代码。由于插入的代码会一起编译到可执行文件中,所以可执行文件在运行过程中必然会执行插入的自定义代码,这样就可以记录我们希望得到的信息,例如函数的调用信息、软件测试的覆盖率等。插桩难点在于要学习目标语言的语法,能够对其解析和语义理解;确定插入代码内容和位置。程序插桩技术是在被测程序中插入探针,然后通过探针的执行获得程序的控制流和数据流信息,以此实现测试目的。可以根据探针插入的时间分为目标代码插桩和源代码插桩。

(1)目标码上插桩。在经过编译的目标码上插入记录测试覆盖率的语句,以记录各个程序分支或者语句的测试覆盖率数据。优点在于不需要源程序,只要有目标程序即可;编译时间非常短;比较容易用于处理多种计算机语言编写的软件。缺点是程序执行时的附加开销很大;在没有源码的情况下,只能告知各模块的测试覆盖率是多少,无法显示哪些语句或程序分支没有测试到,从而无法有效地改进测试覆盖率。

(2)源代码插桩。在程序编译之前直接在源代码中插入记录测试覆盖率的语句,以达到记录各程序分支或者组合条件的测试覆盖率数据。优点是程序执行时的附加开销很小;不仅能告知各模块的测试覆盖率是多少,还能显示哪些语句或者程序分支和条件组合是否测试到,能有效提高测试覆盖率。缺点是编译时间较长,处理不同计算机语言需要不同的词法语法分析器。本文采用基于源码的白盒测试技术,如果没有源程序,即使通过目标码插桩方式进行结构测试,也无法显示具体哪个语句或哪个分支被测试到,这就失去了测试价值。

1.2 MC/DC测试覆盖方法准则

MC/DC(修订的条件/判定覆盖,Modified Condition/ Decision Coverage)准则[4]是一种实用的软件结构覆盖率测试准则,广泛应用于软件验证和测试过程中。MC/DC定义为在每个判定条件都曾独立影响判定结果至少一次。其中独立影响意思是在其它条件不变的情况下,改变一个条件。根据DO-178B,MC/DC(Modified Condition/Deci- sion Coverage)有如下要求:判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次,每个入口点和出口点至少要执行一次,并且每个条件都能单独影响判定结果。这里条件是指不含任何逻辑操作符的布尔表达式,由关系操作符构成。判定是指包含逻辑操作符的布尔表达式。如果同一个布尔表达式在一个判定中出现多次,那么该表达式应算作多个条件[5,6]。

1.3 JDBC技术

JDBC技术是Java DataBase Connectivity的缩写,它是SUN公司提供的一种支持基本SQL功能的通用应用程序接口(Application Programming Interface)。它由一组用Java语言编写的类和接口组成。通过这些类和接口,程序开发人员可以在Java语言中方便地建立与数据库的链接,通过执行相应SQL语句,完成对不同数据库的访问。JDBC能完成3件工作:1数据库建立连接;2向数据库建立连接;3处理数据库返回结果。数据库连接处理实现如下:

1.4 XML文档存储数据

可扩展的标识语言XML(Extensible Markup Lan- guage)是一种元标注语言,即定义特定领域有关语义的、 结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识[7]。

2设计思路

2.1技术路线

具体如下:1利用插桩技术,实现对Java文件基于源码的插桩;2利用MC/DC准则,设计实现算法流程,实现对Java文件中所有满足MC/DC条件语句的测试覆盖算法,并生成最小测试用例集;3利用JDBC技术,实现将测试用例集存储到MYSQL中;4利用XML技术实现对Java文件中的条件语句原型的相关信息存储,和存在数据库中的测试用例集形成一个相互对应的关系,以方便后续页面显示。

2.2基于源码的条件插桩技术

插桩点识别过程中的词法、语法分析只需识别有限的程序结构即可。而对程序中所有的词法、语法进行分析, 是因为从中间代码生成汇编代码时,需要以词法、语法分析作为基础,识别出所有的程序结构。插桩点识别程序的输入为预处理后的源代码文件,输出是插桩后的源代码文件,这样只对有限的程序结构进行插桩,减少了膨胀性,提高了效率,如图1所示。

插桩具体过程:1对Java文件编译,在语法分析过程中,找到需要的插桩点,记录下此位置的行号字节偏移量, 并将这些信息存入设计的插桩结构对象JInstru中;2语法分析结束后,将对象JInstru中的信息即属性值,写入字节流DataOutputStream中,并生成.map文件;3从DataOutputStream读出需要插桩的信息,然后对数据进行分析,根据需要插桩的行号、偏移量、插桩点种类,插入相应的代码,完成整个Java文件的插桩,最终生成插桩后文件,如图2所示。

2.3 MC/DC测试覆盖方法

1从Java编译器语法分析过程中分析条件语句里的布尔表达式和它对应的抽象语法树;2将抽象语法树以逆波兰表达式形式送入FirstProcess,形如AB||C&&,对其进行整形和封装,最终成为一个动态的list;3从FirstPro- cess接口输出的list进入SecondProcess接口,对其后序遍历,判断条件的前置条件和默认用例值并封装成对象, 存储到ArrayList里,送入下一个接口;4从SecondPro- cess接口输出的ArrayList进入ThirdProcess接口,通过MC/DC的相关原则输出满足表达式的最小测试用例。 MC/DC测试覆盖生成过程如图3所示。

2.4存储结构

MC/DC的数据存储分为两部分:1从Java编译器词法分析结束后,要将每个条件语句的原型存储起来生成一个XML文件,用这种标记语言来将复杂的条件语句之间的关系和条件语句中各条件之间的关系作清晰的存储和展现;2每个条件语句对应的最小测试用例集存入到数据库中。这样存储既能保证存储的可行性,又能保证以后界面化显示数据时,能方便调用到正确数据信息。数据分析存储过程如图4所示。

2.5条件原型存储

XML的存储结构:

Xml的根节点是ConditionBox,用来存储分析Java文件中的所有条件语句的条件原型,里面包含了很多Ex- pression节点。Expression节点有两个属性:commit是表达式的原型,例如a、a== 2这样的整个表达式。index是指该表达式在Java文件中第几个分析条件表达式,即为索引。而每一个Expression都有很多个Condition子节点,Condition的子节点包括ID和ConditionField分别存储在这个条件的表达式中(存入数据库中的测试用例条件就是用该标记存储的)。这样Xml里面的表达式原型和SQL里面的最小测试用例能一一对应起来。

元素内容中的字符数据不能直接使用:<&>‘“,因为这些符号对XML分析器而言都有特殊意义。为了解决这些问题,可以使用字符引用来表达这些字符,如要表达这个标签:

XML预定义的实体引用如表1所示。

2.6测试用例存储

Java文件中有多少个表达式就有多少个Table,MC/ DC算法的每一个条件表达式形成一张存储生成的测试用例表。

3结语

全球信息化快速推动了中国软件产业的发展,极大地促进了软件测试业的发展。但目前中国在软件测试认识、 软件测试技术、软件测试商业化等方面,与欧美还存在很大差距。具有高安全性要求的航空航天软件尤其需要可靠、有效的软件测试,错误一旦发生,结果往往是灾难性的。MC/DC准则是为了只经过较少的测试就能达到完备测试相同的效果。本研究基于Java编译器设计完成了MC/DC测试覆盖方法,为后期进一步实现覆盖率统计打下了坚实的基础。

参考文献

[1]熊继光.新一代软件工程体系与实践[M].北京:清华大学出版社,2008.

[2][美]APPEL A W.现代编译器的Java实现[M].第2版.北京:电子工业出版社,2004.

[3][美]阿霍.编译原理[M].北京:机械工业出版社,2003.

[4][美]DANIEL J MOSLEY,BRUCE A POSEY.软件测试自动化[M].北京:机械工业出版社,2003.

[5]朱少民.软件测试方法和技术[M].北京:清华大学出版社,2005.

[6]张义德,王国庆,汤幼宁.更改的判定条件覆盖测试技术研究[J].计算机工程与设计,2003(1):123-129.

[7]朱海燕,范辉,谢青松.测试用例排序的研究[J].计算机工程与科学,2008(5):254-259.

上一篇:电力机车新技术论文下一篇:乡镇党委党员发展计划