面试Javascript工程师难吗?Javascript工程师的水平参差不齐,如何评定他们技术水平的高低?如何确定Javascript工程师适合承担哪方面的任务?我在腾讯时的面试经验是,通过不同纬度的结构化问题、由浅入深的进行考查。
**基础**
如何判断一个对象是方法?这个问题简单有简单的答案,复杂有复杂的答案,但可能都不是最好的答案。
页面加载和渲染的过程:简单一点只考查JS、CSS、IMG的加载顺序和过程,复杂一些则涉及内核间的差异以及并发处理。对于这个问题是否理解是写出高效率代码和结构的必须。
冒泡与捕获:它们的定义,它们的区别,如何阻止冒泡?基础知识,经典题目。但是不是每个人都能完整全面的回答出这个问题,面试者需要对DOM tree有自己的理解。
闭包:闭包是一个很好的面试题目,能够很好的考查出不同水平的面试者。了解什么是闭包、如何使用闭包、闭包的原理、闭包的真正原理,只有对JS的作用域链、垃圾回收机制有深入了解的工程师才能正确无误的完整回答这个问题。
![](https://box.kancloud.cn/2016-08-09_57a9a29ce8b47.jpg)
Scope Chain是了解Closure原理的关键
**工具库**
jQuery:考查编程习惯和经验。jQuery作为现在使用最为广泛而且最简单的JS库,能够很好的测出使用者的开发经验和JS水平。一个有着真正开发经验的工程师,应当能正确的写出各种类型的选择器,回答为什么用bind来进行事件绑定、mouseover和mouseenter的区别。如果这些考不倒他,别急,live方法的实现原理、ready方法的实现机制这两个问题足以考查出他对DOM、浏览器差异的认识。
extJS、YUI、Prototype:这些工具库或框架都有各自的特点,可以采用像上面类似的问题从浅入深进行了解。
**实际问题**
解决实际问题考查的是你把知识融会贯通的能力、解决问题的能力、理解能力以及学习能力,这对综合素质的考查是一种很好的方式。第一次面对一个问题,面试者是否能迅速给出思路、由过程推导出结果,能否在一些提示下一步步得到最终的完整答案,这都是很好的考察点。
Autopager:自动翻页功能(实现方式参考[http://blog.csdn.net/hfahe/article/details/5827483](http://blog.csdn.net/hfahe/article/details/5827483))是一个由浅入深考查面试者能力的好例子。对滚动条事件的了解,pageHeight、windowHeight、scrollY的区别和关系是两个关键点,而最后对于事件的clearTimeout优雅处理是隐藏的考查点。
Lazyloader:许多人见过图片延迟加载的产品,但是他们是否有了解过背后的实现原理?从功能抽象到具体实现,onresize的考虑、延迟触发的考虑,这道题目有一定难度,和上面的例子也有一定相似之处。
经过了前三个方面的了解,你应该已经对这个面试者的基本水平有了一个大致的判断。下面的步骤可以让你了解这个人能够承担什么样的工作,他的发展潜力多大。
**项目**
通过之前的项目经历可以认识他的Team work能力、解决问题的能力,在项目中的角色和承担的责任也可以反衬他的个人能力。
如果他没有做过跨浏览器开发,那么这种需要长期积累的任务就不适合分派给他来解决;如果他曾经有浏览器插件的开发经历,那么浏览器App的工作也许能够利用他的现有经验;如果他用过jQuery Mobile、sencha touch或者XUI,那么他可能适合开发移动Web App。作为管理者高明的地方在于,把合适的人用在合适的地方。
**技术视野**
具有技术视野的人一般具有很大的发展潜力,他们未来不会仅仅只是一个普通的工程师,而有可能会成长为技术专家或者技术管理者。
在HTML5方面应当对新的语义标签、Canvas、Webworker、Drag & Drop有所经验或者了解;在CSS3方面,应当或多或少尝试过Radius、Gradient、Transform。当然,如果能够了解Mask,甚至能够知道Flexible Box的使用方法和原理,那么这个人对盒子模型的理解和对新知识的学习能力可以得到很好的体现。
JS开发工程师是最容易的职位,也是最难的职位。新的技术和框架层出不穷、浏览器版本日新月异、越来越多API的出现,好的JS开发工程师需要随时学习和更新许多知识,包括后台(Webworker、Websocket、Node.js)、UI(Canvas、Transparent)、动画(Transform、Transition、Animation)等方面。面试者是否有自我更新意识,他的技术视野多高决定了他能够涵盖的范围多大,他的未来发展潜力多大。
![](https://box.kancloud.cn/2016-08-09_57a9a29d0c2de.jpg)
HTML5已经战胜移动Flash,前途无量
如果能够把以上所有问题清楚、顺利的回答完整,我相信他的表达能力、沟通能力应该是相当优秀的,同时值得欣喜的是,我们又找到了一位优秀的同伴。
- 前言
- AutoPager的简单实现
- 利用CSS3特性巧妙实现漂亮的DIV箭头
- IE9在Win7下任务栏新特性简介
- 浏览器九宫格的简单实现
- Raphael js库简介
- 使用CSS3构建Ajax加载动画
- 用CSS3创建动画价格表
- 用CSS3实现浏览器的缩放功能
- 用纯CSS3实现QQ LOGO
- 用CSS3创建旋转载入器
- 使用Javascript开发移动应用程序
- 用HTML5创建超酷图像灰度渐变效果
- 使用CSS3创建文字颜色渐变(CSS3 Text Gradient)
- 仅用CSS创建立体旋转幻灯片
- 如何创建跨浏览器的HTML5表单
- 用CSS3实现动画进度条
- HTML5 Guitar Tab Player
- 奇妙的HTML5 Canvas动画实例
- 谈HTML5和CSS3的国际化支持
- 实现跨浏览器的HTML5占位符
- 前端开发必备工具:WhatFont Bookmarklet-方便的查询网页上的字体
- 使用HTML5和CSS3来创建幻灯片
- HTML5之美
- 如何使用HTML5创建在线精美简历
- 以小见大、由浅入深-谈如何面试Javascript工程师
- 快速入门:HTML5强大的Details元素
- 用CSS3实现图像风格
- HTML5视频字幕与WebVTT
- 用纯CSS3实现Path华丽动画
- 用3个步骤实现响应式网页设计
- 遇见CSS3滤镜
- 关于CSS3滤镜的碎念
- 用纯CSS3绘制萌系漫画人物动态头像
- CSS3新的鼠标样式介绍
- 用HTML5献上爱的3D玫瑰
- 对HTML5 Device API相关规范的解惑
- 如何使用HTML5实现拍照上传应用
- 2012第一季度国外HTML5移动开发趋势
- HTML5新特性:范围样式
- 百度开发者大会-《用HTML5新特性开发移动App》PPT分享
- Chrome 19对于HTML5最新支持的动态:电池状态API,全屏API,震动API,语音API
- 遇见Javascript类型数组(Typed Array)
- 用HTML5 Audio API开发游戏音乐
- 用HTML5实现人脸识别
- 用Javascript实现人脸美容
- Chrome 20对于HTML5最新支持的动态:颜色输入,网络信息API,CSS着色器
- 用HTML5实现手机摇一摇的功能
- 用HTML5实现iPad应用无限平滑滚动
- 用非响应式设计构建跨端Web App
- 了解SVG
- HTML5图像适配介绍
- HTML5安全:内容安全策略(CSP)简介
- HTML5安全:CORS(跨域资源共享)简介
- 用CSS3 Region和3D变换实现书籍翻页效果
- 谈谈移动App的思维误区
- Chrome新特性:文件夹拖拽支持
- 《关注HTML5安全》
- HTML5安全风险详析之一:CORS攻击
- HTML5安全风险详析之二:Web Storage攻击
- HTML5图像适配最新进展:响应式图片规范草案
- HTML5移动Web App相关标准状态及路线图
- HTML5安全风险详析之三:WebSQL攻击
- Chrome引入WebRTC支持视频聊天App
- HTML5安全风险详析之四:Web Worker攻击
- HTML5安全风险详析之五:劫持攻击
- HTML5安全风险详析之六:API攻击
- HTML5安全攻防详析之七:新标签攻击
- 在iOS Safari中播放离线音频
- 使用WebRTC实现远程屏幕共享
- Firefox、Android、iOS遇见WebRTC
- HTML5光线传感器简介
- HTML5安全攻防详析之八:Web Socket攻击
- HTML5安全攻防详析之完结篇:HTML5对安全的改进
- 激动人心!在网页上通过语音输入文字 - HTML5 Web Speech API介绍
- Web滚动性能优化实战
- 用CSS3设计响应式导航菜单
- 用HTML5构建高性能视差网站
- 漫谈@supports与CSS3条件规则
- HTML5下载属性简介
- 如何开发优秀的HTML5游戏?-迪斯尼《寻找奥兹之路》游戏技术详解(一)
- 如何开发优秀的HTML5游戏?-迪斯尼《寻找奥兹之路》游戏技术详解(二)
- 趋势:Chrome为打包应用提供强大新特性
- 从HTML5移动应用现状谈发展趋势
- 基于HTML5的Web跨设备超声波通信方案