(譯)一篇非常不錯的前端面試文章

2021-03-02 藍橋雲課精選

文章來自翻譯,其中忽略了一些無關緊要的內容直入主題。

作者先後在twitter,Stripe工作,期間會參加面試工作。實際上參加面試工作的人都知道要想在一個較短的時間內(30min-1h)就對一個應聘者做出判斷其實是很難的,因此我們不得不想盡辦法去更加合理的去判斷面試者。下面是作者理出的一個思路:

如果對方有github帳號,我們會儘可能的去了解TA在開源項目上的動態和他的開源項目。我們也會從中挑出一些切入點,通過交流他做這個項目的出發點也能夠更好的了解面試者的設計思路,也可以初步的去判斷該人是不是適合團隊。如果雙方交流順暢,接下來會直接進行到代碼等一些基礎問題上來。

自己的面試會很實際,幾乎全部都是coding,很少會提到算法和一些抽象的概念。自己提出的問題看似簡單,但是每一點都涉及到javascript的一些知識領域。

面試的時候並不建議使用白板,通常希望面試者自己帶上自己的筆記本,或者就使用自己的。我會將他們的代碼運行,並告知結果。

1.Object prototype 

我起初會提出一個非常簡單的問題就是定義一個函數spacify ,將一個字符串作為參數傳入,然後返回一個字符串,不過該字符串相對原有傳入參數的變化是字母與字母之間多了一個空格。

spacify('hello world') // => 'h e l l o  w o r l d'  

雖然問題很簡單,但這卻是一個很好的開始,我們接下來的問題便可以圍繞此展開, 尤其對於那些聲稱自己了解Javascript,但實際卻連一個函數都不會寫的面試者高下立判。

正確的答案如下,不過一些面試者或許會選擇for循環,當然這並沒有錯

function spacify(str) {    return str.split('').join(' ');}

接下來,我會繼續問如何將這個函數直接作用在一個字符串對象上.

'hello world'.spacify();  

這個問題可以讓我了解面試者對原型鏈的理解,這個問題可以讓彼此展開一些有討論,諸如直接在原型鏈上定義屬性的危害等等.實際期待結果:

String.prototype.spacify = function(){    return this.split('').join(' ');};

一般到這裡我會讓面試者講講函數聲明和函數表達式的區別。

2.Arguments

接下來,我會去了解面試者對於 arguments的理解,我們會要求面試者定一個log函數。

log('hello world');  

函數類似實現一個簡單的控制臺輸出,在控制臺輸出傳入的字符串。一邊面試者都會在定義的函數裡直接寫console.log,不過還是有更優秀的面試者會直接使用apply。

function log(msg){    console.log(msg);}

接下來,我會繼續問如果我傳入多個參數依舊輸出一個字符串 ,我會提示面試者傳入的 參數是不固定的,我會暗示作者console.log實際上也接受多個參數。

log('hello', 'world');  

不過我還是希望您的面試者現在已經想起apply;面試者可能會在apply和 call上困惑,這個時候我會做點小提示,不過將console上下文傳入也是非常重要的.

function log(){    console.log.apply(console, arguments);};

接著我會繼續追問,如果我希望在那個輸出的字符串前統一加上(app) 這樣的字符串,類似於這樣:

'(app) hello world'  

這個問題明顯會複雜很多,面試者應該知道arguments是一個偽數組,我們需要先將它轉換成正常的數組,我們可以使用Array.prototype.slice,代碼如下:

function log(){    var args = Array.prototype.slice.call(arguments);  args.unshift('(app)');  console.log.apply(console, args);};


3.Context

接下來我想了解面試者對於上下文以及this的理解,我會給出下邊的代碼,讓面試者去解釋count的值。

var User = {    count: 1,  getCount: function() {
   return this.count;  }};

接下來我會給出下面的代碼,讓面試者去回答應該輸出的正確答案。

console.log(User.getCount());
var func = User.getCount;  console.log(func());  

