双色球基本走势图近50

千鋒教育-做有情懷、有良心、有品質的IT職業教育機構

400-811-9990
當前位置:首頁  >  常見問題  >  就業相關  >  正文

前端開發工程師面試技巧

時間:2019-03-22 10:50     來源:千鋒教育 作者:邱雪庭
分享: 更多

  理想情況下,應聘者應該有一份比較完整的GitHub“簡歷”,這樣面試官可以一起來回顧你參與的開源項目。他們通常會先瀏覽你的代碼,然后針對某一個具體的代碼設計問你一些問題。如果應聘者在這一部分表現非常優秀,就可以直接進入團隊社交能力的考察部分。否則的話面試官可能會讓你做一些編程題目。

圖片1

  大多數面試管是非常注重實踐的,整個面試過程幾乎全都是在寫代碼。他們不會問一些比較抽象的或者算法相關的問題。一些問題看起來比較簡單,但實際上每一類問題都可以讓面試官洞悉應聘者在JavaScript的某一方面的知識。

  第一部分:對象原型

  我們先從簡單的來。實現一個spacify函數:接受一個字符串作為參數,然后把這個字符串的每個字符都用空格隔開后返回。例如:

  JavaScript

  1spacify(‘hello world’) // =》 ‘h e l l o w o r l d’

  雖然這個問題看起來非常容易,但結果卻證明從這個問題問起是很合適的,尤其是對于一些電話面試者,他們聲稱了解JavaScript,卻連一個完整的函數都不會寫。下面是這個題目的正確答案,有的應聘者通過循環來實現也是可以的。

  JavaScript

  1

  2

  3function spacify(str) {

  return str.split(‘’).join(‘ ’);

  }

  接下來這個問題是讓應聘者直接為String對象增加spacify的函數,像這樣:

  JavaScript

  1‘hello world’.spacify();

  通過這個問題我可以了解到應聘者對于函數原型基礎知識的掌握情況。另外這個問題經常會引發另外一個有趣的討論:直接在prototypes上尤其是在Object的prototypes上定義屬性的風險。

  最終的答案類似下面的代碼:

  JavaScript

  1

  2

  3String.prototype.spacify = function(){

  return this.split(‘’).join(‘ ’);

  };

  這時候面試官還會讓應聘者解釋函數表達式(expression)和函數聲明(declaration)的區別。

  第二部分:參數

  接下來會問一些簡單的問題,這些問題可以幫面試官了解到應聘者對參數對象的理解程度。

  首先,調用一個尚未定義的log函數:

  JavaScript

  1log(‘hello world’)

  然后讓應聘者去實現log函數:接受一個string參數然后直接傳給console.log(),正確答案就在下面,但有些比較優秀的應聘者會直接使用apply函數來實現。

  JavaScript

  1

  2

  3function log(msg){

  console.log(msg);

  }

  完成上一步后我會修改調用log的方式:傳遞多個參數。告訴應聘者面試官希望log函數不止接收一個數字作為參數,它應該可以接受任意個數字作為參數。同時也提醒應聘者cosole.log()本身就可以接收多個參數。

  JavaScript

  1log(‘hello’, ‘world’);

  理想情況下應聘者應當直接使用apply來實現這個功能。但有時你會混淆apply和call的二者的區別,這時你可以給他們一些提示。另外將console作為上下文參數這一點也很重要。

  JavaScript

  1

  2

  3function log(){

  console.log.apply(console, arguments);

  };

  然后可能會讓要求在每一條日志消息前加上“(app)”的前綴,例如:

  JavaScript

  1‘(app) hello world’

  現在,問題就有點棘手了。能力強些的應聘者應當知道arguments是一個偽數組,在使用它之前得先把它轉換成標準數組。通常我們用Array.prototype.slice就可以實現這一點,像下面這樣:

  JavaScript

  1

  2

  3

  4

  5function log(){

  var args = Array.prototype.slice.call(arguments);

  args.unshift(‘(app)’);

  console.log.apply(console, args);

  };

  第三部分:上下文

  下面的這一組面試題可以考察應聘者對于JavaScript中context和this的理解。,面試官先給出下面的定義,注意,count的屬性是從當前的上下文中讀取的。

  JavaScript

  1

  2

  3

  4

  5

  6var User = {

  count: 1,

  getCount: function() {

  return this.count;

  }

  };

  然后會讓應聘者寫出下面代碼的輸出結果:

  JavaScript

  1

  2

  3console.log(User.getCount());

  var func = User.getCount;

  console.log(func());

  這個題目正確的答案是1和undefined。令人吃驚的是有很多人會在這種關于上下文的基礎知識上犯錯。func函數被調用時,它的上下文是windows,而windows是沒有count屬性的。把這些都和應聘者做了解釋,然后問如何才能保證func函數始終都能以User作為上下文被調用,這樣它就能正確運行從而返回1。

  正確的答案是使用Function.prototype.bind,例如:

  JavaScript

  1

  2var func = User.getCount.bind(User);

  console.log(func());

  通常面試官會告訴應聘者有一些老的瀏覽器是不支持bind函數的,然后讓你們自己來寫一個函數來模擬。有一些基礎差的應聘者并不認可這一點,但對面試官來講每一個被雇傭的應聘者對apply和call都應該有比較深入的理解,這一點很重要!

  JavaScript

  1

  2

  3

  4

  5

  6Function.prototype.bind = Function.prototype.bind || function(context){

  var self = this;

  return function(){

  return self.apply(context, arguments);

  };

  }

  如果應聘者像上面那樣實現了bind并且還判斷了當前瀏覽器是否已經支持bind函數,那么應聘者可以得到額外的加分。

  此時,如果應聘表現的很出色,還會讓他們去實現currying參數。

  第四部分:Overlay庫

  面試的最后這一部分里,會讓應聘者做一些更加實際的事情,通常是去實現一個‘overlay’的庫。這很方式很管用,它涉及到了整個前端開發所用到的技術:HTML、CSS 和JavaScript。如果應聘者在前面幾個環節表現優秀,可能會盡早的開始這一部分的問題。

  具體的實現因人而異,但是這里幾個關鍵點需要注意!

  對于overlay covers,最好使用 position: fixed 而不是 position: absolute,這樣即使窗口滾動的時候也可以保證層鋪滿整個窗口。如果應聘者沒有注意到這一點,就去想想這兩者的區別。

  CSS

  1

  2

  3

  4

  5

  6

  7

  8.overlay {

  position: fixed;

  left: 0;

  right: 0;

  bottom: 0;

  top: 0;

  background: rgba(0,0,0,.8);

  }

  從把內容放置到層的中心位置的方式也可以為面試官提供一些信息。有些應聘者可能會使用CSS和絕對位置,但這樣的前提是內容必須是固定寬度和長度的。另外的應聘者也可能會選擇用JavaScript來定位。

  CSS

  1

  2

  3

  4

  5

  6

  7

  8.overlay article {

  position: absolute;

  left: 50%;

  top: 50%;

  margin: -200px 0 0 -200px;

  width: 400px;

  height: 400px;

  }

  面試官還會要求他們實現單擊關閉層的功能,然后就可以順勢討論下幾種不同類型的事件傳播機制。大多數應聘者會直接為層設置一個事件監聽器。

  JavaScript

  1$(‘.overlay’).click(closeOverlay);

  看著是對的,但很快你就會發現在這個層的子元素上單擊也會關閉層,這明顯不是他們預期的效果。解決方法是先檢查事件的targets來確保不是一個傳播事件,像這樣:

  JavaScript

  1

  2

  3

  4$(‘.overlay’).click(function(e){

  if (e.target == e.currentTarget)

  closeOverlay();

  });

  其它

  其實這些問題只覆蓋了前端知識的很小一部分,面試的時候你可以問很多其他方面的問題,例如性能、HTML5 APIs, AMD vs CommonJS modules、 構造函數、數據類型以及盒模型等。我經常會根據應聘者的興趣來搭配不同類型的問題。

