前端面試官 怎麼問的問題都是 原理呢?

這幾天去面試了幾家公司,面試官在問了一些常見的技術後 總會問各種原理,比如 ajax 原理 http原理 mvvm原理,臟查詢原理 等等

像這些原理,我也看過很多文章,但是 回答這些問題真的不好回答,

比如

(1)問:雙向綁定 的原理是什麼? 答:因為裡面有 臟檢查技術 。 問 :臟檢查 技術的原理 是什麼? 答:內部不斷地檢查 變數的狀態變化 。問:是怎樣檢查的? 答:。。。。

(2)問:mvvm原理是什麼? 答 :M-模型 v -視圖層 c-控制層 ,邏輯展現分離;

問:我問的原理是什麼? 答:。。。

(3)問:http原理是什麼? 答:超文本傳輸協議,沒了 問:工作原理, 答:地址解析 - 封裝HTTP請求數據包-封裝成TCP包,建立TCP連接(TCP的三次握手) - 客戶機發送請求命令-伺服器響應,返回數據-伺服器關閉TCP連接 。問:為什麼通過這幾個步驟後就可以、? 答 :。。。。

(4)ajax原理是什麼? 答。。。。

。。。。

最後面試官總結:你停留在會做的層面上,但是沒有更深入的去了解他,掌握它!


沒必要質疑面試官自己是否真的懂他自己問的問題,面試的問題是很大程度是為了形成區分度,找到你比我們屌的那個領域(打動點),而並非用來體現面試公司和面試官牛逼的。

我經常問一些我好奇但是完全不了解的知識(此處沒有心虛),目的是為了找到那個你比我鑽研得深的某個領域。如果你說不上來,那大家差不多,也沒必要苛責。如果你說得上來,我會覺得你加入團隊會給我們帶來多元性。如果你在短短時間內還能把我給教明白了(或者讓我以為我聽懂了),那麼恭喜你,你比我屌,我這關基本過了。


問題不斷深入原理是在摸清你知識的邊界,考察知識的深度,了解你在遇到問題時解決問題的能力。熟練掌握 API 能保證你在多數場景下應付自如,但真正遇到棘手的問題時,你不理解原理就容易造成潛在的問題,在項目里埋坑。

同時這也是考察你對技術的熱情。作為一個工程師,如果對一種技術「究竟是如何運轉的」都沒有好奇心,很難有足夠的自驅力去保持學習的熱情,而這正是程序員最需要的。


求知慾會促使你去了解原理,沒有求知慾也干不好程序員。你可別小看這個,看看自己身邊的人,有多少能做到一直保持好奇心和非常強的動手能力的,他們都是非常nb的人。


面試就像是測視力,如果問的問題面試者全答出來了或者全沒答出來,都是不對的。

題主說「我也看過很多文章,但是 回答這些問題真的不好回答」,其實還是意味著並不是真正的讀懂了,而只是自以為懂。

因為如果真的懂臟檢測如何實現的,不用代碼,畫個流程圖出來就可以。

http是個協議,它不涉及原理,只涉及規範。對於前端來說,講得清TCP三次握手,說明計算機專業知識掌握的可以,對於應屆生來說,我可以期望既然你把這個知識點學的很清楚,那麼其他的知識點應該也學的很好,你是一個學習認真的人。

而對於社招來說,要回答http在應用中的意義,比如restful,比如302,比如cookie。

ajax原理這種事情可以講跨域,講jsonp,甚至說cors,這都是在一個話題範疇內的。你要做的不是回答面試官的問題,而是搞清楚他為什麼要問這個問題。

我之前一篇文章 前端面試指南 有說到我對於面試的看法。

題主可以對應來看一下,你對於雙向綁定可以達到了解、熟悉,還是精通。我們對自我的評價往往會高估,

面試對應的主要有三個方面:

是否具有工作崗位所需要的最低能力

    • 是否有過類似項目開發經歷
    • 是否掌握工作崗位所需技能
    • 現場編碼解決問題
    • 正確使用搜索引擎
    • 能夠對之前項目中使用過的技術做出詳細解釋

是否對技術有熱情

    • 有在線可訪問的代碼
    • 有技術博客
    • 在技術社區積極回答問題
    • 關注新技術,並且做過官方demo以外的案例
    • 日常使用技術解決生活中的問題

成長空間

    • 計算機專業背景
    • 良好的演算法基礎
    • 良好的表達能力
    • 做過技術文章翻譯
    • 有至少一項5年以上的愛好

原理性問題主要還是針對第二個方面,一定程度上也能體現第一方面。所以你在回答中可以這樣回答:

