前言
程序員
最近剛剛入職,確實很忙,大週末的跑到公司來研究Apollo的源碼。可是答應了羣友出一篇面試的文章,因此想來想去先把文章寫了再說。web
先大概說下個人面試經歷吧面試
筆者是從9月3號開始面試的,9月15號入職了微盟,目前是微盟基礎技術中心的一名高級開發工程師。期間一共面試了9家公司,其中4家肯定了offer跟具體薪資。緩存
兩家過了全部技術面,到HR面以後沒回應了,估計是以爲我薪資要的比較高,筆者此次跳槽薪資漲幅仍是比較滿意的,月薪的話上漲了70%。微信
剩下還有3家,一家是在我入職後才通知我去公司作最後一輪面試,直接放棄了,其他兩家感受被HR刷KPI了。數據結構
這篇文章主要是分享面試的經驗,可是爲何取這麼個標題呢?由於最近老是聽到內卷這個詞,大概就是說,程序員加班內卷、工資內卷等等之類的。說實話,我剛剛聽到這個詞的時候,連內卷是什麼意思都不知道,而後還特意去搜了一下,下面是百度百科的解釋併發
![](http://static.javashuo.com/static/loading.gif)
這個解釋太抽象了,後來特意多找了找資料,內卷大概是這麼個意思框架
-
在宏觀上,發展停滯不前,甚至在規模上萎縮退化。 -
在微觀上,努力的效用停滯不前,甚至在邊際效用上萎縮退化。
把內卷這個詞放到程序員身上大概就是說編輯器
-
原來可能只要會個SSM就能拿1W一個月,如今可能連工做都找不到 -
原來一週工做40個小時能夠拿1W一個月,如今可能一週要上50個小時,我的時薪低了
總結起來就是,我的價值被大環境拉低了。分佈式
怎麼說呢,首先,我我的以爲對任意一個充滿機遇的行業而言內卷都是一個必然的現象吧,其次的話沒有太感覺到內卷,我以爲我還在享受這個行業的紅利,多是由於我起點比較低的緣由,就筆者最近的幾回跳槽而言,薪資漲幅都還比較高。其次,只要你足夠努力的話,內卷也不要緊,你進步的速度大於行業內卷的速度,那麼就能夠一直走在行業的首端,每一個行業都是大浪淘沙,可是份量足夠重的人是不會被淘汰的!
聊聊學歷
筆者是以高中學歷出去面試的,由於我自己是大學肄業的,我當時考在華南理工大學,後來大三的時候本身退學了,創業作了兩三年的遊戲工做室,大家能夠理解爲打遊戲吧,哈哈!工做室當時作遊戲代練、金幣交易等等一些東西
學歷仍是比較重要的,若是你如今仍是一名學生的話請必定要珍惜你如今的時光。不過那些錯過了學生時代或者蹉跎了學生時代的朋友們也不要泄氣,由於能證實你能力的不只僅只有學歷嘛!你能夠從別的地方去給本身附加價值,做爲一名程序員,給本身附加價值的最好方法應該就是參與開源項目了,筆者本身的話就參與了Spring的開源,給Spring提交了issue並且被採納了,除此以外,我的博客也是一張技術名片。可是話也說回來,儘可能去提高下學歷吧,筆者跟技術羣裏的小夥伴組建了一個自考羣,有興趣的能夠加我好友哈,能夠一塊兒交流一些自考的信息(杜絕廣告)
實際上無論你有學歷或者沒學歷,請記住一句話,決定你將來的不是過去,而是當下!
因此,奮鬥吧,騷年!越努力,越幸運!
活在當下最重要,積累最重要,厚積薄發也不失爲一種好的選擇
幹了上面的雞湯,咱們開始進入面試的正題!
面試分享
對於一個去面試的人而言,首先要知道本身應該去準備哪些知識去面試,每一個人的工做環境是不同的,因此每一個人的知識體系也不同。網上不少面試的文章都是給了一副巨複雜的思惟導圖,而後告訴你,把這張圖上的東西學完你就能年薪XX萬,可是可能畫圖的人本身都沒學完,由於他也學不完,東西太多了!
因此,筆者給的建議是,每一個人應該根據本身現有的技術棧去準備面試。以筆者本身爲例,由於近兩年使用的都是SpringCoud技術棧,因此在準備面試的時候徹底放棄了Dubbo、ZK一系列的東西。若是面試官問起來,我基本就是回答:「之前用過,最近兩年沒怎麼用過了,會用,不是特別瞭解」
一樣的,筆者在消息中間件一直使用的RabbitMQ,對於RocketMQ、Kafka也放棄了。若是面試官問到這一塊的東西我基本就是憑着本身的一些瞭解一兩句帶過,由於確實沒怎麼用過,沒作太多瞭解。
可是若是你這麼作的話,那麼意味着你在其餘通用的技術棧上要作到比通常人強。什麼叫通用的技術棧呢?好比Redis、MySQL、SSM、SpringBoot,這些東西你沒用過的話就不太合適了。因此我建議你們在這些技術應該要下些功夫,對於這些應該要作到只要面試官問到了,那麼你就要跟他聊到不想聊爲止。
個人整個複習版圖以下:
![](http://static.javashuo.com/static/loading.gif)
要獲取這些圖的話在公衆號後臺回覆【2020年9月面試總結】便可獲取
接下來是一些常見面試問題,以及我在複習的時候總結的一些要點,其實就是上面的圖
Redis
常見問題:
對於Redis以筆者此次面試的經驗來看,最常問的是兩方面
-
數據結構。 -
Redis如何解決單點問題,其實問的就是Redis的集羣
關於Redis的數據結構,通常來講提問場景以下
第一問:「你瞭解Redis有哪些數據結構嗎?」
Hsah、String、Set.....。第一問背一背就行了,沒什麼難度
第二問:「大家項目中是怎麼使用的?」
不少同窗對這個答很差,由於可能就用過一個string結構。最好起碼要說個兩三種吧
string,通常存token
hash,作一些聚合信息的緩存,例如商品詳情頁要聚合不少信息,要查不少表,用hash作緩存
string提供的位運算功能(bitmap),統計用戶登陸次數
第三問:「如何解決Redis的單點問題?」 或者會問 「講一件Redis的集羣」
這個問題我只講講思路,詳細講起碼要一篇文章。
首先,咱們思考,什麼是單點問題?或者說單點有什麼問題?
問題一:單點故障,也就是說單機掛了,整個服務就不可用了
問題二:單機存儲上限,也就是說一臺機器只能存這麼多東西
對於單點故障咱們如何解決?-----------> 主從模型
對於單機存儲上限咱們如何解決 ----------> 數據分區
從這裏咱們再引出Redis的集羣是如何作的?Redis有兩種集羣模型
-
哨兵
-
RedisCluster
關於這兩種集羣模式區別你們自行百度吧
複習要點:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
MySQL
常見問題:
-
事務的隔離級別 -
什麼是幻讀? -
聊聊事務的實現原理
在以前的文章中所有覆蓋到了,因此基本沒難度
複習要點:
![](http://static.javashuo.com/static/loading.gif)
SSM、SpringBoot、SpringCloud
也就是Spring、SpringMVC、MyBatis
-
問的比較多的,Spring的生命週期、AOP、事務
-
SpringMVC的工做流程
-
MyBatis基本沒問
-
SpringBoot跟SpringCloud的區別
-
SpringBoot自動裝配的原理
框架這塊由於比較瞭解,沒特意花時間去整理。
![](http://static.javashuo.com/static/loading.gif)
消息中間件
我就講講RabbitMQ的工做模式、集羣模式。而後講一下RocketMQ的topic跟隊列,對比下kafka的topic跟分區。
這塊沒什麼準備,因此聊的很少
![](http://static.javashuo.com/static/loading.gif)
JDK
HashMap、ConcurrentHashMap、AQS、synchronized
![](http://static.javashuo.com/static/loading.gif)
集合這塊我複習的比較細,若是你不是面試一線大廠的話,不必瞭解這麼細,由於面試官也不會。着重瞭解1.8的就行了。
![](http://static.javashuo.com/static/loading.gif)
JVM
-
內存結構 -
GC -
類是如何加載的?如何打破雙親委派?對SPI瞭解嗎?
![](http://static.javashuo.com/static/loading.gif)
基礎
![](http://static.javashuo.com/static/loading.gif)
分佈式
分佈式事務、分佈式鎖、冪等性。這些是重點
![](http://static.javashuo.com/static/loading.gif)
分佈式這塊是重點!分佈式這塊是重點!分佈式這塊是重點!
重要的話說三遍,必定要搞懂,必問
內推崗位
最後是一波內推崗位,有興趣的小夥伴趕忙拿簡歷砸我吧!!!
上海微盟,Java相關崗位以下
![](http://static.javashuo.com/static/loading.gif)
本文分享自微信公衆號 - 程序員DMZ(programerDmz)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。