【软件工程师】精选试题五

2024-05-19

【软件工程师】精选试题五(共7篇)

【软件工程师】精选试题五 篇1

1.结构化分析方法以数据流图、()和加工说明等描述工具,即用直观的图和简洁语言来描述软件系统模型。

A.DFD图B.PAD图C.IPO图D.数据字典

2.结构化分析(SA)是软件开发需求分析阶段所使用的方法,()不是SA所使用的工具。

A.DFD图B.PAD图C.结构化英语D.判定表

3.Jackson设计方法是由英国的M.Jackson所提出的。它是一种面向()的软件设计方法。

A.对象B.数据流C.数据结构D.控制结构

4.软件开发的结构化生命周期法(SA)的基本假定是认为软件需求能做到(A),它与早期的软件开发方式相比较,其最重要的指导原则应该是(B),它常用的描述软件功能需求的工具是(C)。软件开发的原型化方法是一种与结构化方法具有不同策略的方法。其最有效的应用领域应该是(D),在一般软件需求分析中,这两种方法相互的关系是(E)。

可供选择的答案

A.①严格定义②初步定义

③早期冻结④动态改变

B.①自顶向下设计②分阶段开发

③逐步求精④用户需求至上

C.①业务流程图、处理说明②软件流程图、模块说明

③数据流程图、数据字典④系统流程图、程序编码

D.①科学计算②工程设计

③管理信息④过程控制

E.①相互替代②从属关系

③相互排斥④相互补充

5.软件设计中,Jackson方法是一种面向数据结构的设计方法,它将数据结构表示为三种基本结构,分别为()

A.分支结构、选择结构和控制结构

B.顺序结构、选择结构和循环结构

C.顺序结构、分支结构和嵌套结构

D.顺序结构、选择结构和重复结构

6.软件工程方法是在实践中不断发展着的方法,而早期的软件工程方法是指()

A.原型化方法B.结构化方法

C.面向对象方法D.功能分解法

7.软件工程的结构化生命周期方法(SA)是将软件开发的全过程化分为互相独立而又互相依存的阶段,软件的逻辑模型是形成于(A)。作为软件开发结构化方法的工具数据流图描述数据在软件流动和被处理变换的过程,它是以图示的方法来表示(B),它的正确性是保证软件逻辑模型正确性的基础,(C)项内容与它的正确性相关性最弱。数据字典最基本的功能的是(D)。而软件的结构化设计(SD)方法中,一般分为总体设计和详细设计两阶段,其中总体设计主要是建立(E)。可供选择的答案

A.①开发阶段②计划阶段

③分析阶段④设计阶段

B.①软件模型②软件功能

③软件结构④软件加工

C.①数据守恒②均匀分解

③文件操作④图形层次

D.①数据库设计②数据通讯

③数据定义④数据维护

E.①软件结构②软件流程

③软件模型④软件模块

8.结构化生命周期方法具有各种特征,下列各种叙述中,哪一个不是结构化方法的特征?()

A.严格定义需求B.划分开发阶段

C.提供运行模型D.制定规范文档

9.在结构化方法中,软件功能分解应属于软件开发中的(A)阶段,它最后提供的文档是软件的(B)。数据流程图(DFD)是用于描述结构化方法中(C)阶段的工具。数据字典(DD)是定义(D)系统描述工具中的数据的工具。判定树和判定表是用于描述结构化分析方法中(E)环节的工具。

可供选择的答案

A.①详细设计②需求分析

③总体设计④编程调试

B.①功能说明书②加工说明书

③可行性分析报告④结构说明书

C.①可行性分析②需求分析

③详细设计④程序编码

D.①数据流程图②系统流程图

③程序流程图④软件结构图

E.①功能说明②数据加工

③流程描述④结构说明

10.结构化程序流程图中一般包括三种基本结构,下述结构中哪一种不属于其基本结构?()

A.顺序结构B.条件结构

D.选择结构D.嵌套结构

11.软件工程方法中普遍应用的方法之一是结构化生命周期方法(SLC方法),下述哪一个论述不具有SLC方法的主要特征?()

A.严格定义需求B.划分开发阶段

C.规范文档格式D.分析控制流程

12.数据流图是用于表示软件模型的一种图示方法,在下列可采用的绘制方法中,哪些是常采用的?()

a、自顶向下

b、自底向上

c、分层绘制

d、初步求精

A.全是B.a,c和d

C.b,c和dD.a和c

13.结构化分析方法是一种预先严格定义需求的方法,它在实施时强调的是分析对象的()

A.控制流B.数据流C.程序流D.指令流

14.数据流图是用于软件需求分析的工具,下列元素哪些是其基本元素()a.数据流

b.加工

c.数据存储

d.外部实体

A.a,b和cB.a和c

C.全部D.a,c和d

15.软件需求分析一般应确定的是用户对软件的()

A.功能需求B.非功能需求

C.性能需求D.功能需求和非功能需求

16.数据字典是对数据定义信息的集合,它所定义的对象都包含于()

A.数据流图B.程序框图

C.软件结构D.方框图

17.软件开发的原型化方法是一种动态定义软件需求的方法,下述条件哪个(些)条件是实施原型化方法所必备的?()

a、成熟的原型化人员

b、快速的成型工具

c、需求了解的准确性

A.a和bB.b和c

C.全部D.c

18.软件需求分析和设计过程中,其分析与设计对象可归结成两个主要的对象,即数据和程序,按一般实施原则,对二者的处理应该是()

A.先数据后程序B.先程序后数据

C.与顺序无关D.可同时进行

19.加工是对数据流图中不能再分解的基本加工的精确说明,下述哪个是加工的最核心成分?()

A.加工顺序B.加工逻辑

C.执行频率D.激发条件

20.软件工程的结构化生命周期方法,通常将软件生命周期划分为计划、开发和运行三个时期,下述哪些工作应属于软件开发期的内容?()

a.需求分析

b.可行性研究

c.总体设计

A.只有aB.a和b

C.全部D.a和c

21.软件开发的结构化方法中,常应用数据字典技术,其中数据加工是其组成内容之一,下述哪个(些)方法是常采用编写加工说明的方法?()

a.结构化语言

b.判定树

c.判定表

A.只有aB.只有b

C.b和cD.全部

22.系统/软件开发的原型化方法是一种有效的开发方法,下述基本环节中哪一个是原型形成以后才应实施的内容?()

A.识别基本需求B.开发工作模型

C.修正和改进模型D.进行细部说明

23.对软件的过分分解,必然导致()

A.模块的独立性变差B.接口的复杂程度增加

C.软件开发的总工作量增加D.A.、B.、C.都对

软件工程师笔试题 篇2

class A