臟檢測是angular的核心機制,之前在XXX項目中,我們使用XXX技術,但是遇到了XXX問題,我們調研發現angular可以很好的解決這個場景問題,因為臟檢測可以實現XXX,背後的原理是XXX,兼顧了易用和高效,而新版本的angular採用的機制是XXX。其實對於項目來說,框架的效率已經滿足場景了,angular的優勢在於工程上簡化了開發...

大概思路就是說,我有過類似的項目開發經歷,開發中我是怎麼做的,我確實知道應該如何做事。我用這些技術不是為了搞雜技,是確實對應到了業務上,我對技術選型是有理有據的,因為我知道原理,這些原理恰好可以用來解決問題。

話說回來

技術面試對於大多數人來說,都是一些臨時的工作, 所以一定有一些面試官,並沒有很多面試經驗,或者並不真正知道如何面試。所以他們也是照貓畫虎,上網搜一下別人問什麼。看到別人都問原理,覺得這個看起來很厲害,但其實根本沒搞清楚出面試的原理是什麼。

很多年前我參加校招面試的時候就遇到過一次做無領導討論,兩個技術負責人對十幾個人做無領導,簡直就是在開玩笑,純粹就是做個形式而已,根本得不到足夠決策的信息。

技術面試也是,會有一些面試官覺得你答出來我的問題就是NB,我給你高分,你答不出來,對不起,走人。其實這些問題到底和工作內容有多大關係呢,問你原理是要搞清楚你是不是有造輪子的能力,然後找你來用輪子。如果發現你不會造輪子,所以你不適合我們,這就有點扯了。

招人這件事,說白了就是,取之盡錙銖,用之如泥沙。面試的時候巴不得你分分鐘擼一個操作系統,工作的時候每天就是curd。

總而言之,問原理的話,如果你真的用的很多,並且平時也有留心思考,這些問題並不難回答。思考一下這些原理和工作本身的關係,這是你的知識技能價值的體現。如果你實在是想不明白這些原理的問題和工作有什麼關係,和過去,現在,未來都沒有什麼關係。

那可能單純只是因為面試官是個腦殘吧。


很明顯啊,為了區分度

要是都問如何設置文字顏色這樣的問題,大家都能答上來,如何決定招誰呢?


我面前端不但問你前端原理,還會問一些後端原理,甚至會給你講一些你不大可能接觸過的知識,考察你的理解力和舉一反三的能力。

因為,除非我只準備把你當做小兵,完成任務就走人那種,否則必然要儘可能考察你的潛力,這才是認真負責的態度。如果面試沒有區分度,那是耽誤你,也是耽誤公司。

另外,對於新人,如果一問三不知,但是當我告訴他pushState api是啥後他能推論出有啥應用場景,那我多半兒就會要了。

補充一點: 如果被面試官連續問住,別惱也別慌,平和對待,如實承認不知道就是了,那只是他在了解你的邊界,不一定就過不了。特別是一些資深面試官,要是以候選人對答如流為錄用標準,那估計一年都招不到幾個。


面試官問原理是再正常不過的事情了。比如下面親身經歷的一件事情:

那麼碰到這樣的面試者,不聊一些原理性的東西,怎麼去判斷是不是真的精通呢?

別在追求一些上層建築了,高樓大廈永不倒靠的不是頂層,而是看地基打得好不好。


你應該慶幸啊!

他要問你那種 400 個頁面的前端項目如何架構、維護、部署,你可能根本沒有機會去接觸導致無法回答。然而他問你的問題,代碼就在 github 里,文檔和資料遍地都是,只要你學會了,看懂了,你就過了。

這不就等於開卷考試嗎?


我的理解如下幾點:

1、面試官只是想知道你的學習能力,如果你了解了原理,說明你具有求知精神和鑽研精神。

2、會用誰不會,真正的程序員不是螺絲釘,如果你想成為一個真正的程序員,建議你還是多了解底層吧。

3、原理的掌握,會使你在使用方法過程中更加得心應手,比如你了解了原型,構造函數,那麼你看別人的框架代碼就不會是一團烏雲; 比如ajax實現原理你了解了之後,你就知道你發送一個請求瀏覽器究竟做了什麼,如果出問題你能很快找到解決方法; 比如jsonp原理了解了以後,不是讓你下次用的自己手寫一個jsonp,而是讓你更加關注jsonp引入的web安全隱患……

4、原理是基石,它基本上是不會變化的,然而,框架會隨時代而變更。


