不服輸,你就不會輸!(一份熱騰騰的面經)

點擊上方藍色字體,選擇“置頂公衆號”

一起自學,一起進步


前言

很多人的面經可能是自己的一些經驗之談,也可能是一坨很長的各個公司遇到的面試題,而我其實很瞭解大家的訴求與渴望,但並不是說你看了這篇文章就可以立刻變強,飯要一口一口喫,路要一步一步走,目前面試了幾家獨角獸和一線大廠,都拿到了offer,幾乎是100%的成功率。

下面的內容第一部分是經驗+學習方法,第二部分是如何準備你的面試。

雞湯

我這個人挺愛玩遊戲的,愛玩dota,玩了七八年了,也玩LOL,但是我經常會把遊戲比做是人生,我從來沒有主動點投降過,即使背靠的世界之樹已經快凋謝,但是我堅信一定能找到對手失誤的時候一波把別人打趴下。我經常掛在嘴上的口頭禪:怕,你就會輸一輩子。所以無論何時何地,保持自己的競爭意識,和自己比,亦或是和優秀的人比,都會不斷促進自己的前進……

現實

這一段話其實是會有很多共鳴,當然這段話其實也是我在這篇文章快結尾的時候補上的,就是在職場,在人生中,不要輕易地看不起起任何一個人,也不要以第一印象去定奪一個人,別人受到了你的嘲諷,你的偏見,但別人也會因此暗下決心,請不要讓第一印象,偏見暗自在黑暗中生長,可能別人會奮起直追,當別人超過你的實力的時候,別人回過頭髮現,其實去報復你,去反擊你之前給過的偏見的時候,卻已經沒有這個必要,因爲不在一個Level了,就像你當年在高處確看不起低處的人一樣,別人他日站在高處發現爲什麼要去和低處的人比較,實屬可笑。當然我身邊有幾個這樣子的例子,經歷過嘲諷,經歷過不屑,每天只睡三四個小時去拼了命的前進,沒有任何娛樂,雖然他已經成長爲一個大牛,他卻說曾經的偏見的眼光給他帶來了激勵,但同時也帶來了深深的傷害……

我的複習歷程

階段一(學習方法之“記憶宮殿-聯想記憶”)

在我一年前給自己定下要去XX公司的目標之後,不間斷的準備了一年,這一年中,我到處在知乎,脈脈,網上,技術羣中搜尋着別人的面試題,然後看,做,遇到不會的去查閱資料進行回答然後儲備到自己的知識庫裏……一個驚人的數字:據不完全統計,我看過的面試題可能超過上千道(所以現在別人問我一個題目,基本上都能回答出來),當然一年之中的週六日大部分時間都是去公司學習,平常的節假日回家之後當然也是看書和學習,平常工作日一般會下班之後到家抽出1-2個小時繼續學習;這一年中讀了大概六七個框架的源碼,看了不少的書,所有的視頻都是兩倍速的速度來訓練,所以有些人看到我看視頻的時候會覺得很瘋狂,別人的語速太快了,都會問我別人講的這麼快你聽得懂麼?其實也是訓練出來的,一開始是1.2倍,到1.5倍,到1.8倍,到最後的2倍,再快的話聲音就會失真了;當然讀書的速度也是成倍的提升,我記得在機場候機的兩個小時刷完了一本書;依稀記得過年的幾天假期也仍然保持着一天至少6個小時以上的學習時間,導致一些親戚朋友過來串門的時候都覺得我很冷漠,不理別人,當然這不算什麼,因爲周圍遇到的幾個人會更拼,有些人工作日一天持續3-4個小時學習,非工作日10個小時,有些人甚至一天可能只睡4-5個小時的時間…..

正所謂 取法其上,得乎其中;取法其中,得乎其下,但其實這一年的成長遠超過我前兩年渾渾噩噩的工作及生活。

