前言:
職場就像圍城,我們每一個職場人總是以「牆外」的視角羨慕著「牆內」的世界,而也許你的生活也出現在別人的夢中。希望「網際網路坊間八卦」能成為一個分享和了解不同生活的平台。
今天,筆者給大家分享一位20屆應屆生秋招的遭遇。讓我們一起了解一下應屆生最原始的求職生活狀態。希望這些「乾貨」能讓你認識到不一樣的秋招。
本人情況:
25歲,男,雙非碩士(本科也是雙非),計算機專業,碩士研究方向是:CV,無頂會,無kaggle,無相關項目經歷,本科感興趣領域是:Java和大數據。
找工作過程從3月份春招開始準備找暑期實習到10月中結束,歷史7個月,從小白到現在入門,希望能給大家分享一點自己的心得。
簡歷也是改了20多版,主要都是在改項目描述。
文章較長,如果不想看面經,可以直接跳到最後總結部分。
Offer情況:
收到了11家,還有5家在等待。
2. Java研發:
- 明略科技:nsg(智能裝備)bu,base:北京望京(拒,拒時工資最高,甚至比部分同學算法崗位還高)
- JD:商家研發部,主要負責商家審計業務,base:北京亦莊總部(拒)
- 房多多(拒)
- 平安產險(SP)(拒)
- 平安智慧城(拒)
- 同花順(拒)
- 順豐科技:bu未知,base:深圳總部
- 貓眼娛樂:大數據bu,base:北京
- VIPKID:bu未知,base:北京
- 菜鳥網絡:國際BU,base:杭州(等Offer)
- 度小滿:bu未知,base:上海(等Offer)
- 萌推:bu未知,base:上海(等Offer)
- 攜程:bu未知,base:上海(等Offer)
- 依圖科技:bu未知(等Offer)
- 大數據研發:
奇安信:bu未知,base:北京 - 算法:
馬蜂窩:有搜索部門和大數據部門,看分配,base:北京
面經
通過分享我個人的一些面試經歷希望能給雙非學校的同學一點幫助。主要分為2個部分,春招(算法)和秋招(研發)。
春招(視覺算法 or 機器學習崗位)
2019.3-2019.6
春招主要找的暑期算法實習生,投了大概50多家公司,官網投遞,牛客內推,朋友內推等,全部涼透。
位元組跳動、騰訊、阿里、百度、網易、商湯、airbnb、曠世、圖森未來等等,全部簡歷掛。
我想著應該和自己的雙非學校有一定的關係,而且自己沒有頂會/頂刊/kaggle/項目經歷,只是一味的去補理論知識,沒有在競賽/項目中實踐。
算法崗位競爭真的激烈,人太多了,所以那些獨角獸公司算法團隊更願意在C9高校進行招生,比如依圖科技(面試官明確的說只在C9高校招生,這是我秋招在面java的時候給我說的)。。。
所以,我覺得,如果你想從事算法崗位,那麼必須要有一定的沉澱,比如相關項目經歷(當然是要主力隊員)或者kaggle競賽,或者頂會頂刊論文了。這些都是門檻,或許雙非學校限制了你,但是通過你的一些沉澱,也可以成為獨角獸企業的敲門磚。
轉變
2019.7
時間到了7月份,經過春招的持續打擊,整個人情緒失落到谷底,本來上研就是為了找算法,自己也努力了兩年,但是也怪自己入學的時候沒有規劃好,導致小論文方向不是機器學習,也不是cv,也是圖像處理,所以,雖然努力了兩年,但是沒有機器學習實戰經歷。
就目前的情況來看,自己是不能再走這條路了,所以一度非常失落,以致整天有遊戲麻痹自己。每天不去實驗室學習,在寢室頹廢。
到7月中旬,也就是頹廢了半個月之後,決定回家,也就是在回去的路上,自己想通了,身為男人,以後還有養家餬口,家裡有老人要養,將來還要結婚生子,都需要錢,所以自己不能這麼頹廢下去,需要趕緊調整自己的狀態。所以自己就覺得,走本科的方向——Java研發,由於本科熱衷於Java,所以上研也沒有將Java放下。所以開始著手準備Java簡歷。
秋招(8月-10月)(Java崗位)
2019.8-2019.10
到了秋招提前批的階段了,自己的Java簡歷也完成了,在本科的基礎上新增了一些東西,以更簡潔更完善的方式呈現出來,同時回顧並總結本科時期的Java項目,並慢慢開始複習,備戰。下面開始講面經了。
毫無準備
- 8.14 阿里巴巴一面(新零售供應鏈,涼了,這是我的第一場面試),大概30分鐘
HashMap和HashTable區別
HashMap實現原理(put、resize)
StringBuffer和StringBuilder區別
資料庫事務隔離級別
如何避免幻讀
資料庫引擎(Innodb)的事務支持粒度
如何實現樂觀鎖
Synchronized實現原理
tcp三次握手,四次回首
osi7層模型
最後問了兩個智力題:
兩個粗細不均勻、長短不一的的繩子,燃燒一根分別需要60分鐘,如何利用兩根繩子,測量出15分鐘?
一個籃球可以裝多個桌球? - 8.21有贊一面(涼了)20分鐘
HashMap和ArrayList默認容量分別是多少?
HashMap和HashTable區別
HashMap什麼時候擴容,幾倍?
ArrayList什麼時候擴容,幾倍?
講講Java內存模型
講講gc算法
01背包問題,我說了dp的方案,但面試官說使用貪心算法(性價比最高優先,我當時屈服了),但是後來發現,貪心不行。 123456反例:W=30物品:A B C重量:28 20 10價值:28 20 10根據策略,三種物品單位重量價值一樣,程序無法依據現有策略作出判斷,如果選擇A,則答案錯誤。 - 8.26 美團二面(估計涼了,但還沒收到拒信) 一面:(25號晚上做了美團筆試,很差,3道算法題,只過了30%) 上來先吐槽我算法很爛,然後要考察我基礎。
進程調度方式
進程與線程區別
多線程優點
進程同步有哪些方式
osi七層模型,以及對應都有什麼協議
tcp三次握手和四次揮手
udp和tcp區別
http報文都有什麼
客戶端發起http到服務端返回的詳細過程
編程實現求二叉數深度
還有一題忘了。 二面: 二面主要考察場景題,讓我從自己的項目出發,如果項目需要上線了,需要考慮什麼問題。
看過那些架構的設計。
平時的學習方法。 - 8.27阿里國際(深圳)一面(涼了)
GC算法都知道哪些?分別講講(serial pal new、parelle scavge、serial old、parelle old、CMS)主要講了下cms
JVM內存模型。
Zookeeper原理,當有3台伺服器,一個掛了,怎麼保證服務的正常使用?
Spring 怎麼接受web請求(應該是Spring MVC)流程是怎樣的。
AOP原理
Spring Boot啟動加載過程。 - 9.3 葡萄城(一面+機試+二面,涼了)(C#做控制項開發)
一面,兩個面試官,問了計算機網絡,還是那些常問的問題,我就不列出來了。
問java有什麼優缺點,我說單繼承,接口可以多實現,就問為什麼?多承繼為什麼不好?(自己給自己挖了個坑)
還喜歡什麼?集合。
都有哪些集合?balabala……
HashMap是怎麼實現的?baabala
HashMap可以解決什麼問題?我說字符頻率統計。
怎麼做的?比較hashcode,然後比較equals
如果字符串是變量怎麼辦,「abc abc」,兩個abc的地址不同?暗示hashcode不同,沒答出來…
git常用操作都有哪些,查看日誌用啥?
如果不小心把一個很大的文件2gb,push了上去,然後發現後在遠端刪除了,之後別人執行git clone,會把所有的歷史信息給clone下來,如何解決這個問題?
重點提的是,讓我講述項目難點的時候,我提到了跨域問題,我當時對項目還沒有完全熟悉(2年前做的),一直在那討論為什麼會出現跨域(這也導致我回去之後,把項目仔細看了下,發現是我當時對項目不夠書序,導致描述錯誤)
二面,機試:用#畫直方圖,輸入一組數據: 12345678910111213[{value:2,label:」a」},{value:5,label:「b」},{value:3,label:」c」}]輸出:用空格分割每列 # # # ## # ## # #———-------a b c做出來了之後,讓支持value是複數,即在虛線下方畫#,比較簡單。
三面,還是2個人,比較有映像的是:
讓我簡單描述如何實現電梯調度算法,字符串壓縮算法。(這個回答的不是很好,回家之後才想起來電梯調度算法和進程調度算法差不多) - 9.8 完美世界一面(涼)
完整面經 入口
開始發力(封面就過)
- 9.17 菜鳥網絡一面(二面三面忘記記錄,等Offer)
- 9.17 攜程(等Offer)
二面忘記記錄了 - 9.17 依圖科技(等Offer)
- 9.18 房多多(最有意思) 今天最累,早上面試明略科技(一面二面),10點面試小米,11點面試房多多,13點面試去哪兒,15點面試jd。 2面+hr面
最後意思的是,和二面面試官在討論一個題
做一個服務,只統計一個url在最近一分鐘被訪問的次數
用多線程、原子操作、定時線程、隊列一系列操作完成,最後和面試官在討論如果服務掛了怎麼辦?
從主從備份,到zookeeper,再到類似一致性hash環形架構的設計,最後到我認輸。 - 9.24 度小滿(四面,加面,等Offer)
hr打電話說,一二面面試官覺得我java基礎還不錯,還有一定的機器學習算法能力,就給我加面了。
因為一直在複習java,所以深度學習方面有點答的不是很好 - 10.9 奇安信(大數據)
- 10.21 位元組跳動(等Offer)
三輪技術面,一面寫了2到算法題,二面寫了一道,三面寫了三道。
最有意思的是第三面,壓力面,第一次經歷,整個過程讓我很緊張,勉強發揮。
自我介紹完,就讓我寫算法,然後不斷問我各種原理,在我回答過程中,不停打斷我,讓我很緊張,然後繼續寫算法題,一共來了三次。
第一題,遍歷list,並刪除指定元素,(想考我for each的坑,但是我沒接招,使用疊代器完成)
第二題,按照奇偶行,奇數行正序,偶數行逆序的方式列印二叉樹。
第三題,寫生產者消費者代碼。
還有些公司沒有記錄面試過程,就不寫上去了。最後來個總結
總結(精華)
從最初的死磕算法崗,再轉到Java研發,再到大數據崗位,再到算法崗,用了7個月時間,最終拿到滿意的Offer。
- 面試總結:
面試體驗最好的公司:
- 順豐,面試官是唯一一個先自我介紹的公司,好敢度爆棚,而且內部有許多社員、比賽(包括算法比賽),這讓我感覺這好像是一所大學,重要的是違約不要違約金,很大氣有木有。
- JD,一面面試過程中,不斷引導我來回答問題,我說完之後,他還主動說出他的看法,最後我拒JD的時候,也是他給我打電話,給我問了我具體原因,也給我說了部門具體工作,不停地勸我,最後因為還想等等其他公司的Offer而拒。
- 位元組跳動,面試體驗很棒,面試官顯得非常專業,特別是壓力面給了我深刻的印象。
- 度小滿,唯一一個因為我碩士經歷而給我加面的公司。
- 阿里,面試真的非常專業,問的問題超級有水準,而且喜歡問一些開放性的問題,比如搶紅包算法,盒子分配算法,有5中規格的盒子,當用戶下單之後,如何選擇最合適的盒子來打包。
- 完美世界,這個是唯一一個讓我心服口服的面試,問的問題,超級獨到,不像市面上的大眾問題,所以給我的感覺非常棒。
- 房多多,hr讓我很感動,因為我急著安排後面的面試,所以一直給我優先安排。
- 貓眼娛樂,vipkid,奇安信,塗鴉移動,小米,萌推,依圖科技,平安智慧城,平安產險等公司都不錯,由於篇幅有限,就不寫了。
面試官代表公司的整體形象,如果面試的問題很水,面試過程很混亂,體驗很差,那我很有可能拒掉。
面試體驗較差的公司:
- 去哪兒網,簽到的時候,我說我有事,我提前來了,可不可以優先安排,結果被一個胖胖的男的潑了冷水,說你要覺得你後面的比較重要,那你先走,然後balabala說一堆(我一臉黑線)。。。一面的時候,面試官忙的飛起,在微信群聊天,說什麼簽到系統故障什麼的,然後就balabala問了一堆問題,最後讓我寫了個題,實時統計最近一分鐘訪問首頁的次數,由於之前房多多已經將方案說出來了,但是對庫函數有點不太熟悉,所以就大概寫出來了,總體回答了70%吧,就沒有然後了。
- 商湯科技,倒不是說面試體驗不好,面試體驗好的飛起,面試官頻頻點頭,說可以,然後最後寫了2道算法題,一一寫出來了,然後面試說我代碼風格和代碼能力都可以,2周之內能收到2面通知。結果今天發了拒信(時隔一個多月),我就覺得,知道你是獨角獸企業,不如在招聘網站直接寫上211 985高校好了,跟華為、中興一樣,直接點不好嗎?
2. 面試方法(針對研發崗位)
通過網上的面經也能知道,問的問題,無非就是那些常問的問題,就算不一樣,也只是換一種形式來問而已。
- 計算機網絡:osi7層模式,對應協議有什麼,都是幹嘛的,建議把謝希仁的《計算機網絡》傳輸層那一章好好看看,比如tcp的三次握手,四次揮手,流量控制,擁塞控制,看的時候,不能硬背,要自己理解,才不會忘記,而且在題目有變動的時候,也能應答如流。
- 作業系統:內存管理,進程調度,進程通信,linux常用命令。
- 資料庫:事務(ACID)、三級範式(舉例)、關聯(join)、聚集函數、group by、order by、索引(b+樹)、innodb與其他的區別(鎖的粒度)
- 數據結構:(重頭戲),除了廣義表不需要重點看之外。《數據結構》嚴蔚敏
線性表,尤其是鍊表(頭插法、尾插法、刪除、雙鍊表、帶頭結點與不帶、循環鍊表等)、棧、隊列。
哈弗曼樹、二叉樹、二叉排序樹(刪除、增加)、b樹、b-樹、b+樹、b*樹、紅黑樹、字典樹、樹的三種遍歷(代碼實現,遞歸與非遞歸)。
圖的遍歷(dfs、bfs、遞歸與非遞歸)、拓撲排序、最小生成樹(Dijkstra、Foyd、Prim、kruskal)。
查找:常用的就二分查找了。
排序:冒泡、插入(常用)、選擇(常用)、快速(常用)、堆(常用)、歸併(常用),希爾(不常用)、基數(不常用)
口訣:不穩定:快選希堆,其他則是穩定算法。
補充:
KMP算法及改進BM算法傳送門
並查集,用於求朋友的朋友問題(最小生成樹個數),並查集並查集路徑優化
三路快速排序(快排優化),傳送門
刷題:leetcode(top like100) - Java
Java基礎倒是很少問,一般問源碼層面問題,注意1.7和1.8的區別
1、《深入理解Java虛擬機》,最重要的是JMM(Java Memory Model),我自己的建議就是從JMM為中心,開始向四周擴展,構建知識網。
從JMM -> GC算法,GC Root的確定,線程逃逸問題,Java對象頭(Synchronized實現原理),棧的原理,類加載機制問題,三級cache結構、內存屏障,即volatile關鍵字原理,線程調度等,全部可以從jmm發散,或者從某個點切入,也能講到JMM。
2、集合:HashMap、HashTable、ConcurrentHashmap、LinkedHashmap、TreeMap、TreeSet、ArrayList、LinkedList、PriorityLinkedList源碼等等
3、鎖:樂觀鎖(版本號(mysql通過多版本號來解決幻讀問題),cas),悲觀鎖(AQS,AbstractOwnableSynchronizer是重點)、ReentrantLock、CountDownLatch、CyclicBarrier、讀寫鎖等等,與synchronized的原理對比等。
4、多線程:線程幾種實現方式,狀態轉換,ThreadPoolExecutor參數解析,執行流程。
5、六大原則:
單一職責原則(Single Responsibility Principle SRP)
開閉原則(Open Close Principle OCP)
里氏替換原則(Liskov Substitution Principle LSP)
依賴倒轉原則(Dependence Inversion Principle DIP)
接口隔離原則(Interface Segregation Principle ISP)
迪米特原則 (Least Knowledge Principle LKP)
6、常用設計模式(手寫單例模式):工廠模式(bean)、代理模式(aop)、觀察者模式(消息發布訂閱、dubbo),說的這樣都是在spring中可以聯繫起來的
Spring中常用的設計模式有哪些?
7、如何用線程列印abab問題,
8、海量數據問題:歸併排序思想,
9、Spring mvc作為後端,講述從前端請求到後端返回的全部流程,從dns解析到tcp建立連接,再到arp解析,再到反向代理,再到DispatchServlet、HandlerAdapter(通過HandlerMapping找到對應的requestmapping方法)、ModelAndView等,這個問題足以將基礎和框架全部聯繫起來。
10、反向代理策略:輪詢、隨機、加權、最少連接、ip hash、dns最短等
11、四層代理(lvs)和七層代理(nginx)
12、分布式session問題
13、洗牌算法
14、zookeeper實現分布式鎖,以及它的選舉過程等
15、Spring ioc的原理,aop的原理(jdk和cglib,與靜態代理AspectJ的區別)
16、Spring bean的是如何管理的?
17、在maven中如何出現了循環依賴問題,spring中的bean是如何注入的?
18、dubbo原理,架構圖
19、一些常見的rpc框架,rpc和http有何區別
20、如何實現i++的原子操作,(加鎖問題,volatile關鍵字(可見性(三級cache緩存失效,通過對比自身數據)、有序性(內存屏障)))
21、布隆過濾器
當然問題遠遠不止這麼多,只是將一些我認為比較好的問題寫了出來。 - 算法
刷leetcode,剛開始可能一天才能做一題,刷多了就好了,每種類型的題目都要去涉及,比如雙指針(最常用)、回溯、遞歸、dp、bfs和dfs等。算法能來也不是一朝一夕的事情,這裡我建立了一個LeetCode打卡群,群里會有嚴格的打卡制度,每天至少一天,如果某天有事,當天可以不打,但後續需要補上,儘量寫多種解法,並伴有注釋,一周至少7題,題目不限(也可以相互推薦),群只維護10個人,加滿即止,如果還有想打卡的,也可以自發組織成群,發起打卡。 - 加分項
Git上有自己的一直維護的項目,曾經有面試官打開的git主頁,看著我的代碼,問我的項目中的問題。
有自己的blog,並長期在上面分享學習心得、知識總結等,曾經也有面試官現場訪問我的blog。
面試心得
- 如果有心儀的公司(比如我就想去某個地方去工作),我的建議是,你在投遞這個公司之前,多投投其他的公司,說白了就是當做墊腳石,攢經驗,每次面試之後,及時找出自己的不足之處,將面試官問的問題回去仔細研究,找到一種正確的解法後,看看能不能繼續優化,凡是多想一點,多問點為什麼,以免可以應付問題的變種。
- 每次面試之後,在下一次面試的時候,你都需要有一個提升的過程,隨著你的面試不斷進行,你的知識儲備需要不斷積累。
- 經常聽到身邊有人說,我覺得我很菜,但卻沒有去付出實際行動提升自己,而且繼續說自己好菜。
- 也有人說自己經常看的東西記不住,其實我覺得,只要下功夫,一遍記不住,你多看幾遍,然後不停地用已學的知識去類比,加速自己的理解,數據結構我看了不下5遍,每看一遍都有不一樣的認知,認知就是發現自己看的書本上的東西都在一些框架中應用了,是他們的基礎。比如b+樹作為資料庫索引,堆排序可以使用優先隊列來實現進程調度的LFU等。
- 需要構建知識網絡,做到不論是從哪一點切入,都可以找到知識網的中心,然後從四周擴散,活學活用。舉個例子,阿里二面時,問我如果不適用任何random函數,如何實現隨機???(想想一台機器有什麼是變化的)
- 最後一句話,勤能補拙,自己雖然是雙非學校,但是通過努力,也拿到了國獎、也拿到了一些大廠的Offer,最終也有自己滿意的,所以短暫的受戳不要緊,及時調整自己,讓自己努力起來,加油吧,程式設計師們,注意保護頭髮!
更多坊間乾貨,請點擊了解更多