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