技術上問你原理。你能答上來是加分項,答不出來並不一定會減分,畢竟每個人有每個人的所長,面試的重點是發掘你對崗位能輸出多少,而不是難住你。

項目上問你參與度。這才是重點,直接決定你的加分與減分。

另外反駁一下說面試官壓低工資的,談工資是hr的事情,面試官只談要不要這個人。


看起來你面了一家不錯的公司,面試官也很優秀,因為強調「原理」是專業的表現。

我知道我知道,不被認可不是一件痛苦的事,但是懂得原理的程序員,不用幾個,就可以勝過一大幫子只會用卻不懂why的程序員。我相信,有理想的程序員肯定是想往上走,去更專業的公司,而不是滿足現狀混日子。

別不高興,別因為你的回答沒讓他滿意就不高興,現在你知道自己的不足,知道如何提高自己,這是好事,當然,你也可以選擇:去TMD什麼破面試官,問的都是些沒用的東西。

你的選擇,你自己的路自己做主。

了解更多程序員大道理請關注 @程墨Morgan ,關於面試官應該怎麼做,請看我的Live《如何做好面試官》。


面試問原理是合理的,但是題主遇到的面試官自己真的理解嗎,我認為只是半瓶子晃蕩。而最後的結論,說你只會用,也只是一種打壓你的工資的手段。

為什麼我這麼說,因為我覺得他問的問題很不專業。

舉個例子,他問你雙向綁定的原理,這個問題根本不成立。因為雙向綁定是個feature而不是個tech point。比如他可以問雙向綁定的實現方式有哪些,題主回答了臟檢查,對象劫持,觀察者等等。這時候再問臟檢查的原理是什麼,循序漸進。而他的提問方式讓我覺得他根本什麼也不會,只是看了幾篇技術文章,記了幾個技術名詞就開始顯擺。

同理,mvvm是個設計模式,http是個網路應用層協議,他們本身都是一些「約定」,根本談不上「原理」。

說白了,我最討厭的一類面試官就是填鴨式面試,面試過程不是在引導,而是提一些不知所謂的問題去證明自己比面試者強。

很多面試官很喜歡問,「如何做前端優化」,我心想,這個問題的答案可以寫一本600頁的書,書名就叫『如何做前端優化』。

還有一些面試官,喜歡抱殘守缺式的自我欣賞。例如我去深圳某大廠面試的時候遇到一個技術委員會的面試官,認為解決跨域一定要懂jsonp原理,防csrf攻擊,一定要靠記錄cookie驗證請求。不懂stateless server,不懂http api冪等性,不懂jwt,而沾沾自喜地跟我顯擺他的一些過時的瀏覽器api的奇技淫巧,比如靠js怎麼刪除cookie 。當然你們可能很難想像一個這種級別公司的技術委員會成員會這麼不專業,但是事實就是如此。

其實這種人完全不配當一個面試官,因為他不是在給自己的僱主篩選人才,而是在給自己物色擁躉。這種現象在所有公司都很常見,老闆也不太在意,因為他需要的只是概率,而不是公平。

前幾天,我的前同事,一個從入職開始就沒有真正寫過代碼的混子混進了我上面提的某大廠當了leader。他用的手段是去遊戲工具部門面試演算法崗,因為那個部門正好需要一個智能客服系統,面試官又不懂演算法,所以就讓他鑽了空子,他還帶上了前手下抱團跳槽幫他寫代碼,所以不怕入職後露餡,簡直穩如狗。我得知這件事後,很慶幸自己拒了那個公司的offer。

所以題主不用灰心,面試官水平本來就參差不齊,原理很重要,但是問你的面試官還真不一定懂,不要因為別人傻逼,就阻礙了你進步的心,下次面試再接再厲。


如果我們只是想快速運用一個知識,我們可以不求甚解。但如果我們想掌握這個知識,就應該追本溯源。

舉個例子吧,最近我面試了十幾個同學。其實有幾位說自己熟練運用Vue。於是我問,Vue聲明組件的state是用data方法,那為什麼data是通過一個function來返回一個對象,而不是直接寫一個對象就好了。

大多數人都答不上,有個同學甚至說,因為它就是這麼規定的,如果不用function,它就提示我錯誤…


現在還在找工作。

我個人覺得,面試官問啥都沒有問題。

不過,個人建議是面試記得帶筆

遇到你遇到這種問題的時候,不懂就反問一下,拿出筆記一下

===================================================

有相當一部分的面試官根本答不出一個所以然

而且還喜歡在那裡吹,這時候這個公司你就要自己好好考量一下了。