上面的例子中正確輸出1和undefined。實際上很多面試者都會在這裡跌倒。func的上下文是 `window,因此已經失去了count屬性。接下來我回繼續追問面試者如何確保func的上下文始終都和User關聯,這樣可以使輸出的答案是1。

正確答案是使用Function.prototype.bind,代碼如下:

var func = User.getCount.bind(User);  console.log(func());  

這個時候我會讓面試者去進行完善,如果老的瀏覽器並不支持該方法,我們應該怎樣去兼容。部分基礎較差的面試者會比較糾結,但是個人認為任何一位前端工程師都應該對apply和call有著較為深刻的理解。

Function.prototype.bind = Function.prototype.bind || function(context) {      var self = this;
   return function(){
          return self.apply(context,   arguments);  };}

Extra points if the candidate shims bind so that it uses the browser's native version if available. At this point, if the candidate is doing really well, I'll ask them to implement currying arguments.


4.一個彈窗庫

面試的最後y一部分,我會要求面試者寫點實際的東西。這個非常有用,足以了解前端的技術棧。如果前面的問題回答的較為理想,這個問題,我會非常迅速的展開最後一個問題的考察。

雖然最終效果取決於面試者的實現,但是這裡依舊有足夠的考察點。

最好不使用 position:absolute而是position:fixed,這個時候即使窗體有滾動,也可以很好的遮罩住全局。我會提示面試者這樣使用,並且追問這兩者的區別。

.overlay {
 position: fixed;
 left: 0;
 right: 0;  
 bottom: 0;  
 top: 0;  
 background: rgba(0,0,0,.8);}

如何將裡面的內容居中也是一個非常重要的考察點。一些面試者會使用絕對定位,而有的面試者則更擅長使用Js。

.overlay article {
 position: absolute;  
 left: 50%;  
 top: 50%;  
 margin: -200px 0 0 -200px;  
 width: 400px;  
 height: 400px;}

我會繼續問,如何確保點擊遮罩層時遮罩層是關閉的?這個問題可以將我們的討論落腳到 冒泡中來。很多面試者都會直接將點擊實踐綁定到遮罩層上。

$('.overlay').click(closeOverlay);

這個接下來可以工作了,但是你會發現如果點擊了遮罩層中的子元素,遮罩層也會關閉。解決方案是便是判斷event target ,並且保證 這個時間不會冒泡。

$('.overlay').click(function(e){
 if (e.target == e.currentTarget)    closeOverlay();});


6.尾聲

當然前面的知識點僅僅是前端的一部分,實際上你還可以問:性能,HTML5 APIs, AMD vs CommonJS modules,constructors,數據類型,以及盒子模型。我經常都會隨著面試者的進行去選擇相應的問題。

最後推薦大家都可以去看下:

轉載自:jackpu.com

文章地址:http://www.jackpu.com/-pian-fei-chang-bu-cuo-de-qian-duan-mian-shi-wen-zhang/

英文原文:http://blog.sourcing.io/interview-questions

相關焦點

  • 2020 年前端面試複習必讀文章【超三百篇】
    : https://time.geekbang.org/column/article/117637[251]前端經典面試題: 從輸入URL到頁面加載發生了什麼?: https://www.zhihu.com/question/47047191[277]常見 Web 安全攻防總結: https://zoumiaojiang.com/article/common-web-security/[278]一篇文章構建你的 NodeJS 知識體系: https://juejin.im/post/5c4c0ee8f265da61117aa527
  • 我做前端技術面試官的一些體會
    ,請點擊 → 這裡了解詳情作為一個一年多的前端工程師,之前的前端老大離職後,自己就扛起了一些前端方面的事務。所以有些求職者以為公司找了個新手來面試,我比較斯文,像個小白臉什麼的,求職者可能會低估。第一次面試的那個求職者還比較有意思,因為那會也是第一次面試別人,所以難免有點不知所措。
  • 前端如何年薪破百萬?這篇文章告訴你!(文末附最新前端面試資料)
    隨著人們越來越重視用戶界面的設計美感和操作體驗,企業對Web前端工程師的需求也變得越來越大,目前,Web前端開發人員的市場缺口仍在與日俱增。根據數據顯示,國外的前端開發和後端開發人員比例為1:1,國內的比例為1:3,由此可見,我國對前端開發人員的需求量是很大的。拿北上廣深等一線城市來說,一個技術熟練的Web前端開發人員的薪資,一般都在12k以上。
  • 我的前端面試心法(已拿字節offer)
    1、拋開面試,系統學習在一切之前,應該系統地去學習前端的基礎知識。對前端而言,這些基礎包括 HTML,CSS,JavaScript,瀏覽器原理,網絡協議,MVVM 框架和一些必要的計算機基礎等。裡面的一些 HTML,CSS,HTTP 技術教程也相當不錯。HTML 和 CSS:推薦結合 MDN文檔 和 W3school 兩個線上教程,體會把玩上面的示例。這部分沒有什麼難度,主要在於記憶和編碼實踐,加深印象。
  • 學會了Vue,前端面試卻沒找到工作
    不可否認Vue是一個很不錯也很值得學習的前端開發框架。然而大家一味地跟風,難道是學會了Vue就可以在前端界馳騁?成為一名優秀前端工程師?找到滿意的前端工作了嗎?稍微懂行的人都知道,你想多了,目前Vue幾乎是從事前端開發工作的必備技能,但是如果你只會用Vue,原生JS和其它前端技能掌握的不好,照樣完蛋。就有讀者和我說面試掛了,雖然他也學了Vue。
  • 2018web前端面試總結
    關於流程一般的實習&校招招聘大體有這麼一個流程:(這裡我個人都是走的官網投遞的渠道,沒有經歷過宣講會的環節,這一部分我沒啥經驗)筆試筆試作為招聘的第一個環節,一般考察的都是專業基礎知識,這裡會著重考察你在學校的計算機相關基礎,也就是很多人會發現,我明明考的是前端的卷子為啥前端的知識點考的這麼少,而且有時候也會發現,前端的卷子考的沒有前端的知識點
  • 阿里盒馬前端面試,你要的答案來了
    最近有一篇阿里盒馬前端面試題被各大社區轉載,而且據稱這是阿里校招面試題,我看完以後,簡直驚呆了,打死都不信。今天特意針對他們發的一面,把對應的答案整理了一些。請先做個自我介紹 我是河畔一角,11年畢業,畢業後先從事JAVA方向開發,後在13年轉為前端。
  • Web前端面試題目匯總
    來自: 燎原之火的博客 _ Lyzh's blog作者: Lyzh連結:http://blog.linjiajun.com/2016/03/15/2016年Web前端面試題目匯總/ (點擊尾部閱讀原文前往)以下是收集一些面試中經常會遇到的經典面試題以及自己面試過程中無法解決的問題,通過對知識的整理以及經驗的總結,重新鞏固自身的前端基礎知識,如有錯誤或更好的答案,歡迎指正。
  • 一場感覺身體被掏空的前端面試
    心裡有了壓力,自然也就來了動力,之前的前端疲勞感似乎一瞬間就無影無蹤了(我發現!!!多參加面試似乎是消除前端疲勞的一個有效方法~)。由於我在工作中大多數時間使用的都是PHP,而LinkedIn的前端職位技能要求裡則清楚地寫明了求職者要精通JavaScript。因此,惡補JavaScript就成了重中之重。在接下來一個月的時間裡,我啃完了三本JavaScript的經典書籍。
  • 2020Web前端面試題匯總-開課吧
    Web前端面試題說說前端中的事件流?以上就是小科今天整理提供的Web前端開發面試題,希望為Web前端同學提供了有用的面試素材,以後小科每日均會提供Python、Web及MySQL資料庫相關的習題。學習沒有捷徑,希望大家都能少走一些彎路,順利找到工作!
  • Web前端面試真的只掌握企業常用技能就行嗎?
    編者的話:面試是所有求職者最重視的一個環節,這決定著一個求職者是否能夠順利的求職成功,找到一個理想的工作,作為一個求職者,在面試之前,最關心的問題是面試官會問什麼樣的問題,自己該如何準備,本期筆者從Web前端崗位面試題目和要求進行分析,整理出Web前端學習者要重點學習和關注的幾大類技能和知識。
  • 2019 前端秋季社招面試經歷總結(二年多經驗)
    前言本文內容講筆者在 2019 的秋季社招時期,去大廠面試的問題和經驗總結。居安思危,安逸久了,都要試著知道自己目前的市場價,而最好的方法就是去外面面試幾場,受受打擊,知道自己的不足,以後加強。」筆者入坑前端 3 年多了,有 2 年多的前端工作經驗,面試坐標:廣州。本文的面試問題只寫了些開放性的問題,其公司要求保密的試題就不寫出來了。2.
  • 阿里盒馬前端校招面試,你要的答案來了
    最近有一篇阿里盒馬前端面試題被各大社區轉載,而且據稱這是阿里校招面試題,我看完以後,簡直驚呆了,打死都不信
  • 2020 前端面試|第二波面試題總結
    2020 前端面試 | 第一波面試題總結對了,有很多朋友說面試題過於簡單都是基礎之類的,實際上我本身也就是一個初中級的水平,所以面試的公司職位和對應的薪資匹配的就是這類的問題,算法題基本很少面試到。3.構建工具 vue提供了CLI 腳手架,可以幫助你非常容易地構建項目。 React 在這方面也提供了 create-react-app,但是現在還存在一些局限性,不能配置等等4.數據綁定 vue是實現了雙向數據綁定的mvvm框架,當視圖改變更新模型層,當模型層改變更新視圖層。
  • 我背透了這些前端八股文
    後來我放棄了這種沒有目的性的刷題,我開始在網上找一些前端算法中比較常見的題目,我發現了這篇文章:前端算法渣的救贖之路[8] ,裡面概括了一些前端面試中常見的題目,還給出了一些算法題型的經典解法,在整個學習過程中,對我的算法提升非常大,同時我也整理出了自己的一些 算法經驗[9] 。
  • 十幾家大廠前端面試總結(已拿網易 offer) ​
    (見後文小結裡的 HR 相關文章)一面過了後公眾號顯示進入複試狀態,但二面一直沒消息。成備胎了?頭條頭條面試問的算法題比起筆試題簡單多了。面試前會有小姐姐和你約時間。(見後文小結裡的 HR 相關文章)鏈家我也不知道我為啥掛了……當時面試地點在凱倫飯店。環境舒適,面試官也挺溫和。技術面難度不大,但問得比較細。我印象不深,一二面合起來寫吧。
  • 一個前端自學者從面試被吊打,到拿 offer 的心路歷程
    前言先交代下博主是在二線城市,所以也面不了什麼大廠自然也就沒什麼大廠面經(就算有我也沒有這個實力),昨天面試了一家中小型的公司,這裡就不透露名字了,總共面了兩輪總結後寫下了這篇文章,我相信也是有很多和我在二線城市的小夥伴需要這些常見的面試題的,我是剛畢業出來實習,所以馬上要出去找實習的小夥伴可以看看,參考下。2. 面試之前準備什麼?
  • 記美國面試經驗,前端開發,提前預告,目前已經進背調了
    (給前端大學加星標,提升前端技能.)作者:JUANAhttps://segmentfault.com/a/1190000015637248回憶一下這一個月的求職進展,可以說是心情跌宕起伏。先理一下數據,每天堅持投簡歷,一共投了大概70多個崗位,一直到月初,還沒有收到任何的面試通知。
  • 2020 前端面試 | 第一波面試題總結
    前言 先介紹一下自己的情況吧 內蒙古呼和浩特某大學畢業,專科,計算機多媒體專業畢業 16年出來工作,工作經驗四年,之前主要做平面相關,自己喜歡瞎折騰,從17年開始研究前端
  • 年末的大廠前端面試總結(20屆雙非二本)-終入字節
    常以冷月心之名混跡前端江湖,也曾在混跡網文圈時用冷月心做筆名籤約掌閱,作品《清起風雲》,百度可查。58同城二面node偏運維方向的有沒有了解過(docker k8s)說下react-router源碼你看完後印象深刻的部分面試感受:二面是視頻面,面試官和我聊了一下接下來的發展方向,描繪了一張美好的藍圖。聽起來還不錯,雖然沒聽懂。