這次給大家講講我2年前去愛奇藝面試高階運維開發崗位的經歷,希望對大家帶來一些幫助。
公眾號「Python專欄」後臺回覆:自動化運維平臺,獲取整套自動化運維平臺的原始碼
聊騷階段
嗲妹妹:你好,我是愛奇藝的HR,我們正在招聘運維開發崗位,請問您最近有在看工作機會嗎? 我:(這聲音也太酥了吧我去……)嗯,你好,訊號不太好,能在說下嗎?(讓我再酥一次吧)
嗲妹妹:(重複)
我:(我去,真的好酥啊)啊聽到了,嗯,最近有在看 (不看機會,就沒機會聊下去了啊)
嗲妹妹:嗯嗯,那簡單的介紹一下,……,公司在xxx,你看什麼時候方便過來一次嗎?
我:可以可以,那就約在周xx吧,我應該可以,那天是你本人接見我嗎?(臥槽……不由自主的就問出去了……)
嗲妹妹:當然是啦,我會全程負責你的這次面試(沒有這次面試幾個字多好?)的,好呀,那我們周xx見咯,拜拜~
我:嗯……(快不行了……)
標題準備環節
在去之前呢,我也看了下愛奇藝的JD,講道理,我這個人呢,還是喜歡做點準備的,如果去,就是我可能會考慮對吧,(畢竟他們除了要我,還有其他選擇嗎?)那最爽的結果就是手握各大廠的OFFER,然後沉浸在無法做出選擇的幸福中了。
那準備過程中,發現他們的要求中需要對ansible熟悉,那我呢之前是有用過ansible的,但是對saltstack是比較熟悉的,因為產品化的東西更吸引我,而且在工作中也用他做過二次開發,所以就去對ansible做了一些調研,已經自己寫了幾個playbook,包括python api呼叫。這裡要說下,網上很多資料都是ansible 2.2 的,這個老版本了,截至發稿,已經是2.5了,其中的api呼叫也發生了很多的變化,建議大家多去看Official Guide,百度到的真的太亂。這裡不展開講了。
那天到了後,進入愛奇藝大廈(大廠都是有獨棟的,確實不一樣,下次有機會在分享其他的bilibili、鵝廠、餓了麼的),就在下面等著唄,然後坐了一會,來了個男的,把我接上去了(我去???難道電話對面就是你?變聲器?這麼套路的?還好呀?還嗯嗯?),領到小房間後,讓我填表格什麼的。我很老實的告訴大家,我全程腦子裡就在迴圈電話那頭的聲音。我很低落,很難過,想家。
填完單子後,就等著唄,然後那個變聲男就把我的單子拿走了,然後丟了句,“稍微等下,面試官馬上就來”(心想,你走吧走吧,我也差不多準備走了……)
初面
來了位個子一般的程式猿(我胖啊,我怕誰),做個自我介紹
我覺得這個還是有說明的必要的,自我介紹一定要強勢,一定要底氣足。是你們要我,不是我自己找你們的,不要搞錯好伐……
那麼需要凸顯的有:
- 自己的專案介紹(運開的話,就是CMDB、CI/CD、k8s、OpenStack,有什麼吹什麼,千萬別不好意思)
- 武器庫(Python什麼級別?用過協程就別說多程式,用過Tornado就別說只會Django)
Q:Python的列表解析式會寫嗎?會的話,寫一個唄。比如選出1-100中的奇數。 A:[i for i in range(100) if i % 2 != 0](其實這裡有很多種做法,比如最簡單的用切片就可以了 list(range(100))[1::2]都不需要列表解析式,但為了迎合他的問題,你得往他身上靠啊)
Q:那 (i for i in range(100) if i % 2 != 0) 這個和你寫的有什麼區別呢? A:你現在寫的是生成器解析式,返回的是一個可迭代物件,不是list物件(其實技術面試呢,如果你能摸到對面的小心思,那就穩了呀)
Q:裝飾器有用過嗎?用過的話,一般你是用於解決什麼場景的? A:用過。典型的,使用者認證,簡單點的可能日誌處理等。主要用來處理一類問題的時候。
Q:那你能寫一個裝飾器嗎?用來對使用者的引數進行檢查,如果引數型別不匹配,就返回一個error報文,否則返回success。 A:好的。(就寫唄。這裡不以程式碼為主,思路很簡單麼,如果你用py2可能就要用attr了,但我py3 可以用inspection啊,簡單啊,然後把獲取到的引數檢查一下型別就好了唄,但這裡也有一個要求,型別是定義在函式宣告時?py3.5開始的型別註解。還是寫在配置檔案或者函式體裡面?反正我就當你用py3寫了型別註解了。)
……(省略一些基礎問題)
由上可以看出,面py開發,基礎是很重要的,期間還問了上下文的實現原理,還有類的使用、繼承、__init__和__new__的區別,例項方法、類方法、靜態方法,實力屬性、類屬性等等。不一一展開了。
Q:你有做過CMDB吧,那你們CMDB裡,如果有多套業務同時發生,你是怎麼處理的? A:(開始問我網路和併發了,這個要能聽出來)我起初用的是多執行緒的,後來發現在處理併發的情況下,效果並不理想,就改用多程式了。但還是會有瓶頸,比如在作業模組上(主動丟擲橄欖枝,我還做過作業平臺),併發比部署系統更頻繁,多程式處理會直接打滿伺服器CPU。後來就考慮換了協程,效果非常好。
Q:哦~你說到了協程,能說明一下協程和執行緒、程式的區別嗎? A:(知道你要問,這不被我帶節奏了麼)……(省略百度百科),協程主要解決的還是併發的問題,以及python GIL帶來的並行處理能力。
接著就讓我寫一個協程。那就簡單的寫一個生產者消費者模型唄。
聊了大概四五十分鐘吧。之後還聊了Django 和 前端的一些技術。感覺都ok。
最後瞭解了下,他是負責運開的技術開發。
二面
休息過後,就來了第二位面試官,面我運維的,運開嘛,如果沒有運維知識肯定是不行的。 先從最簡單的三次握手四次揮手問起來。
接著深入一點,開始問我在一次瀏覽器地址輸入一個連結後,到顯示出頁面,中間經過了哪些過程?其實就是問你DNS唄。
A:先找hosts檔案,如果沒有就開始dns了,查詢本地快取,如果沒有則向根發起查詢,一層層向下請求,直到找到為止,響應給本地DNS伺服器,在返回給客戶端。(個人感覺dns這塊回答的有點虛……相對py來說)
Q:那你有做過類似nginx的配置嗎?能簡單說下代理或者負載均衡嗎? A:nginx就自己用過,但沒有生產維護過。(沒有做過的話,個人建議還是老實交代為好,其實本來技術面試就有可能遇到你不會的,完全沒有關係啊,只要符合要求,部分技術不合規也是沒有關係的。)
後來的對話中,面試官也表示,可能之前做的更多的是DB的工作,對於web容器這塊不熟悉關係也不是很大。
然後就和我聊起了DB,MySQL的高可用、分表,SQL優化,監控等。這些基本都回答的ok,也是老套路了,網上能查到很多,這裡不做敘述。
技術組長
過了2輪後,竟然還有技術面,我去,是技術組長,然後還是自我介紹(不得不說,每輪都要自我介紹,每一輪我竟然說的還不一樣……)
經過一些基礎的可能上面兩輪問過的問題後,就開始問我演算法了,嗯,確實不太一樣。這裡我只能說靠平時積累了,有多少貨就都掏出來吧!
Q:現在給出一個列表,[a,b,c,d,a,v,s,d,c,a]
,對他進行計數,返回出現次數最多的
A: 嗯,我想想。然後給出了一個字典的儲存方式,原因就是可以減少迴圈次數,儘可能降低時間複雜度。其實我一開始想說,直接用Counter模組不就好了麼,但是沒說出口,我知道會被打。
之後就對我自己做的一個MiracleOps問了很久,主要圍繞的還是實現的方式和原理,能理解啊,你做的東西,自己一個人做的,那隨便問你都知道咯,(就是看看你是不是在吹唄,很多人會把自己參與的專案說成是自己獨立完成的)
整個三面大概也持續了要有不到一個小時。
技術總監
終於熬出頭了,和技術總監對吹環節終於到了,和技術總監聊就有一個好處,你可以不用說具體的實現了,和“老人家”聊技術,你就得讓他覺得你這個小夥很靠譜,思維很先進,有意思。
我充分發揮了我12年的語文詞彙,把能說的成語都套上了技術的字給丟出去了。讓我談談理想,我就吹啊,我要把自己的餘生交給公司,為公司開闢疆土,將運維盈利化、產業化。讓我們的部門成為公司最受矚目的part,讓總監你成為老闆的左膀右臂!
我也不知道這波吹的怎麼樣,反正總監是笑了。你們覺得呢?
HR
吹完江山,接下來就是和美人聊咯,嗯,hr小姐姐來了,和我說完大概情況後,和我開始聊起待遇,問我要多少。
劃重點了,大家在這個時候一定要穩住,千萬別兜底,你自己得要有自己的底,過了我們就不伺候了。
你可以在自己的工資上面稍微加一點,把平時的獎金、福利、叫車報銷balabal,都加在基本薪資上,畢竟漲薪和福利可沒關係。
另外,hr如果要你說期望,你就往高了說,反正高了也會壓你,低了也會壓你。
經過一番博弈後,hr小姐姐終於問出了那句“如果薪資沒有達到你的預期,你還會考慮我們公司嗎?”,小夥伴們,這句話你們應該不陌生對不對,千萬不要方,你可以委婉的告訴他,“經過一天的面試,我覺得貴司的流程制度還是非常完善的,而我應聘的部門氣氛也非常好,我相信我能為公司、部門帶來看得到的提升,也相信公司會正確的給予我一個合理的範圍。”,hr就懂了。
總結陳詞
好了,吹了一天的面試經歷,到家就已經7點多了。真的累了,但我還是忘不掉那天電話裡的聲音。為什麼始終沒有出現。還是出現了我並沒有發現……
面試流程大體相同,不同的是技術問題,以及每個人對應的方式方法,給大家總結一下我的經驗:
- 技術面的時候,一定要把自己有的全都掏出來,讓對面看看我們的真傢伙……
- 在和總監面的時候,儘量說的眼界大些,能給部門帶來收益是最好的了,但別越界了,讓領導覺得你過來會威脅到他,那估計就沒戲了。
- 和hr再聊薪資的時候,不要過早暴露自己底線,另外hr想要知道你的期望都是ok的,但你可以多加一點,反正合不合適hr都會告訴你的,要你就會說在考慮下,或者爭取下,如果不合適,你低了過去也沒意思。