摘要:需求一個輸入框,用戶輸入時有聯想搜索,每次用戶輸入都會觸發請求,過多的請求會造成服務器的壓力,如何去解決這個問題請求函數面試者延遲發送可以去解決這樣的問題。
寫在前面的話
一般來說,面試質量的高低很大程度影響公司是否想接受改人才,也影響了人才是否愿意去公司。質量高的面試,公司能表明對人才的要求,個人也能表明所期待的公司是一個什么模式的公司。最終會有利于雙向選擇的過程。能盡早的把問題暴露在面試過程中,而不會人才進入公司后。
公司和個人都會根據技術面試的情況去給個人和公司一個總體技術評價,直接影響最終的面試結果。如何能用幾個技術面試題來判斷面試者的知識儲備是一個很值得探討的問題。好的面試題能引導面試者,而不是故意去為難面試者,在解決問題的過程體現其思考方向。目前,web前端面試題,部分公司準備和個人準備都存在一定的問題,這幾個問題,導致面試質量不高。本文旨在思考如何能提高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());
網上存在大量這樣的面試題,請問這樣的面試題能考驗出來人才什么技能,什么思維方式?在沒思考清楚這兩個問題之前,無需拿此題去跟面試者談論。
面試題
好的面試題應該能考查思維方式和技術能力,本文會持續分享這樣的面試題。方式主要以對話的方式。
需求:一個輸入框,用戶輸入時有聯想搜索,每次用戶輸入都會觸發請求,過多的請求會造成服務器的壓力,如何去解決這個問題?
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回調函數。
面試者:我有思路了!
......
解決的方法有很多,就不給出代碼了。
該面試題的小結:
考查了解決這樣異步問題的方案好解決問題的思路。
對閉包的理解和高階函數的理解。比直接問是否理解閉包,是不是更清晰呢?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81207.html
1、軟件測試的流程是什么? 答: 1)熟悉需求 2)制定測試計劃 3)設計測試(分析與編寫測試用例) 4)執行測試,記錄測試結果 5)記錄缺陷,通過《缺陷報告》記錄,跟蹤管理缺陷 6)測試總結(總結報告) 2、測試用例主要有哪些元素 答: 編號 缺陷的名稱 缺陷的優先級 缺陷的等級 缺陷的復現步驟 3、軟件測試有什么策略和階段 答: 策略:動態測試、靜態測試、白盒測試、黑盒測試 測試階段按研發順序...
摘要:月日思考題題一站點是否應該出現在標簽中題二是否應該支持面試題什么是盒子模型答標準盒和怪異盒簡述和的區別答從外部引入資源,將頁面導向外部資源簡述同步和異步的區別答同步當前進程執行完后,下一個進程才能執行異步當前進程的執行不影響下一個進程的執行 7月12日 思考題 題一:站點Logo是否應該出現在標簽中? 題二:是否應該支持IE6? 面試題 什么是盒子模型?答:margin,bord...
摘要:月日思考題題一站點是否應該出現在標簽中題二是否應該支持面試題什么是盒子模型答標準盒和怪異盒簡述和的區別答從外部引入資源,將頁面導向外部資源簡述同步和異步的區別答同步當前進程執行完后,下一個進程才能執行異步當前進程的執行不影響下一個進程的執行 7月12日 思考題 題一:站點Logo是否應該出現在標簽中? 題二:是否應該支持IE6? 面試題 什么是盒子模型?答:margin,bord...
摘要:月日思考題題一站點是否應該出現在標簽中題二是否應該支持面試題什么是盒子模型答標準盒和怪異盒簡述和的區別答從外部引入資源,將頁面導向外部資源簡述同步和異步的區別答同步當前進程執行完后,下一個進程才能執行異步當前進程的執行不影響下一個進程的執行 7月12日 思考題 題一:站點Logo是否應該出現在標簽中? 題二:是否應該支持IE6? 面試題 什么是盒子模型?答:margin,bord...
閱讀 3561·2023-04-26 02:10
閱讀 1299·2021-11-22 15:25
閱讀 1668·2021-09-22 10:02
閱讀 907·2021-09-06 15:02
閱讀 3469·2019-08-30 15:55
閱讀 600·2019-08-30 13:58
閱讀 2775·2019-08-30 12:53
閱讀 3042·2019-08-29 12:38