網易2016暑期實習生面試經過(運維開發崗)
說明
本人今年研二,參加的是2016年暑期實習生的招聘。因為有網易的師兄提供的內推機會,所以沒有筆試,電話面試了兩輪就拿到了offer。
一面
一面主要是聊技術,我在北京所以是電話面試。面試官一上來先讓我自我介紹,包括自己的學校年級專業,還有做過什麼專案之類的。我說我做過的專案主要是當資料結構助教的時候寫了一個線上OJ,還有去年實驗室與企業合作的人臉識別系統。
聊專案經驗
面試官首先說我不懂人臉識別,你能講一下原理嗎,我就大概說了一下整個系統的流程是什麼樣的。面試官接著問你在這裡面做了多少,我說演算法部分基本都是我負責的,產品化的工作交給公司,又大概講了一下自己寫的幾個模組具體有什麼用。面試官又問了一些細節,但他確實不是很懂模式識別,我也就隨便講了一下。
我面的是運維開發,所以面試官對我開發的線上OJ比較感興趣。他首先問你們的網站架構1是怎麼樣的,又問你們在設計網站功能的時候是怎麼考慮的。我說這是面向學生的系統,功能肯定是圍繞學生設計的,包括如何提交程式碼、如何打分、如何返回結果、如何查詢自己的成績等等,此外還有題目展示、成績展示等等略顯次要的功能。面試官接著問學生提交程式碼以後我們怎麼處理,我大概說了一下流程:儲存程式碼、編譯、輸入測試樣例並收集程式的輸出、根據答案打分、將成績寫入資料庫,這中間任何一步出錯就終止然後在前端返回錯誤資訊。他又問學生提交程式碼之後是馬上返回結果嗎。我說因為測試時間可能較長,讓頁面一直等待會降低使用者體驗,所以學生提交程式碼之後馬上被重定向到另一個頁面,如果使用者執意檢視還未完成的測試結果,我們會讓網頁定期重新整理。
面試官問你們的使用者登入和會話管理是如何做的。我說用的現成的Flask框架,login模組解決了所有問題,我並沒有讀過Flask的程式碼。面試官不太滿意,說如果讓你來做,你會如何做。我努力猜了一下,但靠不靠譜就不知道了,面試官也沒說什麼。
面試官最後問你覺得這個專案還有什麼不足的地方嗎,這是我很早就思考過的問題,主要講了三點:
- 程式碼質量有待提高,強調了一下當時是一邊學python一邊寫的網站。
- 架構不夠漂亮,因為某些原因我們在後端同時用到了mysql和redis兩個資料庫,這個其實沒必要。網站併發量這麼少,只用mysql或者只用redis都沒問題。
- 功能設計有缺陷,我們沒有設計讓助教在網頁上建立題目的介面,每次新增題目必須在後臺操作,如果我這個管理員某天畢業了,後來的助教就抓瞎了。
面試官聽了貌似感覺比較滿意。
程式設計技能
隨後考察的是程式設計技能。面試官問我會用什麼語言,我說會寫C/C++,不過Python更順手。面試官表示他們開發用的正好也是Python,就問了一些Python相關的問題。
第一個問題是問Python裡的mutable物件和immutable物件是什麼,我沒了解過這兩個概念,就猜mutable就是list這樣可以修改內容的,immutable就是tuple這樣不能修改的,面試官說差不多吧,然後給我科普了一下。面試官又問問如果a = 1; b = 2; a = b
發生了什麼,我說a會指向2這個物件,2這個物件的引用數+1,1這個物件的引用數降為0被回收。面試官接著問如果a = '123'; a = '456'
發生了什麼,我說會首先建立一個’456’物件,a指向’456’同時’123’被回收。面試官然後問你知道弱引用weakref嗎,我說不知道。他說弱引用就是引用了一個物件但這個物件的引用數不會+1,問我這個東西可能有什麼用。我沒答出來2。
第二個問題是import是什麼原理,我說就是把被import模組裡的程式碼執行一遍。面試官問如果模組裡有一句print 123
,import的時候會列印123嗎,我說會。又問如果我再import一遍還會列印123嗎,我說不會。面試官又問兩次有什麼區別呢,僅僅是執行一遍這麼簡單嗎,我想了想又說應該還牽扯到Python的名稱空間,模組裡定義的物件應該都在模組對應的名稱空間裡,import已經存在的模組是不會做任何事的,除非呼叫reload()。
後來貌似還問了一些簡單的問題,時間太久不記得了。
演算法
對演算法的考察很簡單,畢竟是電話面試,沒辦法讓我手寫程式碼什麼的。面試官問了一下你知道紅黑樹嗎,我說用過但是沒寫過,背了一下紅黑樹的五條特性。面試官問紅黑樹跟一般的二叉樹有什麼區別,有何優點?我說紅黑樹要求不如平衡二叉樹那麼嚴格所以每次更新的開銷更低。面試官問你在什麼場合用的紅黑樹,我說是作業系統大作業,要求把Linux核心裡的紅黑樹移植到Windows裡。
第二個問題更簡單,如何判斷一個單鏈表有環。我說一個快指標一個慢指標就搞定了。面試官沒有接著往下問。
提問
最後一個階段是由我提問,對於網易有什麼想了解的地方。我首先問運維開發跟遊戲研發都是開發側重有何不同,又問這兩個職位未來的發展路徑如何。面試官的意思是遊戲研發可能需要在某一個方向上鑽研得比較深,運維開發要接觸的知識面更廣一點,將來可能發展成架構師什麼的。我第二個問題是運維開發跟運維有何不同。面試官說運維可能需要跟客戶打交道,運維開發還是側重開發。之後問了一些不太相關的東西,不記得了。
因為之前在阿里吃過虧,我問如果我只能實習兩個月會對結果有影響嗎,面試官說不會。我又問面試官面試之後多久會得到反饋。面試官說3-5個工作日,實在不行可以聯絡HR。
當天晚上接到HR電話,一面過了,第二天二面。
二面
知識面和學習習慣考察?
相比一面,二面主要是扯閒篇。一上來面試官還是讓我做自我介紹,不過要求介紹簡歷上沒有的東西。我就扯了一些有的沒的,強調了一下自己雖然經驗上可能有所不足,但學習能力比較強。
第二個問題我記得不是很清楚,大致是你平常有沒有對別的技術感興趣之類的。我隨口說了一下前一段看的緩衝區溢位攻擊的文章和實驗。面試官讓我講了一下原理,又問你覺得這個技術可以用在哪。我猜了半天沒猜對,最後面試官說利用網頁Flash給使用者掛木馬就是這個套路。我當時有點不爽,心想我面的是後臺開發你問什麼前端,不按套路出牌啊。
第三個問題是問我開發的OJ,問我們在安全上做了哪些措施。我就說禁止一些危險的系統呼叫,同時不給使用者返回與題目無關的資訊(如伺服器上的系統路徑等)以免受到攻擊。面試官又問如果有一個程序佔了很多資源怎麼辦,我說我們發現資源佔用超出限制就會殺掉程序。面試官又問如果一個程序一直迴圈不退出怎麼辦,會不會佔著CPU不放拖垮伺服器。他應該是想問程序排程相關的問題,我當時沒想到這一點,只是說我們發現程序執行過久就會直接殺掉。面試官又問你們統計程序執行時間是CPU時間,那麼CPU時間的基本單位是什麼?我不太確定地猜是時間片,面試官沒接著往下問。
面試官又說了一下我的劣勢,大概是與職位相關的學習/實戰經驗不夠豐富,問我怎麼看。我說我承認這個確實是我的劣勢,但工作之後碰到的問題恰好是在學校裡學到的可能性也不大吧,作為一個碩士重要的不一定是讀研期間學了什麼知識,而是獨立負責一個專案、分析問題、解決問題的能力,blablablabla。面試官聽了也沒什麼表示,不知道是贊同還是不贊同。
面試官問我為什麼選網易運維開發,我大概說了一下。又問我有沒有投其他公司,我就吐槽了一下阿里。估計這個時候面試官已經想好要不要我了,問我為什麼要7-8月實習,5-6月份在幹什麼,估計還是希望我能早點過去。我說畢業開題比較忙,面試官也表示理解。
提問
我首先還是問了一面問過的兩個問題,得到的回答差不多。我又問聽說網易的面試是多輪面試算總分,是這樣嗎。面試官說有時候許多面試是並行的所以要算總分,但這次不是。我問面試之後多久可以得到反饋,面試官說5-7個工作日,不管過不過都會有通知。
總體感覺二面的這位面試官更嚴厲一點,考察問題的角度也跟第一位不太一樣,我聊天過程中感覺不如一面那麼好。二面結束後一週都沒有得到反饋還以為掛了,第八天傍晚突然收到網易用郵件發來的offer,隨後接到了HR的電話確認,接到電話的時候感覺HR姐姐的聲音比下課鈴都好聽。
總結
- 可能是內推的原因,面試官對演算法、程式設計技巧等等考察不多,省去了很多準備時候的麻煩。如果是走正常的校招流程,我可能還要花大量的時間刷題什麼的。我個人比較反感刷題這種活動。
- 做東西一定要紮實。面試官提問題都是由淺到深,判斷你對自己做過的東西掌握到了什麼程度。如果只是很浮躁地能跑就行應付了事,絕對會被發現。
- 網易招人的態度很好,每次面試前一天都會有HR聯絡你約定合適的面試時間,面試開始和結束的時候面試官都會很認真地說歡迎/感謝參加網易的面試。感覺確實是很認真地想招人,不像阿里的面試感覺很隨意3。
尾聲
之前一直瞞著老闆找實習,學術工作也沒怎麼上心,拿著offer去找老闆商量被罵的狗血淋頭。從老闆的角度出發,要對我的學術生涯(還有畢業)負責,所以要求我安心搞科研是有道理的。但是從我個人的角度,找實習也是很重要的一件事,我實在不想放棄網易這邊這麼好的機會。鼓起勇氣又找了一次老闆,誠懇地解釋了一下我的想法,老闆終於鬆口。接下來要抓緊寫論文了。
文章來自微信公眾號:猿媛之家