寫在前面的話
通常來講,面試質量的高低很大程度影響公司是否想接受改人才,也影響了人才是否願意去公司。質量高的面試,公司能代表對人才的要求,我的也能代表所期待的公司是一個什麼模式的公司。最終會有利於雙向選擇的過程。能儘早的把問題暴露在面試過程當中,而不會人才進入公司後。javascript
公司和我的都會根據技術面試的狀況去給我的和公司一個整體技術評價,直接影響最終的面試結果。如何能用幾個技術面試題來判斷面試者的知識儲備是一個很值得探討的問題。好的面試題能引導面試者,而不是故意去爲難面試者,在解決問題的過程體現其思考方向。目前,web前端面試題,部分公司準備和我的準備都存在必定的問題,這幾個問題,致使面試質量不高。本文旨在思考如何能提升web前端面試題的質量。前端
面試題常見問題
一.準備不足
我的在面試以前必定要有充足的準備,包括公司的業務,技術,發展方向。
面試官也要對面試者的項目有必定了解,面試題也應該有一個思考。java
二.面試題來源
面試官經常會從網上搜面試題,模仿面試題。每每這些面試題和本身想招的人才所需的技術儲備仍是存在必定差距。web
var name = 'java' var obj = { name: 'javascript', func: function() { return this.name; } }; console.log(name); console.log(obj.func()); var newFunc = obj.func; console.log(newFunc());
網上存在大量這樣的面試題,請問這樣的面試題能考驗出來人才什麼技能,什麼思惟方式?在沒思考清楚這兩個問題以前,無需拿此題去跟面試者談論。面試
面試題
好的面試題應該能考查思惟方式和技術能力,本文會持續分享這樣的面試題。方式主要以對話的方式。ajax
需求:一個輸入框,用戶輸入時有聯想搜索,每次用戶輸入都會觸發請求,過多的請求會形成服務器的壓力,如何去解決這個問題?服務器
function ajax() { ... //請求函數 }
面試者:延遲發送能夠去解決這樣的問題。閉包
面試官:這是常見的解決方法,請寫出代碼。異步
var timer = 0; $('input').on('change', function(){ clearTimeout(timer); timer = setTimeout(function(){ ajax() }, 1000) });
面試官:這樣是正確的,能夠解決問題。可是全局變量timer很差,throttle與輸入處理函數耦合在一塊兒,能提取一個公共函數出來嗎?函數
面試者:我想一想。
面試官:試試閉包?timer做爲一個自執行函數的變量?
面試者:我試試。
var delay = (function(){ var timer = 0; return function(fn, time) { clearTimeout(timer); timer = setTimeout(fn, time) } })(); $('input').on('change', function(){ delay(function() { ajax() }, 1000); });
面試官:問題基本解決了,可是頁面上若是有兩個這樣的輸入框,分別對應不一樣的聯想搜索,輸入框一輸入完成以後立刻在輸入框二輸入,有什麼Bug嗎?
面試者:輸入框一沒有發送請求嗎?
面試官:是的!形成這個問題的緣由是什麼?怎麼去解決這個問題?
面試者:緣由是公用了timer。解決這個問題須要把timer分開。
var delay = function(){ var timer = 0; return function(fn, time) { clearTimeout(timer); timer = setTimeout(fn, time) } }; var deday1 = delay(); var delay2 = delay();
面試官:OK,問題解決了!lodash的throttle能夠很好的解決這些問題。
面試官:若是不考慮性能,不容許使用clearTimeout,如何去解決這個問題呢?
面試者:...
面試官:不能用clearTimeout,也就是說每次setTimeout都必然執行。執不執行fn回調函數與setTimeout並無直接關係,是否是能夠考慮以前的定時器不去執行fn回調函數呢?只有最後一次執行fn回調函數。
面試者:我有思路了!
......
解決的方法有不少,就不給出代碼了。
該面試題的小結:
考查瞭解決這樣異步問題的方案好解決問題的思路。
對閉包的理解和高階函數的理解。比直接問是否理解閉包,是否是更清晰呢?