{

public:

A { cout<<“Construct A”<

~A { cout<<“Destruct A”<

void speak { cout<<“A is speaking!”<

};

class B:public virtual A

{

public:

B { cout<<“Construct B”<

~B { cout<<“Destruct B”<

};

class C:public virtual A

{

public:

C { cout<<“Constuct C”<

~C { cout<<“Destruct C”<

};

class D:public B, public C

{

public:

D{ cout<<“Constsruct D”<

~D{ cout<<“Destruct D”<

};

int main

{

D *p = new D;

p->speak;

delete p;

}

输出:

Construct A

Construct B

Constuct C

Constsruct D

A is speaking!

Destruct D

Destruct C

Destruct B

软件工程师岗位笔试试题二 篇3

姓名:联系电话:电子邮箱

请认真思考,并回答如下问题:

1、是否曾写过有关“我的理想”方面作文?

如有,请在括号内选择在哪个阶段写的,并写出那时候的理想是什么?(□无、□小学、□初中、□高中、□大学、□社会)

“我的理想”,现在是什么?(并请列1-3项支持立此理想的理由、理据;如有兴志,还可列出如何实现的路线图)

2、请问我近两年内对自己的人生或职业有何规划或目标?

3、期望月薪?(注意:是已含单位依法应支社保各险、食宿交通等补贴等的总额)

《软件工程》试题三 篇4

(一)选择题

1、软件生命周期的最后一个阶段是(B)。

A 书写软件文档 B 软件维护

C 稳定性测试 D 书写详细用户说明

2、在软件维护工作中进行的最少的部分是(D)。A 校正性维护 B 适应性维护

C 完善性维护 D 预防性维护

3、软件维护大体上可以分为四种类型,下列(B)不属于其中。A 校正性 B 可靠性 C 适应性 D 完善性

4、软件维护指的是(A)。

A 对软件的改进、适应和完善 B 维护正常进行 C 配置新软件 D 软件开发的一个阶段

5、从下面选出关于软件可维护性的正确论述:(1、3、6、7、9)

(1)在进行需求分析时,就应该同时考虑软件可维护性问题

(2)在完成测试作业之后,为了缩短源程序长度,应删去源程序中的注解

(3)尽可能在软件生产过程中保证各阶段文件的正确性

(4)编码时应尽可能使用全局量

(5)选择时间效率和空间效率尽可能高的算法

(6)尽可能利用硬件的特点

(7)重视程序的结构设计,使程序具有较好的层次结构

(8)在进行概要设计时应加强模块间的联系

(9)提高程序的易读性,尽可能使用高级语言编写程序

(10)为了加快维护作业的进程,应尽可能增加维护人员数

(二)填空题

1、维护阶段是软件生命周期中,持续时间(最长的)的阶段,花费精力和费用(最多的)阶段。

2、软件维护的副作用有三种:(编码),(数据)和(文档)。

3、软件维护的工作流程为:(用户提出维护申请),(维护组织审查申请报告并安排维护工作),(进行维护并作详细的维护记录)和(复审)。

4、在软件交付使用后,由于软件开发过程产生的(错误)没有完全彻底在(测试)阶段发现,必然有一部分隐含错误带到(维护)阶段。

5、软件的可维护性是指软件功能被(理解),(改正),(适应和增强)的难易程度。

(三)简答题

1、什么叫软件维护?它有哪几种类型?

答:软件维护就是在软件产品交付之后对其进行修改,以排除故障或该进性能和其他属性或使产品适应改变了的环境。(定义1)软件维护就是在软件产品交付之后,为了改正错误或满足新的需求而修改软件的过程。(定义2)

分为四种类型:改正性维护,适应性,完善性,预防性。

2、非结构化维护和结构化维护的主要区别是什么?

软件工程师实习报告(精选) 篇5

时间过的真快,一眨眼时间我在上海汇思软件公司为期三个多月的实习生活就要结束了,而我也要重新回到校园继续学习与参加2012各公司的校园招聘,我的实习生涯要暂时告一段落。

回顾找实习的过程,只能用一个字来形容:“难”。这种困难不同于学校所遇到的,我个人觉得比学校遇到的难 题更上了一个层次。首先,找到一份工作都很难。想想也是,谁愿意找一个没有任何经验,而且还是想做短期的学生呀。我找过贴有“招聘启示”的店面。谁知道,当我说出我的原意后。本来笑面相迎的老板来个180度大转弯,冷冷回应一句“我们这里已经找好了人”。鬼才信他的话,那启示明明是新的,而且店里面就他一 个人,哪来的新人?陆续还找过别的工作,我甚至找过中介,但都失败了。最后还是通过自己不懈的努力,经历千辛万苦找到了一份比较适合的工作。

然而三个多月在公司的工作生活,我感到很庆幸和满意。庆幸的是我比其它一部分同学多了三个月在软件公司工作的经历,这使我毕业后能够更好更快地适应软 件公司的工作生活和节奏。满意的是公司为我提供了良好的工作学习环境,我刚到公司不久公司就为我提供了电脑和相应的座位,当我在android、java过程中 遇到不懂问题的时候,主管,同事都会毫不吝啬的为我讲解,让我感受到公司团结向上的氛围,软件公司最重要的也就是这种团队合作的精神。看来这也是公司先进的管理理念吧。

这三个月的工作、生活是有味道的,所以现在回想起来,特别怀念,要不没有这些味道,我想我的实习就这样的过去了。那种种的味道还深深的记住我的脑海里,叫人无法忘记。这些都是我的人生中很难得的一次经验。人生经验都是在人我们的人生中不断的积累的,在实习中我所 收获到的不止是我的知识,更重要的是我的精神也有了进一步的提高。

在这三个月中,我对软件开发工程师有了新的理解,在以前的观念中软件工程师主要工作就是编写代码。但是通过三个月的工作,我发现软件工程师不仅要会编程,还要把开发的系统大概的思路,构架都构思出来。所以要做一名软件工程师需要的不仅是扎实的编程功底,还要有比较好的逻辑思维和大胆创新的精神,记住要做一个软件工程师需要的是冰冻三尺非一日之寒的努力、踏实、上进、求新、求变、求实的态度和决心!这无疑给我迷惘的未来给了一盏明亮的灯塔。

在这三个多月的时间中,我学习了新的开发extjs框架,ExtJS是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架。以前网站的前端都是用js、jsp、HTML实现一个小功能,往往需要很多的代码,那叫一个累啊!而使用extjs,很复杂的功能只要几行代码就能实现,特别是表格处理方面。无论是界面之美,还是功能之强,ext的表格控件都高居榜首。单选行,多选行,高亮显示选中的行,推拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现。自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。再加上可编辑grid,添加新行,删除一或多行,提示多行数据,推拽改变grid大小,grid之间拖拽一或多行,甚至可以在tree和grid之间进行拖拽,啊,这些功能实在太神奇了。更令人惊叹的是,这些功能竟然都在ext表格控件里实现了。Extjs的强大是在令人无话可说。

在学时extjs中我有七点经验小结,一、理解Html DOM、Ext Element及Component,Ext最杰出之处,是开发了一系列非常简单易用的控件及组件,我们只需要使用这些组件就能实现各种丰富多彩的UI的开发。

二、熟悉ext组件体系,xt2.0对整个框架进行了重构,最为杰出的是推出了一个以Component类为基础的组件体系,在Component类基础上,使用面向对象的方法,设计了一系列的组件及控件。因此,要能游刃有余地使用Ext,熟悉Ext

组件体系是最基本的。

三、掌握核心控件,在使用Ext的时候,一定要掌握一些核心控件,特别是处于基类的控件。在开发应用中的很多控件,他们都是继承于面板Panel,所以我们要重点掌握面板这个核心控件的特性。

四、学习及研究示例,学习别人的示例对于我们开发帮助会非常大,示例包括基本组件的应用、综合应用等多个方面。

五、多运用,编程是一门实践性的科学,仅仅靠看书、看别人写的代码是远远不够的,因此,必须多做实践才行,只有通过不断的练习,大量的使用,才能对Ext的组件特性、事件、事件处理机制以及与服务器端交互接口等深入的掌握,只有多做运用,深入了解ext的组件的工作原理及机制,才能编写出高级的Ext的应用。

六、熟读Ext项目的源代码,如果要想深入应用Ext,那么阅读Ext项目的源代码这是必不可少的环节,Ext的代码质量非常高,通过阅读他的代码我们可以更加深刻的了解 javascript面向对象编程,Ext代码中包含了很多高级的js技巧以及设计模式。

七、理解,熟悉,掌握Json,在项目中,Ext本身的华丽外表就很吸引眼球了,但这仅仅是其外在的美,还有最核心的内在美,即:Json。Json(JavaScript Object Notation)是一种数据交互格式,一个不能实现数据交互功能的项目是没有任何意义的,大多的Ajax框架的数据交互都基于Json,如:jQuery、ExtJs等。

三个月的开发工作,我对android开发有了新的认识。android的大火主要是其本身的5大优势导致的。

一、开放性,在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,随大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。

二、挣脱运营商的束缚,在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。从08 年iPhone 上市,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中 的笑谈,当你可以通过手机IM软件方便地进行即时聊天时,再回想不久前天价的彩信和图铃下载业务,是不是像噩梦一样?互联网巨头Google推动的Android终端天生就有网络特色,将让用户离互联网更近。

三、丰富的硬件选择,这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不 会影响到数据同步、甚至软件的兼容,好比你从诺基亚 Symbian风格手机 一下改用苹果 iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移,是不是非常方便呢?

四、不受任何限制的开发商,Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如可控制正是留给Android难题之一。

五、无缝结合的Google应用,如今叱诧互联网的Google已经走过10历史,从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。

再说Android的5大不足:

一、安全和隐私,由于手机与互联网的紧密联系,个人隐私很难得到保守。除了上网过程中经意或不经意留下的个人足迹,Google这个巨人也时时站在你的身后,洞穿一切,因此,互联网的深入将会带来新一轮的隐私危机。

二、首先开卖Android手机的不是最大运营商,众所周知,T-Mobile在23日,于美国纽约发布 了Android首款手机G1。但是在北美市场,最大的两家运营商乃AT&T和Verizon,而目前所知取得Android手机销售权的仅有 T-Mobile和Sprint,其中T-Mobile的3G网络相对于其他三家也要逊色不少,因此,用户可以买账购买G1,能否体验到最佳的3G网络服 务则要另当别论了!

三、运营商仍然能够影响到Android手机在国内市场,不少用户对购得移动定制机不满,感觉所购的手机被人涂画了广告一般。这样的情况在国外市场同样出现。Android手机的另一发售运营商Sprint就将在其机型中内置其手机商店程序。

四、同类机型用户减少在 不少手机论坛 都会有针对某一型号的子论坛,对一款手机的使用心得交流,并分享软件资源。而对于Android平台手机,由于厂商丰富,产品类型多样,这样使用同一款机 型的用户越来越少,缺少统一机型的程序强化。举个稍显不当的例子,现在山寨机泛滥,品种各异,就很少有专门针对某个型号山寨机的讨论和群组,除了哪些功能 异常抢眼、颇受追捧的机型以外。

五、过分依赖开发商缺少标准配置在 使用PC端的Windows Xp系统的时候,都会内置微软Windows Media Player这样一个浏览器程序,用户可以选择更多样的播放器,如

Realplay或暴风影音等。但入手开始使用默认的程序同样可以应付多样的需要。在 Android平台中,由于其开放性,软件更多依赖第三方厂商,比如Android系统的SDK中就没有内置音乐 播放器,全部依赖第三方开发,缺少了产品的统一性

我是属于公司研发部的一员,我对自己技术上的特点作一个概括。熟悉Android架构以及Android SDK 开发,熟悉java、C++,对常用的数据结构、算法和设计模式有一定的了解熟悉JSP、JDBC、XML和Javascript,熟悉struts2+Hibernate+Spring框架开发。

Java软件开发工程师笔试题 篇6

一、选择题(25 x 2’ = 50’)

1、一个Java程序运行从上到下的环境次序是()

A. 操作系统、Java程序、JRE/JVM、硬件 B. JRE/JVM、Java程序、硬件、操作系统 C. Java程序、JRE/JVM、操作系统、硬件 D. Java程序、操作系统、JRE/JVM、硬件

2、下面代码中的第2行可以插入一行代码()保证程序编译通过。

1、public interface A{ 2、3、} A.void method();B.public void method();C.static void method();D.private void method();E.protected void method();

3、关于异常下列描述中,错误的是()

A.异常机制可以用于流程控制

B.finally代码段在发生异常时不一定必须执行

C.在catch代码段中可以使用return语句来返回到异常抛出点

D.可以把catch到的异常对象再次抛出,使上层try—catch结构继续处理该异常事件

4、关于被私有访问控制符private修饰的成员变量,以下说法正确的是()

A. 可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类 B. 可以被两种类访问和引用:该类本身、该类的所有子类 C. 只能被该类自身所访问和修改 D. 只能被同一个包中的类访问

5、某类Example的main()方法参数为args,当命令行中输入Java Example cat时,args[0]的值为()。

A. cat

B. Java

C. example

D. null

6、下面关于Thread类提供的现成控制方法的说法中,错误的是()

A. 在线程A中执行现成B的join方法,则线程A等待直到线程B执行完成。B. 线程A通过调用iterrupt方法来中断其阻塞状态

C. 若线程A调用方法isAlive返回值为true,则说明A正在执行中 D. currentThread方法返回当前线程的引用

7、类Test1定义如下:

1.public class Test1{ 2.

public float aMethod(float a,float b){ }

1/10

3.4.}

将以下哪种方法插入行3是不合法的。()

A. public float aMethod(float a,float b,float c){ } B. public float aMethod(float c,float d){ } C. public int aMethod(int a,int b){ } D. private float aMethod(int a,int b,int c){ }

8、下面程序的输出结果是()private static void foo(){ try { System.out.println(“try”);foo();} catch(Throwable e){ System.out.println(“catch”);foo();} finally { System.out.println(“finally”);foo();} }

public static void main(String[] args){ foo();} A.执行一段时间后报栈溢出。B.会一直输出“try”。

C.会一直输出“try”和“finally”。D.会一直输出“try”、“catch”和“finally”

9、下面的哪些程序片断可能导致错误?()A.String s = “Gone with the wind”;String t = “ good ”;String k = s + t;

B.String s = “Gone with the wind”;String t;t = s[3] + “one”;

C.String s = “Gone with the wind”;String standard = s.toUpperCase();

D.String s = “home directory”;String t = s-“directory”;

10、已知如下代码:

2/10

1: class Example{ 2: String str;3: public Example(){ 4: 5: } 6: public Example(String s){ 7: 8: } 9:} 10: class Demo extends Example{ 11: } 12: public class Test{ 13: public void f(){ 14: 15: 16: } } 哪句语句会导致错误?()A、line 3 B、line 6 C、line 10 D、line 14 E、line 15

11、下面的代码中第4行创建的对象在什么时候符合垃圾回收的条件()

1、class Bar { }

2、class Test {

3、Bar doBar(){

4、Bar b = new Bar();

5、return b;

6、}

7、public static void main(String args[]){

8、Test t = new Test();

9、Bar newBar = t.doBar();10、11、12、newBar = new Bar();} } Example ex = new Example(“Good”);Demo d = new Demo(“Good”);str=s;str= “example”;A.程序运行第9行之后。B.程序运行第10行之后。C.doBar方法运行结束之后。D.main方法运行结束之后。

12、下列关于for循环和while循环的说法中哪个是正确的?()

A. while循环能实现的操作,for循环也都能实现

B. while循环判断条件一般是程序结果,for循环判断条件一般是非程序结果

3/10

C. 两种循环任何时候都可替换

D. 两种循环结构中都必须有循环体,循环体不能为空

13、下述说法中,错误的是()A.Java中,方法的重载是指多个方法可以共享同一个名字 B.Java中,用abstract修饰的类称为抽象类,它不能实例化 C.Java中,接口不包含成员变量和方法实现 D.Java中,构造方法可以有返回值

14、下面哪些是正确的()

11.class ClassA {}

22.ClassB p1 = new ClassB();23.ClassC p2 = new ClassC();24.ClassA p3 = new ClassB();25.ClassA p4 = new ClassC();12.class ClassB extends ClassA {} 13.class ClassC extends ClassA {} and:

21.ClassA p0 = new ClassA();A.p0 = p1;

15、以下代码片段,正确的结果是:()

11.classA {

17.throw new IOException();

18.} }

19.public static void main(String[] args){

20.try { new B().process();} 21.catch(IOException e){

22.System.out.println(”Exception”);} } 12.public void process(){ System.out.print(”A,”);} } 13.class B extends A { 15.super.process();A.Exception B.A,B,Exception C.Compilation fails because of an error in line 20.D.Compilation fails because of an error in line 14.E.A NullPointerException is thrown at runtime.16、用直接插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是()。

A. 94,32,40,90,80,46,21,69 B. 32,40,21,46,69,94,90,80 C. 21,32,46,40,80,69,90,94 D. 90,69,80,46,21,32,94,40

17、设栈最大长度为3,入栈顺序为1,2,3,4,5,6,则不可能的出栈序列是()

A.1,2,3,4,5,6 B.2,1,3,4,5,6 C.3,4,2,1,5,6 D.4,3,2,1,5,6

18、设有98个已排序列元素,采用二分法查找时,最大比较次数是()

A.49 B.15 C.20 D.7

4/10

14.public void process()throws IOException { 16.System.out.print(”B,”);B.p1 =p2;

C.p2 = p4;

F.p2 =(ClassC)p4;D.p2 =(ClassC)p1;E.p1 =(ClassB)p3;

19、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()

A.9 B.11 C.15 D.不确定

20、以下与数据的存储结构无关的术语是()。

A.循环队列 B.链表 C.哈希表 D.栈

21、设数组A[10„100,20„100]以行优先的方式顺序存储,每个元素占4个字节,且已知A[10,20]的地址为 1000,则A[50,90]的地址是()

A.13240 B.14250 C.24220 D.14240

22、链表不具有的特点是()

A.插入、删除不需要移动元素 B.可随机访问任一元素 C.不必事先估计存储空间 D.所需空间与线性长度成正比

23、下面关于线性表的叙述中,错误的是哪一个?()

A.线性表采用顺序存储,必须占用一片连续的存储单元。B.线性表采用顺序存储,便于进行插入和删除操作。C.线性表采用链接存储,不必占用一片连续的存储单元。D.线性表采用链接存储,便于插入和删除操作。

24、若一个栈的输入序列为1,2,3,„,n,输出序列的第一个元素是i,则第j个输出元素是()。A.i-j-1 B.i-j C.j-i+1 D.不确定的

25、下列说法不正确的是()。

A.图的遍历是从给定的源点出发每一个顶点仅被访问一次 B.图的深度遍历不适用于有向图

C.遍历的基本算法有两种:深度遍历和广度遍历 D.图的深度遍历是一个递归过程

二、程序改错(5 * 2’ = 10’)1.----public class Unbelievable { static Integer i;public static void main(String[] args){

} } if(i == 42)System.out.println(“Unbelievable”);2.——————————————————————————————————

class Animal {

public String noise(){

5/10

龙通科技有限公司笔试题

} class Dog extends Animal {

} class Cat extends Animal {

} public class Test {

} public static void main(String[] args){

} Animal animal = new Dog();Cat cat =(Cat)animal;cat.noise();public String noise(){ } return “meow”;public String noise(){ } return “bark”;} return “peep”;3.——————————————————————————————————————

abstract class Something { } private abstract String doSomething();4.——————————————————————————————————————

public class Something {

} class Other { } public int i;public static void main(String[] args){

} public void addOne(final Other o){ } o.i++;Other o = new Other();new Something().addOne(o);5.——————————————————————————————————————

class Something {

final int i;public void doSomething(){ System.out.println(“i = ” + i);6

龙通科技有限公司笔试题

} }

三、程序阅读题(每空2’,共 40’)

1、阅读以下java代码,写出运行结果

class StaticTest {

}

2、编写将一维数组a[]中互不相同的数按从小到大顺序重新存于一维数组a[]的程序。

class A{ public static void main(String[] args){

} for(j=0;j

} System.out.prinln(a[j]);int a[]={15,7,15,6,4,3,4,6,7};int i,j,k,low,high,mid,t;for(i=k=1;i=a[i])____________;else low=mid+1;} if(____________|| a[low]!=a[i]){ t=a[i];for(j=k-1;__________;j--)a[j+1]=a[j];___________;k++;}

static int x=1;int y;StaticTest(){ } public static void main(String args[ ]){ StaticTest st=new StaticTest();System.out.println(“x=” + x);System.out.println(“st.y=” + st.y);st=new StaticTest();System.out.println(“st.y=” + st.y);

} static { x++;} y++;

龙通科技有限公司笔试题

}

3、请用JAVA编写如下程序:此程序处理一个由0和非0数字成员组成的数组(长度自定),例如0 0 1 2 0 1 0 0 0 1 0 0 0 0 0 2 0 7 8 9 0 0 1 2 3 4,把数组中所有连续两个以上的0去掉,将结果存入一个新数组。如上例处理后结果为,1 2 0 1 1 2 0 7 8 9 1 2 3 4。public static void main(String[] args){

int[] srcArray = {0,0,1,2,0,1,0,0,0,1,0,0,0,0,0,2,0,7,8,9,0,0,1,2,3,4};int[] destArray = new int[50];int i=0,j=0,count=0;for(i=0;i

} } for(i=0;i

public static void main(String[] args){

} public static int Keeper(int peo, int n){ int k = 0;int peo;System.out.println(“请输入人数:”);Scanner inp = new Scanner(System.in);peo = inp.nextInt();int k = Keeper(peo, 3);System.out.println(“最后留下的是 ” + k + “ 号!”);

4、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,再从他的下一 8

龙通科技有限公司笔试题

int[] array = new int[peo];for(int i = 1;i < peo;i++){

} for(k = 0;k < peo;k++){

} return k + 1;if(array[k] == 0){ } 4 ; ○int j = 1;while(j <= n){

} if(○1){ } if(j == n){ } j++;3 ; ○ ; ○j--;

}

}

5、在一个n×n的棋盘上,放置n个不能互相捕捉的国际象棋“皇后”的所有布局。以下是n皇后的算法,请完成填空部分:

public class Queen {

Queen(int d){

} // 放置皇后的方法

public void place(int row){

int i = 0;if(row == n){ 1 ; ○n = d;queenPos = new int[d];private int n;private int[] queenPos;private double num = 0;// 记录共有多少种摆法

} else { 9

龙通科技有限公司笔试题

} // 判断布局是否合法

private boolean legality(int list){

} // 测试方法

public static void main(String[] args){

}} System.out.println(“输入个数n:”);Scanner in = new Scanner(System.in);int n = in.nextInt();try {

} Queen q = new Queen(n);q.place(0);System.out.println(n + “*” + n + “时,” + “共有” + q.num + “种可能摆法。”);System.out.println(“OK!”);e.printStackTrace();if(list == 0)

} return true;return true;if(queenPos[i] == queenPos[list])3 ; ○for(int i = 0;i < list;i++){

} for(i = 0;i < n;i++){

java软件工程师面试试题集2 篇7

面试题集共分为以下十个部分:

一、Core Java: 1 — 95 题1 — 24 页 基础及语法: 1 — 61 题1 — 13 页 异常: 62 — 69 题13 — 15 页 集合: 70 — 80 题15 — 18 页 线程: 81 — 90 题18 — 21 页

IO & Socket: 91 — 95 题21 — 24 页

二、OOAD & UML: 96 — 101 题24 — 25 页

三、XML: 102 — 105 题26 — 29 页

四、SQL: 106 — 109 题29 — 31 页

五、JDBC & Hibernate: 110 — 121 题31 — 35 页

六、Web: 122 — 161 题35 — 44 页

七、EJB & Spring: 162 — 179 题44 — 47 页

八、数据结构& 算法& 计算机基础: 180 — 187 题47 — 51 页

九、C++: 188 — 201 题51 — 55 页

十、Weblogic 及其它(附加部分)1 —— 13 题55 — 57 页

一、CoreJava 部分:(共95 题:基础91 道,中等难度4 道)基础及语法部分:(共61 题:基础60 道、中等难度1 道)

1、面向对象的特征有哪些方面? 【基础】 答:面向对象的特征主要有以下几个方面:

1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地 注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一 部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了 一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称 为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原 始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

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

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

2、作用域public,private,protected,以及不写时的区别?【基础】 答:区别如下:

作用域当前类同包子孙类其他 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × ×

不写时默认为default。

3、String 是最基本的数据类型吗? 【基础】

答:不是。

4、float 型float f=3.4是否正确? 【基础】

答:不正确;精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4。

5、语句float f=1.3;编译能否通过?【基础】

答:不能;应该用强制类型转换,如下所示:float f=(float)1.3。

6、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;可以正确编译,自动类型提升。

7、Java 有没有goto? 【基础】

答:goto 是java 中的保留字,现在没有在java 中使用。

8、int 和Integer 有什么区别? 【基础】

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

原始类型: boolean,char,byte,short,int,long,float,double 封装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和 原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种 类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的 缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与 它们的类型有关。

9、&和&&的区别?【基础】

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

10、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别?【基础】

答:区别主要有两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作 布尔型,而且可以操作数值型b.逻辑操作不会产生短路。

11、heap 和stack 有什么区别?【基础】

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

12、Math.round(11.5)等于多少? Math.round(-11.5)等于多少? 【基础】 答:Math.round(11.5)==12 Math.round(-11.5)==-11 round 方法返回与参数 最接近的长整数,参数加1/2 后求其floor。

13、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String 上? 【基础】

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

14、编程题: 用最有效率的方法算出2 乘以8 等於几? 【基础】 答: 2 << 3。

15、有没有length()这个方法? String 有没有length()这个方法?【基础】

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

16、在JAVA 中,如何跳出当前的多重嵌套循环?【基础】

答:在最外层循环前加label 标识,然后用break:label 方法即可跳出多重循环。

17、构造器Constructor 是否可被override? 【基础】

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

18、两个对象值相同(x.equals(y)== true),但却可有不同的hash code,这 句话对不对? 【基础】

答:不对,有相同的hash code。

19、是否可以继承String 类? 【基础】 答:String 类是final 类,故不可以继承。20、以下二条语句返回值为true 的有: A:“beijing”==“beijing”;

B:“beijing”.equalsIgnoreCase(new String(“beijing”));【基础】 答:A 和B。

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

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

22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1 等,如何输出一个某种编码的字符串?【基础】 答:public String translate(String str){ String tempStr = “";try{ tempStr = new String(str.getBytes(”ISO-8859-1“), ”GBK“);tempStr = tempStr.trim();}catch(Exception e){ System.err.println(e.getMessage());} return tempStr;}

23、String 和StringBuffer 的区别? 【基础】

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

24、String, StringBuffer StringBuilder 的区别。【基础】 答:String 的长度是不可变的;

StringBuffer 的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使

用StringBuffer 的toString()方法;线程安全;

StringBuilder 是从JDK 5 开始,为StringBuffer 该类补充了一个单个线

程使用的等价类;通常应该优先使用StringBuilder 类,因为它支持所有相同 的操作,但由于它不执行同步,所以速度更快。

25、Overload 和Override 的区别。Overloaded 的方法是否可以改变返回值的类 型? 【基础】

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

子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定 义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方 法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。

26、定义类A 和类B 如下:【基础】 class A { int a=1;double d=2.0;void show(){ System.out.println(”Class A: a=“+a +”td=“+d);} } class B extends A{ float a=3.0f;String d=”Java program.“;void show(){ super.show();System.out.println(”Class B: a=“+a +”td=“+d);} }(1)若在应用程序的main 方法中有以下语句: A a=new A();a.show();则输出的结果如何?

(2)若在应用程序的main 方法中定义类B 的对象b: A b=new B();b.show();则输出的结果如何? 答:输出结果为:

1)Class A: a=1 d=2.0 ; 2)Class A: a=1 d=2.0 Class B: a=3.0 d=Java program。

27、描述一下JVM 加载class 文件的原理机制? 【基础】

答:JVM 中类的装载是由ClassLoader 和它的子类来实现的,Java ClassLoader

是一个重要的Java 运行时系统组件。它负责在运行时查找和装入类文件的类。

28、char 型变量中能不能存贮一个中文汉字?为什么? 【基础】

答:能够定义成为一个中文的,因为java 中以unicode 编码,一个char 占16 个字节,所以放一个中文是没问题的。

29、abstract class 和interface 有什么区别? 【基础】

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用

于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现 该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是 一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态 方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也 是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中 实现这些方法。接口(interface)是抽象类的变体。新型多继承性可通过实现 这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是public static final 的。一个类可以实现多个接口,当类实现特殊接口时,它定义(即 将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何 对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

30、Static Nested Class 和Inner Class 的不同?【基础】

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

31、java 中会存在内存泄漏吗,请简单描述。【基础】

答:会;存在无用但可达的对象,这些对象不能被GC 回收,导致耗费内存资源。

32、abstract 的method 是否可同时是static,是否可同时是native,是否可同 时是synchronized? 【基础】 答:都不能。

33、静态变量和实例变量的区别?【基础】

答:静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直 接访问;而实例变量必须依存于某一实例,只能通过对象才能访问到它。

34、是否可以从一个static 方法内部发出对非static 方法的调用?【基础】 答:不可以,如果其中包含对象的method(),不能保证对象初始化。

35、写clone()方法时,通常都有一行代码,是什么?【基础】

答:Clone 有缺省行为:super.clone(),他负责产生正确大小的空间,并逐位 复制。

36、GC 是什么? 为什么要有GC? 【基础】

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

37、垃圾回收的优点和原理。并考虑2 种回收机制。【基础】

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

38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办 法主动通知虚拟机进行垃圾回收?【基础】

答:对于GC 来说,当程序员创建对象时,GC 就开始监控这个对象的地址、大小 以及使用情况。通常,GC 采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是”可达的“,哪些对象是”不可达的“。当GC 确定一

些对象为”不可达“时,GC 就有责任回收这些内存空间。可以。程序员可以手动 执行System.gc(),通知GC 运行,但是Java 语言规范并不保证GC 一定会执行。

39、String s=new String(“xyz”);创建了几个String Object? 【基础】

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

40、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可 继承实体类(concrete class)? 【基础】

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

41、Java 的接口和C++的虚类的相同和不同处。【基础】

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

42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 【基础】

答:可以;必须只有一个类名与文件名相同。

43、说出一些常用的类,包,接口,请各举5 个。【基础】 答:常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer;

常用的包:java.lang java.awt java.io java.util java.sql;

常用的接口:Remote List Map Document NodeList

44、Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类? 是否可以implements(实现)interface(接口)? 【基础】

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

45、内部类可以引用他包含类的成员吗?有没有什么限制?【基础】 答:一个内部类对象可以访问创建它的外部类对象的内容。

46、java 中实现多态的机制是什么?【基础】

答:方法的覆盖Overriding 和重载Overloading 是java 多态性的不同表现;覆 盖Overriding 是父类与子类之间多态性的一种表现,重载Overloading 是一个 类中多态性的一种表现。

47、在java 中一个类被声明为final 类型,表示了什么意思?【基础】 答:表示该类不能被继承,是顶级类。

48、下面哪些类可以被继承? 【基础】 1)java.lang.Thread(T)2)java.lang.Number(T)3)java.lang.Double(F)4)java.lang.Math(F)5)java.lang.Void(F)6)java.lang.Class(F)7)java.lang.ClassLoader(T)答:1、2、7 可以被继承。

49、指出下面程序的运行结果: 【基础】 class A{ static{ System.out.print(”1“);} public A(){ System.out.print(”2“);} } class B extends A{ static{ System.out.print(”a“);} public B(){ System.out.print(”b“);} } public class Hello{ public static void main(String[] ars){ A ab = new B();//执行到此处,结果: 1a2b ab = new B();//执行到此处,结果: 1a2b2b } } 答:输出结果为1a2b2b;类的static 代码段,可以看作是类首次加载(虚拟机加 载)执行的代码,而对于类加载,首先要执行其基类的构造,再执行其本身的构造。50、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?【基础】 父类:

package test;public class FatherClass { public FatherClass(){ System.out.println(”FatherClass Create“);}

} 子类: package test;

import test.FatherClass;public class ChildClass extends FatherClass { public ChildClass(){ System.out.println(”ChildClass Create“);} public static void main(String[] args){ FatherClass fc = new FatherClass();ChildClass cc = new ChildClass();} } 答:输出结果为: FatherClass Create FatherClass Create ChildClass Create

51、内部类的实现方式? 【基础】 答:示例代码如下: package test;public class OuterClass { private class InterClass { public InterClass(){ System.out.println(”InterClass Create“);} } public OuterClass(){ InterClass ic = new InterClass();System.out.println(”OuterClass Create“);} public static void main(String[] args){ OuterClass oc = new OuterClass();} } 输出结果为: InterClass Create OuterClass Create

52、关于内部类: 【基础】 public class OuterClass { private double d1 = 1.0;//insert code here } You need to insert an inner class declaration at line 3,Which two

inner class declarations are valid?(Choose two.)A.class InnerOne{

public static double methoda(){return d1;} } B.public class InnerOne{ static double methoda(){return d1;} } C.private class InnerOne{ double methoda(){return d1;} } D.static class InnerOne{ protected double methoda(){return d1;} } E.abstract class InnerOne{ public abstract double methoda();} 答:答案为C、E;说明如下:

1)静态内部类可以有静态成员,而非静态内部类则不能有静态成员;故A、B 错;

2)静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类 的非静态变量;故D 错;

3)非静态内部类的非静态成员可以访问外部类的非静态变量;故C 正确。

53、数据类型之间的转换: 1)如何将数值型字符转换为数字?

2)如何将数字转换为字符?

