JAVA技術點學習-純技術面試題
第一部分: 阿里巴巴 高階
阿里面試題目總結:
第一輪面試電話(5月6號):
1.自我介紹,包括做過專案。
2.有看過哪些JDK原始碼,瞭解哪些常用庫。
3.集合框架HashMap的擴容機制,ConcurrnetHashMap的原理
4.jvm記憶體模型與gc記憶體回收機制
5.classloader結構,是否可以自己定義一個java.lang.String類,為什麼? 雙親代理機制。
6.瞭解哪些設計模式,6個設計原則分別是什麼?每種設計原則體現的設計模式是哪個?
7.關於設計模式看了哪些書?書名是什麼?
8.uml模型圖畫過哪些? 類圖中類之間的關係有哪些,區別分別是什麼?
9.畫uml中類圖時候用過一種虛線麼?做什麼用的?
10.做過應用相關效能測試的,舉個例子,實際專案中怎麼使用的。
用過併發框架相關的哪些內容
11.瞭解哪些osgi的框架?
12有沒有做過jvm記憶體調優,如何做的,舉例子,用過哪些工具?
//一些不記得了
第二輪面試視訊
1.自我介紹
2.看過哪些原始碼
3.java的io庫的類結構圖所用到的設計模式如何體現
4.畫出自己設計過的設計模式如何體現,畫出結構圖,並進行講解。
5.畫出自己做的架構的專案架構圖 如何擴充套件等
6.資料庫設計中主鍵id設計的原則
7.jvm記憶體調優用過哪些工具,jstate做什麼用的?如何dump出當前執行緒狀態?
8.併發框架是否有了解
9.classloader的雙親代理機制
10.應用伺服器的jvm調優實際經驗,如何做的,在哪裡用到的
11.在哪裡獲取最新資訊,逛什麼論壇。最新的Swift語言有什麼看法
12.設計原則與設計模式對應
13.servlet/filter作用原理配置
14.ibatis in操作 以及一個屬性的作用
15.spring aop 用了什麼設計原則,自動注入配置是做什麼用的
16.jboss的類載入器
17.session共享機制
18.做過最成功的一件事情是什麼?
19.最大的爭執是什麼?
20.為什麼想要離職去阿里
//問題很多,一些不記得了
第三輪面試電話:
1.現在公司負責什麼?
2.專案主要目的是做什麼的?
3.公司管理方式、專案問題反饋機制是什麼?
4.Java 的序列化做什麼用的 序列化id會出現哪些問題?
5.OSGi用過哪些?類載入器結構如何,如何在一個bundle中載入另外一個bundle中的一個類?
6.nio是否瞭解 阻塞之後通知機制是怎樣的?
7.uml設計類圖如何畫,類之間關係以及區別
8.spring如何不許要配置檔案載入bean定義,可能是問自動註解或者是properties檔案定義bean
9.ibatis等框架是不是都是實際在使用的,技術細節
10.為什麼想離職去阿里
//一些不記得了
第四輪總監面電話面試:
1.自我介紹
2.公司做什麼,業務, 負責內容,彙報機制等
3.企業級應用安全相關
4.http協議,返回碼,301與302區別
5.多執行緒併發用過哪些
6.應用伺服器相關,談最熟悉的
7.為什麼離職
//這個太多不記得了,很多不太會。
第二部分 網路轉發:
1、spring的快取,mybatis快取
a、基於註解的方式 三種註解
b、mybatis分為一級session和二級快取mapper
c、採用LRU演算法(近期最少使用) http://www.iteye.com/topic/1112327/ 對快取併發同步採用jdk的ReadWriteLock 讀寫鎖
原始碼:mapper呼叫、代理mapper呼叫、mapper的方法、sqlsession、快取(二級沒有到一級,一級沒有到資料庫搜)
2、介紹下dubbo。A服務呼叫B服務,B服務又呼叫C服務,這種情況怎麼辦
client一個執行緒呼叫遠端介面,生成一個唯一的ID(比如一段隨機字串,UUID等),Dubbo是使用AtomicLong從0開始累計數字的
將打包的方法呼叫資訊(如呼叫的介面名稱,方法名稱,引數值列表等),和處理結果的回撥物件callback,全部封裝在一起,組成一個物件object
向專門存放呼叫資訊的全域性ConcurrentHashMap裡面put(ID, object)
將ID和打包的方法呼叫資訊封裝成一物件connRequest,使用IoSession.write(connRequest)非同步傳送出去
當前執行緒再使用callback的get()方法試圖獲取遠端返回的結果,在get()內部,則使用synchronized獲取回撥對 象callback的鎖, 再先檢測是否已經獲取到結果,如果沒有,然後呼叫callback的wait()方法,釋放callback上的鎖,讓當前執行緒處於等待狀態。
服務端接收到請求並處理後,將結果(此結果中包含了前面的ID,即回傳)傳送給客戶端,客戶端socket連線上專門監聽訊息的執行緒收到 訊息,分析結果,取到ID,再從前面的ConcurrentHashMap裡面get(ID),從而找到callback,將方法呼叫結果設定到 callback物件裡。
監聽執行緒接著使用synchronized獲取回撥物件callback的鎖(因為前面呼叫過wait(),那個執行緒已釋放 callback的鎖了),再notifyAll(),喚醒前面處於等待狀態的執行緒繼續執行(callback的get()方法繼續執行就能拿到呼叫結果 了),至此,整個過程結束。
迴圈依賴: check="false" 來不檢查依賴
3、JVM監控工具有哪些,區別又是什麼(如能追上各個命令的使用監控,顯得更好),如何調優的(就那麼幾個記憶體引數和GC引數什麼時候配置什麼樣的)?如何定位問題的?(就說各種命令,gc日誌,快照,監控工具)
1、jstack 可以定位到具體的執行緒堆疊,定位cpu衝高 結合top
2、jmap檢視堆記憶體使用情況
3、jstat統計堆的使用情況
4、vivalueVM MAT
5、GC日誌 PrintGCDetails 每次GC記錄日誌
4、使用過Solr?說說(有面試特意想聽從luence發展而來的可獨立部署)
5、用過哪些MQ,各個MQ的區別不同點在哪(阿里還問了協議;採用哪種語言開發的也說說比較好,因為一些面試為了好跟蹤問題確實考慮了這一方面),總之,多說為益,再就是apache新一代推出的MQ:apollo說說完全是加分項阿里面試者也不知道
。
6、根據你做過的東西,讓你說說某一功能或者模組
7、java8瞭解過嗎(阿里問的,時間API,集合的處理,lambda怎麼用的說說,函數語言程式設計,很多集合底層程式碼都有變動能詳細說出來加分如hashMap,集合底層程式碼變動網上是沒有的別查了,看JDK7,8,9原始碼就行)(本人建議最好把JDK7,8,將要推出的9各種新特點熟記並全部動手編寫下,9暫時不能編寫呢),JDK9特性說上絕逼加分,他也很可能不知道,再就是CMS+新生代並行收集器JAVA8不建議使用了(很少有面試官知道),java9淘汰掉了還有永生帶被元空間代替即使阿里他也不知道絕逼加分。
8、說說memcached(直接上原理,說分配的過程,再說注意點優缺點,和雜湊一致演算法能聯絡起來更好,前提一致演算法要理解要能用程式碼實現,否則面試著好追問,你要不懂到起反作用了)
9、有幾種鎖,各個區別,多說有益,多說上底層的更好,阿里還問了原理
10、sleep和await()的區別(補充上condition給自己加分)
condition例項被繫結到一個Lock物件上,通過newCondition()來達到這個目的. condition提供三個方法來達到同步;await(),類似wait() sginal() 類似notify
signalAll()類似notifyAll
11、執行緒池說說幾種(最好搞懂原始碼裡的原理起碼用的哪些佇列能說說各自的使用場景說說都是加分的地方,有什麼注意點,什麼keepalivatime其他的什麼的細的問題,多多益善)
12、哪些鎖,不同的地方在哪(說的越多越詳細越深越好)
13、Threadlocal,上來說原理,再舉個例子用用哪些情況為益
14、執行緒池執行緒池如何解決死鎖問題如何診斷,一定要說上具體命令如何定位阿里還特意追問的(從避免這種情況出發說如定時鎖,鎖粒度等再談一些監控工具和命令,診斷啥的都會是加分)
15、常見的序列化方式(面試官想讓你說hession,多說為益)
16、mysql與mongoDB如何選型,什麼時候用誰
17、A,B兩個執行緒同時啟動,但讓A結束後B在結束,如何實現(多種,多說為益,他想問join,其他很多方式一些面試官都不知道絕對加分)
18、redis中wacth之後,之後有事務提交未執行,返回資訊嗎,返回什麼
19、memcached和redis的區別,很多,把重點說出來,及各自優缺點,從原理上分析對比必是加分項可能redis原理他不懂的,幾乎家家公司必問
20、mongoDB的幹什麼的(在說說記憶體檔案對映引擎,持久化的2個過程必是加分項)
21、python瞭解嗎,主要用來做什麼,實現爬蟲能實現嗎(爬蟲技術知道的話多扯些有益而無害)
22、JVM的各個帶說說(說的越詳細越好各個引數都說上什麼情況下怎麼設定引數更好,和GC結合起來必加分),JVM的GC為什麼選擇分帶收集(最好各個演算法說上,為什麼這個帶使用這個,和G1的各個方面扯上必裝逼成功加分因為幾乎他也不懂,因為G1也是採用化整為0的這種分開治理的思想)
23、ngnix,正向代理,反向代理,阿里特意問了ngnix原理和apache的區別以及出個問題故意讓你答和lua指令碼結合,然後會繼續問你會不會寫?ngnix與tomcat的區別
24、zookeeper幹什麼的說說(多說為益扯上補充上如何實現分散式鎖,同步流程,watcher機制程式碼流程選舉演算法絕對裝逼99分),分散式鎖怎麼實現(額外說上儘可能避免分散式鎖怎麼避免為什麼避免絕逼加分)。阿里直接讓說了選舉演算法(描述大體過程和關鍵點即可不需要太詳細了)
25、redis兩種持久化方式(過程,優缺點最好說上)
26、複合索引的使用,什麼時候走什麼時候不走,舉例
27、如何實現session共享
28、多執行緒下如何實現唯一ID(多種技術,多說為益,越高大尚越好)
29、js閉包
30、說說我遊覽器輸入www.baidu.com之後怎麼一個數據傳輸過程,主要考網路模型
31、7層模式都是那幾個,有哪些協議,怎麼傳輸的,丟包問題,粘包問題,楚楚街特意問的
32、java裡有哪些集合介面,這些集合的區別是什麼,說的越多越深越好,再就是LinkedList的擴容機制,hashmap的擴容機制,注意JDK6,7,8好像都有變化說上絕逼加分項因為他也不知道也沒注意過只是停留在JDK6上那個機制。
33、java有幾種基本型別,挑出一種多大位元組,取值範圍,一個漢字多大空間佔(注意根據不同編碼說而且不同的漢字如複雜漢字就特殊也是加分點我是根據UTF-8,還追問了GBK)
34、sql執行的過程說說(當時我只說了是9個過程,但具體記不清了,而且會有幾個過程快取住)
35、什麼是笛卡爾積,一個SQL語句where後邊有很多and和組後group,limit怎麼執行的具體說說
36、設計模式你熟悉哪些,然後挑出幾個來說說具體怎麼設計(最好能畫類圖,有6大關係搞懂,擴充套件說上都是加分項,再想加分,就說對某個模式如單例有很多種最牛逼的一種是哪個牛逼的面試官有時也不知道)
37、說說mybatis的原理,如果讓你設計持久層,你會怎麼設計(本人從擴充套件、靈活、效能幾方面切入的)
38、讓你畫架構,各種負載叢集的那種,特意問如果沒有f5怎麼著
39、秒殺中超賣問題有多種方式實現讓說說(阿里那本書和一些部落格中介紹的很多)
40、各種GC演算法一定要熟記整個過程一絲不掛的搞熟練,阿里讓畫畫各個過程,很多都問為什麼這麼做,為什麼分帶收集(按我前邊說的,把G1具體過程捎帶扯上絕逼加分因為他們很少懂)
41、一些演算法遞迴,二叉樹都要懂,經常性的會面試的差不多了最後問你些資料結構方面熟悉嗎,自己要會園上。
42、100階乘幾個零思考會快速回答上來(面試第一次完全卡住了,主要是否看真那麼鑽研問題,阿里的,其實想想也挺簡單,只不過那種場景讓你快速答出我是思維有點亂了)
43、記憶體資源很有限,但是相同的操作不斷的分配和釋放記憶體,記憶體已經被這種頻繁的操作被分配很多了,怎麼優化(說實話,題目我也沒真正搞懂說了下快取區他說是一方面說其他的什麼多執行緒看樣子不是那樣的,阿里的)
44、很大的字串檔案,怎麼統計某個字串出現的頻率(其實考你拆分思想用多執行緒去處理,具體怎麼拆分阿里的人也只說用指令碼說主要考你拆分的思想,說讓JAVA API和Guava處理這種簡短字串情況的API絕對是加分的)
45、Guava用過哪些API,具體說說
46、JVM的各個帶說說畫畫,說的越具體越好,結合上調優和GC,各個命令和引數配置絕逼加分,越細越好,細的他都不知道必加分(阿里的人具體還追問了引數怎麼寫辛虧我知道常見就那幾個)
47、倒水問題,5升和3升如何稱出4升水,其他技術都回答的差不多最後問的邏輯題
48、mysql中2個引擎的區別,幾乎家家必問
49、mysql中char與varchar的區別,什麼情況下用char比較好,int(5)型別欄位如果存的資料超出大小會怎麼樣
50、悲觀鎖、悲觀鎖解釋解釋,還有髒讀和什麼讀一堆掛讀的概念問我怎麼理解他們,醉了,還有事務ACID分別說說,什麼叫原子性,什麼叫一致性,事務的隔離級別哪幾種
51、redis的事務,watcher,當watcher事務提交失敗會返回資訊嗎,返回什麼資訊
52、連線池用過哪些,阿里特意問了druid的特點(特點好多,多說為益),為什麼採用連線池
53、dubbo的整個呼叫過程,讓畫畫,就是那4個,服務端啟動註冊消費端訂閱那個,RPC的過程最好能順口說出加分項。還有問dubbo服務端和消費端都配置了那個生效?dubbo裡的jetty幹啥用的?
54、zk除了做分散式鎖和註冊中心,還能用來幹啥
55、過載和重寫的區別,越詳細越好,說的越多越好
56、介面和抽象類區別,越詳細越好,及為什麼需要抽象類
57、時間片解釋下,上下文切換解析下,什麼情況下會影響上下文切換,怎麼避免過多的上下文切換
58、一個執行緒,從連線池裡獲取一個連線connection後,然後這個執行緒開闢了2個子執行緒,把這個connection傳給它倆個,提交資料會有影響嗎,為什麼(現在想想自己解釋的有點牽強,應該從事務的傳播行為和級別入手,也可能其他,肯定面試官自己使用不當遇到的bug問題,如有合理解釋的或者特意能做了實驗的,一定要告訴大家一聲)
59、什麼叫複製建構函式,建構函式的過載
60、JVM的記憶體分配?(要熟記,越細越好)
61、TCP的三次握手四次拜拜要熟記
62、浮點型別為什麼有時候不精確,詳細說出來,怎麼解決
63、int型別在32位和64位有什麼不同
64、zk分散式鎖具體怎麼實現(58,美團的都問了,最好親自用程式碼編寫下,思路搞懂)
65、給一個字串型別的數字,不呼叫java直接轉的API寫一個方法轉換出來(58的不知道那個技術老大想考啥思路就是轉字元陣列利用ASSII編碼,問他弄這個幹啥他也不說)
66、給我幾張表,寫幾個個SQL(我之前利用子查詢,後來他說不利用子查詢一條sql查出來,其實就是連線查詢group,和count然後再利用統計的數過濾下,其中count(*)和count(1)和麵試官爭辯了起來,他也不確定後來就過了,美團的)
67、寫個單例模式(其他有很多種,我也知道他想考啥,但是想加分,寫最好的2點兼顧的利用私有靜態內部類,網上提到的很少,優化書中的,面試官認為我是錯的讓我確定下,後來給他講通了)
68、熟悉哪些設計模式(然後讓你簡單說說,58讓寫的代理,把各個類圖之間的關係說清楚及介面的設計加分的)
69、代理有幾種?靜態代理和動態代理有什麼區別?什麼情況下用什麼具體說說?
70、讓我說下OOP裡的單一原則的定義(他說這個定義非常重要,非要我說出定義),我拿出具體的設計例項說明哪些地方設計體現單一原則(他還是讓說定義,美團的,醉了,定義我肯定沒仔細推敲過,大家可以推敲下)
71、JVM的記憶體分配,記憶體溢位,內出調優,GC調優,GC演算法,G1收集器,還有引數常用引數名(美團的那個人一直讓我說哪個具體引數名字,我說JVM虛擬機器引數列表一查就知道了知道那是工具就行,我看他的樣子可能也沒記住,還是拿著筆記本查呢,醉了,最好幾個常用的記住看樣子也是有意而無害的我都記個大概的樣子),如何調優如何具體優化舉例子越細越好什麼閥值具體到什麼GC演算法在什麼情況下怎麼設定他的什麼樣的引數越細越好,還有問題診斷,具體怎麼定位,最好前提你說上基於java的哪個版本規範,哪個虛擬機器,因為不同版本不同虛擬機器肯定有所不同,能說出來必加分(呵呵,裝的你多嚴謹,如裝逼成功肯定加分)
72、NIO與IO的區別,什麼情況下用誰,具體說說例子
73、dubbo支援幾種協議,協議的區別,容錯機制,什麼情況用什麼,RPC的過程,dubbo是如何實現負載均衡的(原始碼級別),負載均衡策略,改過監控的中心嗎,如何優化呼叫,怎麼部署,zk掛掉3個掛掉2個會怎麼樣,為什麼,看過dubbo原始碼嗎
74、雜湊一致演算法具體描述下(最後自己用java實現下或理解了),為什麼要用hash一致演算法
75、在CPU不考慮的情況下記憶體有限的情況下計算最大併發數大概多少(linux下有很多注意事項會約束給他說說他可能也想不到都是加分的,然後再讓你不考慮這些因素怎麼計算說說,也和系統位數有關,也有對應的計算公式)
76、在記憶體不考慮,8核CPU,掛起時間(好像是單個執行緒執行任務時間)30ms,CPU滿負載最大多少併發(其實他當時也沒說清楚,後來追問下補充了響應時間1S)
77、給你寫出2個數組,在紙上寫個方法查出相同的元素(想考細節,把大體寫出來之後給他說明一些特殊情況的處理),繼續追問如何優化這個方法(說說自己的見解,如相同元素很多的情況用什麼瞎吹唄),最好把JDK,commons,guava的相關API說下再說名你的理由啥的都是加分的
78、linux命令用過哪些,說的越高大尚越好,常用的肯定要說上
79、樂觀鎖問題,一般不直接問,給你說個分散式場景(用時間戳版本號啥的解決)
80、CAS知道嗎,說說(多多益善,說上ABA問題必加分有時面試官也不知道,扯上volite和鎖區別什麼場景下用誰必加分)
81、讓畫ER圖,時序圖
82、一個類裡幾個靜態方法和幾個普通方法,幾個靜態方法裡有幾個加synchronized,普通方法裡有幾個也加synchronized,這4種方法組合情況各個情況下同一個例項在多個執行緒裡用到時阻塞不阻塞問題
83、tomcat裡有幾個埠的配置?同一個tomcat能同時配置2個埠嗎?
84、tomcat裡如何禁止服務端自動建立session
85、servlet和過濾器,監聽器,servlet啟動順序是什麼樣的
86、spring的核心配置檔名是什麼,具體描述一下里邊的重要的配置,spring和mybatis整合的後的配置檔案又怎麼配置,需要配置什麼,spring和springMVC的區別
87、mybatis的配置檔案怎麼組織的,如何配置
88、spring的AOP和IOC具體描述下,幹什麼的,怎麼實現解偶的,它們是底層通過什麼實現的
89、類載入有哪些,機制是什麼,類初始化的時機(那4個)有哪些
90、一個物件為null一定會被GC掉嗎(肯定不會,至少有2個過程,給他描述下,越細越好,他可能也不知道,楚楚街問的)
91、final static 和static初始化都是什麼時候初始化的?
92、靜態程式碼塊和普通程式碼塊有什麼區別,什麼場景下使用
93、shell指令碼寫過嗎?(就一家問到了就簡答追問了下開頭的宣告幹啥的)
94、看過哪些書籍,平常怎麼學習這些知識的
95、conncurrentHashMap和hashmap的區別(6,7,8可能都所不同,能說出來必加分他可能也沒注意過,不說也沒關係)
96、mongoDB,redis分片,主從,有問到,問到了都是簡單問問,一般都是自己補充上其他東西,最好都要清楚,加分的,也以防萬一,redis持久化2種方式有哪些問到有,然後你追加一些注意事項
97、平常你遇到的一些不規範性問題,能再優化的問題,具體說說例子
98、ngnix具體怎麼配置切換伺服器和負載均衡策略,說說具體的配置地方
99、那些併發工具就不說了,最好都知道幹啥用的,問到也有但是很少不知道到問啥
100、netty和mina到時有提到的,但是就是簡單問問知道嗎,用過嗎這些問題,當然自己對它們越熟練越清除越好
101、tomcat具體在哪配置連線池,能配置哪些資訊
102、java反射類的私有方法與普通方法相比,需要多處理什麼?
103、java中有哪些集合?這些集合有什麼區別,arrayList和HashMap的擴容機制(集合說的越多越好,各個集合都有什麼區別,什麼場景下用什麼,注意些什麼,有些6,7,8有不同,能說出來更好)
104、zk有哪幾種類型的節點,又有哪些監聽事件,具體說說?
105、用過哪幾種抓包工具?報文結構?
106、如何中斷一個執行緒?執行緒在那種狀態才可以中斷?
分庫分表原則,具體什麼場景採用什麼舉例子,分散式事務問題,AIO,索引原理等還有很多問題沒問到,不過如果熟練掌握以上知識,即使一些其他的不懂也會是瑕疵不影響整體印象,再結合下邊幾點作為補充,技術面試國內任何一家公司包括阿里都是沒問題的,吹的有點大,只適合裝逼人士,一本正經者吹毛求疵者勿看。如果你已面試,歡迎補充面試技術點,你我碼農共同進步!
1、Spring.mvc的優勢,原理,流程
2、Mybatis的原理優勢
3、集合裡面那些物件的原理
4、擴容原理,特別是map的底層
5、Hashmap、Hashtable和cocurrentHashMap的區別,要講出它們各自的實現原理才行,比如Hashmap的擴容機制、cocurrentHashMap的桶分割原理、多執行緒安全性。
6、幾種造執行緒池的方法,區別
7、Rpc原理
8、Nio和netty,常用的介面
9、Redis和資料庫的持久化的
10、Memached過程和原理
11、多執行緒時間複雜度
12、Redis做佇列的原理
13、zk做訂閱的原理,底層
14、Juc裡面的鎖原理
15、實現自己的hashmap
16、treemap紅黑樹
17、jvm調優
18、jvm記憶體模型
19、類載入器機制
20、資料庫索引
21、資料破壞索引
22、手寫快排
23、js閉包
24、nio是否瞭解 阻塞之後通知機制是怎樣的?
25、Java 的序列化做什麼用的 序列化id會出現哪些問題?
26、 在Java中Executor和Executors的區別?
27、 為什麼使用Executor框架比使用應用建立和管理執行緒好?
28、怎麼通過linux命令去分析jvm裡面那個執行緒阻塞了
29、Java中用到的執行緒排程演算法是什麼?
30、什麼是多執行緒中的上下文切換?
31、classloader結構,是否可以自己定義一個java.lang.String類,為什麼? 雙親代理機制。
32、有沒有做過jvm記憶體調優,如何做的,舉例子,用過哪些工具?
33、Java中的volatile關鍵是什麼作用?怎樣使用它?在Java中它跟synchronized方法有什麼不同?
34、面試官從簡歷裡抽了一個較感興趣的專案,讓把專案簡單介紹了下,針對專案問了幾個技術問題
35、 介紹Java中垃圾回收機制,程式設計師平時需要關注這個嗎?為什麼?請舉例說明。
36、資料庫隔離級別介紹、舉例說明。
37、override和overload的區別。
38、求二叉樹的最大距離(即相距最遠的兩個葉子節點),寫程式碼。
39、 兩個棧實現一個佇列,寫程式碼。
40、 你覺得你的優勢是什麼?有什麼技術薄弱點嗎?
41、資料庫sql調優,慢sql定位
42、索引有哪幾種,區別,使用場景
43、mysql引擎,哪幾種,區別使用場景
NIO原理,記憶體模型,GC,鎖機制
傳統IT外企幹了8年,兩年前轉網際網路的,面的和被面的都不少。
這幾天專案空檔期,閒的蛋疼,隨手寫的, 不喜勿拍。
1. 演算法基礎
寫java的基本上都是做應用系統的,用到演算法的機會幾乎沒有,所以一般不會考。但是如果工作年限比較長,保不齊面試官懷疑你的程式設計能力,故意要考考,所以快排、堆排、逆轉連結串列、遍歷二叉樹之類的基礎還是複習複習吧。
如果面的是bat核心部門,擔心碰見裝逼人士的話,也可以提前複習下《程式設計之美》之類的。
2. java基礎
hashmap面試官最喜歡考,一定要搞明白原理。
treemap知道就可以,應該沒人閒的蛋疼考紅黑樹。
threadlocal面試官也喜歡考,要搞明白原理
反射、動態代理、ioc、aop複習下吧,幾乎必考
nio、aio幾乎都會問,抽空寫寫例程,知道netty mina
class loader: 知道雙親委派,如果知道tomcat、jetty class loader異同更佳
3. gc
gc很多面試官都喜歡考
面試前背熟各種gc演算法的區別,理解原理。
G1很多面試官自己都不明白,沒時間就不用管。
4. 高併發
傳統IT一般接觸不到高併發,不過沒關係按下面說的做,應付面試問題不大
把java.util.concurrent下面所有的包和類通讀一遍,理解原理、記住核心程式碼、寫例程,網上有很多concurrent相關類原理解析的文章,對著文章看原始碼理解起來問題不大。
有些類程式碼很複雜比如aqs,看不明白就算了,也不用太花功夫,記住原理即可,因為大部分面試官也不明白。
一定要寫例程,例程最好跟你的業務能扯上一點點關係,這樣面試的時候就是你實際專案裡面的程式碼了。
面試官喜歡考的類有:ConcurrentHashMap、讀寫鎖、Condition、執行緒池、Barrier、CountDownLatch、Callable、BlockingQueue
5. hdfs和mr
傳統IT一般也接觸不到,如果不想準備就算了,如果想準備的話,就在自己的開發機上撘3個linux虛機, 按照網上的教程自己一步一步撘一個hadoop環境出來,然後找幾個實際業務中生成出來的log,寫幾個mr程式處理一下。
面試的時候就可以很謙虛的說,實際專案裡面用過,但是用的不多
6. application server
websphere、weblogic、jboss之類的就不用準備了,應該沒人問你這些啦。
有時間的話,看看tomcat和jetty的原始碼,重點看執行緒模型和io,這將是一個很好的加分項
7. 資料庫
oracle、sybase、db2不會有人關心了,如果之前沒用過mysql的話,找本介紹innodb原理的書好好通讀一遍吧。
理解myisam和innodb的區別
理解關係型資料庫索引的原理,理解一些簡單的索引優化的原則。
面試官很喜歡給出一堆where子句,考索引、複合索引什麼情況下起作用
8. 快取
一致性雜湊很多面試官喜歡考,提前準備下吧。
9. ssh框架
這些沒搞過就沒搞過吧,這種框架層面的東西,對於一個有經驗的java碼農,學起來也就是分分鐘的事情。
不過你也可以說這些我沒用過,但是我知道原理,然後說一堆動態代理、cglib的原理出來,也是加分。
希望這些對傳統IT想轉網際網路的朋友有幫助。
not in 與 not exists 有什麼區別? in查詢不對null進行處理
二分,遞迴,還有冒泡,就差不多了