作者:rapospectre(https://www.rapospectre.com/)
連結:https://www.rapospectre.com/blog/2017-backend-interview-share
0.背景
博主本人 2015 年畢業於郫縣某 985 大學通訊工程系,因為大學期間一直自己創業所以錯過了大四秋招春招,畢業後又在北京繼續創業一年,但在創業公司一直無法沉澱技術累積,於16年年底萌生進大公司學習的想法,於是從16年年底開始透過社招找工作。雖然大學就開始做研發,但無奈簡歷只看畢業工作經驗,所以本人簡歷只有一年工作經驗。
在此總結一篇文章給各位參考;
1.阿凡題
應該算是人生第一場面試,早上 11 點開始,公司是做 k12 線上教育相關業務,在五道口那邊;
一面
前臺登記後發了一套筆試題,開始寫,主要都是 Python 基礎知識,不算難,基本就是 可變物件不可變物件區別、 Python 垃圾回收機制之類的題目,有一兩道程式設計題也很簡單,最後有個根據題目設計資料表的問題也不難,搞定後等面試官開始二面;
二面
面試官好像是個主管,開始讓做自我介紹,他在看我的筆試題,然後根據簡歷問了一些專案相關的問題以及簡單的一些系統設計問題,之後大概問了問筆試題裡一些問題和補充,感覺聊的比較開心,面試官也對之前我的經歷比較感興趣,於是去通知 CTO 進行三面;
三面
CTO 面裡問題的廣度和深度都很大,從伺服器部署的相關知識到 Nginx 一些細節問題都有問到,不得不說問的還是比較全面的,印象最深的應該是這個問題:
瀏覽器的一個請求從傳送到傳回都經歷了什麼,講的越詳細越好
我大概講下我的答案:
1、先從網路模型層面:
client (瀏覽器)與 server 透過 http 協議通訊,http 協議屬於應用層協議,http 基於 tcp 協議,所以 client 與 server 主要透過 socket 進行通訊;
而 tcp 屬於傳輸層協議、如果走 https 還需要會話層 TLS、SSL 等協議; 傳輸層之下網路層,這裡主要是路由協議 OSPF 等進行路由轉發之類的。再向下資料鏈路層主要是 ARP、RARP 協議完成 IP 和 Mac 地址互解析,再向下到最底層物理層基本就是 IEEE 802.X 等協議進行資料位元流轉成高低電平的的一些定義等等;
當瀏覽器發出請求,首先進行資料封包,然後資料鏈路層解析 IP 與 mac 地址的對映,然後上層網路層進行路由查表路由,透過應用層 DNS 協議得到標的地址對應的 IP ,在這裡進行 n 跳的路由尋路;而傳輸層 tcp 協議可以說下比較經典的三次握手、四次分手的過程和狀態機,這裡放個圖可以作為參考:
2、應用層方面:
資料交換主要透過 http 協議, http 協議是無狀態協議,這裡可以談一談 post、get 的區別以及 RESTFul 介面設計,然後可以講伺服器 server 模型 epoll、select 等,接著可以根據實際經驗講下 server 處理流程,比如我: server 這邊 Nginx 拿到請求,進行一些驗證,比如黑名單攔截之類的,然後 Nginx 直接處理靜態資源請求,其他請求 Nginx 轉發給後端伺服器,這裡我用 uWSGI, 他們之間透過 uwsgi 協議通訊,uWSGI 拿到請求,可以進行一些邏輯, 驗證黑名單、判斷爬蟲等,根據 wsgi 標準,把拿到的 environs 引數扔給 Django ,Django 根據 wsgi 標準接收請求和 env, 然後開始 startresponse ,先跑 Django 相關後臺邏輯,Django 拿到請求執行 request middleware 內的相關邏輯,然後路由到相應 view 執行邏輯,出錯執行 exception middleware 相關邏輯,接著 response 前執行 response middleware 邏輯,最後透過 wsgi 標準構造 response, 拿到需要傳回的東西,設定一些 essay-headers,或者 cookies 之類的,最後 finishresponse 傳回,再透過 uWSGI 給 Nginx ,Nginx 傳回給瀏覽器。
談完後 CTO 根據我說的一些細節提出了一些問題,最後當時就談了 offer ,CTO 說不走 hr 那邊了直接和我談,比較意外的是 offer 給的比我自己要的還高 5k。對於第一次找工作的我來說當時滿心激動。
最後大概說說環境:公司在五道口一棟寫字樓內容,規模還算比較大,聽 CTO 談做的事情也比較有意思,有機器學習、大資料等等 ( 主要是處理各種初高中學科的題目,涉及到文字識別深度學習等等,當然我如果進去肯定要從業務寫起 ),包午餐、下午茶之類的其他我就不太清楚了,因為下午就走了,不過公司好像是每週六天班。公司發展感覺還是比較高速,感興趣的同學可以去試試。
2. 學堂線上
公司也在五道口,清華科技園裡,Google 前中國辦公室對面的樓裡 ( 好像現在搬到 Google 那裡了 )
一面
一面面試官應該是個後端研發工程師,感覺有些羞澀,全程一直不看我,主要聊了一些簡歷裡的專案經驗,系統設計,然後問了幾個簡單的演演算法題和一些 Python 的基本知識,然後就去叫二面面試官了。
二面
二面面試官是部門主管,嗯,這次總算看著我跟我聊了,哈哈,感覺目光交流也很重要,同樣問了一些系統設計的問題和經驗問題,因為博主 Django 相關的經驗還算比較豐富,感覺他們也主要是找業務研發,所以沒什麼意外就過了。
三面
hr 面,主要問了一些薪資期望,發展規劃之類的,主要是聊天,然後就發了 offer。
學堂線上主要是做慕課平臺,並且是和國內各大高校合作,福利方面因為最後沒有去所以不是特別瞭解,公司環境還是不錯的。
3.果殼
果殼在國貿百朗園裡,在園區最裡面,不是很好找,一進去先發了一套面試題和一張登記表,登記表連父母家庭資料都要,不是很理解要面試者這些資訊乾什麼,又不一定去你家,等入職再填不行嗎?所以除了本人資訊,其他我沒填。( 面了這麼多家就果殼要填這個,還要填特別詳細的資訊,不能懂 )
一面
面試題難度適中,不過涉及到的面比較多,還要寫資料庫查詢陳述句等等,博主非科班,只大概自學過資料庫,然後一直在用 orm ,畢業後就沒怎麼寫過原生 SQL ,相關題目只能憑藉記憶大概寫了下,還有一道題是 用 O(1) 的複雜度實現一個 棧 的出棧入棧和傳回 max、min 值的操作,其他就是一些 Python 基礎和表設計題。
這裡說下這道設計棧的題:
出入棧函式 O(1) 沒什麼問題,主要是 max、min 操作( 博主找工作時沒看過面試題目,只是刷了一些 LeetCode ,後來發現這道題很經典,網上很多答案)當時沒遇到過這種需求,但是可以肯定想要時間複雜度下降,肯定是要用空間去換時間,所以當時有設計了額外的資料結構存 max min,但當時設計的還是有問題,後面又和麵試官討論了一下,還是沒有得出最好的方案,最後回去網上搜了下發現其實很簡單,當時只差最後一步,感興趣的同學可以看下:棧在 O(1) 時間內求 min
二面
面試官一上來就直接拿著筆試題開始一道一道問,嗯,連我叫什麼都沒讓介紹,更別說介紹專案什麼的,感覺有點懵逼,全程沒一句廢話,全是純技術問題和演演算法,然後自己擅長的面試官感覺不太感興趣,我不太熟悉的他很願意追問,嗯,二臉懵逼,之後又問道 tcp 流量控制,當時直接說錯給說了擁塞控制,面試官表示我 tcp 掌握的不好( 確實是我的問題,回去之後又整個看了一遍 tcp )。
最後又問了很多資料庫底層的東西,博主完全沒接觸過,所以面試官表示下一輪面試官有事 ( 哈哈哈 ),接著問我有什麼想問的,我問了兩個問題面試官表示自己還有事。。。好吧,那就不聊了。
總結:資料庫知識很重要,即使你投的是研發不是 dba ,你也一定要懂資料庫底層的基本原理,至少要知道 索引原理、MySQL 資料引擎等等,因為之後凡是博主掛的面試都有資料庫的鍋。
果殼環境看上去有些亂,但比較溫馨,但實在不敢恭維面試的方式,所以掛了博主也沒惋惜。其他方面就不太瞭解啦,因為根本沒拿到 offer。
4.Veeva
公司也在國貿附近,是一家給生物科技企業( 藥廠 )做 crm 的外企 ( 不過國內的好像和國外母公司沒什麼關係,就是個單獨的子公司 ),不算是網際網路公司,但是薪資很給力。
一面
首先是 phone interview,hr 大概問了問跳槽的原因,專案經驗,發展規劃等,然後發來 homework,做完後提交;
二面
homework 比較簡單,就是一個判斷是否潤年的函式,不過這裡是有坑的,當題目很簡單時,人家考驗的就不是智商了,而是看你的編碼能力,工程化能力及面向物件抽象能力,所以果斷完整的寫了個工程,加上完整的測試,然後提交之。
三面
hr 說技術同事看了 homework 感覺還是比較 ok 的,所以約面試,首先來的面試官好像就是個 leader,問了很多 Python 和 Django 相關的基礎知識和演演算法題,現場有個白版,直接在上面她出題,我寫,然後她 review ,基本上就是 LeetCode easy 難度的題,沒有太大問題。
四面
應該是個技術大牛,問了問經驗開始系統設計,我記得當時是讓設計一個短網址生成方案,有一些額外要求,比如不能按照字元順序生成短網址,而是要隨機生成,如何避免碰撞,如何最大效率利用所有空間。
具體方案可以看知乎,上面有人討論過: 短連結是如何設計的
然後面試結束。
面試完後接到 hr 電話說技術同事感覺不錯,問我有沒有意向入職,但當時考慮還是想去網際網路公司所以就拒掉了。不過 veeva 的薪資很給力,感興趣的同學可以去看看。
5.知乎
博主的 dream company,哈哈,去面試的時候特緊張。知乎在 768 創意園,環境很棒。
一面
一面面試官問了專案經歷及一些個人資訊後開始考基礎,主要是面試官出題,然後我在紙上寫程式碼,難度適中,因為面試的比較久了,記不太清楚全部題目,記得讓手寫了快排,然後 Python 相關基礎知識,一些 LeetCode 題,tcp 相關知識,epoll 服務模型、tornado 的一些原理 ( 可以看博主之前文章 tornado ioloop 分析 )資料庫知識 ( 坦白掌握不多 )末尾問了下二分查詢,一面就過了。
二面
面試官好像是商業化後臺的主管?問了專案經驗,問了經歷,對我大學期間創業經歷表示贊揚,但畢業後又創業一年表示不滿意( 不是很明白為什麼 ),之後開始問一些系統設計相關題目,印象比較深的是設計微信搶紅包的構架,嗯,當時根據自己的見解說了一套系統和註意的點以及分配紅包的演演算法,感覺面試官應該不太滿意。回去後看了看網上,還真有寫,果斷研讀了一發: 微信紅包構架設計.
後面又聊了一些系統設計相關的內容,然後讓我等等。
三面
等了半個小時,期間看到前兩面面試官一直在和 hr 討論,應該是要不要我的問題,半個小時後 hr 來跟我聊了聊規劃和專案以及為何來知乎,然後就回去週五前給回覆。
到此大概確定應該要我的可能性不大,應該是當做備胎了。 這裡自己的問題主要是系統設計方面當時並沒有準備,另一方面資料庫這塊明明果殼問到了但是沒有重視起來。最後,年底出去找工作還是要謹慎,很多大點公司沒什麼招聘需求,除非特別優秀。
最後,週五沒有收到訊息,基本確定掛了,果然在下週週一的時候收到了拒信,這點要贊一下,至少有明確的拒信,不像一些其他公司,嗯,就不明說了。
知乎氛圍覺得還是挺贊的, 福利也很好,包三餐,不加班,嗯,不多說了,都是淚。最近知乎開始大量招人了,大家可以去試試哦,替我完成我的 dc 夢,哈哈哈。
6.春雨醫生
春雨醫生在知乎隔壁,真的是緊隔壁,環境也不錯~
一面
照例進行自我介紹,然後問專案經驗,開始紙上寫程式碼,不過這裡要贊一下春雨,面試題都非常接地氣,全是根據實際專案裡的問題進行編碼,比如有個給醫生和病人聊天記錄分組提醒的題目,都是類似的實際場景題目,完全沒有那種純演演算法題目,之後又聊了一些 Python Django 基礎相關的東西,順利進入二面。
二面
問了一些專案資訊,然後開始系統設計,沒記錯的話應該是設計一個類似 QQ 的聊天工具,要求有群,並且可以傳送圖片、語音等各類訊息,群管理員可以進行群管理等等。後面又問道資料庫,直言資料庫基礎掌握的比較少,面試官也沒有為難我。
三面
三面的時候到晚上飯點了, hr 姐姐超級好,帶我去外面中餐館點菜吃飯,回來後 CTO 面試, 考了阿凡題 CTO 問過的問題: 瀏覽器的一個請求從傳送到傳回都經歷了什麼
於是本人又根據上面那個流程講了一遍,接著又問了問自己的發展規劃和期望,然後我問了問春雨相關的一些問題,面試結束。
隔天收到了 offer, 請我吃飯的小姐姐發給我的,哈哈,但是由於年前無法到崗,只能拒掉了。
總體講,春雨環境也很不錯,但其他福利我也沒有問,所以其他不太清楚咯,有興趣的同學可以去試試。
7. 360
360 在酒仙橋,最不靠譜的面試。。。
直接透過拉鉤邀請第二天早上面試,當時已經下午五點。完全沒打電話發簡訊,接到郵件的我一臉懵逼,於是主動打電話過去確認,得到肯定後第二天做兩個多小時車趕往望京。 ( 我住在八寶山這塊 )
一面
前臺不讓進,讓通知面試的人來接,等了會兒面試官來接我,然後七繞八繞不知道繞道哪去給了我一份筆試題,讓我做,著重強調不要看手機 ( 本來就沒打算看好嘛,我坐的頭頂有個攝像頭,你讓我怎麼看,哈哈哈 )寫完讓我打他電話,然後他就閃了。
我一看題目,除了前三道是 Python 之後全是 Linux 基礎題,當時心裡想:不虧是做安全的啊,要求就是不一樣,然而博主半吊子 Linux 水平只會一些常用的命令,筆試題裡的高階用法實在是臣妾不會做啊,於是本著誠實的原則做完會做的打了電話。
二面
面試官來沒有讓自我介紹,直接對著題目開始問 ( 我的內心已經產生了抵觸感,和果殼一樣 )。第一題是個 Python 改錯題,面試官問為何這樣改,我大概講了下,然後是講了下 lambda 運算式並提供程式設計例子,面試官看完也沒說什麼,接著是一個用兩個佇列模擬棧,寫實現程式碼,也沒有太大問題,只是面試官也沒有看程式碼,就是問了我怎麼實現。
接著到了 Linux 部分,基本都不會,會的也只能寫出簡單的命令,面試官直言:你這個筆試題做的不好啊。怎麼都不會 ( 確實有我的問題,Linux 基礎不好,但是直接否定了前面其他部分有點冤啊 )
接著問了一些專案經驗,看到我的開源專案 djanog-simple-serializer 問這是幹嘛的,然後我說了下是序列化解決方案,面試官說:序列化不是很簡單嘛?( 我也沒說難啊大兄弟,只是其他的沒有好用的自己寫了個嘛 )接著面試官問了我一句讓我十臉懵逼的話,作為一個不懂 Python 的人,你能給我簡單講講 Django 和你做的東西嗎?當時我的內心全是黑人問號臉,wtf ?不懂 Python ?那你招 Python ? 怎麼面試啊大兄弟,雖然我知道其他語言用的 6 寫 Python 也沒問題,但是招進來就要寫業務你怎麼也得找個有相關經驗的面試吧,這下我明白為啥之前 Python 部分面試官不怎麼看了。 此刻我只想趕緊離開了,於是就說感覺招聘需要和我不太一致,就不耽誤時間了。
好吧,應該我算是遇到個例,請大家不要對 360 產生偏見。
8. 今日頭條
今日頭條在中航廣場,人民大學旁邊,不得不說,是我面試過離我最近的公司,頭條大樓很霸氣。發展也很迅速。
一面
面試前一天晚上莫名失眠,真的是一宿沒睡,睜眼到天亮,然後一臉懵逼的去面試,到了頭條前臺我勒個去,從沒見過這麼多人來面試,大廳做不下了,當時心裡想:完蛋,這麼多人,競爭得多激烈,昨晚還失眠,血崩。
在前臺簽到,領了候選人的牌子,等了一會兒就叫到了我,由於面試的人實在太多,我實在 -1 樓食堂進行的面試,一面面試官是廣告投放部門的工程師,先自我介紹,談創業經歷,問了 redis 用法及原理 ( 前面幾次問到資料庫的前車之鑒,博主特意狠狠看了下各種資料庫的基本原理 ),然後根據我說使用 hash table 的經驗,提了一個分散式 redis 使用 hash 的潛在問題,當時沒有想出來,面試官提醒了下大概說到了點子上,主要是分散式機器 hash 後可能存在儲存分配不均勻問題。然後 hash 表又問了衝突解決方案,主要是拉鏈法和進位法,之後聊了 tcp ,沒什麼問題。 問了排序演演算法的最小時間複雜度及原因。接著出了一道費那波數列的題,要求在常數空間複雜度內計算任意 fib(n) 當時可能沒聽清,估計沒睡的原因,聽成了常數時間複雜度,向面試官確認是常數時間複雜度 ( 面試官可能沒聽清我說的,以為我說的空間複雜度 )於是苦思冥想無果,面試官提示動態規劃,於是開始推導轉移方程,最後面試官說沒那麼複雜,這時一對才發現我們理解岔了。其實很簡單:
def fib(n):
a, b = 0, 1
for x in xrange(n):
a, b = b, a + b
return b
一面問題結束,在我寫題的時候面試官看了我的部落格和 GitHub,表示滿意 ( 有點驚訝,第一次有面試官看我部落格和 GitHub ,雖然簡歷上有,但從沒有人說看過 ),然後又帶我把一面所有問題過了一遍,我不清楚的地方都完整的給出了答案,沒見過這麼好的面試官!!不知道他們給我多少分,我給他們滿分!
二面
二面面試官是頭條廣告後臺組主管,對我的創業經歷很感興趣,問了很多相關問題,然後看到我的開源專案又問了一些問題,然後提了一個很有意思的題目,在極端情況下,系統快取全部失效,該如何防止流量全部打到資料庫上,當時從很多方面考慮但是感覺面試官沒有非常滿意,不過也算是答到了點子上,也就算過了。回去後特意看了看,快取失效的解決方案,感興趣的同學自行搜尋 “快取重建”。
然後問了問一些專案相關的經驗和解決方案,出了一道單連結串列逆置的題目 ( 和麵試官透露非科班,沒有出很難的題目 ),然而當時大腦基本處於停轉狀態,太困了,最後寫出來有個 bug,其實題目很簡單,回去稍微想了下就寫了出來:
def revese(node):
p = node
cur = node.next
p.next = None
while cur:
tmp = cur.next
cur.next = p
p = cur
cur = tmp
return p
面試官表示 coding 能力需要加強,當時也不好說自己沒睡覺,就直接說確實能力需要加強。面試關說讓我等等去找下一輪面試官,等了一會兒告訴我下個面試官不在,當時覺得我是掛了 ( 結果是面試官真的不在 ),面試官好像看出了我的想法,重覆了一句面試官真的不在。讓我回去,稍後 hr 約下次面試時間。
三面
三面是一週後的下午 6 點,這次終於來到了面試室,裡面有一塊白版,三面面試官是廣告大組的 leader,進來沒有再考基礎題,問過經歷後出了五道系統設計題,於是開始在白板上寫,大概記得有多端登入管理、二維碼登入等等一些設計,要求設計出系統結構,相關資料庫和表,博主設計完後給面試官講了一遍,感覺面試官比較滿意,也沒再問其他的,直接去叫下一輪面試官了。
四面
四面面試官是頭條 data 部門的 vp,感覺人超級和善,進來直接跟我說一起去吃飯吧,剛好體驗下頭條食堂,然後,第四輪面試是在飯桌上進行的,主要談了談我的專案經驗和發展方向以及為何來頭條,最後吃完飯面試官說本來這一輪也會考技術,但是感覺聊得不錯,就不聊技術了,讓我回去等 hr 電話。( 頭條食堂真的不錯呀,只是當時沒好意思多打,哈哈 )
五面
hr 電話聊了聊個人發展及規劃,然後確定了薪資,就發了 offer ~~
頭條環境非常不錯,包三餐,自助食堂,無限水果零食還有下午茶,晚上 10 點後打車報銷,入職發 mac, 住公司周圍房補,大小周加班有加班費等等,總之福利非常多 ( 為何我知道的這麼多 )還是推薦大家來哦。
總結
最後,博主選擇了頭條的 offer 。( 已經找到當初面試我的大神們,哈哈,開心 )
從去年底找工作找到今年節後,終於找到一個滿意的 offer,曾經也糾結過,感覺自己高不成低不就,有段時間甚至拒絕出去找工作。
很多大公司社招都是三年經驗起,所以像博主這種畢業一年的人在沒有內推的情況下參加社招非常尷尬,在這裡奉勸各位學弟學妹,一定要抓住校招的機會啊!!社招跟你競爭的可不光是你們同級的人。
找到工作後偶然發現一本神書 《劍指 offer》我面試過基本所有問題上面都有,推薦大家一定過一遍( 要是早點看到就好了,哈哈 )
這裡還有博主當時刷過的 LeetCode https://github.com/bluedazzle/leetcode_python ,可以參考一下,之後有時間博主也打算一直刷下去。
平時一定要註意多積累,有條件的情況下儘量自己多寫一些自己的專案,這樣面試會有很大的加分,比如博主之前寫過的小程式:式神獵手 ( https://www.rapospectre.com/blog/create-an-onmyoji-weapp-in-24-hours ) 在面試中就很有益處。
●本文編號343,以後想閱讀這篇文章直接輸入343即可
●輸入m獲取到文章目錄
資料庫開發
更多推薦《18個技術類公眾微信》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。