3)如何取小数点前两位并四舍五入? 【基础】

答:1)调用数值类型相应包装类中的方法parse***(String)或valueOf(String)即可返回相应基本类型或包装类型数值;

2)将数字与空字符串相加即可获得其所对应的字符串;另外对于基本类型

数字还可调用String 类中的valueOf(„)方法返回相应字符串,而对于包装类型 数字则可调用其toString()方法获得相应字符串;

3)可用该数字构造一java.math.BigDecimal 对象,再利用其round()方法 进行四舍五入到保留小数点后两位,再将其转换为字符串截取最后两位。

54、字符串操作:如何实现字符串的反转及替换?【基础】

答:可用字符串构造一StringBuffer 对象,然后调用StringBuffer 中的reverse 方法即可实现字符串的反转,调用replace 方法即可实现字符串的替换。

55、编码转换:怎样将GB2312 编码的字符串转换为ISO-8859-1 编码的字符串? 【基础】

答:示例代码如下: String s1 = ”你好“;String s2 = new String(s1.getBytes(”GB2312“), ”ISO-8859-1“);

56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分 隔。【基础】

答:函数代码如下:

public String[] split(String str, int chars){ int n =(str.length()+ charssubBytes == 1){ return str.substring(0, i);} } } return str;}

58、日期和时间:

