java面試題
Java具有簡(jiǎn)單性、面向?qū)ο、分布式、健壯性、安全性、平臺(tái)x立與可移植性、多線程、動(dòng)態(tài)性等特點(diǎn),下面是小編整理的2017年java面試題,希望對(duì)你有幫助。
1. 什么情況下會(huì)發(fā)生棧內(nèi)存溢出。
至于是堆內(nèi)存溢出還是方法區(qū)內(nèi)存溢出還是棧內(nèi)存溢出,其實(shí)可以用一些工具比如
JConsole來(lái)監(jiān)視
2. JVM 的內(nèi)存結(jié)構(gòu),Eden 和 Survivor 比例。
3. jvm 中一次完整的 GC 流程是怎樣的,對(duì)象如何晉升到老年代,說(shuō)說(shuō)你知道的幾種主要的 jvm 參數(shù)。
4. 你知道哪幾種垃圾收集器,各自的優(yōu)缺點(diǎn),重點(diǎn)講下 cms,包括原理,流程,優(yōu)缺點(diǎn)
5. 垃圾回收算法的實(shí)現(xiàn)原理。
6. 當(dāng)出現(xiàn)了內(nèi)存溢出,你怎么排錯(cuò)。
7. JVM 內(nèi)存模型的相關(guān)知識(shí)了解多少,比如重排序,內(nèi)存屏障,happen-before,主內(nèi)存,工作內(nèi)存等。
8. 簡(jiǎn)單說(shuō)說(shuō)你了解的類(lèi)加載器。
9. 講講 JAVA 的反射機(jī)制。
10. 你們線上應(yīng)用的 JVM 參數(shù)有哪些。
11. g1 和 cms 區(qū)別,吞吐量?jī)?yōu)先和響應(yīng)優(yōu)先的垃圾收集器選擇。
12. 請(qǐng)解釋如下 jvm 參數(shù)的含義:
-server -Xms512m -Xmx512m -Xss1024K
-XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。
http://blog.csdn.net/a503921892/article/details/39048889
Xmx3550m:設(shè)置JVM最大可用內(nèi)存為3550M。
-Xms3550m:設(shè)置JVM初始內(nèi)存為3550m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。
-Xss128k: 設(shè)置每個(gè)線程的堆棧大小。在相同物理內(nèi) 存下,減小這個(gè)值能生成更多的線程。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無(wú)限生成,
經(jīng)驗(yàn)值在3000~5000左右
-XX:MaxPermSize=16m:設(shè)置持久代大小為16m
-XX:MaxTenuringThreshold=0:設(shè)置垃圾最大年齡。如果設(shè)置為0的話,則年輕代對(duì)象不經(jīng)過(guò)Survivor區(qū),直接進(jìn)入年老代。對(duì)于年老代比較多的應(yīng)用,可以提高效率。
如果將此值設(shè)置為一個(gè)較大值,則年輕代對(duì)象會(huì)在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概論。
開(kāi)源框架知識(shí)
1. 簡(jiǎn)單講講 tomcat 結(jié)構(gòu),以及其類(lèi)加載器流程。
2. tomcat 如何調(diào)優(yōu),涉及哪些參數(shù)。
3. 講講 Spring 加載流程。
4. 講講 Spring 事務(wù)的傳播屬性。
PROPAGATION_REQUIRED--支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就新建一個(gè)事務(wù)。這是最常見(jiàn)的選擇。
5. Spring 如何管理事務(wù)的。
6. Spring 怎么配置事務(wù)(具體說(shuō)出一些關(guān)鍵的 xml元素)。
tx:advice,aop:config
7. 說(shuō)說(shuō)你對(duì) Spring 的理解,非單例注入的原理?它的生命周期?循環(huán)注入的原理,aop 的實(shí)現(xiàn)原理,說(shuō)說(shuō) aop 中的幾個(gè)術(shù)語(yǔ),它們是怎么相互工作的。
8. Springmvc 中 DispatcherServlet初始化過(guò)程。
操作系統(tǒng)
1. Linux 系統(tǒng)下你關(guān)注過(guò)哪些內(nèi)核參數(shù),說(shuō)說(shuō)你知道的。
2. Linux 下 IO 模型有幾種,各自的含義是什么。
3. epoll 和 poll 有什么區(qū)別。
4. 平時(shí)用到哪些 Linux 命令。
5. 用一行命令查看文件的最后五行。
輸出test文件的后五行:
liyi@liyi:~/Desktop > tail -n 5 test
輸出test文件的前五行:
liyi@liyi:~/Desktop > head -n 5 test
6. 用一行命令輸出正在運(yùn)行的 java 進(jìn)程。
7. 介紹下你理解的操作系統(tǒng)中線程切換過(guò)程。
8. 進(jìn)程和線程的區(qū)別。
多線程
1. 多線程的幾種實(shí)現(xiàn)方式,什么是線程安全。
2. volatile 的原理,作用,能代替鎖么。
3. 畫(huà)一個(gè)線程的生命周期狀態(tài)圖。
4. sleep 和 wait 的區(qū)別。
5. Lock 與 Synchronized 的區(qū)別。
6. synchronized 的原理是什么,解釋以下名詞:重排序,自旋鎖,偏向鎖,輕量級(jí)鎖,可重入鎖,公平鎖,非公平鎖,樂(lè)觀鎖,悲觀鎖。
7. 用過(guò)哪些原子類(lèi),他們的原理是什么。
8. 用過(guò)線程池嗎,newCache 和 newFixed 有什么區(qū)別,他們的原理簡(jiǎn)單概括下,構(gòu)造函數(shù)的各個(gè)參數(shù)的含義是什么,比如 coreSize,maxsize 等。
9. 線程池的關(guān)閉方式有幾種,各自的區(qū)別是什么。
10. 假如有一個(gè)第三方接口,有很多個(gè)線程去調(diào)用獲取數(shù)據(jù),現(xiàn)在規(guī)定每秒鐘最多有 10 個(gè)線程同時(shí)調(diào)用它,如何做到。
11. spring 的 controller 是單例還是多例,怎么保證并發(fā)的安全。
singleton : bean在每個(gè)Spring ioc 容器中只有一個(gè)實(shí)例。
prototype:一個(gè)bean的定義可以有多個(gè)實(shí)例。
request:每次http請(qǐng)求都會(huì)創(chuàng)建一個(gè)bean,該作用域僅在基于web的Spring ApplicationContext情形下有效。
12. 用三個(gè)線程按順序循環(huán)打印 abc 三個(gè)字母,比如 abcabcabc。
思路:解題思路大概是這樣的,開(kāi)啟三個(gè)線程,每個(gè)線程一次打印一個(gè)字母,并且按照一定的順序打印,當(dāng)打印A的時(shí)候,其他線程處于阻塞狀態(tài),打印完A以后,
將線程解鎖,讓打印B的那個(gè)線程開(kāi)啟,其他線程處于阻塞狀態(tài),同理打印C的時(shí)候,阻塞其他線程,這三個(gè)線程順序循環(huán),就達(dá)到順序多次打印ABC的目的了。
這道題看似思路簡(jiǎn)單,其實(shí)主要需要用到wait()方法和notify()方法,還有關(guān)鍵字synchronized,只有充分理解了這些,才能解出這道題。下面我有必要講解一下這兩個(gè)方法,
還有關(guān)鍵字synchronized。
13. ThreadLocal 用過(guò)么,用途是什么,原理是什么,用的時(shí)候要注意什么。
14. 如果讓你實(shí)現(xiàn)一個(gè)并發(fā)安全的鏈表,你會(huì)怎么做。
15. 有哪些無(wú)鎖數(shù)據(jù)結(jié)構(gòu),他們實(shí)現(xiàn)的原理是什么。
16. 講講 java 同步機(jī)制的 wait 和 notify。
17. 多線程如果線程掛住了怎么辦。
18. countdowlatch 和 cyclicbarrier的內(nèi)部原理和用法,以及相互之間的差別。
19. 使用 synchronized 修飾靜態(tài)方法和非靜態(tài)方法有什么區(qū)別。
所有的非靜態(tài)同步方法用的都是同一把鎖——實(shí)例對(duì)象本身,也就是說(shuō)如果一個(gè)實(shí)例對(duì)象的非靜態(tài)同步方法獲取鎖后,
該實(shí)例對(duì)象的其他非靜態(tài)同步方法必須等待獲取鎖的方法釋放鎖后才能獲取鎖,
可是別的實(shí)例對(duì)象的非靜態(tài)同步方法因?yàn)楦搶?shí)例對(duì)象的非靜態(tài)同步方法用的是不同的鎖,
所以毋須等待該實(shí)例對(duì)象已獲取鎖的非靜態(tài)同步方法釋放鎖就可以獲取他們自己的鎖。
而所有的靜態(tài)同步方法用的也是同一把鎖——類(lèi)對(duì)象本身,這兩把鎖是兩個(gè)不同的對(duì)象,
所以靜態(tài)同步方法與非靜態(tài)同步方法之間是不會(huì)有競(jìng)態(tài)條件的。但是一旦一個(gè)靜態(tài)同步方法獲取鎖后,
其他的靜態(tài)同步方法都必須等待該方法釋放鎖后才能獲取鎖,而不管是同一個(gè)實(shí)例對(duì)象的靜態(tài)同步方法之間,
還是不同的實(shí)例對(duì)象的靜態(tài)同步方法之間,只要它們同一個(gè)類(lèi)的實(shí)例對(duì)象!
20. 簡(jiǎn)述 ConcurrentLinkedQueue 和 LinkedBlockingQueue 的用處和不同之處。
21. 導(dǎo)致線程死鎖的原因?怎么解除線程死鎖。
22. 非常多個(gè)線程(可能是不同機(jī)器),相互之間需要等待協(xié)調(diào),才能完成某種工作,問(wèn)怎么設(shè)計(jì)這種協(xié)調(diào)方案。
23. 正確使用 Volatile 變量
正確使用 volatile 變量的條件
您只能在有限的一些情形下使用 volatile 變量替代鎖。要使 volatile 變量提供理想的線程安全,必須同時(shí)滿足下面兩個(gè)條件:
1對(duì)變量的寫(xiě)操作不依賴于當(dāng)前值。
2該變量沒(méi)有包含在具有其他變量的不變式中。
http://www.ibm.com/developerworks/cn/java/j-jtp06197.html
TCP與HTTP
1. http1.0 和 http1.1 有什么區(qū)別。
在http1.0中,當(dāng)建立連接后,客戶端發(fā)送一個(gè)請(qǐng)求,服務(wù)器端返回一個(gè)信息后就關(guān)閉連接,
當(dāng)瀏覽器下次請(qǐng)求的時(shí)候又要建立連接,顯然這種不斷建立連接的方式,會(huì)造成很多問(wèn)題。
在http1.1中,引入了持續(xù)連接的概念,通過(guò)這種連接,瀏覽器可以建立一個(gè)連接之后,
發(fā)送請(qǐng)求并得到返回信息,然后繼續(xù)發(fā)送請(qǐng)求再次等到返回信息,也就是說(shuō)客戶端可以連續(xù)發(fā)送多個(gè)請(qǐng)求,而不用等待每一個(gè)響應(yīng)的到來(lái)。
2. TCP 三次握手和四次揮手的流程,為什么斷開(kāi)連接要 4次,如果握手只有兩次,會(huì)出現(xiàn)什么。
3. TIME_WAIT 和 CLOSE_WAIT 的區(qū)別。
4. 說(shuō)說(shuō)你知道的幾種 HTTP 響應(yīng)碼,比如 200, 302, 404。
5. 當(dāng)你用瀏覽器打開(kāi)一個(gè)鏈接的時(shí)候,計(jì)算機(jī)做了哪些工作步驟。
6. TCP/IP 如何保證可靠性,說(shuō)說(shuō) TCP 頭的結(jié)構(gòu)。
7. 如何避免瀏覽器緩存。
8. 簡(jiǎn)述 Http 請(qǐng)求 get 和 post 的區(qū)別以及數(shù)據(jù)包格式。
GET提交,請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭<request-line>中
POST提交:把提交的數(shù)據(jù)放置在是HTTP包的包體<request-body>中
[2017年java面試題]
【java面試題】相關(guān)文章:
java面試題(2)08-13
java面試題(3)06-19
高薪Java面試題07-26
java面試題及答案10-03
java面試題(最新)09-16
經(jīng)典java面試題及答案06-11
cvte java面試題07-02
Java框架面試題09-03
瞬聯(lián)java面試題09-23
Java開(kāi)發(fā)崗位面試題11-06