- 相關推薦
Java軟件開發(fā)工程師筆試題
下面CN人才網(wǎng)小編為大家?guī)淼氖荍ava軟件開發(fā)工程師筆試題,希望對大家有所幫助~
一、選擇題(本大題 20 小題,每小題2分.共40分)。
1.在JAVA中,如果父類中某些方法不包含任何邏輯,并且需要由子類重寫.應該使用( )關鍵字來聲明父類的這些方法:
A) final B) static C) abstract D) void
2.在JAVA中,已定義兩個接口B和C,要定義一個實現(xiàn)這兩個接口的類,以下語句正確的是( )。
A) interface A extend B,C B) interface A implements B,C
C) class A implements B,C D) class A implements B, implements C
3.在JAVA接口中可以定義( )。
A) 靜態(tài)方法 B) 常量 C) 構(gòu)造方法 D) 抽象方法
4.假設A有構(gòu)造方法A (int a),則在類A的其他構(gòu)造方法中調(diào)用該構(gòu)造方法和語句格式應為( )。
A) A(X) B) this.A(x) C) this(x) D) super(x)
5.設 x = 1 ,y = 2 , z = 3, 則表達式 y+=z--/++x 的值是( )。
A) 3 B) 3.5 C) 4 D) 5
6.下列關于繼承的說法哪個正確?( )。
A)子類只繼承父類public方法和屬性:
B)子類繼承父類的非私有屬性和方法:
C)子類繼承父類的方法,而不繼承父類的屬性:
D) 子類將繼承的所有的屬性和方法.
7.在java中.在使用JDBC時。對于多次調(diào)用同一條SQL語句的情況, 使用( )通常會提高效。
A) Statement B) CallableStatement
C) PreparedStatement D) PrarmeterStatement
8.下列不能控制一個Servlet的生命周期方的法是:
A) service B) destroy C) doPost D) init
9.能夠給一個byte型變量賦值的范圍是( )。
A) 0~65535 B) (-128)~127
C)(-32, 768)~32, 767 D) (-256)~255
10.java語言中int類型數(shù)據(jù)占用多少位?( )。
A) 32 B) 64 C) 16 D) 20
11. ServletContext對象是如何創(chuàng)建的?( )。
A) 由 Servlet容器創(chuàng)建,對于每個HTTP請求.Servlet容器都會創(chuàng)建 一個ServletContext對象
B)由JavaWeb 應用本身為自己創(chuàng)建一個ServletContext對象
C)由Servlet容器創(chuàng)建,對于每個JaveWeb應用,在啟動時,Servlet容器都會創(chuàng)建一個ServletContext對象
12.在JSP中不能在不同用戶之間共享數(shù)據(jù)的方法是( )。
A) 通過cookie B) 利用文件系統(tǒng)
C) 利用數(shù)據(jù)庫 D) 通過ServletContext對象
13.以下哪個不是Collection的子接口?( )。
A) List B) Set C) Map D) SortedSet
14. 下面正確的創(chuàng)建 Socket 的語句是( )。
A) Socket a = new Soeket(80):
B) Socket b = new Socket("130. 3. 4. 5", 80):
C) ServerSocket c = new Socket(80)
D) ServerSocket d = new Socket ("130. 3. 4, 5", 80)
15.下面的說法正確的是( )。
A)帶有頁作用域的對象在一個web應用程序的每個JSP中都存在.
B)指令指定與一個特定的JSP 請求不相關的全局信息。
C)當JSP容器遇到開始定制標簽和結(jié)束定制標簽時,分別調(diào)用 doInitBody方法和doAfterBody方法。
D) 動作只在翻譯時處理一次。
16.為了區(qū)分重載多態(tài)中同名的不同方法,要求:( )。
A)參數(shù)名不同 B) 采用不同的形式參數(shù)列表
C)返回值類型不同 D) 選項A, B, C都對
17.下面是有關子類調(diào)用父類構(gòu)造函數(shù)的描述正確的是:( )。
A)子類定義了自己的構(gòu)造函數(shù).就不會調(diào)用父類的構(gòu)造函數(shù)
B)子類必須通過Super關鍵字調(diào)用父類有參數(shù)的構(gòu)造函數(shù)
C)如果子類的構(gòu)造沒有通過super調(diào)用父類構(gòu)造函數(shù),那么子類會 先調(diào)用子類自己的構(gòu)造函數(shù),再調(diào)用父類不含參數(shù)的構(gòu)造函數(shù)。
D)創(chuàng)建子類的對象時,先調(diào)用子類自己的構(gòu)造函數(shù),然后調(diào)用父 類的構(gòu)造函數(shù)
18.在Java中,負責對字節(jié)代碼解釋執(zhí)行的是( )。
A) 垃圾回收器 B) 虛擬機 C) 編譯器 D) 多線程機制
19.一個java程序運行從上到下的環(huán)境次序是( )。
A) 操作系統(tǒng)、Java程序、jre/jvm、硬件
B) jre/jvm、Java程序、硬件、操作系統(tǒng)
C) java程序、jre/jvm、操作系統(tǒng)、硬件
D) java程序、操作系統(tǒng)、jre/jvm、硬件
20.對于從Employee表中選擇記錄的以下代碼片段,識別其遺漏的代碼行。( ) Connection con = null:
Class. forName("sun.jdbc.odbc.JdbcOdbcDriver"):
con=DriverManager.getConnection("jdbc:odbc:ss" , "sa" , "");
ResultSet rs=stat.executeQuery("select * from Employee");
A) Statement stat=createStatement();
B) Statement stat=con.createStatement ();
C) PreparedStatement stat=con.createStatement():
D) PreparedStatement stat=createPreparedStatement();
二、問答題(本大題6小題,共40分)。
1.請說出 ArrayList , Vector , LinkedList 的存儲性能和特性。(6分)
2.什么是單例模式(Singleton) ? 請在下面寫出一個單例模式類,并支持多線程調(diào)用。(6分)
3.請描述一下JVM加載class文件的原理機制?(6分)
4.請談談對SQL注入的理解,請給出你知道的防止SQL注入的方法。(6分)
5.請談談對hibernate的理解,并簡要敘述Hibernate的一級緩存和二級緩存(8分)。
6.請寫出你知道的排序方法,并使用Java語言寫出其中一種。(8分)
三、簡答題(參考答案)
1. ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。
2. 創(chuàng)建某類對象時,無論創(chuàng)建多少次該類對象只有一份在內(nèi)存中,這就是單例模式。支持多線程調(diào)用,考慮線程安全,只需要加鎖即可。
public class Singleton{
private static Singleton instance = null;
private Singleton(){}
private static synchronized void syncInit(){
if(instance == null){
instance = new Singleton();
}
}
public static Singleton getInstance(){
if(instance == null){
syncInit();
}
return instance;
}
}
3. JVM中類的裝載是由ClassLoader和它的子類來實現(xiàn)的,Java ClassLoader是一個重要的Java運行時系統(tǒng)組件。它負責在運行時查找和裝入類文件的類。
4.解決辦法:a. 利用JavaScript,在客戶端進行校驗。
b.程序判斷 c.使用PreparedStatement連接數(shù)據(jù)庫。(參數(shù)化) d.利用框架技術
5. Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用。
一級緩存就是Session級別的緩存,一個Session做了一個查詢操作,它會把這個操作的結(jié)果放在一級緩存中,如果短時間內(nèi)這個
session(一定要同一個session)又做了同一個操作,那么hibernate直接從一級緩存中拿,而不會再去連數(shù)據(jù)庫,取數(shù)據(jù);
二級緩存就是SessionFactory級別的緩存,顧名思義,就是查詢的時候會把查詢結(jié)果緩存到二級緩存中,如果同一個sessionFactory
創(chuàng)建的某個session執(zhí)行了相同的操作,hibernate就會從二級緩存中拿結(jié)果,而不會再去連接數(shù)據(jù)庫;
6.插入排序、希爾排序、冒泡排序、快速排序、直接排序、歸并排序 下面以快速排序為例:
1. public class quickSort {
2.
3. inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34
,15,35,25,53,51};
4. public quickSort(){
5. quick(a);
6. for(int i=0;i
7. System.out.println(a[i]);
8. }
9. }
10. public int getMiddle(int[] list, int low, int high) {
11. int tmp =list[low]; //數(shù)組的第一個作為中軸
12. while (low < high){
13. while (low < high&& list[high] >= tmp) {
14. high--;
15. }
16.
17. list[low] =list[high]; //比中軸小的記錄移到低端
18. while (low < high&& list[low] <= tmp) {
19. low++;
20. }
21.
22. list[high] =list[low]; //比中軸大的記錄移到高端
23. }
24. list[low] = tmp; //中軸記錄到尾
25. return low; //返回中軸的位置
26. }
27.
28. public void _quickSort(int[] list, int low, int high) {
29. if (low < high){
30. int middle =getMiddle(list, low, high); //將list 數(shù)組進行一分為二
31. _quickSort(list, low, middle - 1); //對低字表進行遞歸排序
32. _quickSort(list,middle + 1, high); //對高字表進行遞歸排序
33. }
34. }
35.
36. public void quick(int[] a2) {
37. if (a2.length > 0) { //查看數(shù)組是否為空
38. _quickSort(a2,0, a2.length - 1);
39. }
40. }
41. }