1)如何取得年月日、小时分秒?

2)如何取得从1970 年到现在的毫秒数? 3)如何取得某个日期是当月的最后一天? 4)如何格式化日期?【基础】

答:1)创建java.util.Calendar 实例(Calendar.getInstance()),调用其get()方法传入不同的参数即可获得参数所对应的值,如:

calendar.get(Calendar.YEAR);//获得年 2)以下方法均可获得该毫秒数: Calendar.getInstance().getTimeInMillis();System.currentTimeMillis();3)示例代码如下: Calendar time = Calendar.getInstance();time.set(Calendar.DAY_OF_MONTH, time.getActualMaximum(Calendar.DAY_OF_MONTH));4)利用java.text.DataFormat 类中的format()方法可将日期格式化。

59、Java 编程,打印昨天的当前时刻。【基础】 答:public class YesterdayCurrent{ public static void main(String[] args){ Calendar cal = Calendar.getInstance();cal.add(Calendar.DATE,-1);System.out.println(cal.getTime());} } 60、java 和javasciprt 的区别。【基础】

答:JavaScript 与Java 是两个公司开发的不同的两个产品。Java 是SUN 公司推 出的新一代面向对象的程序设计语言,特别适合于Internet 应用程序开发;而 JavaScript 是Netscape 公司的产品,其目的是为了扩展Netscape Navigator 功能,而开发的一种可以嵌入Web 页面中的基于对象和事件驱动的解释性语言, 它的前身是Live Script;而Java 的前身是Oak 语言。下面对两种语言间的异 同作如下比较:

