作為一位二本畢業,非計算機專業的學生來說,先后在0-20小公司,外包,100-499的中小公司做java開發,目前終于通過大廠面試,下面來看看整個面試過程
一面:電話面試
1、Java重寫equals 為什么要重寫hashcode?
答:如果重寫了equals不去重寫hashcode那么就有兩個對象equlas相等,hashcode不一樣,對于hashSet來說,因為hashcode不一樣計算的數組位置下標也不一樣,這樣兩個對象都能存到這個Set集合里面。這就違背了Set不能裝重復對象的設定。這樣包括hashmap在內的只要已hashCode未基礎的各種集合無法正常去判斷一個對象。
2、介紹一下java常用的集合類,底層數據結構,線程安全不安全
答:介紹了ArrayList LinkedList HashMap HashSet HashTable??concurrenthashmap 詳細介紹一番。(面試必問,已經老油條了)
3、說一下hashMap的put方法流程
答: 巴拉巴拉一大堆,重點要分1.7 和1.8講,以及講清楚了1.7的鏈表頭插法導致并發擴容的時候的形成的環形鏈表導致的死鎖問題。1.8改成尾插法來解決這個問題。1.8的紅黑樹引進。什么時候會變身紅黑樹。(面試必問,必須的)
4、new一個hashMap 傳入的容量為10 最終new 出來的map的數組長度是多少?
答 是16
hashMap 的數組長度總是2的n次方,至于為什么 源碼這么設定的,不太清除為什么這么設定。(看了源碼也不知道)
5、volitale關鍵字用過嗎,它能解決什么問題?
答:解決并發問題的線程之間的可見性問題,當多個線程對同一個變量進行操作的時候,該線程并不能感知到別的線程已經修改了這個變量。volitale是對JAVA對MESI緩存一致性協議給出的關鍵字。之后又扯了什么是MESI協議,cpu從從主內存讀變量到工作內存這一大堆流程。volitale還能防止指令重排。之后面試官接著問讀寫屏障,這我就支支吾吾打不上來了。(這塊射擊的底層計算機知識太多,問深了打不上來)
6、線程池用過嗎,有哪些核心參數,線程池的工作流程是什么樣子的。
答 :核心線程數? 最大線程數 最大空閑時間 線程池滿的時候的執行策略。然后介紹了線程池的工作流程,以及這幾個參數是如何配合流程工作的。(這問題,為了面試也得專門看,穩)
7、線程池內的線程出現錯誤拋出來異常?線程池會如何處理?
答:移除銷毀該線程,重新創建一個新線程(這個不知道答的對不對,小伙伴可以自己查一下)
8、了解jvm模型嗎,那些區域是線程共享的那些是線程獨享?
答:線程棧,本地方法棧,程序計數器是獨占的 堆和元空間共享的。
9、知道oom嗎,發生oom如何排查?
答:巴拉巴拉一大堆,說的估計不準確,但是大概意思是這樣子的。
10、數據庫的隔離級別,什么是臟讀,mysql默認的隔離級別。
答:巴拉巴拉一堆,(基本概念題是,穩的一批)
11、做過sql優化嗎 mysql 索引的數據結構 什么時候索引會失效
? 答B+Tree 然后巴拉巴拉一大堆。
12、接著問B+Tree有什么特點,為什么要用B+樹
答 巴拉巴拉一大堆(做足了準備,穩的一批)。
13 介紹幾個設計模式?項目應用
答:工程模式,模板方法模式,策略模式,責任鏈模式。
認證鑒權管理用的責任鏈模式
一面大概40分鐘,主要記得的就上面這些問題。
線程池用的策略模式
springmvc中用的適配器模式調用controller方法。(不一定介紹項目應用,介紹源碼應用也一樣的)
兩天之后二面(視頻面試)
1、i++和++i;
2、equals和== 區別
3、方法的重寫和重載
(這三個問題問的我狂喜,我四年工作經驗問我這個???然后平靜的回答了這些問題)
后面全程高能,不做面試準備基本連話都說不出來!!!!
4、談一談synchronized知道它的膨脹升級過程嗎
答:每個對象都可以成為synchronized的鎖對象,在對象的對象頭存有持鎖線程的信息。然后介紹了一下synchronized的無鎖->偏向鎖->輕量級鎖->重量級鎖的整個過程,巴拉巴拉一大堆。
5、AQS了解嗎,知道AQS框架下的那些鎖,有看過源碼實現嗎
答:介紹了ReentrantLock?后面說源碼實現隨便說了說。(基本我已經忘完了源碼,答得比較爛)
6、redis用過嗎?它又那些數據類型?你們項目中這么用的這些數據類型?
答巴拉巴拉一大堆(這個文體還好 ,我們主要用String 和hash?然后介紹了一些簡單的業務場景使用)
7、了解redis的緩存淘汰機制嗎?遇到過redis內存崩潰嗎?
答?
LRU算法然后介紹了一下算法實現。redis內存崩潰沒遇到過(實在不敢說遇到過,萬一接著這個問題往下問,這么辦。不敢接)。
8、看你簡歷里面都是用的springBoot,如何做一個start
答:詳細說明了一下如何做一個start(這個之前學springboot的時候做過,比較清楚),并介紹了一下自動裝配原理
9、spring的bean聲明周期?
答:巴拉巴拉一大堆(終于輪到我發揮了,我自認為答的最好的一個問題,從源碼層面將sping容器啟動過程,如何解決循環依賴,為什么要用三級緩存,springAop
sping和mybatis整合和面試官深入探討一番,過程20分鐘,不磕不拌,接下面的問題面試官再也沒提spring的事)
10、介紹一下啊mysql有那些引擎,有什么區別,mysql的鎖
答:巴拉巴拉一大堆(又是一大堆概念問題,穩穩的)
11、用過分布式鎖嗎?這么實現分布式鎖的?
答:用過,redis做分布式鎖 介紹了一下redission框架和原理(這個最近項目中有用到這,所以比較了解,總的來說,你要是用的現成框架實現的,需要知道原理,如果你是自己寫的,需要知道實現細節以及考慮了那些問題)
12、看你用過rabbitmq,你們是在什么場景下用的,你們是這么做可靠性投遞的?
答:介紹了我們的應用場景,已經可靠性投遞的實現(消息重復發送和消費者做冪等性保證)(說實話感覺過于簡單,面試官沒有看上我們的方案)
13 dubbo 的服務暴露和注冊或稱,調用過程
答;巴拉巴拉一堆(我簡歷上寫的有dubbo,但是很久都沒有用了,如果不寫,那簡歷上一個rpc都沒有,有點磕磣,還是寫了,照著準備的答一下吧)
14 什么是CAP理論?zookeeper是cp架構還是ap架構?為什么?
答:巴拉巴拉一大堆。(解釋一下:CPA是指 C:數據一致性 A:系統可用性 P:分區一致性 簡單說:我們的服務如果是多節點集群部署,那么總會存在網絡等問題造成節點之前無法通信問題,所以要保證P,在發生網絡不可達造成節點信息不一致是,要么你停止對外服務,保證數據一致性 這就是CP架構,要么你繼續提供服務,但是節點數據不一致,這就是AP架構,這個大家可以參考資料。之前沒了解過,為了面試準備看到的。)
15 現在有10萬電影票 如何實現秒殺搶電影票?
答:用分布式鎖,然后巴拉巴拉將了一大堆(開放性問題,只要你說的有道理就行,但是不能不說)
16 數據庫里面的表有2000w數據,如何處理?
答:(其實想問如何分庫分表,委婉得表示了一下自己實際應用中并沒有分庫分表得經驗。)
17 你用到過spingCloud沒有?
答:沒有。面試官應該看我的簡歷沒有springCloud,所以問了一下,這里我簡單得介紹了我們得項目情況,沒有必要上springCloud然后表明了自己最近也在看springCloud并且向面試官介紹了幾個組件及其實現原理。
算法題:
給一個int數組包含重復元素,如何統計不重復元素得個數,并且輸出不重復元素?
排序加雙指針法
可以參考力扣題目?https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/?解法大同小易
因為做過這個上面力扣這道題,所以第一反應就是有思路序加雙指針法(快慢指針)大概15分鐘做完,寫代碼得時候會和面試官交流思路,然后因為緊張,變量名都寫錯了,面試官給了提示。還好最后運行出來了。
二面是所有時間最長得一面,考察的也很廣,大概持續了一個多小時。面試完整個人都虛脫了。
三面:(視頻面試)
聊了聊項目得實際情況,問了一下項目某些功能得具體實現,并問了一下哪個項目最讓你感覺成功以及解決了那些問題讓你印象深刻。
我回答了最近的項目,深度參與到了需求分析,代碼開發,問題修改,環境發布,技術文檔輸出。然后舉了一個開發遇到得數據庫死鎖問題(加索引引起得select操作和update操作在并發條件下出現得死鎖,,以及排查和解決過程。)
由于項目是在沒有高并發和大數據得地方,面試官可能也沒覺得要問得地方,最后讓寫了一個排序算法,時間復雜度在O(nlogn)級別
(其實就是讓你在快排,堆排,歸并排之前選一個寫),我寫了一個歸并排序。并簡單聊了一下分治得思想。
三面結束!!!不到半個小時
后面隔了一天hr打電話說面試通過,走offer發放流程。
總結:基礎貫穿整個面試過程,所以復習基礎很重要,spring
mysql jvm 鎖 面試大廠必問。另外我相信很多和我一樣一直在小公司開發的程序員,項目根本就沒有高并發,(有并發,高并發談不上)大數據處理真實項目經驗 。都是一些業務項目。這個時候簡歷上面不建議寫有高并發大數據處理項目經驗。如果你寫了,他會問你哪個項目做的高并發,是什么業務,具體做了那些并發管理 并發量是多少,qps 多少,各種處理細節,集群這么搭的等等一堆只有做過才能答上來的問題。這部分不像基礎知識和源碼能靠自己學習就能搞定。萬一被問露餡了那更是給面試官留下一個非常不好的印象。你可以說自己學習了解過這部分知識,也知道一些方案。可以和面試官講一下這些方案。