1  tips:我當年考駕照的科目一也是這樣,一晚上刷了上千道題目,第二天去考試,你可以理解爲題海戰術,但不僅僅是題海戰術,這個時候我引申出我的學習方式的第一大殺器----“記憶宮殿”之“空間聯想”
2
3
4
5  我其實高中甚至大學的學習方法很爛,因爲一直找不到我自己的學習方法,都是題海戰術,靠熬夜,靠多寫題目去和別人拼,後來發現成績並沒有提高,當時的我多渴望有人直接告訴我一個完美的學習方法,那我直接按照做就好了,然而事實是我在畢業之後,工作的時候才真正找到了屬於我的學習方法。
6
7  所謂“記憶宮殿”之“空間聯想”,並不是像卷福那樣把知識點都放在腦子中,想像成自己熟悉的各個地方存放,我這裏的“記憶宮殿”也是腦海中的一片連續的內存空間,像數組一樣,這時候我每吸納一個知識點,我會立刻在這片連續的內存空間中找到能和這個知識點強引用,軟引用,弱引用關聯的地方,將他們像樹形結構一樣串起來,所以當我以後想到一個知識點之後,我會立即聯想到與他各種關聯的知識點,脫口而出的不再是某個單一的知識點,而是既有水平橫向的對比,又有縱向垂直分析的過程。
8
9  上述描述可能會有點抽象,這時候我舉一個例子:假設我現在腦海中有一個知識點(爲了通俗易懂,我的例子儘量平易近人),這個知識點是這樣,一個結構CopyOnWriteArrayList,基於一把獨佔鎖的讀寫不互斥的線程安全的結構[不清楚的可以專門看一下源碼或者找網上博客去看一下],而這裏我們要汲取的知識點並不是它作爲一個結構被我們記住,而是它其中的思想(寫時複製),所以每次當我聽到COW這個東西,我大腦中的那COW一片區域會有大量相關的知識點出來,比如redisRDB主從複製也是用的COW這種思想,說白了是一個快照的思想,而我這時候突然又提到了“快照”,這時候腦袋中的知識點很快的將關聯的mysqlMVCC湧現出來,就這樣一層關聯一層,錯綜複雜,層巒疊嶂,但也絲絲入扣,環環相連,成爲一顆不斷壯大的知識樹......

階段二(學習方法之“口若懸河-刻意練習”)

上面說過了第一階段其實已經把自己的目標定下來了,但是遇到一個很現實的問題,你所有遇到的面試其實都是一個和別人交流的過程,你必須將自己的優勢完全展示出來,並且是讓人能聽的簡單易懂的方式,所以第二階段的“刻意練習”分爲兩部分,第一部分我會將自己學到的知識點刻意拿出來和別人討論,比如同事,比如在一些技術羣,這樣不僅在交流的過程中,你會發現自己哪裏說的不夠嚴謹,不夠規整,不夠深入,或者說別人也會依據你所說的提出一些問題,如果你不能遊刃有餘的回答出來,說明這個知識點掌握的還是不夠好;

第二部分其實就是“技術分享”,在團隊中技術分享,或者參加線下的技術分享,這裏有個好處就是,當你進行技術分享的時候,你會帶着壓力,你必須不僅僅是分享這個知識點,他相關的點,他橫向涉及的點,以及你分享過程中別人會提問你的點,還有就是如果將這個知識點講給一點都沒接觸過這個知識點的人等等,其實分享一次挑戰難度會非常的大,你必須花十倍百倍的精力去準備一場面試分享,其實後來面試的時候發現,這其實也算一個加分項,你說你進行過技術分享,有時候別人會讓你聊聊,甚至讓你再進行分享一次,別人會覺得你是一個熱愛技術,願意進行交流的人……

tips:一些技術氛圍比較好的技術羣裏面大家會經常討論一些生產上遇到的或者面試中遇到的問題,這時候千萬不要視而不見,參與進去,說出自己的想法,並且和別人討論,讓被人給你進行糾正等等,時間長了也是一種變相鍛鍊的過程

階段三(學習方法之“兵臨城下-三輪決戰”)