1)基于对象和面向对象:

Java 是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象; JavaScript 是种脚本语言,它可以用来制作与网络无关的,与用户交互作用 的复杂软件。它是一种基于对象(Object Based)和事件驱动(Event Driver)的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用; 2)解释和编译:

Java 的源代码在执行之前,必须经过编译;

JavaScript 是一种解释性编程语言,其源代码不需经过编译,由浏览器解释 执行;

3)强类型变量和类型弱变量:

Java 采用强类型变量检查,即所有变量在编译之前必须作声明;

JavaScript 中变量声明,采用其弱类型。即变量在使用前不需作声明,而是 解释器在运行时检查其数据类型; 4)代码格式不一样。

61、什么时候用assert?【中等难度】

答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都 支持这种机制。一般来说,assertion 用于保证程序最基本、关键的正确性。assertion 检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion 检查通常是关闭的。在实现中,断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为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 标记。还可以在包的基础上

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

62、Java 中的异常处理机制的简单原理和应用?【基础】

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

答:error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困 难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况; exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现 问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

64、try {}里有一个return 语句,那么紧跟在这个try 后的finally {}里的code 会不会被执行,什么时候被执行,在return 前还是后? 【基础】 答:会执行,在return 前执行。

65、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意义?在try 块中可以抛出异常吗?【基础】

答:Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并

提供了良好的接口。在Java 中,每个异常都是一个对象,它是Throwable 类或 其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有 异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java 的异常 处理是通过5 个关键词来实现的:try、catch、throw、throws 和finally。一

般情况下是用try 来执行一段程序,如果出现异常,系统会抛出(throws)一个 异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺 省处理器来处理;

try 用来指定一块预防所有“异常”的程序;

catch 子句紧跟在try 块后面,用来指定你想要捕捉的“异常”的类型; throw 语句用来明确地抛出一个“异常”;

throws 用来标明一个成员函数可能抛出的各种“异常”;

Finally 为确保一段代码不管发生什么“异常”都被执行一段代码;

可以在一个成员函数调用的外面写一个try 语句,在这个成员函数内部写另一 个try 语句保护其他代码。每当遇到一个try 语句,“异常”的框架就放到堆栈 上面,直到所有的try 语句都完成。如果下一级的try 语句没有对某种“异常” 进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try 语句。

66、运行时异常与一般异常有何异同?【基础】

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

67、给我一个你最常见到的runtime exception?【基础】

答:ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException 68、final, finally, finalize 的区别? 【基础】 答:final:修饰符(关键字);如果一个类被声明为final,意味着它不能再 派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为abstract 的,又被声明为final 的;将变量或方法声明为final,可以保证它们在使用中 不被改变;被声明为final 的变量必须在声明时给定初值,而在以后的引用中只 能读取,不可修改;被声明为final 的方法也同样只能使用,不能重载。finally:再异常处理时提供finally 块来执行任何清除操作;如果抛出一 个异常,那么相匹配的catch 子句就会执行,然后控制就会进入finally 块(如 果有的话)。

