写在前面的话
通常来讲,面试质量的高低很大程度影响公司是否想接受改人才,也影响了人才是否愿意去公司。质量高的面试,公司能代表对人才的要求,我的也能代表所期待的公司是一个什么模式的公司。最终会有利于双向选择的过程。能尽早的把问题暴露在面试过程当中,而不会人才进入公司后。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回调函数。
面试者:我有思路了!
......
解决的方法有不少,就不给出代码了。
该面试题的小结:
考查了解决这样异步问题的方案好解决问题的思路。
对闭包的理解和高阶函数的理解。比直接问是否理解闭包,是否是更清晰呢?