我是裸辭,所以各位朋友們,搞清楚自己目前的狀態,好好分析自己的狀態,我分析了一下自己的情況:1.沒有經濟壓力 2.回家去家裏附近的圖書館複習準備一個月,只管複習不用去考慮別的什麼雜事,每天起很早開車去圖書館佔座,八點到圖書館的時候,一層就已經排了將近200個人的隊伍,等八點半正式開門,我們就蜂擁而上,衝進去搶佔座位,30天時間只有兩天沒有搶到座位,又返回家中去學習,剩下的28天幾乎是風雨無阻,雷打不動的從早上八點到晚上七點時間學習,當然目標很重要,第一天就把這一個月內要複習的東西全部羅列好,每天按計劃進行,我上面說的三輪是這樣子,我離職之前審視了一下自己,發現我整個知識棧體系相對於外面問的東西有幾個薄弱環節,我就專門針對性的去複習,舉個例子,JVM比較薄弱,我就第二遍刷了周志明的書,然後同時每天跟着救火大隊長的JVM專欄,並且我會主動去把所有同學提出的問題都在評論區給予他們回答,來鍛鍊自己,然後回去知乎上把所有R大關於JVM的回答都瀏覽一遍,至此爲止JVM常見,常用的在我這裏都能解答。第二輪是把自己簡歷上每一個點喫透,項目喫透,能把機器配置到流量大小,每一個應用層的流量,極限的一些基本參數都得記住,同時每天挑一個重點面試題看,然後能表述出來。第三輪也就是最後一輪,自我面試,假設自己是面試官看到你的簡歷會問什麼,越詳細越好,找你的簡歷的每一個漏洞去問(下面我會詳細的分析你該如何準備你的簡歷,你的項目,你所寫的知識點),然後我之前收集的很多整輪面試題,我會專門挑一個小時時間,自我進行回答複述,算是自我演練面試的過程,事後進行復盤……

總結學習方法

好,我的經歷和經驗其實還有很多東西,但是文章畢竟只是文章,他無法去描述你所有的奮鬥的過程。至此我要總結一下學習方法,這時候很多同學可能會說,你說的這些方法我都知道呀,我還是不行,這其實並不是雞湯:你即使知道所有道理也過不好這一生,而是你能坐的下冷板凳,靜下心來,不急不躁,畢竟改變最好的時間就是你看完整篇文章之後開始。

  1. 構建好自己的知識體系,空間聯想,不斷重複,記憶曲線

  2. 刻意練習,多交流,多接受不同的意見,拓展思路

  3. 明白自己哪一個環節薄弱,專項針對,比如我redis弱,那我這一段時間就狠抓redis,不要又看redis,又看zk,又學netty的

重點

下面是你該如何準備你的項目?(這裏我就不說單一的技術棧,知識點,這並沒有什麼意義,網上都能找到,很多面經都會有很多題目,這也是我整篇文章沒有任何一道面試題的原因,而且現在慢慢的已經逐漸不太會問你單一的技術點了,都是結合生產實際,要你對你自己做的項目知根知底),下面我以問答的方式讓你來準備你的項目。

1.首先,你要簡單能描述出你的項目

(市場切入點是什麼?怎麼盈利?業務模式是什麼?上下游的業務有了解麼?這種業務模式你覺得會有什麼問題?你的項目解決了什麼問題?能否在牆上畫出你的項目結構圖,架構圖)

tips:軟件工程很重要,我是被問到畫出ER圖,系統流程圖,泳道圖等等

(項目的日活?GMV?每天的訪問量?一年營業額?合作商家大概多少?租戶有多少?目前數據量多大?系統部署了多少臺,機器是什麼配置?每一層的流量大概是多少?比如打到mysql的流量有多大,mq的流量,redis的流量?線上的超時時間怎麼配置的?重試怎麼配置?冪等怎麼做?db和cache在一致性怎麼做?jvm垃圾收集用的什麼算法?老年代新生代給了多大?有什麼問題麼?cms和g1的區別?線上爲什麼不用g1?目前的架構模型對於現有業務量有什麼可優化的?有什麼難點?以後如何擴容?數據庫表的設計是怎麼樣的?違反了三範式會有什麼問題,有什麼好處?當前的數據庫表設計有什麼問題,有什麼可優化的點?項目中有你負責模塊的設計模式如何運用?能否畫出這個設計模式的uml圖?相比之下這種設計模式和另一種有什麼區別?有什麼優缺點?)

