四面快手、終拿Offer,想告訴你的一些事情

歡迎關注專欄:后端架構技術精選。里面有大量關于的Java高級架構知識點分享,還有各種面試趣聞以及程序員身邊事,如有好文章也歡迎投稿哦。

快手高開及以上職級面試 是沒有筆試或者機試的,所以從第一輪開始就是直接面對面試官。

一輪

主要考察對Java基礎的理解和深入程度。

  • Spring 原理,Spring IOC、AOP。
    這個問題 最好可以多說一點,比如 對于IOC,不妨把Bean 如何加載、如何初始化以及如何注冊到IOC容?中的詳細過程說一下, 涉及BeanDefinition、BeanFactory也深入細節聊一下。

  • 一個請求過來在Spring中發生了哪些事情。
    這個問題不妨把一個請求過來 在TCP層面上建立連接、操作系統如何處理連接、Web容器?接收到連接對象后做了哪些事情、Spring 如何對接收到的請求進行處理都說一下,當然最終還是 落在Spring 容器內部如何處理一個請求,這個過程一定要說清楚,需要體現細節。在說前面的內容的時候,可以放心面試官不會打斷你。

  • 手寫一個棧,實現 push,pop方法,以及 max(獲取最大的元素)方法,要求時間復雜度為 O(1)。
    這是一個考察數據結構的問題,一方面需要候選人對數據結構有所了了解,一方面也需要候選人對代碼有駕馭能力(畢竟要手寫代碼)。面試官會給一定的時間,在這段時間里面試官不會打擾你,并盡可能為你提供方便,比如簽字筆不好用面試官會幫你更換。據我個人經驗,凡是面對需要寫代碼的問題,都不要急著放棄,靜下心來,仔細思考,都是可以寫得不錯的。如果沒能寫出來,面試官會問你實現思路路,如果你的思路很優化,一樣可以過了這道題,但是前提是你的代碼不能一行都不寫。
    對于數據結構的考察的話,我建議看一下 jdk中對于 List、Stack、Tree、Set 的實現,比如至少你要知道如果讓你實現一個單鏈表你會如何實現,比如你可能會定義一個Node節點,里面有當前節點的key和value,還有對于下一個節點的引用。如果你對這一塊的內容還不是很清楚,可以關注我的公眾號:《Java技術zhai》,我之前在上面是有詳細分享過的,對于熟悉jdk對于各種數據結構的實現,這道題是很容易易過的。

  • JVM內存結構
    這個問題需要你能畫出JVM內存結構的圖,畫出方法區、堆、程序計算器?、虛擬機棧、本地方法棧,并說出每一個部分具體是什么作用,比如哪些是線程共享的,哪些是線程獨享的,哪些地方存放了什么數據,為什么會這樣存放,哪些虛擬機參數對這些空間大小是有影響的,可以如何配置。這些都比較常規。

  • 手寫一個單例
    這個基本上大多數公司都會考察的。要寫一個 基于懶漢式的 雙重檢測的單例。單例有三個比較關鍵的點:

  1. 私有構造方法,避免外部new出對象;
  2. 保證唯一性;
  3. 提供一個全局訪問點;