至於那些承認自己也不熟的面試官,我沒暫時遇到過,也說不出怎麼面對。

不過!!!

如果面試官說出了一個所以然,那麼你這面試也算不虛此行。

聽會的人講一些知識點,會讓自己回家查文檔學習的時候有一個不錯的切入點。

至少,下次面試遇到同一種類問題,至少能說出一個大概。


沒有誰一上來就問原理吧

真有的話,就有點裝13了

面試官考察的是一個人的知識體系,如果面試官自己都沒有全面的知識體系的話,我認為很容易讓對方覺得你在裝或者對方認為你沒有多大的能力(如果這時候你是lead的話,就尷尬了),太強的人你招不招,錢能給到位嗎?

一定要找合適的人,滿足崗位要求的人,有學習和進取心的人

通常喜歡總結,比如有博客,有github上的代碼可看

,我相對認為學習態度會比較好

你要真只是找搬磚的人,就問你這裡搬磚所需要的能力,通常是實際使用的技術,比如你項目里用的react+redux,構建用的webpack,你就圍繞這些文檔去問就行了,因為你自己學習和使用的時候也是看文檔啊,不看源碼照樣666地完成項目

能問到原理,首先得問一下他做過這方面的一個實踐,然後看他是怎麼處理的,有沒有遇到什麼困難,如果回答的還不錯,進而問他原理

如果這時候,你需要找個高級的,不能只是完成工作而已,你就需要考慮這個人有沒有追本溯源的能力,因為高級工程師除了能夠解決疑難雜症,從根源上查找問題,還需要有創造能力,不知道know-how如何去創造

你真想區分一個人的水平,那請出演算法題,通常在業務開發中,哪怕是一些公司的高級開發,接觸的數據結構和演算法通常是數組,map,鏈表,樹;排序,二分查找,深度和廣度遍歷,遞歸等

我認為你就從你實際工作中遇到的問題去出這些題

我比較討厭面試造火箭,工作擰螺絲的公司

我認為這是對人才的浪費和不尊重,另外,這個人進了公司發現自己竟然只是擰螺絲,團隊不穩定性也會增加

我個人視野有限,也在不斷地學習中,目前我認為還是從對方的實際工作內容作為切入點去了解對方的知識體系,作為面試官,你可以沒有深入了解到某個知識點的全部,但是需要了解有這些個知識點


面試造航母,工作堆積木是什麼原理……(


去年Google Onsite,面試前端工程師職位。面試前我和Recruiter再三溝通,說我前端很叼的,原理概念無所不知,希望多找幾個懂前端的面試官,Recruiter說看安排。面試的時候5個面試官,就一個懂前端的,其他都是後端甚至Machine Learning工程師。而唯一那個懂前端的面試官,一上來就給一道演算法題讓我用JavaScript解。我空有一腦前端知識有什麼用,沒有一個面試官問我原理和概念。還是樓主面試的公司好,比Google務實多了,以後定會超越Google。


我覺得有三點是我想要看的

第一個就是驗證這個人做過的跟說過的是不是一致 這種事說謊堅決不要

第二點 你做過的很熟的東西 既然都寫在簡歷上了 那你對實現(一般是在js這一層)了解多少 不一定全答上來 但是核心的點你得知道吧…

第三點 對技術的好奇心,不限於你自己探索的經驗套路,奇技淫巧;也可以是你喜歡的設計模式和組織原則,也可以是一些提高用戶體驗的方法手段,但是我真的不能接受那種,說自己做過文件上傳,結果就是new fileuploader 還講不清楚到底做過什麼,沒法從自己日常調用的api中揣測其內部實現的,還有連深淺複製都搞不清楚的(這是對社招基本要求……)

不過 話又說說回來,什麼叫原理,又什麼叫實現,還是要有分寸的,同為搬磚工 你就別考人家造航母了好吧……要是招個專門做業務的前端也基本沒必要面試考他指令集對吧,更不是把自己厲害的領域根別人比較……

anyway 我還是不能接受干過兩三年 canvas svg websocket 都沒碰過的人 前端畫圖最炫酷的東西都沒用過的話,談什麼好奇心和進取心?


問原理很正常,但是問題是………

這些東西,真的有 原理 這個屬性么……


碰到這種面試官接點熱水直接潑回去 然後就跑


推薦閱讀:

公司要求統一一套前端腳手架,該怎麼選擇?
React這樣整個全家桶真的好么?這麼碎片化會是以後前端框架的趨勢么?

TAG:前端開發 | jQuery | React | Angular? | Vuejs |