finalize:方法名;Java 技术允许使用finalize()方法在垃圾收集器将

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

69、类Example A 继承Exception,类ExampleB 继承Example A;【基础】 有如下代码片断:

try{ throw new ExampleB(“b”); }catch(ExampleA e){ System.out.printfln(“ExampleA”); }catch(Exception e){ System.out.printfln(“Exception”); } 输出的内容应该是:

A:ExampleA B:Exception C:b D:无 答:输出为A。

集合部分:(共11 题:基础11 道)

70、介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)【基础】 答:Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection 是最基本的集合接口,一个Collection 代表一组Object,即 Collection 的元素(Elements); Map 提供key 到value 的映射。71、List,Set,Map 是否继承自Collection 接口?【基础】 答:List,Set 是;Map 不是。

72、你所知道的集合类都有哪些?主要方法?【基础】

答:最常用的集合类是List 和Map。List 的具体实现包括ArrayList 和

Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元 素列表。List 适用于按数值索引访问元素的情形。Map 提供了一个更通用的

元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每 个键映射到一个值。

73、说出ArrayList,Vector, LinkedList 的存储性能和特性?【基础】

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

74、Collection 和Collections 的区别?【基础】

答:Collection 是java.util 下的接口,它是各种集合的父接口,继承于它的 接口主要有Set 和List;Collections 是个java.util 下的类,是针对集合的

帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。75、HashMap 和Hashtable 的区别? 【基础】

答:二者都实现了Map 接口,是将惟一键映射到特定的值上;主要区别在于: 1)HashMap 没有排序,允许一个null 键和多个null 值,而Hashtable 不允许; 2)HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和 containsKey,因为contains 方法容易让人引起误解;

3)Hashtable 继承自Dictionary 类,HashMap 是Java1.2 引进的Map 接口的实现; 4)Hashtable 的方法是Synchronize 的,而HashMap 不是,在多个线程访问 Hashtable 时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外 同步。

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

76、Arraylist 与Vector 区别?【基础】

答:就ArrayList 与Vector 主要从二方面来说: 1)同步性:Vector 是线程安全的(同步),而ArrayList 是线程序不安全的; 2)数据增长:当需要增长时,Vector 默认增长一倍,而ArrayList 却是一半。77、List、Map、Set 三个接口,存取元素时,各有什么特点?【基础】 答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部 排序。Map 保存key-value 值,value 可多值。

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

答:Set 里的元素是不能重复的,用equals()方法来区分重复与否。覆盖 equals()方法用来判断对象的内容是否相同,而”==”判断地址是否相等,用来 决定引用值是否指向同一对象。

79、用程序给出随便大小的10 个数,序号为1-10,按从小到大顺序输出,并输 出相应的序号。【基础】 答:代码如下: package test;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;import java.util.Random;public class RandomSort { public static void printRandomBySort(){ Random random = new Random();// 创建随机数生成器 List list = new ArrayList();// 生成10 个随机数,并放在集合list 中 for(int i = 0;i < 10;i++){ list.add(random.nextInt(1000));

} Collections.sort(list);// 对集合中的元素进行排序 Iterator it = list.iterator();int count = 0;while(it.hasNext()){ // 顺序输出排序后集合中的元素 System.out.println(++count + ”: “ + it.next());} } public static void main(String[] args){ printRandomBySort();} } 80、用JAVA 实现一种排序,JAVA 类实现序列化的方法?实现比较要实现什么样的接口?【基础】 答:用插入法进行排序代码如下: package test;import java.util.*;class InsertSort { ArrayList al;public InsertSort(int num,int mod){ al = new ArrayList(num);Random rand = new Random();System.out.println(”The ArrayList Sort Before:“);for(int i=0;i=tempInt.intValue()){

在COLLECTION 框架中,al.add(j,tempInt);MaxSize++;System.out.println(al.toString());break;} } } } System.out.println(”The ArrayList Sort After:“);for(int i=0;i

Collection 框架中实现比较要实现Comparable 接口和Comparator 接口。线程部分:(共10 题:基础7 道,中等难度3 道)81、sleep()和wait()有什么区别? 【基础】

答:sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行 机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep 不会 释放对象锁。wait 是Object 类的方法,对此对象调用wait 方法导致本线程放 弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或 notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

82、当一个线程进入一个对象的一个synchronized 方法后,其它线程是否可进 入此对象的其它方法? 【基础】

答:其它线程只能访问该对象的其它非同步方法,同步方法则不能进入。83、请说出你所知道的线程同步的方法。【基础】

答:wait():使一个线程处于等待状态,并且释放所持有的对象的lock; sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方 法要捕捉InterruptedException 异常;

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

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

84、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 【基础】 答:多线程有两种实现方法,分别是继承Thread 类与实现Runnable 接口,同步 的实现方面有两种,分别是synchronized,wait 与notify。

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

答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的 方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况 下采用异步途径往往更有效率。

86、启动一个线程是用run()还是start()?【基础】

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

87、线程的基本概念、线程的基本状态以及状态之间的关系?【基础】

答:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至 少都有一个线程,也就是程序本身;

Java 中的线程有四种状态分别是:运行、就绪、挂起、结束。

88、简述synchronized 和java.util.concurrent.locks.Lock 的异同?【中等 难度】

答:主要相同点:Lock 能完成synchronized 所实现的所有功能;

主要不同点:Lock 有比synchronized 更精确的线程语义和更好的性能。

synchronized 会自动释放锁,而Lock 一定要求程序员手工释放,并且必须在 finally 从句中释放。

89、java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?【中等难度】

答:有两种实现方法,分别是继承Thread 类与实现Runnable 接口;

用synchronized 关键字修饰同步方法;

反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而 且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它 们。结果很难检查出真正的问题所在;

suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被“挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。故不应该使用suspend(),而应在自己的Thread 类中置入一个标志,指出线程应该活动还是挂起。若标志 指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

90、设计4 个线程,其中两个线程每次对j 增加1,另两个线程对j 每次减少1; 写出程序。【中等难度】 答:以下程序使用内部类实现线程,对j 增减的时候没有考虑顺序问题: public class TestThread { private int j;public TestThread(int j){this.j = j;} private synchronized void inc(){ j++;System.out.println(j + ”--Inc--“ + Thread.currentThread().getName());

} private synchronized void dec(){ j--;System.out.println(j + ”--Dec--“ + Thread.currentThread().getName());} public void run(){(new Dec()).start();new Thread(new Inc()).start();(new Dec()).start();new Thread(new Inc()).start();} class Dec extends Thread { public void run(){ for(int i=0;i<100;i++){ dec();} } } class Inc implements Runnable { public void run(){ for(int i=0;i<100;i++){ inc();} } } public static void main(String[] args){(new TestThread(5)).run();} } IO 流及Socket 部分:(共5 题:基础5 道)

91、什么是java 序列化,如何实现java 序列化?【基础】

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进 行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之 间。序列化是为了解决在对对象流进行读写操作时所引发的问题;

序列化的实现:将需要被序列化的类实现Serializable 接口,该接口没有需实 现的方法,implements Serializable 只是为了标注该对象是可被序列化的,然 后使用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对 象流)对象,接着,使用ObjectOutputStream 对象的writeObject(Object obj)方法就可以将参数为obj 的对象写出(即保存其状态),要恢复的话则用输入流。92、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?【基础】

答:字节流,字符流。字节流继承于InputStream、OutputStream,字符流继承

于Reader、Writer。在java.io 包中还有许多其他的流,主要是为了提高性能 和使用方便。

93、文件和目录(IO)操作:

