1、软件工程师笔试试题 (JAVA) 一、 填空题 (10 分 ) 1. 执行下列代码后的结果是什么 ? int x,a=2,b=3,c=4; x=+a+b+c+; 2. 包包含了 Collection 的接口和类的 API 3. main 方法的声明格式包括 4. 下列程序中构造了一个 SET 并且调用其方法 add(),输出结果是 public class A public int hashCode() return 1; public Boolean equals( Object b) return true public static void main( String args) Set
2、 set=new HashSet(); set.add(new A(); set.add(new A(); set.add(new A(); System.out.println(set.size(); 5. 下列程序的运行结果是 class A class Dog private String name; private int age; public int step; Dog(String s,int a) name=s; age=a; step=0; public void run(Dog fast) fast.step+; public static void main (Strin
3、g args) A a=new A(); Dog d=a.new Dog(“Tom“,3); d.step=25; d.run(d); System.out.println(d.step); 二、 选择题 (20 分 ) 1. 欲构造 ArrayList 类的一个实例,此类继承了 List 接口,下列哪个方法是正确的? A ArrayList myList=new Object(); B List myList=new ArrayList(); C ArrayList myList=new List(); D List myList=new List(); 2. paint()方法使用哪种类型
4、的参数 ? A Graphics B Graphics2D C String D Color 3. 指出正确的表达式 A byte=128; B Boolean=null; C long l=0xfffL; D double=0.9239d; 4. 指出下列程序运行的结果 public class Example String str=new String(“good“); charch=a,b,c; public static void main(String args) Example ex=new Example(); ex.change(ex.str,ex.ch); System.ou
5、t.print(ex.str+“ and “); Sytem.out.print(ex.ch); public void change(String str,char ch) str=“test ok“; ch0=g; A good and abc B good and gbc C test ok and abc D test ok and gbc 5. 要从文件 “ file.dat“文件中读出第 10 个字节到变量 C 中 ,下列哪个方法适合 ? A FileInputStream in=new FileInputStream(“file.dat“); in.skip(9); int c=
6、in.read(); B FileInputStream in=new FileInputStream(“file.dat“); in.skip(10); int c=in.read(); C FileInputStream in=new FileInputStream(“file.dat“); int c=in.read(); D RandomAccessFile in=new RandomAccessFile(“file.dat“); in.skip(9); int c=in.readByte(); 6. 容器被重新设置大小后,哪种布局管理器的容器中的组件大小不随容器大小的变化而改变? A
7、 CardLayout B FlowLayout C BorderLayout D GridLayout 7. 给出下面代码: public class Person static int arr = new int10; public static void main(String a) System.out.println(arr1); 那个语句是正确的? A 编译时将产生错误; B 编译时正确, 运行时将产生错误; C 输出零; D 输出空。 8. 哪个关键字可以对对象加互斥锁? A transient B synchronized C serialize D static 9. 下列哪
8、些语句关于内存回收的说明是正确的 ? A 程序员必须创建一个线程来释放内存; B 内存回收程序负责释放无用内存 C 内存回收程序允许程序员直接释放内存 D 内存回收程序可以在指定的时间释放内存对象 10. 下列代码哪几行会出错 : 1) public void modify() 2) int I, j, k; 3) I = 100; 4) while ( I 0 ) 5) j = I * 2; 6) System.out.println (“ The value of j is “ + j ); 7) k = k + 1; 8) I-; 9) 10) A line 4 B line 6 C l
9、ine 7 D line 8 三、 简答题( 40 分) 1. 请对 Structs 的架构进行描述。 2. Servlet 有性能安全问题吗?如何使用? 3. 为什么会使用同步控制?其优缺点是什么? 4. Hibernate 的组建方式?如何配置?映射是如何实现的?有几种对应关系? 5. 应用开发有哪些种模式?至少写出 5 种。并请介绍 singleon 模式的工作方式。 6. HashMap 与 Hashtable 的区别。 7. EJB 的几种类型? 8. 在你实施过的项目中哪些是成功的?你认为成功的要素是什么? 四、 编程题 ( 30 分) 1. 打印输出 10 行杨晖三角形 。 2.
10、 有下面一段 Server 段程序,目的是能够同时服 务多个客户,客户的请求是一句话(一个 String)。如果这个请求的内容是字符串 “plain“的话,服务器仅将“hello“字符串返回给用户。否则将用户的话追加到当前目录的文本文件Memo.txt 中(路径为 “Memo.txt“),并向用户返回 “OK“。注意 Server 并发的处理多用户, Memo.txt 被共享,要求不能出现数据不一致。 Server 的程序如下文件 Server.java: public class Server public static void main(String args) MemoControll
11、er memoController = new MemoController(); try ServerSocket ss = new ServerSocket(1999); while (true) Socket s = ss.accept(); try UserThread t = new UserThread(s, memoController); t.start(); catch(Exception e) e.printStackTrace(); catch(Exception e) e.printStackTrace(); finally memoController.close()
12、; 类 UserThread 程序如下: 文件 UserThread.java: public class UserThread extends Thread Socket s; MemoController memo; public UserThread (Socket s, MemoController memo) this.s = s; this.memo = memo; public void run() try BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream(); PrintW
13、riter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream(); String req = br.readLine(); if (req.equals(“plain“) pw.println(“hello“); else memo.append(req); pw.println(“OK“); pw.flush(); pw.close(); br.close(); s.close(); catch(Exception e) e.printStackTrace(); 请根据题目的要求和现有的 Server.java, Us
14、erThread.java 的程序完成类MemoController.java 的程序。 答案 一、 填空题 (10 分 ) 1. x=10,a=3,b=4,c=5 2. java.util 3. (public)(static)(void)(main)(String args) 4. 1 5. 26 二、 选择题 (20 分 ) 1. B 2. A 3. C 4. B 5. A 6. B 7. C 8. B 9. B 10. C 三、 简答题( 40 分) 1. Struts 是一种典型 MVC 架构,其中 M( odel)为模型, V( iew)为视图,即 jsp 展现层, C( ontr
15、l)为控制层,即 action 层;这种架构的最大优点就是 MVC 三层分离,便于 开发、维护、扩展;模型 -视图 -控制器( Model-View-Controller, MVC)体系突出了 Servlets 和 JSP 的优点,同时也令它们的缺点最小化。在实现中,用户请求被发送到控制器 actionservlet(唯一实例), actionservlet 决定请求的性质,并且根据请求的类型传送给合适的 action 进行处理。 action 调用相关模型组件完成操作,处理完毕后,结果会发送回 actionservlet, actionservlet 选择适合的视图显示它。 2. Servl
16、et/JSP 技术由于其多线程运行而 具有很高的执行效率。由于 Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写 Servlet/JSP 程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。 3. 为了线程安全要使用同步,优点是保证了数据安全,缺点是降低了性能。 4. Hibernate 通过 xml配置文件来实现 OR 映射。 配置是通过编写 XML 实现的, Hibernate 通过配置文件实现 JAVA BEAN 和数据库
17、的映射。 常见的关系有 one-to-one,many-to-one,one-to-many,many-to-many。 5. 略 6. (1)Hashtable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map interface 的一个实现 (2)HashMap 允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许 (3)HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和containsKey。因为 contains 方法容易让人引起误解。在
18、HashMap 中, null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为 null。当 get()方法返回 null 值时,即可以表示 HashMap 中没有该键,也可以表示该键所对应的值为 null。因此,在 HashMap 中不能由 get()方法来判断HashMap 中是否存在某个键,而应该用 containsKey()方法来判断。 (4)最大的不同是, Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多个线程访问 Hashtable 时,不需要自己为它的方法实 现同步,而HashMap 就必须为之提供外同步。 HashMap 的同
19、步问题可通过 Collections的一个静态方法得到解决: Map Collections.synchronizedMap(Map m) 这个方法返回一个同步的 Map,这个 Map 封装了底层的 HashMap 的所有方法,使得底层的 HashMap 即使是在多线程的环境中也是安全的。 7. 会话( Session) Bean ,实体( Entity) Bean 消息驱动的( Message Driven)Bean 会话 Bean 又可分为有状态( Stateful)和无状态 ( Stateless)两种 实体 Bean 可分为 Bean 管理的持续性( BMP)和容器管理的持续性( CM
20、P)两种 8. 略 四、 编程题 ( 30 分) 1. class yanghui public static void main (String args) int i,j; int yhlevel=10; int yanghui; System.out.println(“杨晖三角形 :“); yanghui=new intyhlevel; for(i=0;iyanghui.length;i+) yanghuii=new inti+1; yanghui00=1; for (i=1; iyanghui.length;i+) yanghuii0=1; for(j=1;jyanghuii.length-1;j+) yanghuiij=yanghuii-1j-1+yanghuii-1j; yanghuiiyanghuii.length-1=1; for (i=0; iyanghui.length;i+) for(j=0;jyanghuii.length;j+) System.out.print(yanghuiij+“ “); System.out.println(); 输出结果是: 杨晖三角形 : 1