另外懶漢式雙重檢測的實現方式有三點需要注意的地方:

  1. 全局訪問點必須是靜態的,外界使用可以通過類直接調用;
  2. 在進入鎖之后還需要校驗;
  3. 保存單例例對象的私有變量一定要用volatile修飾,這個地方 可以多說一些,比如 volatile防止指令重排序,保證內存可見性(JVM層面 和 CPU層面 可以分別說)。volatile 這個地方能說的東西還是很多的,基本上可以與面試官再聊二十分鐘了。
  • HashMap
    對于 HashMap 其實一般高級崗位及以上不再會問這個東西了,一旦問了,肯定不是讓你只說一下數組+鏈表的。對于它的實現,不同版本實現方式不一樣。在jdk1.8之后,HashMap 除了數組+鏈表之外,引入了紅黑樹。那么好了,你需要說明對于引入了紅黑樹的 HashMap 如何put一個元素,以及鏈表是在何時轉化為紅黑樹的。比如首先需要知道這個元素落在哪一個數組里,獲取hashcode后并不是對數組長度取余來確定的,而是高低位異或求與來得到的。這個地方首先得知道 異或、與是做什么樣的運算的,然后說一下在HashMap中的實現,比如hashcode 無符號右移16位后和原hashcode 做異或運算,這相當于把hashcode的高16位拿過來 和 hashcode的 低16位 做異或運算,因為無符號右移后 前面高16位都補零,這就是前面說的 "高低位異或“,進而是 ”求與“,和誰求與呢,和 數組長度減1 求與。
    說到這里起碼能夠證明你是看過源碼的,接下來說說你的思考。
    比如 我們知道 對于hashmap 初始化容量決定了數組大小,一般我們對于數組這個初始容量的設置是有規律的,它應該是 2^n 。這個初始容量的設置影響了HashMap的效率,那又涉及到影響HashMap效率的主要因素,比如初始容量和負載因子。當已用數組達到容量與負載因子的乘積之后會進行一個rehash的過程,這個地方涉及到的 如何rehash 及各種算法如果有時間也是可以說的,沒有時間不說也沒有關系。回到剛才說的 2^n, 可以說說它為什么是2^n。當我們說什么東西為什么是這樣的時候,我們一般從兩個角度考慮,一個是這樣做有什么好處,另一個是不這樣做有什么壞處。我們剛才說到”求與“這個過程,如果不是 2^n, 會導致較多的哈希碰撞(具體原因 可以自己分析一下 或者百度一下),這個會影響HashMap的效率。
    說完上面這些,既表明你看過源碼,又表明你有自己的思考了,當然也可以進一步說說它是在什么條件下以及 如何進行擴容的(如果時間允許,并且面試官也有耐心繼續聽下去)。對于put操作,這才只是第一步,找到數組的位置,接下來 要看這個位置也沒有元素,如果沒有,直接放進去就可以,如果有,要看怎么放進去,jdk1.8中 對于HashMap的實現中,是基于Node(鏈表節點) 和TreeNode(紅黑樹節點) 的,當然它們繼承了Entry。那么 如果數組當前位置已經有了元素,就得知道這個元素 是 鏈表的節點還是紅黑樹的節點,以便便 進一步確認接下來要put的元素 是以鏈表的方式插入還是以紅黑樹的方式插入,這個地方 在源碼中 進行了一個類型的判斷,如果是鏈表的節點,就以鏈表的方式把要put的節點插入到 next為null的節點上,如果是紅黑樹的節點,就要以紅黑樹的方式插入一個節點。接下來 其實不是考察的重點,但是也可以說說:
  1. 為什么要引入紅黑樹;
  2. 如何在紅黑樹中插入一個節點;
    對于這兩個問題,首先 引入 紅黑樹的好處是為了提高查詢效率,要說出O(log2(n)),但是 在提高查找效率的同時也在插入的時候更加耗時,那可以說一下為什么更加耗時,自然帶出第二個問題,如何在紅黑樹中插入一個節點,比如當插入一個節點的時候我們會默認它是紅色的(這個地方可以結合紅黑樹特點說一下我們為什么默認它是紅色的,從黑色高度以及相鄰兩節點不同為紅色入手),插入后如果父節點是黑色的 就不需要動了了,但假如是紅色的,就需要進行左旋和右旋操作,如果很了解,可以細說左旋右旋如何實現,如果不不是很了了解,到此為止也ok。
    說到這里,我們忽略略了一個重要的點,就是鏈表轉換為紅黑樹的條件,說出 鏈表長度到8(相當于紅黑樹開始第四層) 以及 數組大小達到64 就已經夠了了,也可以進一步說一下 鏈表是如何轉換為紅黑樹的。說完也可以說一下 ConcurrentHashMap中也是一樣的,然后接下來就引入對ConcurrentHashMap的理解,比如在什么地方會涉及到線程安全問題以及ConcurrentHashMap是如何解決的,說說CAS,說完CAS再說說AQS,自由發揮吧。
  • JVM四種引用類型
    這個問題比較簡單,強引用、弱引用、軟引用、虛引用,說一下它們各自的特點和GC對它們的不同處理方式,再說一下常見的應用場景 或者 jdk的實現中對它們的使用,比如 ThreadLocal 的靜態內部類 ThreadLocalMap,它的Key是弱引用的,也可以說一下 在你的理解中 為什么它是弱引用的,假如不是 會怎么樣。

  • SpringBoot 啟動過程
    這個主要是從它基于Spring的事件發布和監聽機制開始說起 就沒什么問題。

二輪

繼續考察Java基礎,和對應用技術的掌握,比如過往項目中所用的一些框架,在這一輪中會被問到。

  • 類加載過程
    加載 鏈接 初始化,鏈接又分為驗證準備和解析,每一個階段 是做了什么 要說清楚。

  • Object a = new Object(); 這行代碼做了了哪些事情,需要從類加載開始說起,這個相當于上面問題的延續,所以 一定要清楚 每一個環節 做了哪些事情的,否則這個問題不可能說清楚。說完類加載的過程 再說一下 開辟內存空間、初始化內存空間以及把內存地址賦值給變量a,接下來可以進一步說一下JVM 或者CPU層面對指令的優化,以及在某些時刻我們需要避免它做這樣的優化,比如在單例中我們的實例需要用volatile修飾 避免指令重排序(可以說一下 在new一個對象的過程中如果指令重排序了會導致什么結果)。

  • 接下來主要是對過往項目中用到的框架、工具的考察

  1. maven的熟練程度,比如問問 <scope> 有哪些類型
  2. Linux命令行的熟練程度,比如 問問 {} 和() 區別
  3. 消息隊列列的熟練程度,比如問問Kafka分區,如何分區等等(因為我過往項目經驗中寫了kafka,所以才會被問及,如果寫了其他消息隊列,也可能會被問及)
  4. Netty,從NIO開始說 肯定是沒錯的,再說說Netty的實現方式,以及它除了IO之外還干了哪些事情。

三輪

這一輪主要考察對于過往項目的業務理解

  • 根據過往項目經驗 依次介紹業務
    這就需要 在面試之前 把自己的做過的項目好好總結一下,它們主要做的業務是什么,解決了什么問題,架構是什么樣的,以及你在其中做了哪些工作。這個地方一定要準備充分,至少要能扛得住面試官三連問。否則會被認為 你不太清楚你們之前做的到底是什么,那你在業務能力方面 可能是不太match的。

  • 你有什什么問題想問面試官的
    這個地方因人而異,但無論怎樣,都不要什么都不問,至少你要表現一點對于崗位的興趣吧。
    比如問一下 公司業務,團隊構成,技術棧,以及你所應聘的這個崗位大概做哪些工作

四輪

HR面試。這一輪可以說是斗智斗勇的一個環節,會考察一些軟技能、個人成長、職業素質,也會問一下期望薪資。

本次快手面經分享完畢,覺得有收獲的朋友可以幫我點個關注與轉發!

贈人玫瑰,手有余香,我是不那么正經的技術zhai,歡迎你的關注~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容