閱讀文本大概需要3分鐘。
從上圖看來面試官面試是有套路的,一不小心就一直被套路。
0x01:Thread
面試官
:創建線程有哪幾種方式?
應聘者
:繼承Thread類、實現Runable接口、使用j.u.c中的線程池
面試官
:繼承Thread類和實現Runable接口有什么區別?
應聘者
:
1、Runnable接口可以避免單繼承的限制,要是繼承Thread類的話,那么就不能繼承其他的類了,因為只能單繼承,如果實現了接口Runnale后,還可以繼承其他的類,或實現其他的接口。
2、Runnable增強了程序的健壯性,代碼能夠被多個程序共享,實現了數據 與代碼是獨立的。
3、實現Runnable接口的線程的運行代碼存在實現Runnable接口子類的run()方法中,繼承Thread類的線程的代碼存在Thread子類的run()方法中。
面試官
:
j.u.c中的線程池的處理流程
?
應聘者
:
1、當向線程池提交一個任務之后,線程池的處理流程如下:
判斷當前核心線程數量是否大于最大值,否則創建一個新線程來執行任務,是則將該線程加入阻塞隊列,進入下一步。
判斷當前阻塞隊列是否已滿,否則將任務存儲到隊列,是則進入下一步。
判斷當前線程池中的線程是否達到最大值,否則創建一個新線程執行任務,是則交給飽和策略處理該任務。
2、線程池提供的飽和策略目前有以下4種:
AbortPolicy:直接拋出異常(默認策略)。
CallerRunsPolicy:只用調用者所在線程來運行任務。
DiscardOldestPolicy:丟棄隊列里最近的一個任務,并執行當前任務。
DiscardPolicy:不處理,直接丟棄。
0x02:Redis
面試官
:redis有哪些數據類型?
應聘者:
string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
面試官
:在項目中你用到哪些數據類型?主要用到什么場景
應聘者:
在項目中經常使用string和hash,用string來存儲登錄用戶的用戶信息;使用hash存儲一類相同類型的數據。
面試官
:redis的string類型是怎么實現的?
應聘者:
redis數據庫底層沒有直接使用c的字符串表示,而是自己使用名為簡單動態字符串(simple dynamic string,SDS)
struct sdshdr{
int len; //記錄buf數組中以使用字節的數量,等于SDS所保存字符串的長度
int free; //記錄buf數組中未使用字節的數量
char buf[]; //字節數組,用于保存字符串
}
從以上兩個案例可以看出,面試的時候一個好的面試官應該可以由淺入深。在一個知識面全方位的考察應聘者。所以在準備面試的時候不能淺行則止,要深入了解原理;特別已經在職場打拼5年以上的從業者,更需要深入了解各種知識點的原理。否則只能做些業務相關的開發工作,很難達到架構師的級別。
以下分享一些面試題:
1、對微服務的理解
2、JDK1.8的新特性
3、Map集合1.8的新特性
4、MySQL索引的數據結構
5、MySQL為什么使用自增主鍵比較好
6、垃圾回收算法
7、簡單講講自己比較好的項目,自己的職責,然后展開一些問題,比如某些功能怎么實現,項目出現了什么難點問題怎么解決?
8、分布式調度如何實現
9、Redis數據類型,string類型如何實現
10、復合注解的實現
11、spring boot的多環境
12、A順序調用BCD服務(bcd對DB都有操作),c故障斷開,B如何保證數據一致性
13、四則運算算法題,說說實現邏輯以及如何定位優先級
14、Session如何共享
15、Session怎么存,怎么才能防止不一致
關注我
每天進步一點點
喜歡!在看?