【经验】对“面试造火箭,入职拧螺钉”的看法
最近一年多在互聯網行業的求職中經常出現這么一句話,叫做“面試造火箭,入職擰螺釘”,在很多人看來,自己費了好大的勁面試進了一家很不錯的互聯網大廠,但是進去之后發現做的事情都是一些很簡單的事情,跟自己當初的想法有著非常大的區別,因此很多人都在感嘆著自己是經歷了造火箭的面試難度,去做著擰螺釘的活。但是為什么會出現這樣的情況呢?下面我就來聊聊我在這件事情上的想法。
為什么面試造火箭
隨著做算法的畢業生越來越多,企業對于候選人的要求也越來越高,導致很多時候一個公司的算法崗位可能也就是2個名額,卻有上百名同學來競爭,對于一些一線互聯網公司而言,甚至平均每一個名額就會有幾百名同學投遞,這也直接導致了面試難度的加大。而針對于這上百位投遞的同學來講,企業不可能每一位同學都會給到面試機會,那么這個時候就需要通過一系列的篩選機制,去剔除一些質量相對而言不是那么好的同學,因此,很多公司就會從2個方面來入手,第一個就是通過筆試題來篩選掉一部分同學,比如說一套試題的滿分是100分,60分及格,那么低于60分的同學可能簡歷根本都到不了面試官的手里;第二個就是通過卡學歷的方式來篩選掉一批,因此,我們可以經常看到在很多招聘的JD中選擇要求是985的研究生畢業,或者要求有多少篇論文或比賽的經歷也就是這個原因,然后剩下的簡歷就進入到了面試官的手里。
一般來講,在一次春招或秋招的過程中,每個崗位經過一系列的篩選之后,可能還會剩下幾十名同學,那么這幾十名通過就需要進入到面試環節,而這個面試過程在很多同學看來難度堪比造火箭。
經歷過最近兩年春招和秋招的同學不難發現,近兩年的招聘越來越難,而且基本上所有的公司都要經歷筆試、機試甚至白板這么幾個步驟,然后才能到面試官的最終面試,甚至在面試官的最終面試過程中也可能會讓你在白板上手推公式和白板編碼,可以說是太難了。其實之所以這么難,其根本原因在于崗位少,人數多,而大家都拼著命的往大廠去擠,因此會造成大廠人滿為患的現象。
而在面試的過程中,面試官實際上要考察的是應聘者以下3方面的能力。
基礎能力
其實大部分的筆試題大家都會發現,真實難度并不是很難,基本上都是以經典的算法和數據結構基礎為主,其實所考察的知識點也就是那么幾個,但是在做筆試題的時候,題目中肯定不會特意的為你指明是要用什么算法來解這道題,或者說具體考察的是哪個知識點,更多的是把這些知識點揉在了一起,然后形成一道相對比較綜合的題目來做。
另外,大家可能也會發現,最近很多公司在筆試題的時候,無論你考的是什么崗位,所做的筆試題都是一些很基礎的題目,并且這些題目和業務都沒有什么關系,更多的都是大學里面的計算機基礎知識,甚至還會包含一些操作系統和計算機網絡等相關的知識。其實企業之所以這么設計,一方面是想照顧到大多數的同學(因為很多公司所有的開發崗都適用同一套試卷),另一方面就是想要考察同學的綜合基礎能力。
那么為啥要考察基礎題呢?實際上,在企業和在學校最大的不同就在于,在企業中我們很多時候不僅僅需要的是你對于自己所熟知的領域的掌握程度,很多時候我們更需要一些相對比較復合型的人才,因為一個真正的系統的落地,肯定也不僅僅是幾個算法就能搞定的,這里面會涉及到一些與計算機底層調度相關的內容,比如說,如何去節省能存的開銷,如何去優化服務使得時間復雜度更低,面對一些線上的任務,我們還會去考慮一些高并發相關的內容,而一般服務器我們都是使用Linux,這里面又會涉及到Linux服務器中關于用戶最大文件限制等相關的內容,例如ulimit這個參數等,而當你服務上線前,還需要考慮到接口的調用方式和安全性問題,這些實際上和計算機網絡、操作系統甚至數據結構這些基礎性的內容都息息相關,因此,在一個企業中,尤其是比較大的企業中,面試時基礎題是必考的。
針對于這些必考的基礎題來說,企業需要設置不同難度的題目來區分不同層級的學生,這也就是為什么有的題目比造火箭還要難。說白了,這些題目面試官并不是期待你一定能做出來,但是一旦做出來了,一定是在面試官眼里留下好的印象,也就是所謂的一些驚喜。
編碼能力
編碼能力可以說是所有與算法相關崗位一定會考察的一種題目類型。因為作為企業來講,招你進來大部分就是要解決實際的業務問題,而這些業務問題都需要有一定的編碼能力才可以完成,這里所說的編碼能力不僅僅是大家在學校里所學習到的那些實驗級的項目,更重要的是針對于實際的工程問題如何去解決。
在企業面試中,考察一個人的編碼能力最快也是最簡單的辦法就是讓求職的同學現場寫代碼,大家會發現,現在讓大家寫代碼并不是給你一個很具體的算法,讓你去寫里面的實現,而是給你一個比較有場景性的題目,然后讓你去解決實際的問題,這兩者從面試官的角度來講是有本質的區別的。
如果給你一個很具體的算法,讓你寫里面的實現,這個基本上大部分人都能夠寫得出來,只要提前準備一下,然后把常考的算法背一下,基本上問題都不大,比如寫一個冒泡排序算法,寫一個背包算法,這些都是不難的;但是如果要是只給你一個場景,并不告訴你實現需要用什么樣的算法,這種難度相對來講就要大很多了,甚至有些比較難的題目還會將兩三個知識點融合在一起考,這種難度就更大了。
大家在做很多筆試題的時候會發現,一般編程題都有3道甚至4道,并且每一道題的難度都不一樣,呈遞增的趨勢,實際上,這就是企業要考察的點,企業是通過這種方式來知道一個求職者對算法的熟悉程度,以及編程的能力。因為,在規定的時間來完成這些比較難的題,確實,不是所有人都可以做到的,而真正都能做出來的,那么一定是求職者中的佼佼者。
但是我想說,這里面實際上也是有一個隱藏的坑。大家雖然不能夠把所有的題目都做完或者做對,但是一定要做到每一個題目都有思路,應該能夠清楚的知道這個題目所考察的點,以及大致的解決思路,在這里給大家一個建議,當你覺得時間不夠的時候,你可以在明知道答不完或者不能寫出完整代碼的題目中寫清楚解題的思路,因為這也是面試官會看的一個地方。
對于一個企業面試官,編程題并不是要得到一個準確的結果,更重要的是想知道你的解題的思路和過程,所以有時候,過程往往比結果更重要。
在企業看來,只有具有良好的基礎編程能力,才能更好更快的去學習新的知識,能夠更容易去適應企業中的各種復雜的環境,而這樣的人,也正是企業想要招的人。
論文及算法能力
論文及算法能力對于一個AI領域的研究生同學來講是必不可少的。這里的論文我們一般指所應聘的行業或細分領域相關的論文,這里的算法是指其業務算法。比如說,在NLP這個領域中就有很多優秀的論文和模型,比如Bert,Attention等,在面試官對求職者進行考察的時候,往往喜歡問這里面的一些實現的原理、論文的細節甚至里面的一些公式的推導。這些內容其實要想真正的掌握到很深的層次是非常難的,但是作為一名求職的同學來講,雖然不要求理解里面的底層實現,但是對于底層的理解卻是一定要有的。因為在面試官看來,只有理解到這里面的實現原理,等到進入到企業中,才能夠很好的去理解業務邏輯中的應用,才能夠更好的去做出相應的算法改進。
另一方面,很多時候,我們在面試的時候要求手推公式,其中比較常考的一個點就是SVM和BP算法的手推,那么大家有沒有想過,為什么這兩個算法的手推考的這么頻繁呢?為什么一定要考手推公式呢?
實際上,手推公式的能力能夠考察出一個同學對基礎和底層的認識能力,而SVM和BP這兩個算法實際上是眾多算法的始祖。比如SVM算法是在解決分類,尤其是二分類問題上非常經典的一個算法,在深度學習還沒有火起來的時候,大部分做分類任務都會用到SVM算法,而后面很多的算法也都是從SVM的基礎上延伸而來,因此,SVM算法對于一個AI工程師來講是必須要掌握的內容。
而BP算法作為后面很多深度學習模型的基礎,同樣也是需要掌握的,因此,對這兩個內容進行手推公式的要求,實際上并不是很過分。
為什么入職擰螺釘
上面我們說了面試造火箭的問題,那么接下來我們再來聊聊為啥入職之后就要擰螺釘。
昨天我在一個面試群里和同學們討論了一下這個問題,有的同學不以為然,認為對于深度學習來講,基本上都是在調用現成的框架,所以真正要展現編碼能力或者算法能力的地方不是很多。
實際上,有很多同學都有這樣的想法,認為做深度學習和機器學習可能就是調用一下現成的包,然后搭建多層的模型,放到服務器上去跑,然后再上線,根本不需要什么代碼能力,但是事實是這樣嗎?于是我和幾個群里的小伙伴問了他幾個很實際的問題:
你有跑過TensorFlow的分布式嗎?
TensorFlow的數據接口怎么寫?
怎么拉取HDFS比較快?
給你一個1Pb的數據你怎么讀取,怎么快速拉取?
線上模型QPS達不到怎么優化?
這個時候,大家有在想了,這個在實驗室根本就接觸不到,所以說我不會是正常的,這些東西都是工程上面所用到的內容,我是一個研究生,我做的事情應該和研究相關。其實我感覺,抱著這樣心態的人不在少數,大家都認為自己的學歷是研究生,所以就應該把主要的經歷放在研究上,放在如何提高模型的效果上,但是,很多人沒有看清楚的一個問題就是,大部分同學最后還是要回歸到企業當中,而在企業當中,不僅僅需要你的研究能力,更需要的是與業務相關的工程化能力。
面試造火箭,入職擰螺釘。這句話雖然經常被求職者拿來用,實際上站在一個企業的角度來講更是如此。在我看來,一個企業辛辛苦苦的面試了一個同學,這個同學在面試的各個階段都表現出了自己具有造火箭的能力,于是很高興的將這位同學招進來,并且薪資還不低。結果,當這位同學進來之后,我們卻發現他的能力只能做一些簡單的事情,其實站在企業的角度來講,這也是面試能力和入職之后所體現的能力出現了嚴重的不匹配,那么這個時候,又不能夠把這個人辭退,那么怎么辦?只能從一些基礎的事情上做起,然后慢慢的成長,最后再把一塊的內容交給他來做,從而達到能夠承擔起更重要的事情的程度。
很多人在想,我感覺我的能力還不錯啊,為什么你們卻認為我的能力一般呢?實際上站在企業的角度來講,當然希望能夠招到一個能力不錯的同學,但凡一個人能力比較強,那么誰還想招一個能力比較差的同學呢?但是我想說的是,在學校里面學的東西與實際企業中所用到的東西很多時候是脫節的。我們就拿一個最簡單的數據處理來舉例,在學校,我們一般都是去網上下載一些公開的數據集,而這些數據集小則幾M,大則幾個G,但是在企業中,往往每天生產系統中所產生的數據量就有幾個G甚至幾十個G了,而我們經常需要一次性處理一周或者一個月的數據,所以這樣的數據量在學校是接觸不到的,當我們還是去使用學生的思路來做的時候,就會發現,之前跑10個小時就能訓練好的模型,現在要跑十幾天,試問哪一個企業能夠接受一個簡單的模型需要十幾天才能驗證出一個結果的事實呢?
我們拿比較簡單的協同過濾這個算法來舉例子,做過推薦系統的人都知道,協同過濾算法是推薦系統中的一個比較基礎的算法,大家在做實驗的時候,一般就是用作者所開源的論文來做復現,每次的效果都不錯,于是乎,到了企業,大家也準備用這樣的方式進行上線。可真正到了企業里,突然發現,我們用這種方法行不通,當我們使用10萬個用戶,100萬個商品的時候,還沒等協同過濾算法計算完相似度,我們就會發現內存爆掉了。于是我們加大內存,想盡各種辦法去尋找內存的頂點,發現最后跑完這些需要160GB的內存,而且需要跑20個小時才能跑完,這對于老板來講肯定是不可接受的,因為不可能因為你一個簡單的協同過濾算法,就給你配一個160GB內存的機器,或者一個集群,在企業來看這是劃不來的。但是實際上,真的需要這樣嗎?不是的。我們在企業中,針對于協同過濾算法可以優化的點太多太多了,用空間換內存,增量數據模型,增量訓練,算法對角矩陣優化等等,每一個點都能夠把時間復雜度和空間復雜度降低一個量級,真正到企業中,你會發現很多高級算法工程師能把160GB的內存開銷降低到16GB以內,20個小時能降低到3個小時以內完成,為什么別人可以,你卻不行?這實際上就是經驗的問題。
?
最后,我想告訴大家,不要再抱怨面試造火箭,入職擰螺釘了,很多時候,大家認為自己發了很多篇論文,有很多學術上的成果,但是在實際的工作中,我們要的是真正的企業落地,而企業落地與在學校真的是大不相同。
因此,是企業在難為我,讓我擰螺釘嗎?不,說句不中聽的話,是因為你的能力真的還達不到造火箭,甚至連點火箭的能力都達不到。
最后給大家一個建議,面向企業編程,才能使未來的路走得更遠。
?
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群請掃碼進群(如果是博士或者準備讀博士請說明):總結
以上是生活随笔為你收集整理的【经验】对“面试造火箭,入职拧螺钉”的看法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python基础】高效的10个Pand
- 下一篇: 【机器学习基础】浅析机器学习集成学习与模