上乾貨!大廠面試走心經驗分享!
阿新 • • 發佈:2021-02-09
先說下樓主經歷:
其實我之前已經寫過一篇關於自己`秋招`經歷的文章了,裡面有很多面試題,可以作為參考:
[今年行情這麼差,到底如何進大廠?](https://mp.weixin.qq.com/s?__biz=MzkwMDE1MzkwNQ==&mid=2247495973&idx=1&sn=a18538bc3d9a3e92db729b4d347efb84&chksm=c04ae67bf73d6f6d6381cd21f164f5c9192215040f91f7403e20acb8d54976bc033e7c5dda05&token=549878447&lang=zh_CN#rd)
下面重新介紹一下自己:
我個人是雙非本,去年五月份至今一直在 JD 實習,拿到了 JD 的 offer 後,偶然的機會(boss 上)就開始面試
部門是百度雲 cdn 具體好像是做音視訊相關的,主要語言是 Java 和我本人相符
一、二、三面兩天面完,具體的問題記不清楚了,以下內容僅憑回憶(上班摸魚寫的):
## 正文
一面面經:2021/1/21 下午五點
是個小姐姐,但是很嚴肅
1. 自我介紹
2. 介紹實習專案、難點、參與的工作
3. 專案用到的設計模式以及其他設計模式
4. syn 鎖(升級過程、降級?(讀寫鎖)一些底層原理)
5. 作業系統執行緒間同步機制
6. syn 和 lock 區別
7. 執行緒池、引數詳解?你怎麼設定引數(I/O 密集型、計算密集型)
8. JVM 記憶體區域
9. 如何排查一下線上 OOM 問題?
10. 類載入機制?
11. 雙親委派?tomcat 如何打破的?
12. 寫程式碼 1 翻轉連結串列(秒)2 手寫快排序 介紹各個排序演算法時間複雜度
13. 在看的書籍?知識?《深入理解 Java 虛擬機器》說下最深刻的部分?我說了個 R 大寫的 JVM 是如何區分出是引用型別還是基本型別
14. 反問 大約 47 min
二面:2020/1/22 上午十一點
HR 說的是一個高 T 二面面試我,果不其然,一個禿頭大叔。
1. 自我介紹
2. 介紹京東實習專案
3. 專案分散式鎖怎麼用的?主從的快取 master 節點 down 了怎麼辦?(Redlock)
4. 腦裂問題(配置檔案)、資料傾斜(一致性雜湊,虛擬節點)、資料分片
5. 快取穿透、擊穿、雪崩
6. Redis 哨兵?cluster?
7. zset 底層,為什麼用壓縮列表(避免記憶體碎片),跳錶查詢複雜度?log(n)(逮住 Redis 真就往死裡問啊)
8. 看你部落格裡有微服務,講講微服務、分散式?
9. 專案中各個服務之間怎麼呼叫的?我說用 JSF(JSF 是京東內部的RPC通訊工具,類似於 dubbo)
10. 分散式 CAP 定理
11. 講講分散式事務解決方案,各自優缺點(內心。。。還好前幾天看過)
12. 寫題 忘記具體是啥了 反正都是屬於 easy 的題目,大約 50+min
還有一些回憶不起來了,好像是 Spring 原始碼的東西,電腦面試沒有錄音,總之摳得很細,面試官果然是個大佬。。。
三面 2020/1/22 晚上八點半
1. 介紹自己
2. 兩個棧實現一個佇列
3. 基本上就是一些非技術問題,嘮家常、談理想、問 offer
4. 可能是我比較能 bb 三面約 1 h 15min
十分鐘 HR 聯絡微信聯絡說過了,讓我等接下來的補筆試、測評郵件
1/26下午收到郵件做完後 HR 叫我安心等待,最遲週五給發 offer。
lz 從去年二月份開始春招找實習,(雙非本科學歷)到現在差不多過去了一年。大大小小的面試也經歷過了不少,也相應的拿了一些公司的 offer,下面是我的一些個人見解加上別的大佬的一些參考,希望能拋磚引玉,如有瑕疵,還請多多指教!
我認為的面試 = 基礎 + 能力 + 規劃以及一些面試技巧
其實也就是對應著一個人的:過去(學過的知識)、現在(擁有的能力)、未來(規劃)
## 基礎
這個就很簡單了比如
1. 最基本的資料結構、演算法;
2. 以Java 為例的一些基礎知識:JVM、集合、框架;
3. 計算機作業系統、計算機網路;
4. 通用的一些中介軟體:netty、nginx、redis、MySQL 等。
這些是基本上都要知道的,尤其是一些面試常問的必須要數量掌握,儘管有人認為這是背書,但是連背書都不背的說明態度有問題,肯定是不是被公司接受的。
當然以上說的太籠統了,具體的複習路線可以參考其他大佬的作品,如不嫌棄可以看一下我寫過的一些部落格 https://blog.csdn.net/weixin_44104367 本文只做一些面試經驗相關的總結、概述。
## 能力
這方面主要是圍繞實習、專案來展開的基本上 = 技術硬實力 + 能力軟實力。
比如:有實習的
1. 在實習期間做了哪些事能夠證明自己的能力
2. 如何在開發過程中優雅的書寫程式碼?(其實一些知識譬如設計模式大家都會背,但是能夠真正將這個知識落到實地的又有幾個呢?
3. 專案開發過程中如何一步步提升自己的技術能力、業務水平?
4. 如何快速的理解業務?適應環境?
5. 對於實習OR專案的思考總結?
要明白一點:**工作了的人很喜歡問一些 case,尤其是一些領導特別喜歡問,哪怕這個專案技術再牛,那麼它是如何落地的呢?他的場景是什麼?為了解決什麼問題?使用了什麼方法 OR 工具?達到的效果如何?最終能滿足預期嗎**?
比如大家都會背一些 Spring 原始碼,設計模式,但是能自己將這二者結合起來嗎?比如結合 Spring 原始碼+設計模式開發?(這篇文章就是個例子 淘系技術部的 https://mp.weixin.qq.com/s/94oe5c_7ouE1GbyiPfNg5g)
對面試官而言,他們已經聽吐了這些背的東西,如果自己能講的讓面試官眼前一亮,那麼即時面試問題回答的不太好 最起碼也能證明自己**對於技術是有追求、有思考的,而不是一個背題機器**。
**對於一個技術而言,它在這個公司存在的意義就是為了一些變現業務服務 技術服務於業務,用業務創造價值**。
個人認為學生狀態過渡到工作狀態就是理論轉化為實踐動力的過程 有些人總覺得校招生身上有一股`書生氣` 大概就是:理論的東西多而幼稚,有些不切實際的想法,能不能落地呢?
## 規劃
這點其實發現面試總結裡面很少有人去談,但是看到脈脈上,十個 HR,九個都會喜歡聽到候選人這方面的一些思考、總結。
### 路線規劃
舉個例子比如:會不會提前去規劃自己的人生路線?
![img](https://uploadfiles.nowcoder.com/images/20210202/406370429_1612233357657/45BF1BF861517DEBA4CF0D723B10E5E5)
這是從網上找的一張圖,可以看到有很多路線,究竟哪一條適合自己?可能很多人壓根沒思考過這個問題?另外自己適合哪一行呢?教育?廣告?地圖?還是純技術?
隔行如隔山,因為我從去年五月份就來實習,也換過倆部門,所以對於這些事情比其他人要深刻一些。
只有清楚知道自己喜歡的才有動力去做好他 不喜歡的只是為了生活被動的產出。
不是所有人都適合做純技術、也有的人壓根就不適合搞業務,究竟那條大路通向自己心中的羅馬,只有自己清楚
**而這些事很多人都這麼回覆的:先有了工作再說**。
看過很多人 尤其是 90 後工作半年跳槽、一年的也有。反正給我的感覺就是:`不踏實`。對於公司而言就是不忠誠:誰能保證你從上一家公司跳又能幹多長時間又跳走了呢?公司培養一個人的代價又有誰去承擔呢?
在一個公司呆夠超過五年 最起碼可以說明這個人在這個行業、公司站住腳了。
有的人入職以後才發現自己不太適合這個行業、這個方向,於是就跳槽,簡歷就花了。
簡歷一花,找工作就更不好找。別的公司不知道,JD 這邊有的部門五二原則卡的很嚴格(五年內只在兩家公司工作過,也就是說平均一家公司至少工作兩年時間 https://www.jianshu.com/p/ac8f28f58e11)
這還是次要,更重要的是自己能確保這個新的方向就自己適合或者喜歡嗎?於是又開始跳、跳、跳。
人生往往是一步錯、步步錯。
別人已經在自己合適的方向上工作很久了 而你還在思考自己要做什麼。
男怕入錯行,女怕嫁錯郎,說的大概就是這個意思。
### 時間規劃
大家都知道程式猿 35 是一道坎,到時候要麼轉管理,要麼成為 CTO,自己對於自己的成長路線是一個什麼規劃呢?
管理路線:三年能夠處理日常開發當中的任何問題;五年能夠在技術上達到自己一個比較理想的狀態;七年能夠成為小組 leader;十年能夠成為部門 leader
技術路線:三年夠在技術上能夠有較大提升;五年成為架構師;七年成為資深架構;十年成為總監等。
能夠表達出這些,最起碼能夠說明自己**比較踏實,是一個有規劃、有思想的人**。
## 面試經驗
對於面試經驗這塊真的就只能實戰找感覺了,每個人都有自己的一個表達方式,不過套路都是差不太多:
### 揚長避短
像樓主本人學校不好但是一直在 JD 實習,那麼自我介紹的時候可以說自己實習時間比較長等。
學校比較好但是導師不放實習的可以著重說下自己的學校經歷,paper、競賽情況,都沒有的可以說能夠凸顯自己能力的地方
### 適當的往自己會的方向引導面試官
有的面試官會自己電腦前放一個題庫,但是大部分不會,會根據簡歷上,自己腦海中搜索問題。
比如問你 MySQL 調優,自己知道那些就說哪些,比如你知道索引這塊哪些自己知道原理就說那些:(is null 判斷可能會導致放棄索引、儘量避免使用判斷等)再往下往往會問原理,因為你知道最左字首原則、MySQL 優化器的索引代價分析、選擇過程,你就可以輕鬆回答上來。
但是你不太懂索引相關的原理就不要胡言亂語,瞎往自己不擅長的領域引導面試官,可以從設計規範方面談起(使用 varchar 而不是 char 等等)因為面試官一般會問:為什麼?自己在學習知識的過程中也要經常問自己一句:為什麼?比如都知道函式表示式操作會導致索引失效,那麼原理呢?
### 面試充滿了不確定性
**你又不是RMB 不會所有人都喜歡你**。
這個恐怕很多人是深有體會:我面試面的挺好的啊,問題都回答上來了,怎麼還是掛了?放寬心態,該佛系的時候佛系一點啦。
面試充滿了不確定性,能和麵試官聊得來,即便問題回答的不怎麼樣,面試官也會放你一馬。
有的人跟面試官聊不來,甚至面試過程中發生了爭執,那肯定就是不給過了唄。
### 面試是一個雙向選擇的過程
你被面試官面試的時候其實你也在考量這個部門、這個面試官技術水平、人品以及是否願意引導新人等。
一般面試自己的都會和自己入職後的工作關係是在一起的,一般是自己的同事、直屬領導。
如果面試官為人和善、願意引導你解答出問題來,那麼入職之後你的成長速度也會更快的。
如果面試官技術問題問的很模糊其辭,不夠專業,那麼面試多了你也會感受出來。
**你不是非我不要,我也不是非你們部門、公司不選,面試就是一個雙向選擇的過程**。
### 爛大街的專案儘量不要寫
> 秒殺系統 、商城系統。
原因自己體會 懂得都懂
### 學歷差的自信一點
牛客上認識了很多盆友,大家的學歷大多數都比我這個雙非渣本菜雞學歷高得多,這也不是意味著學歷差就一定不行,我這不是也上岸了百度、京東了麼。
衷心勸誡 22 屆及以後畢業學歷較差的盆友,學歷差不代表一切。
但正是因為學歷的問題,就需要我們比別人付出更多,別人不會的可以通過學校、paper 補過來,但是我們一無所有隻能衝。
確實像 bat 這大廠對於學歷的要求不是特別高(某東除外,很多部門明確要求學歷 211 及以上)
### PS
都在問啥專案比較好,我從個人角度談一下:有實習的話肯定是公司的專案比較好 無論是體量還是專業程度
沒實習的話可以做個:仿製 dubbo、netty、tomcat、簡單的 ioc 容器啦 或者一些實實在在能落地的專案,因為一個專案落沒落地面試官一問就知道。
前者會更好的走完一個底層的流程,從原理搞懂這些中介軟體,會比直接背書強。
真正走完一個流程的專案遠遠優於那些網上的專案 沒有實際的背景 那些開發中的情況面試官一問就破(以上為個人觀點)
以上內容純手打,囿於樓主本人的認知階層,目前暫時總結了這麼些,算是回饋一下牛客吧 希望22屆及以後的同學們看到這篇帖子能夠有所啟發,寫的不好多多包涵!
**另外,新增我的微信 becomecxuan,加入每日一題群,每天一道面試題分享,更多內容請參見我的 Github,成為最好的 bestJavaer,已經收錄此篇文章,詳情見原文連結**。
**我自己肝了六本 PDF,微信搜尋「程式設計師cxuan」關注公眾號後,在後臺回覆 cxuan ,領取全部 PDF,這些 PDF 如下**
[六本 PDF 連結](https://s3.ax1x.com/2020/11/30/DgOK6f.png)
![](https://img2020.cnblogs.com/blog/1515111/202011/1515111-20201130090550310-1032998