JAVA-2003筆試題
一、選擇題(每小題2,共10分)
- 下列語句序列執行后,m 的值是( C )
int a=10, b=3, m=5;
if( a==b ) m+=a; else m=++a*m;
A.15 B.50 C.55 D.5 - 若已定義byte[]x={11,22,33,-66}其中0≤k≤3,則對x數組元素錯誤的引用是( C )
A x[3-k] B x[k] C x[k+1] D x[0] - 下列程序片段運行的結果是( D )
int a = 36; int b = (a++)%5; System.out.println(“a=”+a+",b="+b);
A a=36,b=0 B a=37,b=2 C a=36,b=1 D a=37,b=1
4、下列關于二維數組a的結論,正確的是( C )
int[][] a= {{1,2,3},{4,5,6,7},{8,9},{10,11,12,13,14,15}};
A. a[3][2]為9 B. a[2].length為4 C. a.length為4 D. a[1]為4
5、設 x = 1 , y = 2 , z = 3,則表達式 y+=z--/++x 的值是( A )
A. 3 B. 3. 5 C. 4 D. 5
二、填空題(每題2分,共計20分):
- Linux常用文件的命令是(6個): cp cd pwd mkdir ll ls mv touch rm
2、Spring事務注解@Transactional可以作用在 類 類方法 接口 接口方法
3、加密主要分為 對稱加密 非對稱加密 單向加密
4、常用的加密算法是(說2個): MD5 BASE64 SHA HMAC
5、鹽值加密概念: 通過加入一些隨機數進行加密的方式叫做鹽值加密
6、try{}里有一個return語句,在try后的finally里的code什么時候執行,return前還是return后: return 前
7、jdk8中ArrayList初始化容量是 0 進行add方法添加后的大小是 10
8、LinkedList初始化大小是 0 原因: LinkedList 是一個雙向鏈表,沒有初始化大小,也沒有擴容機制,就是一直在前面或者后面新增就好了
9、HashMap初始化容量是 0 進行put方法添加后的大小是 16
10、@ResponseBody注解描述: 主要用于返回json 字符串
三、閱讀程序寫結果(每小題5,共15分)
1、閱讀以下程序,補充代碼完成功能(用冒泡排序完成數據降序排序)
public static void main(String[] args) {
int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
//降序
if (arr[j] < arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.print("[");
for (int k = 0; k < arr.length; k++) {
if(k == arr.length - 1) {
System.out.print(arr[k] + “]”);
}else {
System.out.print(arr[k] + “,”);
}
}
}
2、閱讀代碼(輸出打印結果)
輸出結果是(5分):
2
4
1
3
輸出結果是(5分):
8
11
7
6
10
9
四、簡答題(每題2分,共30分)
1、序列化ID有什么用,為什么要進行序列化操作?
作用:這個序列化ID起著關鍵的作用,它決定著是否能夠成功反序列化!簡單來說,java的序列化機
制是通過在運行時判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時,JVM會把傳來
的字節流中的serialVersionUID與本地實體類中的serialVersionUID進行比較,如果相同則認為是一
致的,便可以進行反序列化,否則就會報序列化版本不一致的異常。
因為:序列化采用數據流來存儲,以數據流傳輸會提高網絡的傳輸速度,并且可以直接對數據流進行操
作,從而減少了對數據表的操作過程,減少數據出錯的幾率。
好處:數據操作規范類似于xml文件,保證數據的一致性和安全性。
2、Object類包含哪些方法?(至少5個)
(1)clone方法:保護方法,實現對象的淺克隆。
(2)getClass方法:獲得運行時的類型。
(3)toString方法:該方法用的比較多,一般子類都有覆蓋。
(4)equals方法:一般equals和 == 是不一樣的,但是在 Object 中兩者是一樣的。
(5)hashCode方法:該方法用于哈希查找,可以減少在查找中使用 equals 的次數,重寫了 equals 方
法一般都要重寫 hashCode 方法。
3、請描述String為什么用final修飾?
因為 String 類不能被繼承,不會被修改,并且在程序中出現的頻率比較高,所以使用 final 修飾
String 便于提高安全性和效率。
4、Java類為什么是單繼承的?
因為如果提供多繼承的話可能會出現錯誤,例如:一個類繼承了兩個父類,而兩個父類中有相同的方法,
那么子類的調用結果就會含糊不清,出現錯誤,所以java 類是單繼承的。
5、Maven有哪些優點和缺點(各至少3點)?
優點:(1)簡化了項目依賴管理。
(2)易于上手,便于滿足工作要求。
(3)有助于多模塊項目的開發。
缺點:(1)學習難度大。
(2)出現問題難以調試。
(3)當依賴很多時,程序會出現卡頓的情況。
6、描述HashMap底層實現原理?
(1)JDK1.7:數組 + 鏈表。
(2)JDK1.8:數組 + 鏈表 + 紅黑樹。
7、ThreadLocal、synchronized 和 Lock 有什么區別?有哪些使用場景?
(1)ThreadLocal 為解決多線程程序的并發問題提供了一種新思路,使用這個工具類可以更簡潔
地編寫出優美的多線程程序。應用場景主要是用來解決數據庫連接,Session 管理等。
(2)Lock 有比 synchronized 更精確的線程語義和更好的性能,synchronized 會自動釋放鎖,而Lock
卻要求程序員手工釋放,而且必須在 finally 語句中釋放。
(3)synchronized 無法判斷鎖的狀態,而 Lock 可以判斷鎖的狀態度。
8、HashMap和ConcurrentHashMap、LinkedHashMap的區別?
(1)HashMap 不保證順序,即為無序的,具有很快的訪問速度,HashMap 最多只允許一條記錄的鍵為
Null,允許多條記錄的值為 Null,HashMap 不支持線程的同步,是線程不安全的。
(2)LinkedHashMap 是繼承于 HashMap,是基于 HashMap 和雙向鏈表來實現的, LinkedHashhMap 是
有序的, 它可以保證 HashMap 集合有序,存入的順序和取出的順序一致,是線程不安全的。
(3)ConcurrentHashMap是基于分段鎖設計來實現線程安全性,只有在同一個分段內才存在競爭關系,
不同的分段鎖之間沒有鎖競爭,是線程安全的。
9、TCP 為什么要三次握手,兩次不行嗎?為什么?
兩次不行,因為三次握手可以有效地防止已失效的連接請求會再次傳送到服務器端,因而會產生錯誤。
10、描述下@Resource和@Autowired、@Qualifier注解區別?
(1)@Resource:Spring 的注解,默認按名稱 name 注入,如果沒有找到相同名稱的 Bean,則會按照
類型進行匹配,同時還可以通過名稱 name 和類型 type 屬性進行選擇性注入。
(2)@Autowired:Spring 的注解,默認按類型 type 注入。
(3)@Qualifier:Spring 的注解,按名稱 name 注入。
11、url中 ? 和 # 的區別?
(1)?代表查詢字符串(query)。
(2)# 代表url中的hash(fragment)。
12、MyBatis中 #{} 和 KaTeX parse error: Expected 'EOF', got '#' at position 12: {} 的區別? (1)#?{} 是預編譯處理,{} 是字符串替換。
(2)使用 #{} 可以有效地防止 SQL 注入,提高系統的安全性。
(3)MyBatis 在處理 #{} 時,會把 SQL 中的 #{} 替換為 ? 號,并使用 PreparedStatement 的 set
方法來賦值,而MyBatis 在處理 ${} 時,會把 ${} 替換成變量的值。
13、描述Spring/MyBatis所用設計模式(各至少2個)
兩者都有單例模式、工廠模式、代理模式。
14、寫出Jquery ajax語法?
$.ajax({
url:‘地址’,
data:{
參數:xxx,
參數:xxx
},
type:‘POST/GET’,
success:function(str){ //成功回調函數
alert(str);
},
error:function (err){ //失敗回調函數
alert(err);
}
});
15、描述你熟悉的設計模式(除單例、工廠以外,是什么、作用是什么)?
(1)代理模式:Mybatis 實現的核心,比如 MapperProxy、ConnectionLogger。為其他對象提供一個
代理以便控制這個對象的訪問。
(2)Builder 模式 :例如 SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、
XMLStatementBuilder、CacheBuilder。
(3)適配器模式:將一個類的方法接口轉換成客戶希望的另外一個接口。
四、描述題(每題5分。共計25分)
1、如果某段業務與數據庫交互的程序運行較慢你將如何處理(說出你的解決方案 至少3點)
2、描述你所知道的JAVA開發中常用的代碼優化方案(至少3點)
4、描述你所知道的WEB安全漏洞,并給出解決方案(至少3點)
4、如何設計出優秀的數據庫表結構(擴展、查詢性能等方面考慮)
5、項目中高并發是不可避免的,自我總結從哪幾點出發,解決高并發(至少3點)