1)如何列出某个目录下的所有文件? 2)如何列出某个目录下的所有子目录? 3)如何判断一个文件或目录是否存在? 4)如何读写文件?【基础】 答:1)示例代码如下: File file = new File(”e:总结“);File[] files = file.listFiles();for(int i=0;i

System.out.println(new File(”d:.txt“).exists());4)示例代码如下: //读文件: FileInputStream fin = new FileInputStream(”e:t.txt“);byte[] bs = new byte[100];while(true){ int len = fin.read(bs);if(len <= 0)break;System.out.print(new String(bs,0,len));} fin.close();//写文件: FileWriter fw = new FileWriter(”e:est.txt“);fw.write(”hello world!“ + System.getProperty(”line.separator“));fw.write(”你好!北京!“);fw.close();94、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出 现的次数。【基础】 答:代码如下:

public int countWords(String file, String find)throws Exception { int count = 0;Reader in = new FileReader(file);

int c;while((c = in.read())!=-1){ while(c == find.charAt(0)){ for(int i = 1;i < find.length();i++){ c = in.read();if(c!= find.charAt(i))break;if(i == find.length()-1)count++;} } } return count;} 95、Java 的通信编程,编程题(或问答),用JAVA SOCKET 编程,读服务器几个 字符,再写入本地显示?【基础】 答:Server 端程序: package test;import java.net.*;import java.io.*;public class Server{ private ServerSocket ss;private Socket socket;private BufferedReader in;private PrintWriter out;public Server(){ try { ss=new ServerSocket(10000);while(true){ socket = ss.accept();String RemoteIP = socket.getInetAddress().getHostAddress();String RemotePort = ”:“+socket.getLocalPort();System.out.println(”A client come in!IP:“ + RemoteIP+RemotePort);in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String line = in.readLine();System.out.println(”Cleint send is :“ + line);out = new PrintWriter(socket.getOutputStream(),true);out.println(”Your Message Received!“);out.close();in.close();socket.close();

} }catch(IOException e){ out.println(”wrong“);} } public static void main(String[] args){ new Server();} } Client 端程序: package test;import java.io.*;import java.net.*;public class Client { Socket socket;BufferedReader in;PrintWriter out;public Client(){ try { System.out.println(”Try to Connect to 127.0.0.1:10000“);socket = new Socket(”127.0.0.1“,10000);System.out.println(”The Server Connected!“);System.out.println(”Please enter some Character:“);BufferedReader line = new BufferedReader(new InputStreamReader(System.in));out = new PrintWriter(socket.getOutputStream(),true);out.println(line.readLine());in = new BufferedReader(new InputStreamReader(socket.getInputStream()));System.out.println(in.readLine());out.close();in.close();socket.close();}catch(IOException e){ out.println(”Wrong“);} } public static void main(String[] args){ new Client();} }

二、OOA/D 与UML 部分:(共6 题:基础2 道,中等难度4 道)

96、UML 是什么?常用的几种图?【基础】

答:UML 是标准建模语言;常用图包括:用例图,静态图(包括类图、对象图和包 图),行为图,交互图(顺序图,合作图),实现图。97、编程题: 写一个Singleton 出来。【基础】

答:Singleton 模式主要作用是保证在Java 应用程序中,一个类Class 只有一 个实例存在。举例:定义一个类,它的构造函数为private 的,它有一个static 的private 的该类变量,在类初始化时实例话,通过一个public 的getInstance 方法获取对它的引用,继而调用其中的方法。}

例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实 例。

100、开发中都用到了那些设计模式?用在什么场合? 【中等难度】

答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题 的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC 的设计模式,用来开发JSP/Servlet 或者J2EE 的相关应用;及简单工厂模式等。

101、你对软件开发中迭代的含义的理解;【中等难度】

答:软件开发中,各个开发阶段不是顺序执行的,应该是并行执行,也就是迭代 的意思。这样对于开发中的需求变化,及人员变动都能得到更好的适应。

三、XML 部分:(共4 题:基础1 道,中等难度1 道,较难2 道)102、XML 文档定义有几种形式?它们之间有何本质区别?解析XML 文档有哪几 种方式?【基础】

答:1)两种形式:dtd 以及schema;

2)本质区别:schema 本身是xml 的,可以被XML 解析器解析(这也是从DTD 上发展schema 的根本目的);

3)解析方式:有DOM,SAX,STAX 等:

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM 的树结 构所造成的,这种结构占用的内存较多,而且DOM 必须在解析文件之前把整个文 档装入内存,适合对XML 的随机访问;

SAX:不同于DOM,SAX 是事件驱动型的XML 解析方式。它顺序读取XML 文

件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开 头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来 处理XML 文件,适合对XML 的顺序访问; STAX:Streaming API for XML(StAX)。

103、你在项目中用到了xml 技术的哪些方面?如何实现的? 【中等难度】 答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的 数据组装成XML 文件,然后将XML 文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML 文件中还原相关信息进行处理。在做软件配置时,利用XML 可以很方便的进行,软件的各种配置参数都存贮在XML 文件中。

104、用jdom 解析xml 文件时如何解决中文问题?如何解析? 【较难】 答:看如下代码,用编码方式加以解决 package test;import java.io.*;public class DOMTest{ private String inFile = ”c:people.xml“;private String outFile = ”c:people.xml“;public static void main(String args[]){ new DOMTest();} public DOMTest(){ try{ javax.xml.parsers.DocumentBuilder builder = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();

org.w3c.dom.Document doc = builder.newDocument();org.w3c.dom.Element root = doc.createElement(”老师“);org.w3c.dom.Element wang = doc.createElement(”王“);org.w3c.dom.Element liu = doc.createElement(”刘“);wang.appendChild(doc.createTextNode(”我是王老师“));root.appendChild(wang);doc.appendChild(root);javax.xml.transform.Transformer transformer = javax.xml.transform.TransformerFactory.newInstance().newTransformer();transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING,”gb2312“);transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, ”yes“);transformer.transform(new javax.xml.transform.dom.DOMSource(doc), new javax.xml.transform.stream.StreamResult(outFile));}catch(Exception e){ System.out.println(e.getMessage());} } } 105、编程用JAVA 解析XML 的方式。【较难】 答:用SAX 方式解析XML,XML 文件如下:

王小明 信息学院

6258113 男,1955 年生,博士,95 年调入海南大学 事件回调类SAXHandler.java : import java.io.*;import java.util.Hashtable;import org.xml.sax.*;

public class SAXHandler extends HandlerBase{ private Hashtable table = new Hashtable();private String currentElement = null;private String currentValue = null;public void setTable(Hashtable table){ this.table = table;} public Hashtable getTable(){ return table;} public void startElement(String tag, AttributeList attrs)throws SAXException{ currentElement = tag;} public void characters(char[] ch, int start, int length)throws SAXException{ currentValue = new String(ch, start, length);} public void endElement(String name)throws SAXException{ if(currentElement.equals(name))table.put(currentElement, currentValue);} } JSP 内容显示源码,SaxXml.jsp: 剖析XML 文件people.xml <%@ page errorPage=”ErrPage.jsp“ contentType=”text/html;charset=GB2312“ %> <%@ page import=”java.io.*“ %> <%@ page import=”java.util.Hashtable“ %> <%@ page import=”org.w3c.dom.*“ %> <%@ page import=”org.xml.sax.*“ %> <%@ page import=”javax.xml.parsers.SAXParserFactory“ %>

<%@ page import=”javax.xml.parsers.SAXParser“ %> <%@ page import=”SAXHandler“ %> <% File file = new File(”c:people.xml“);FileReader reader = new FileReader(file);Parser parser;SAXParserFactory spf = SAXParserFactory.newInstance();SAXParser sp = spf.newSAXParser();

上一篇:生日贺卡怎么写有创意下一篇:小学一年级游记范文