tips:我這裏沒有細化任何一個框架知識點的問題,是因爲一個知識點比如分庫分表都會帶來大量的問題,我這裏着重整體的項目問題,這裏起碼要準備三個項目的亮點難點,尤其是大廠面試官,很挑剔,那種比較一般的難點就不要拿出來說了,反而會降分

2.第二,對於你項目中運用技術的思考

架構選型,爲什麼選它,架構設計,爲什麼這麼設計?拆分微服務的理由?爲什麼XX模塊和XX模塊沒有拆開,或者拆開了?舉個例子zk和eureka作爲註冊中心,你們選型用哪一種?針對你們業務量,和服務實例的數量應該選擇哪一種?這兩種模型不同,爲什麼說一個偏向於AP一個偏向於CP?會帶來什麼問題?引入新框架是否會帶來新的挑戰?出了問題是否能有人hold住?團隊成員開發能否快速上手這個框架?

如果在面試官問你一個技術,你可以將爲什麼用它?你是怎麼用的?用它有什麼優點,缺點?備份方案?這種方式表達出來,別人會覺得你是有思考的,你相比其他競爭者是有優勢的。

3.常見問題的梳理

這部分就是很常見,外面也會必問的問題,很簡單,比如spring相關的aop,ioc,mybatis相關的,dubbo,zk,netty,springcloud,springboot的starter,mq的,線程池,hashmap,併發相關的集合,CAS,volatile,synchronized(1.6之後的鎖升級),原子類,網絡的NIO,類加載過程,三次握手四次揮手,一次http請求的過程,這些常見的問題起碼應該爛熟於心,當然有些東西說的越深入越好,最好能涉及到硬件,震懾到面試官,比如每次我聊到CAS,會提到底層的MESI協議,會聊到高速緩存的結構,會聊到Modified,Exclusive,Shared,Invalid四種狀態如何切換,會聊到緩存加鎖之後引入的一些寫緩衝器,和無效隊列問題,再提到release,acquire,store,load屏障分別做了什麼,怎麼保證可見性,有序性等等等,所以聊到你擅長的,你就狠狠的噴。

4.稍微深入的題目拓展

平常做一些稍微難的題目其實會拔高自己的思考的能力,我來舉幾個例子,我以AQS爲例子

  1. addWaiter和enq方法中新增一個節點爲什麼先將新節點的prev置爲tail,再嘗試cas,而不是cas成功之後來構造節點之間的雙向鏈接?

  2. 喚醒節點爲什麼從tail往前遍歷?

  3. unparkSuccessor有新線程爭鎖是否有漏洞?

  4. aqs如何保證隊列活躍?

  5. Propagate狀態的節點存在的意義?

等等等

5.自己簡歷上寫的每一個知識點要喫的透透的,並且能夠獨立描述5min,還是要把別人能講懂的那種

6.自我攻防戰

每天最好能針對你的項目找漏洞,再找到解決方案,類似“左右互搏”,有些遊戲大神不都這樣,每天可能只打兩三把遊戲,但是水平很高,是因爲別人在腦海中打遊戲,演練每一種情況,每一個細節,同時結合一些網上的面經,進行模擬考試,自我演練。

時間過得很快,文章已經接近了尾聲,在複習和快速成長的一年中認識到了很多大佬,大家也對我都進行了很多的幫助,這裏要十分感謝他們,也有很多朋友催我出一份面經,目前能想到的只有這麼多,後續會繼續補充,希望這篇文章對大家有幫助,大家有什麼問題可以後續加微信進行詢問……


往期精彩回顧
Spring Context 你真的懂了嗎
JDK1.6 對 synchronized 的鎖優化
Java 泛型(上)


END

如果讀完覺得有收穫的話,歡迎點【好看】,關注【Java知其所以然】,查閱更多精彩歷史!!!

讓我“好看” 

本文分享自微信公衆號 - Java知其所以然(gh_37a1335e2608)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章