本題主要考察是否熟悉各類map的應用場景,若是隻說出key/value爲空無心義是不夠的,要能考慮到更根本的緣由java
直接緣由:mysql
根本緣由:linux
本題主要考察對linux的使用深度,屬於加分項,沒有用過awk至少要讓面試官知道你用過grep,若是都沒有用過的話,面試官會懷疑你是否有linux的使用經驗程序員
awk是一個文本分析工具,將文件逐行讀入,而後默認按空格進行切片,對切開的部分進行單獨分析面試
格式是awk [options] '{command}' filename
,如awk '{print $1}' out.txt
,其中$1
表明第1列,awk會默認按照分隔符來切分每一行算法
分隔符也能夠經過在awk後使用-F來指定,如awk -F ':' '{ print $1 }' out.txt
spring
本題主要考察你是否有考慮過度表以後的事情,而不是僅僅背了幾道面試題,說出聚合操做後這道題基本就經過了sql
若是查詢單條記錄,能夠根據查詢條件和分表規則找到對應的表,而後進行查詢並返回結果數據庫
若是查詢多條記錄,則分開查詢,將全部查詢結果作聚合,將聚合後的結果返回編程
select *** from *** limit offset, rows
會有什麼問題,怎麼解決本題主要考察數據庫查詢優化的知識,至少要能給出兩種解決方案,並說出其各自的優缺點
存在問題:當offset很大時,查詢效率會下降,由於mysql並不能直接定位到offset處進行查詢,而是查詢前offset+rows
行,而後只取後rows條數據,將前面的數據捨棄,因此效率會很低
解決方案:
limit offset, rows
刪去,使用where 主鍵 > offset limit rows
代替,可是使用前提是沒有其餘where條件對數據進行過濾本題主要考察一些語言層面上的知識,若是知道泛型是語法糖的話,這個問題也能很容易回答出來
Java中final和private、泛型同樣,都是一種編程約束,編譯器會檢查final修飾的變量是否被從新賦值等,在編譯後與普通變量沒有區別
本題主要考察對Java語言的熟悉程度,能所有說正確固然最好,至少也得要能說出JVM是解釋器,Java是解釋型語言
Java既是解釋型語言也是編譯型語言。Java代碼須要通過javac編譯器編譯成class文件,交給JVM進行解釋執行,爲了加快執行效率,同時Java引入JIT編譯技術(Just-in-Time Compile,即時編譯技術),將部分熱點代碼編譯成機器碼優化執行
本題主要考察對Java優化技術的瞭解程度,屬於加分項,回答好的話能給面試官留下深入印象
Java引入JIT技術後,會將熱點代碼編譯成本地機器相關的機器碼,編譯時會進行相應的優化,逃逸分析就是JIT優化的基礎
一個對象在方法中被定義後,若是被外部方法所引用,好比經過參數傳遞給其餘方法,就叫作(方法)逃逸。一樣地,若是一個對象能被其餘線程訪問到,也叫作逃逸。逃逸分析就是來分析對象是否發生了逃逸,經過逃逸分析,Java編譯器能夠分析出一個對象的使用範圍
當JIT使用逃逸分析時,能夠執行相應的優化策略:
逃逸分析這項技術至今仍不成熟,沒法保證逃逸分析所提升的運行效率能超過它的性能損耗,可是逃逸分析依然是JIT編譯器優化技術中一個重要手段
本題主要考察對TCP協議的瞭解程度,能回答出來TCP這塊基本就不會再問了。通常TCP部分的問題深度由淺至深分別是:TCP/UDP區別 => 三次握手與四次揮手 => 流量控制和擁塞控制 => TCP優化技術與常見問題,必需要作好準備
粘包問題有兩種常見狀況:
解決方案有兩種,一種是隻發送固定長度的包,另外一種是在發送消息時帶上消息的長度,同時使用特殊標記來標記消息邊界
本題考察的是你的思考能力,若是這題答得很差會給面試官留下只會背題的印象,此題不難,即便不知道答案只要給出本身的想法便可,重點是聯繫到索引的數據結構上
由於innodb索引採用b+樹的結構存儲,避免插入非規律主鍵的數據時,致使頁分裂
本題考察對JVM知識的掌握程度,雖然本題應用意義不大,可是能很好地考察出被面試者對JVM底層原理的瞭解狀況
抽象方法調用速度快,由於抽象類屬於實現類的父類,抽象方法的實現屬於方法覆寫,能夠直接根據偏移量來定位方法,而接口則只能經過遍從來找
String a1 = new String("a") + new String("a"); // 1
a1.intern(); // 2
String a2 = "aa"; // 3
System.out.println(a1 == a2);
// -------------------------------------
String b1 = new String("b") + new String("b"); // 4
String b2 = "bb"; // 5
b1.intern(); // 6
System.out.println(b1 == b2);
複製代碼
本題考察的是面試者對String的理解深度,此題的要點就是能答出intern方法的實現原理,可以徹底答對很是難,基本能打趴絕大多數面試者,可以回答出來講明對JVM的常量池很熟悉,絕對是一個加分項,不過遺憾的是基本沒有面試官會問這麼深
在jdk1.7以前,返回false false
[1],在jdk1.7及以後的jdk版本中,返回true false
爲何在jdk1.7以前返回false false
:
代碼1
在堆中建立了「aa」字符串對象,池中沒有「aa」字符串對象;代碼2
發現常量池中沒有「aa」對象,則在池中建立「aa」對象;代碼3
發現池中存在「aa」對象,直接返回常量池中對象的引用;此時,a1爲堆中字符串對象引用,a2爲常量池中字符串對象引用,顯然指向的不是同一個對象代碼4
在堆中建立了「bb」字符串對象,池中沒有「bb」字符串對象;代碼5
發現池中沒有「bb」對象,則在池中建立「bb」對象;代碼6
發現常量池中存在「bb」對象,不執行操做;此時,b1爲堆中字符串對象引用,b2爲常量池中字符串對象引用,顯然指向的不是同一個對象爲何在jdk1.7及以後返回true false
:
代碼1
在堆中建立了「aa」字符串對象,池中沒有「aa」字符串對象;代碼2
發現常量池中不存在「aa」對象,則檢查Java堆,發現存在「aa」對象,則將堆中該對象的引用添加到常量池中;代碼3
發現常量池中存在「aa」對象的引用,則返回該引用;此時,a1爲堆中對象的引用,a2也爲堆中該對象的引用,指向的是同一對象代碼4/5/6
與jdk1.6中的原理徹底一致,就再也不贅述了本題考察的是對ConcurrentHashMap源碼熟悉程度,答題要點是分區間處理和單節點加鎖。若是是考察HashMap的擴容,則答題要點是先建立新數組,再拷貝原數據
本題主要考察面試者的技術視野,是否僅僅關注本身眼前的技術。這種就屬於概念性的問題,能說多少說多少,沒有標準答案,能體現出本身有了解過大體的概念便可。這兩個問題自己沒有太大關聯,可是由於都屬於這一類問題,不想再單獨列出來,就直接放在一塊兒了
本題主要考察面試者是否對本身使用的工具備過思考,可以知道「爲何用」,一個工程師至少要清楚本身使用工具的場景,而不能是稀裏糊塗的「有就用」
本題考察的是面試者對線程安全(特指volatile部分)的掌握程度,若是認真看過JUC包下的源碼,就必定會了解到僞共享的概念。不過本題屬於加分項,即使不知道也沒有太大影響
僞共享指的是兩個volatile類型的數據在同一個緩存行中,因爲volatile每次都會刷新緩存行,因此致使緩存行沒有徹底發揮出做用,導致性能浪費
能夠經過在對象或字段的先後加padding,也可使用@sun.misc.Contended
註解(其原理是在對象或字段先後加上128位的padding)
本題主要考察對Springboot的瞭解程度,答題要點是設置監聽器和加載上下文,若是這題沒答上來或沒答好面試官可能會問IoC和AOP原理相關的問題,因此至少有一個要很是熟悉
@SpringbootApplication
複合了一些註解:@SpringBootConfiguration
:聲明該類爲配置類@EnableAutoConfiguration
:啓用自動配置,原理是使用AutoConfigurationImportSelector類,將全部配置類加載到容器中,並掃描配置文件,將配置項經過反射實例化爲配置類,彙總以後加載到容器中@ComponentScan
:自動掃描包下的bean本題主要考察對適配器這種設計模式的掌握程度,如今不少人爲了突擊面試,設計模式只看過單例和工廠兩種,若是問到其餘設計模式答不上來,會在面試官的心中大打折扣
應用場景:
應用實例:
本題主要考察面試者是否真正用過CountDownLatch,是否在使用時有考慮過風險。與此題相似的問題還有:
ThreadLocal
使用時須要注意什麼,SimpleDateFormat
在多線程下使用有什麼風險等
若是執行countDown的線程發生異常,則await()方法會被阻塞。因此要設置超時時間,因此要使用await(timeout, unit)
方法
本題主要考察對zookeeper的掌握程度,能說出一種工具的優勢很容易,有時候編也能編個差很少,可是想說出來缺點就須要對它有至關的瞭解才行。若是是校招的話通常不會問這麼深,回答不上來也不用太緊張,可是必定要勇於說出來本身的看法,即便是錯的
客戶端:
服務端:
本題考察的是對Java語言的理解程度,這個問題幾乎沒見過有面試官問過,問題自己的價值也不是很大,若是答不上來也沒有太大關係,不過確實能反應出面試者對語言的認識程度
JVM會把全部的基本數據類型看成對象處理,JVM有9種設定好的Class對象來對應基本數據類型和void關鍵字,這些對象都是JVM建立的
除了基本類型以外,枚舉也是一種類,註解屬於一種特殊的接口,數組也是Object的子類,可是對程序員是透明的
勘誤:使用openjdk6測試發現輸出依然是true false
,此題有待進一步研究 ↩︎