歡迎關注我的公衆號:石杉的架構筆記(ID:shishan100)mysql
週一至週五早8點半!精品技術文章準時送上!linux
精品學習資料獲取通道,參見文末程序員
目錄面試
1、回眸再看,感慨萬千redis
一、互聯網公司的 「 面試套路 」算法
二、跳槽前的技術積累spring
2、苦修半年,成果檢驗sql
一、面試week1:準備不足、當頭一棒數據庫
二、面試week2:查漏補缺、稍有轉機編程
三、面試week3:一氣呵成、拿下offer
四、offer盤點及選擇
3、最後的總結
一、投簡歷策略
二、簡歷中的知識準備
三、論面試心態的重要性,千萬別崩
4、文末彩蛋
這樣回答問題,能讓面試官兩眼放光
「正式開始以前,先說一下這位同窗的面試成果,從一個不知名的小公司出身,原先年薪不到20萬,經過本身的努力不斷的提高技術,最終收穫多個知名互聯網公司的Offer,年薪達到30多萬,幾乎翻倍!
半年多的準備,1個月的面試,從準備時的信心滿滿,到初試牛刀的當頭一棒,再到沉下心來,不斷補足短板,再度啓程,最終拿下目前的offer。
面試準備是一場持久戰,箇中滋味、惟有自知。在即將入職新公司以前,特地將這一路走來的心得體會分享出來,給本身作一個總結,也跟廣大筒子共勉。
一、互聯網公司的"面試套路"
通過此次跳槽面試北京多家互聯網公司以後,樓主總結出了一個「面試套路」。
通常的有必定技術氛圍的互聯網公司的面試,大體能夠分爲三面:
(1)一面:基礎
一面面試官通常是團隊裏比較資深的工程師,進去以後的同事。而一面通常會問的基礎內容包括:集合、網絡、IO、併發、基本數據結構和算法、JVM。
根據樓主的面試經歷,若是是面試互聯網公司,一面通常都會挑出上述所說的一個或幾個專題提問。
數據結構算法不用多說了,樓主建議從準備面試開始,一天刷一到兩道算法題。
不用選擇太難的題目,可是經典的排序、查找算法,基本的數據結構好比二叉樹、鏈表、堆棧,這種必定得會,不然寫不出來就回家。。。
另外,建議你們去看看JDK的底層源碼,好比集合包、併發包的源碼。看的時候必定要邊看邊總結邊畫圖,這樣最後記在你腦子裏的,是一幅幅的圖片。
若是光看不畫圖的話,除非你是天才,不然必定很快就忘了!樓主自身的血淚教訓。。。
總之,若是能作到上述幾點:掌握經典數據結構算法題目,而且能夠在面試現場,跟面試官畫圖聊聊JDK底層源碼的話,一面必過。
(2)二面:項目經驗
二面面試官通常是你將來團隊leader,通常會結合項目來進行考察。舉個例子,下面就是一個比較典型的項目連環炮:
通常二面就會從項目各個細節入手,考察各類技術在項目裏是如何運用的,而且技術是如何結合業務來落地的。
而後有的面試官會繼續深挖,看看你對本身項目中用到的技術,掌握的是否足夠深刻。
因此除告終合項目把某個技術說清楚外,最好對這個技術有必定的深度。
舉個例子,若是項目裏用到了微服務相關的東西,那麼若是你去看過Spring cloud相關的源碼,好比Eureka、Ribbon、Feign這些組件源碼,那麼面試會很加分。
樓主在面試最後拿到offer的那個互聯網公司時,就提到了本身項目中用到了微服務,而且由此去看了註冊中心Eureka的源碼。
而後從源碼層面,詳細畫圖闡述了其內部的心跳機制、多級緩存機制等等,甚至給面試官指出了Eureka中存在的一些bug,那一輪面試樓主印象很深入,和麪試官聊的很是開心。
(3)三面:綜合能力
三面的話,若是是中小公司,多是CTO面試。若是是大公司,多是你將來進入的團隊的leader的leader,好比說部門總監之類的級別。
總的來講,三面面的比較雜,每一個公司都不太同樣。有的會接着問你基礎,有的會再問你項目,有的直接給你聊情懷,五花八門的都有。
樓主以爲,最重要的仍是一二面,前兩面的反饋很重要。三面的話,只要正常回答,都沒啥問題。
二、跳槽前的技術積累
接下來,再說下跳槽以前的準備。
樓主3年經驗,去年下半年因爲不知足於以前公司的技術氛圍和薪資,加上本人又比較能折騰,但願進那種比較知名的互聯網公司挑戰一下,所以萌生了跳槽的想法。
因此從去年下半年開始,利用業餘時間學習了大量技術。從系統的開始準備,到面試第一家公司,大概花了半年的時間。
準備期間學習的技術包括:
(1)Redis緩存相關技術,以及高併發下的緩存架構設計
這塊是互聯網公司必用必問的,因此樓主對Redis技術進行了深刻系統的學習,同時瞭解了一些常見的架構設計技巧。
(2)Elasticsearch
如今互聯網公司通常都有全文檢索的需求,好比網站或者APP裏的搜索框,因此ES技術用的愈來愈普遍。
所以對ES技術也是進行了從頭至尾的學習,對其底層算法、原理以及優化技巧都作了深刻的瞭解,面試的時候,所有可以畫圖講解。
(3)微服務相關技術
微服務就不用說了,互聯網公司必備,如今系統都是用微服務架構來設計的。所以樓主對Dubbo、Spring Cloud技術棧都進行了全面的學習,並且對這些技術都閱讀過底層源碼。
(4)JDK源碼、設計模式
文章最開始就說了JDK源碼的重要性,所以樓主將重要的JDK底層源碼,好比集合包、併發包的源碼都讀了一遍。此外,對各類設計模式也作了必定的研究。
(5)分佈式事務、分佈式鎖
分佈式系統這塊,也是面試互聯網公司必問的技術
(6)常見面試技術問題的梳理和總結
包括數據庫、網絡、IO、分庫分表、MQ,等等
以上技術,樓主都進行了系統的學習和研究,並且不少技術都嘗試在本身負責的項目中進行了運用和實踐。
大概花費了有半年的時間,幾乎都是夜以繼日的學習,沒有什麼娛樂的時間。由於去年就但願在2019年的春節後能夠換一家公司,改變本身的命運!
在準備了大概半年後,下面就是樓主正式開始面試的經歷。
一、面試week1:無情打擊,當頭一棒
首先就是寫簡歷投簡歷,樓主在剛過完年後就裸辭了,而後開始投簡歷。
雖然大體知道主要面試的是哪些知識點,可是寫完簡歷以後,本身都不敢投,由於畢竟沒太多的面試經驗。
因此第一週僅僅面試了2家,當時有面試也會日後推,主要是不想浪費機會。
(1)新東方在線
新東方旗下的在線教育公司,據說立刻要上市了。
首先是一個多線程編程的面試題,比較簡單。而後就是開聊項目,在項目中穿插問知識點,此次面試由於有很多知識點本身有點忘了,因此不少東西沒回答太好。
好比說sql執行計劃中你最關心的字段,這樣的問題,都沒有回答好。最後的結果是一面就掛了。
第一週面試就被打擊了,有點沮喪。有不少知識點我本身也知道,可是就是沒有掌握,明顯是去被吊打的節奏,浪費了新東方這個機會。
而後週末兩天,哪也沒去,在家裏不分晝夜的全力複習,補足短板。
二、面試week2:查漏補缺,稍有轉機
(1)用友
首先是去了以後開始作筆試題,主要是分析哪些SQL使用到了索引,爲何索引失效,大概有10多條SQL分析。
面試過程當中,我主要是往本身擅長的點上面去聊,包括jdk底層的源碼,springcloud等方向,全程我在講。
而後二面的面試官說我不太合適,他們想找能寫先後端的人,不須要互聯網方向的那種。
因此,樓主在這裏給各位筒子提個醒,投簡歷必定慎重,若是你是打定想去互聯網公司的話,非互聯網公司就不要浪費時間了。
在面試過程當中我一共碰到三家這樣的,套路都是相似的,先是一套面試題,而後就一面,面完以後就是回去等消息。。。
(2)某中小型的互聯網金融公司
一面
一面直接開聊,先聊基礎,聊到synchronized鎖的實現原理,cas實現原理,juc包下併發類的場景使用場景。
而後開始聊框架源碼,我講了講springcloud中Eureka的源碼,Hystrix框架的源碼,而後聊了一下集合相關的類,例如HashMap、ConCurrentHashMap等等。
聊到一半以後,面試官對個人態度友好了不少,還探討了一些讀源碼的方法。
而後拿着一張筆試題,兩個算法題,二選一,隨便作一個。
樓主屬於那種算法底子通常的,平時刷題也很少,看到算法題就有點慌,最後面試官說寫個二分查找吧。
就這樣,我想因爲前面給面試官的印象稍微好一點,因此這塊就放我過關了。
二面
二面的面試官開始抽查了一些知識,包括mysql索引優化,索引結構,redis緩存雪崩、穿透等相關的問題,還問了一些併發相關的問題。
而後給了一個系統設計的場景:在分佈式場景下,100萬的優惠碼,怎樣保證每一個用戶只能領取一個?領取了以後,再次點擊仍是以前領取的那個。
個人思路是使用存放在redis中再結合分佈式鎖,而後給演示了執行過程,勉強說的過去,最後說有沒有更好的實現方式,想了一會,而後認慫。
接着問了JVM類加載流程、GC回收算法、GC回收器。恰好這塊沒有看,只能回答對這塊不熟。
最後面試結束,問了一下指望薪資,而後叫我等一下,準備去叫HR。過了一下子說,這周還要再面試一些人,而後會綜合考慮,就送我出去了。
當時比較鬱悶,不過如今想一想很正常,一個有幾年經驗的工程師居然對JVM這些常見的知識點都不熟悉,可怕。結果固然也是掛掉了。
沒說的,樓主趕忙的揹着書包回去,惡補JVM相關的知識點。
(3)一家給銀行作系統的小公司
一面是一個號稱架構師的人面的,一上來我就開聊springcloud源碼,恰好他們也在用這套框架,包括Hystrix。
恰好我對這塊很熟悉,他們只是使用默認的配置,對裏面的原理就是一個黑盒。我一通講還帶畫圖,直接將他征服。而後就是問我指望薪資,帶我見老闆,入職日期我拖了一週,算是增長了一點信心,拿到一個保底offer了。
三、面試week3:一氣呵成,拿下offer
(1)一家A輪融資的在線教育公司
一面
首先一面就是給一臺電腦你,有三道題目,任選一道讓你作,過了開始下一面。
題目都比較常規,一面順利經過。
二面
二面首先基本問了一些項目,而後你提到什麼就問什麼。
好比樓主提到線程池,他就問線程池的參數有哪些,分別的做用是什麼?而後問了一些基礎的知識集合,併發之類。
而後二面還問了springcloud框架源碼,Eureka增量拉取註冊表機制。
而後就是一些基礎:cas、cas有哪些問題以及怎麼解決,volatile、synchronized、線程池、redis、mysql索引,索引優化,索引失效,索引底層結構等。
令我印象深入的是問了我數據庫中整型除了int,還有哪些整型(tinyInt、bigint)。面試官說好奇好多人都回答不出來,我固然也是沒回答出來。
因爲當晚面完二面都比較晚了,而後約了次日下午5點cto面試
三面
三面是cto面,問的很基礎,好比Https怎麼防止被抓包?講講什麼是BIO、NIO、AIO?(當場說沒研究這塊)講講JVM類加載流程(第二次跪在上面了)。
而後問了些生產環境的問題,問了生產環境mysql怎麼部署,我說單機部署,對分庫分表沒有深刻研究,估計這幾個問題的抽查,就被cto打死了。最後問了下指望薪資,而後回去等消息。
心態:原本對這家在校教育覺得穩了,結果一直沒有電話聯繫我,此時已通過去了2兩週,除了一個小公司offer之外,沒有拿到其餘的offer。
而後稍微有點知名度的都在這周的安排表上,我在想若是這周沒搞定一個的話,北京的獨角獸都沒剩下多少了,瞬間感受壓力大了。
再加上這家複試完以後,沒有當即給答覆,通常都是涼了,此時有點心態崩了。
後續:一天以後,HR沒有聯繫我,因爲據說他家技術氛圍不錯,我就主動打電話過去了,最後的結果是給offer,薪資在大概20多萬的樣子,常規性漲薪幅度。確實也是本身存在不少問題,好多知識都沒有答出來。
(2)國內最大的互聯網招聘網站
一面
一面從基礎到項目統統問了下,項目層面沒有深究,對併發這塊的基礎知識問了,最後是問了分佈式鎖的實現原理。
樓主講了基於redis和基於zookeeper的分佈式鎖實現原理以及框架的源碼,另外深刻講了springcloud源碼。
而後就是問了dubbo瞭解多少,讓你設計一個dubbo,你會怎樣設計,而後設計一個限流熔斷框架,你會怎麼設計;
再就是針對redis問了下使用場景,怎麼使用,緩存穿透、緩存擊穿等問題。
一面整體來講,還比較順利,一面過了以後開始二面。
二面
二面問了下項目,沒有太過於深究項目,問了項目開發過程當中遇到哪些問題,怎麼解決的?
而後問了下哪些場景使用到多線程,是怎麼使用的,知道線程池的原理嗎,生產環境數據庫怎麼部署?redis怎麼部署?
主從數據同步的原理了解嗎?主從架構的延時和數據丟失怎麼解決?有遇到系統OOM的問題嗎,怎麼解決?作過哪些JVM優化?爲何要這樣配置?
面完後問了指望薪資,說這週會通知,樓主知道又進入備胎模式了,通過上次的經歷,知道戲份不大了。
結果意想不到的是,最後竟然人家發offer了,並且年薪達到了30多萬。
(3)一家中小型的互聯網金融公司
一面
一面技術官並無問太多的問題,主要是我講了springcloud的源碼,而後他們準備轉向springcloud,最後問了下redis緩存穿透、緩存雪崩,以後就是一些大而形式的問題。
二面
問了數據庫鎖有哪些,什麼狀況下形成數據庫的死鎖,怎麼避免數據庫死鎖。而後就是哪些場景下使用了設計模式。
接着問了下指望薪資,給砍了一點下來,我以爲二面面試官可能以爲我對mysql這塊的鎖不是很熟悉,可是也給offer了,年薪不到30萬的樣子。
(4)一家D輪融資的在線教育公司
一面
一面是結構化面試,從各個方面開始聊,聊集合、併發、網絡、IO,Linux命令。
而後開始聊springcloud框架源碼,最後聊的挺歡快的,固然有些問題沒回答出來,可是氣氛聊的能夠,加上面試官的提示,最後也給出了答案,特別是linux命令這塊。
二面
二面主要是深刻項目細節,最後聽我講完項目以後。問我什麼是CAP理論。其實當時我已經掉入坑中,可是還很傻逼的回答了CAP理論和BASE理論。
而後問我你的項目符合CAP理論嗎?項目中這麼保證一致性?rabbitmq這塊的交換器的三種模式是什麼?最後跪了。
(5)好將來(美國上市的教育公司)
首先就是從簡歷第一條開始日後面聊,集合、併發、網絡、IO原理等,最後問了springcloud的源碼,將近聊了一個小時,而後說二面會二天內通知,我就知道涼了,最後果真沒讓經過。
(6)某垂直領域電商公司
一面
問基礎,ConcurrentHashMap原理,CAS,synchronized底層原理,底層採用不一樣的實現方式(自旋鎖等)的不一樣。
JVM原理,young區爲何要有2塊survival區,只有一塊行不行。
而後問了索引結構,什麼是B+樹,索引優化,什麼是聚簇索引,這麼創建聚簇索引,所有是基礎的問題,沒有涉及任何框架源碼和項目狀況。
二面
內推放水,簡單問了BeanFactory和SpringApplicationContext是什麼關係,有什麼不一樣。而後幾個簡單問題。而後就給offer了。
(7)必要商城
一面
一面是基礎問題,相似於上面的基礎問題通常,大同小異,沒有很大差異。
二面
二面開始問項目,講完項目以後,因爲二面的面試官是老鄉,並且面完以後我就知道沒戲了,就請教了老鄉,能給一些建議嗎?
老鄉說他二面就不會問基礎的知識點了,由於已通過了一面,他做爲二面主要考察的是這個項目你是否真的作過。
第二,你作的項目是否符合他團隊目前的需求。
第三,項目中的技術難點是否存在,以及解決方案是否合理,還有一些分佈式的場景怎樣解決。
第四:考慮我能不能過他領導的下一關,最後也是收穫蠻多,後來也沒給offer。
(8)趕集網
一面下午5點趕過去,跑了一天已經很疲倦了,而後開聊,先講項目,項目中穿插着問一些知識點。
好比面試官問了mysql索引,以及事務的隔離級別,可重複讀是怎麼實現的,mvcc機制瞭解嗎,等等。
固然更多的是場景設計,設計一個分庫分表的場景,根據什麼來設計。
疲憊的我想直接回去了,後來面到7點以後,說老大在開會,下次通知來複試,而後就回去了,最後也沒給offer。
四、offer盤點及選擇
將近一個月的面試,主要收穫了下面這些offer:
綜合下來,樓主最終選擇了知名度最高的那家獨角獸公司,並且它的年薪也給到了30多萬,薪資是給的最高的。
一、投簡歷策略
先在小公司跑幾家,面幾家以後,就會有感受了,知道大體的套路是啥了。
第二,若是打定主意去互聯網的話,非互聯網公司不要投。跑來跑去的時間,不如把知識複習紮實點。
二、簡歷中的知識準備
我感受技能點不用寫太多,我就寫了20條,其實10條核心技能點就差很少了。
應該面試一二線廠的話,他們按照他們的風格去考察,你寫了的也會問,沒寫也會問,因此10條核心知識點就夠了。
按照慣常的三面策略,每一面的側重點都不一樣,你能夠本身給本身考察,而後不會的趕忙找資料複習。
好比一面一般都是基礎知識,二面一般圍繞項目來考察,三面一般就是生產環境,解決問題的能力,系統場景設計等等。
三、論面試心態的重要性,千萬別崩
由於每一個面試官的喜愛不同,頗有可能跑了好幾家以後,依然沒有收到offer,不免會有一些氣餒。
樓主的建議是此時你應該放慢一下節奏,把這幾天沒回答出來的問題總結出來,不會的趕忙去查漏補缺,不管你以前準備的多好,你面試的過程當中都會暴露出不少問題。
而後感受差很少了,再次大規模的投遞和麪試,個人面試主要集中在第三週,第一週和第二週面試較少,主要是在複習和小公司練手。
最後就是知識點的總結,好比在JVM這塊我就掉坑幾回了,後來也是面試跑了一天回來,再累也堅持找資料把漏洞補上了。
這樣回答問題,能讓面試官兩眼放光
這個算是樓主這一個月面試下來,總結的一點經驗吧,樓主本身以爲仍是蠻有用的,各位筒子若是不嫌棄,也能夠本身試試啦。^_^
舉個例子,好比面試官問你:大家分佈式事務怎麼作的?
那麼,你能夠按照這樣的思路回答:
若是每一個技術,都按照這樣的思路,每一個問題都這樣去回答,回答兩三個問題,面試官就不會懷疑你技術能力了。
掃描下方二維碼,備註:「資料」,獲取更多「祕製」 精品學習資料
一大波微服務、分佈式、高併發、高可用的原創系列文章正在路上
歡迎掃描下方二維碼,持續關注:
石杉的架構筆記(id:shishan100)
十餘年BAT架構經驗傾囊相授
推薦閱讀:
二、【雙11狂歡的背後】微服務註冊中心如何承載大型系統的千萬級訪問?
三、【性能優化之道】每秒上萬併發下的Spring Cloud參數優化實戰
六、大規模集羣下Hadoop NameNode如何承載每秒上千次的高併發訪問
七、【性能優化的祕密】Hadoop如何將TB級大文件的上傳性能優化上百倍
九、【坑爹呀!】最終一致性分佈式事務如何保障實際生產中99.99%高可用?
十一、【眼前一亮!】看Hadoop底層算法如何優雅的將大規模集羣性能提高10倍以上?
1六、億級流量系統架構之如何設計全鏈路99.99%高可用架構
1八、大白話聊聊Java併發面試問題之volatile究竟是什麼?
1九、大白話聊聊Java併發面試問題之Java 8如何優化CAS性能?
20、大白話聊聊Java併發面試問題之談談你對AQS的理解?
2一、大白話聊聊Java併發面試問題之公平鎖與非公平鎖是啥?
2二、大白話聊聊Java併發面試問題之微服務註冊中心的讀寫鎖優化
2三、互聯網公司的面試官是如何360°無死角考察候選人的?(上篇)
2四、互聯網公司面試官是如何360°無死角考察候選人的?(下篇)
2五、Java進階面試系列之一:哥們,大家的系統架構中爲何要引入消息中間件?
2六、【Java進階面試系列之二】:哥們,那你說說系統架構引入消息中間件有什麼缺點?
2七、【行走的Offer收割機】記一位朋友斬獲BAT技術專家Offer的面試經歷
2八、【Java進階面試系列之三】哥們,消息中間件在大家項目裏是如何落地的?
2九、【Java進階面試系列之四】扎心!線上服務宕機時,如何保證數據100%不丟失?
30、一次JVM FullGC的背後,竟隱藏着驚心動魄的線上生產事故!
3一、【高併發優化實踐】10倍請求壓力來襲,你的系統會被擊垮嗎?
3二、【Java進階面試系列之五】消息中間件集羣崩潰,如何保證百萬生產數據不丟失?
3三、億級流量系統架構之如何在上萬併發場景下設計可擴展架構(上)?
3四、億級流量系統架構之如何在上萬併發場景下設計可擴展架構(中)?
3五、億級流量系統架構之如何在上萬併發場景下設計可擴展架構(下)?
3七、億級流量系統架構之如何保證百億流量下的數據一致性(上)
3八、億級流量系統架構之如何保證百億流量下的數據一致性(中)?
3九、億級流量系統架構之如何保證百億流量下的數據一致性(下)?
40、互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失(1)
4一、互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失(2)
4三、高併發場景下,如何保證生產者投遞到消息中間件的消息不丟失?
4五、從團隊自研的百萬併發中間件系統的內核設計看Java併發性能優化
4六、【非廣告,純乾貨】英語差的程序員如何才能無障礙閱讀官方文檔?
4七、若是20萬用戶同時訪問一個熱點緩存,如何優化你的緩存架構?
4八、【非廣告,純乾貨】中小公司的Java工程師應該如何逆襲衝進BAT?
50、【金三銀四跳槽季】Java工程師如何在1個月內作好面試準備?
5一、【offer收割機必備】我簡歷上的Java項目都好low,怎麼辦?
5二、【offer去哪了】我一連面試了十個Java崗,通通石沉大海!
5三、高階Java開發必備:分佈式系統的惟一id生成算法你瞭解嗎?
5四、支撐日活百萬用戶的高併發系統,應該如何設計其數據庫架構?
5五、尷尬了!Spring Cloud微服務註冊中心Eureka 2.x中止維護了咋辦?
5六、【Java高階必備】如何優化Spring Cloud微服務註冊中心架構?