相關文章

  • 北京天豐利校區(總部)地址:北京市海淀區寶盛北里西區28號天豐利商城4層
    北京沙河校區:北京市昌平區沙陽路18號北京科技職業技術學院廣場服務樓2、3層
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 深圳西部硅谷校區地址:深圳市寶安區寶安大道5010號深圳西部硅谷B座A區605-619
    深圳大學城校區地址:深圳市南山區留仙大道1201號大學城創客小鎮16棟3樓
    咨詢電話: 0755-23015275/23015546-801(硅谷) 0755-86660670-801(大學城)
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 上海校區地址:上海市寶山區同濟支路199號智慧七立方3號樓2-4層
    咨詢電話:400-811-9990 021-65233829-609
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 鄭州校區地址:鄭州市二七區航海中路60號海為科技園C區10層
    咨詢電話:0371-55191750
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 廣州校區地址:廣州市天河區元崗路200號慧通產業園B9三層
    咨詢電話:020-38035223 020-38035220
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 大連校區地址:遼寧省大連市高新園區愛賢街10號大連設計城A座901
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 武漢金融港校區地址:武漢市東湖高新技術開發區光谷大道77號金融港B18棟3樓
    武漢智慧園校區地址:武漢市東湖高新技術開發區光谷大道61號智慧園21棟2樓
    咨詢電話:027-59313371
    面授課程:HTML5大前端培訓、全鏈路UI/UE設計培訓、PHP全棧+服務器集群培訓、JavaEE+分布式開發培訓、大數據+人工智能培訓、 Unity游戲開發培訓、360網絡安全、Python培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、智能物聯網+嵌入式培訓
  • 成都校區地址:成都市武侯區科華北路62號力寶大廈N(北樓)18樓
    咨詢電話:400-811-9990 028-83178771
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 西安校區地址:西安市雁塔區高新六路52號立人科技C座西區4樓
    咨詢電話:029-85363390
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 杭州旺田校區:浙江省杭州市江干區九堡旺田書畫城A座4層
    杭州龍馳校區:浙江省杭州市下沙經濟技術開發區元成路199號龍馳智慧谷B座7層
    咨詢電話:400-811-9990 0571-86893632/0571-86094032
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 青島校區地址:青島市市北區龍城路卓越世紀中心3號樓8層801
    咨詢電話:0532-80911190
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 重慶校區地址:重慶市高新區科園一路2號大西洋國際12-1
    咨詢電話:400-811-9990 023-68883009
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 長沙校區地址:湖南省長沙市岳麓區麓谷企業廣場A2棟三單元306號
    咨詢電話:0731-85513210
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 哈爾濱校區地址:哈爾濱市松北區創新一路699號 科技創新城19號樓B座五樓
    咨詢電話:400-811-9990/0451-87173191
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 南京校區地址:南京市建鄴區應天大街780號應天智匯產業園弘輝園1幢2樓
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 太原校區地址:太原市小店區長治路230號能源互聯網大廈6層
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、Linux云計算+網絡安全培訓、全棧軟件測試培訓、大數據+人工智能培訓、物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發、PHP全棧+服務器集群培訓、網絡安全、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 千鋒教育服務號

    了解千鋒動態
    關注千鋒教育服務號

  • 千鋒教育移動站

    掃一掃快速進入
    千鋒移動端頁面

  • 千鋒互聯服務號

    掃碼匿名提建議
    直達CEO信箱

双色球基本走势图近50 广西政法学院西部计划 vr三分彩计划网页版 3d500期走势图 浙江体彩11选五规则 网上正规彩票app 360看老时时走势图 特马开奖宝典下载 天津11选5遗漏 快乐扑克中奖规则奖金 玩转21点