准备一个前端工程师面试题项目去面试,请问仿什么网站能拿的出手去面试呢?

上一篇: 下一篇:如何面试一个前端开发者? - 文章 - 伯乐在线
& 如何面试一个前端开发者?
我在Twitter和Stripe这两家公司工作期间会负责一些前端开发者的面试。在面试过程中我们有很大的决定权,这里和大家一起分享一些我设计的不同类型的面试问题。
首先,我要警告各位的就是: 招人很难!尤其是要在45分钟之内判断一个人是否适合岗位更是一项高难度的工作。 面试存在的问题就是大家都想招到像一个像自己一样的人。 每个通过我面试的人的思维方式可能都和我比较相似, 但这样肯定是不对的。 正因如此, 其实目前为止我做的每一个决定都有一部分运气成分。 但是我想这种方式会是个很好的开始。
理想情况下,应聘者应该有一份比较完整的‘简历’, 这样我们可以一起来回顾他们参与的开源项目。 通常我会先浏览他们的代码,然后针对某一个具体的代码设计问他们一些问题。 如果应聘者在这一部分表现非常优秀,就可以直接进入团队社交能力的考察部分。否则的话我会让他们做一些编程题目。
我面试的时候是非常注重实践的, 整个面试过程几乎全都是在写代码。 我不会问一些比较抽象的或者算法相关的问题。其他的面试官如果愿意的话可以考察这些方面, 但我觉得这些知识未必是一个前端开发者所必需的。我问的问题看起来比较简单,但实际上每一类问题都可以让我洞悉应聘者在JavaScript的某一方面的知识。
应聘者可以使用自己的笔记本电脑也可以用我的,但在我这里是不会用白板的。他们也可以使用任何适合自己的编辑器,但我通常直接用Chrome的控制台来检查的应聘者的程序输出结果。
第一部分:对象原型
我们先从简单的来。实现一个spacify函数:接受一个字符串作为参数,然后把这个字符串的每个字符都用空格隔开后返回。例如:
JavaScript
spacify('hello world') // =& 'h e l l o w o r l d'
spacify('hello world') // =& 'h e l l o w o r l d'
虽然这个问题看起来非常容易,但结果却证明从这个问题问起是很合适的,尤其是对于一些电话面试者,他们声称了解JavaScript,却连一个完整的函数都不会写。下面是这个题目的正确答案,有的应聘者通过循环来实现也是可以的。
JavaScript
function spacify(str) {
return str.split('').join(' ');
function spacify(str) {&&return str.split('').join(' ');}
接下来这个问题是让应聘者直接为String对象增加spacify的函数,像这样:
JavaScript
'hello world'.spacify();
'hello world'.spacify();
通过这个问题我可以了解到应聘者对于函数原型基础知识的掌握情况。另外这个问题经常会引发另外一个有趣的讨论:直接在prototypes上尤其是在Object的prototypes上定义属性的风险。
最终的答案类似下面的代码:
JavaScript
String.prototype.spacify = function(){
return this.split('').join(' ');
String.prototype.spacify = function(){&&return this.split('').join(' ');};
这时候我还会让应聘者解释函数表达式(expression)和函数声明(declaration)的区别。
第二部分:参数
接下来我会问一些简单的问题,这些问题可以帮我了解到应聘者对参数对象的理解程度。
首先,调用一个尚未定义的log函数:
JavaScript
log('hello world')
log('hello world')
然后我让应聘者去实现log函数:接受一个string参数然后直接传给console.log(),正确答案就在下面,但有些比较优秀的应聘者会直接使用apply函数来实现。
JavaScript
function log(msg){
console.log(msg);
function log(msg){&&console.log(msg);}
完成上一步后我会修改调用log的方式:传递多个参数。告诉应聘者我希望log函数不止接收一个数字作为参数,它应该可以接受任意个数字作为参数。同时我也提醒他们cosole.log()本身就可以接收多个参数。
JavaScript
log('hello', 'world');
log('hello', 'world');
理想情况下应聘者应当直接使用apply来实现这个功能。但有时他们会混淆apply和call的二者的区别,这时你可以给他们一些提示。另外将console作为上下文参数这一点也很重要。
JavaScript
function log(){
console.log.apply(console, arguments);
function log(){&&console.log.apply(console, arguments);};
然后我会让要求在每一条日志消息前加上“(app)”的前缀,例如:
JavaScript
'(app) hello world'
'(app) hello world'
现在,问题就有点棘手了。能力强些的应聘者应当知道arguments是一个伪数组,在使用它之前得先把它转换成标准数组。通常我们用Array.prototype.slice就可以实现这一点,像下面这样:
JavaScript
function log(){
var args = Array.prototype.slice.call(arguments);
args.unshift('(app)');
console.log.apply(console, args);
function log(){&&var args = Array.prototype.slice.call(arguments);&&args.unshift('(app)');&&console.log.apply(console, args);};
第三部分:上下文
下面的这一组面试题可以考察应聘者对于JavaScript中context和this的理解。我先给出下面的定义,注意,count的属性是从当前的上下文中读取的。
JavaScript
var User = {
getCount: function() {
return this.
var User = {&&count: 1,&&getCount: function() {&&&&return this.count;&&}};
然后我会让应聘者写出下面代码的输出结果:
JavaScript
console.log(User.getCount());
var func = User.getC
console.log(func());
console.log(User.getCount());var func = User.getCount;console.log(func());
这个题目正确的答案是1和undefined。令人吃惊的是有很多人会在这种关于上下文的基础知识上犯错。func函数被调用时,它的上下文是windows,而windows是没有count属性的。我把这些都和应聘者做了解释,然后我问他如何才能保证func函数始终都能以User作为上下文被调用,这样它就能正确运行从而返回1。
正确的答案是使用Function.prototype.bind,例如:
JavaScript
var func = User.getCount.bind(User);
console.log(func());
var func = User.getCount.bind(User);console.log(func());
通常我会告诉应聘者有一些老的浏览器是不支持bind函数的,然后让他们自己来写一个函数来模拟。有一些基础差的应聘者并不认可这一点,但对我来讲每一个被雇佣的应聘者对apply和call都应该有比较深入的理解,这一点很重要!
JavaScript
Function.prototype.bind = Function.prototype.bind || function(context){
var self =
return function(){
return self.apply(context, arguments);
Function.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,这样即使窗口滚动的时候也可以保证层铺满整个窗口。如果应聘者没有注意到这一点我会提示他们,然后问他们这两者的区别。
.overlay {
bottom: 0;
background: rgba(0,0,0,.8);
.overlay {&&position: fixed;&&left: 0;&&right: 0;&&bottom: 0;&&top: 0;&&background: rgba(0,0,0,.8);}
从把内容放置到层的中心位置的方式也可以为面试官提供一些信息。有些应聘者可能会使用CSS和绝对位置,但这样的前提是内容必须是固定宽度和长度的。另外的应聘者也可能会选择用JavaScript来定位。
.overlay article {
left: 50%;
margin: -200px 0 0 -200
width: 400
height: 400
.overlay article {&&position: absolute;&&left: 50%;&&top: 50%;&&margin: -200px 0 0 -200px;&&width: 400px;&&height: 400px;}
我还会要求他们实现单击关闭层的功能,然后就可以顺势讨论下几种不同类型的事件传播机制。大多数应聘者会直接为层设置一个事件监听器。
JavaScript
$('.overlay').click(closeOverlay);
$('.overlay').click(closeOverlay);
看着是对的,但很快你就会发现在这个层的子元素上单击也会关闭层,这明显不是我们预期的效果。解决方法是先检查事件的targets来确保不是一个传播事件,像这样:
JavaScript
$('.overlay').click(function(e){
if (e.target == e.currentTarget)
closeOverlay();
$('.overlay').click(function(e){&&if (e.target == e.currentTarget)&&&&closeOverlay();});
其实这些问题只覆盖了前端知识的很小一部分,面试的时候你可以问很多其他方面的问题,例如性能、HTML5 APIs, AMD vs CommonJS modules、 构造函数、数据类型以及盒模型等。我经常会根据应聘者的兴趣来搭配不同类型的问题。
此外我推荐大家到和去寻找一些灵感!
关于作者:
可能感兴趣的话题
这是JS开发者,不是前端开发者。考官默认来面试的JSer都熟练掌握了html和css么
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2016 伯乐在线Web前端岗位面试题有哪些?
按时间排序
作者:徐尤熙链接:来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。前端面试题汇总,多余的就不说先做会这些东西吧HTMLDoctype作用?严格模式与混杂模式如何区分?它们有何意义?HTML5 为什么只需要写 &!DOCTYPE HTML&?行内元素有哪些?块级元素有哪些? 空(void)元素有那些?页面导入样式时,使用link和@import有什么区别?介绍一下你对浏览器内核的理解?常见的浏览器内核有哪些?html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?简述一下你对HTML语义化的理解?HTML5的离线储存怎么使用,工作原理能不能解释一下?浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?请描述一下 cookies,sessionStorage 和 localStorage 的区别?iframe有那些缺点?Label的作用是什么?是怎么用的?(加 for 或 包裹)HTML5的form如何关闭自动完成功能?如何实现浏览器内多个标签页之间的通信? (阿里)webSocket如何兼容低浏览器?(阿里)页面可见性(Page Visibility)API 可以有哪些用途?如何在页面上实现一个圆形的可点击区域?实现不使用 border 画出1px高的线,在不同浏览器的Quirksmode和CSSCompat模式下都能保持同一效果。网页验证码是干嘛的,是为了解决什么安全问题?tite与h1的区别、b与strong的区别、i与em的区别?介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?CSS选择符有哪些?哪些属性可以继承?CSS优先级算法如何计算?CSS3新增伪类有那些?如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中?display有哪些值?说明他们的作用。position的值relative和absolute定位原点是?CSS3有哪些新特性?请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?用纯CSS创建一个三角形的原理是什么?一个满屏 品 字布局 如何设计?常见兼容性问题?li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?为什么要初始化CSS样式。absolute的containing block计算方式跟正常流有什么不同?CSS里的visibility属性有个collapse属性值是干嘛用的?在不同浏览器下以后什么区别?position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?对BFC规范(块级格式化上下文:block formatting context)的理解?CSS权重优先级是如何计算的?请解释一下为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式移动端的布局用过媒体查询吗?使用 CSS 预处理器吗?喜欢那个?CSS优化、提高性能的方法有哪些?浏览器是怎样解析CSS选择器的?在网页中的应该使用奇数还是偶数的字体?为什么呢?margin和padding分别适合什么场景使用?抽离样式模块怎么写,说出思路,有无实践经验?[阿里航旅的面试题]元素竖向的百分比设定是相对于容器的高度吗?全屏滚动的原理是什么?用到了CSS的那些属性?什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再次出现,和只出现一次分别怎么做?)::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用。如何修改chrome记住密码后自动填充表单的黄色背景 ?你对line-height是如何理解的?设置元素浮动后,该元素的display值是多少?(自动变成display:block)怎么让Chrome支持小于12px 的文字?让页面里的字体变清晰,变细用CSS怎么做?(-webkit-font-smoothing:)font-style属性可以让它赋值为“oblique” oblique是什么意思?position:在android下无效怎么处理?如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)display:inline-block 什么时候会显示间隙?(携程)overflow: scroll时不能平滑滚动的问题怎么处理?有一个高度自适应的div,里面有两个div,一个高度100px,希望另一个填满剩下的高度。png、jpg、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp?什么是Cookie 隔离?(或者说:请求资源的时候不要让它带cookie怎么做)style标签写在body后与body前有什么区别?介绍JavaScript的基本数据类型。说说写JavaScript的基本规范?JavaScript原型,原型链 ? 有什么特点?JavaScript有几种类型的值?(堆:原始数据类型和 栈:引用数据类型),你能画一下他们的内存图吗?Javascript如何实现继承?Javascript创建对象的几种方式?Javascript作用链域?谈谈This对象的理解。eval是做什么的?什么是window对象? 什么是document对象?null,undefined的区别?写一个通用的事件侦听器函数(机试题)。[“1”, “2”, “3”].map(parseInt) 答案是多少?关于事件,IE与火狐的事件机制有什么区别? 如何阻止冒泡?什么是闭包(closure),为什么要用它?javascript 代码中的”use strict”;是什么意思 ? 使用它区别是什么?如何判断一个对象是否属于某个类?new操作符具体干了什么呢?用原生JavaScript的实现过什么功能吗?Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?对JSON的了解?[].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1&&24))).toString(16) }) 能解释一下这段代码的意思吗?js延迟加载的方式有哪些?Ajax 是什么? 如何创建一个Ajax?同步和异步的区别?如何解决跨域问题?页面编码和被请求的资源编码如果不一致如何处理?模块化开发怎么做?AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何 缓存的?)让你自己设计实现一个requireJS,你会怎么做?谈一谈你对ECMAScript6的了解?ECMAScript6 怎么写class么,为什么会出现class这种东西?异步加载的方式有哪些?documen.write和 innerHTML的区别?DOM操作——怎样添加、移除、移动、复制、创建和查找节点?.call() 和 .apply() 的含义和区别?数组和对象有哪些原生方法,列举一下?JS 怎么实现一个类。怎么实例化这个类JavaScript中的作用域与变量声明提升?如何编写高性能的Javascript?那些操作会造成内存泄漏?JQuery的源码看过吗?能不能简单概况一下它的实现原理?jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?jquery中如何将数组转化为json字符串,然后再转化回来?jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?jquery.extend 与 jquery.fn.extend的区别?jQuery 的队列是如何实现的?队列可以用在哪些地方?谈一下Jquery中的bind(),live(),delegate(),on()的区别?JQuery一个对象可以同时绑定多个事件,这是如何实现的?是否知道自定义事件。jQuery里的fire函数是什么意思,什么时候用?jQuery 是通过哪个方法和 Sizzle 选择器结合的?(jQuery.fn.find()进入Sizzle)针对 jQuery性能的优化方法?Jquery与jQuery UI有啥区别?JQuery的源码看过吗?能不能简单说一下它的实现原理?jquery 中如何将数组转化为json字符串,然后再转化回来?jQuery和Zepto的区别?各自的使用场景?针对 jQuery 的优化方法?Zepto的点透问题如何解决?jQueryUI如何自定义组件?需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案?如何判断当前脚本运行在浏览器还是node环境中?(阿里)移动端最小触控区域是多大?jQuery 的 slideUp动画 ,如果目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,该如何处理呢?把 Script 标签 放在页面的最底部的body封闭之前 和封闭之后有什么区别?浏览器会如何解析它们?移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时?(click 有 300ms 延迟,为了实现safari的双击事件的设计,浏览器要知道你是不是要双击操作。)知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout…)么? 能讲出他们各自的优点和缺点么?Underscore 对哪些 JS 原生对象进行了扩展以及提供了哪些好用的函数方法?解释JavaScript中的作用域与变量声明提升?那些操作会造成内存泄漏?JQuery一个对象可以同时绑定多个事件,这是如何实现的?Node.js的适用场景?(如果会用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?解释一下 Backbone 的 MVC 实现方式?什么是“前端路由”?什么时候适合使用“前端路由”? “前端路由”有哪些优点和缺点?知道什么是webkit么? 知道怎么用浏览器的各种工具来调试和debug代码么?如何测试前端代码么? 知道BDD, TDD, Unit Test么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?简述一下 Handlebars 的基本用法?简述一下 Handlerbars 的对模板的基本处理流程, 如何编译的?如何缓存的?用js实现千位分隔符?(来源:前端农民工,提示:正则+replace)检测浏览器版本版本有哪些方式?我们给一个dom同时绑定两个点击事件,一个用捕获,一个用冒泡,你来说下会执行几次事件,然后会先执行冒泡还是捕获其他问题原来公司工作流程是怎么样的,如何与其他人协作的?如何夸部门合作的?你遇到过比较难的技术问题是?你是如何解决的?设计模式 知道什么是singleton, factory, strategy, decrator么?常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?页面重构怎么操作?列举IE与其他浏览器不一样的特性?99%的网站都需要被重构是那本书上写的?什么叫优雅降级和渐进增强?是否了解公钥加密和私钥加密。WEB应用从服务器主动推送Data到客户端有那些方式?对Node的优点和缺点提出了自己的看法?你有用过哪些前端性能优化的方法?http状态码有那些?分别代表是什么意思?一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)部分地区用户反应网站很卡,请问有哪些可能性的原因,以及解决方法?从打开app到刷新出内容,整个过程中都发生了什么,如果感觉慢,怎么定位问题,怎么解决?除了前端以外还了解什么其它技术么?你最最厉害的技能是什么?你用的得心应手用的熟练地编辑器&开发环境是什么样子?对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?你怎么看待Web App 、hybrid App、Native App?你移动端前端开发的理解?(和 Web 前端开发的主要区别是什么?)你对加班的看法?平时如何管理你的项目?说说最近最流行的一些东西吧?常去哪些网站?如何设计突发大规模并发架构?说说最近最流行的一些东西吧?常去哪些网站?是否了解开源的工具 bower、npm、yeoman、grunt、gulp,一个 npm 的包里的 package.json 具备的必要的字段都有哪些?(名称、版本号,依赖)每个模块的代码结构都应该比较简单,且每个模块之间的关系也应该非常清晰,随着功能和迭代次数越来越多,你会如何去保持这个状态的?Git知道branch, diff, merge么?如何设计突发大规模并发架构?当团队人手不足,把功能代码写完已经需要加班的情况下,你会做前端代码的测试吗?说说最近最流行的一些东西吧?平时常去哪些网站?知道什么是SEO并且怎么优化么? 知道各种meta data的含义么?移动端(Android IOS)怎么做好用户体验?简单描述一下你做过的移动APP项目研发流程?你在现在的团队处于什么样的角色,起到了什么明显的作用?你认为怎样才是全端工程师(Full Stack developer)?介绍一个你最得意的作品吧?你有自己的技术博客吗,用了哪些技术?对前端安全有什么看法?是否了解Web注入攻击,说下原理,最常见的两种攻击(XSS 和 CSRF)了解到什么程度?项目中遇到国哪些印象深刻的技术难题,具体是什么问题,怎么解决?。最近在学什么东西?你的优点是什么?缺点是什么?如何管理前端团队?最近在学什么?能谈谈你未来3,5年给自己的规划吗?有趣的问题A、B两人分别在两座岛上。B生病了,A有B所需要的药。C有一艘小船和一个可以上锁的箱子。C愿意在A和B之间运东西,但东西只能放在箱子里。只要箱子没被上锁,C都会偷走箱子里的东西,不管箱子里有什么。如果A和B各自有一把锁和只能开自己那把锁的钥匙,A应该如何把东西安全递交给B?答案:A把药放进箱子,用自己的锁把箱子锁上。B拿到箱子后,再在箱子上加一把自己的锁。箱子运回A后,A取下自己的锁。箱子再运到B手中时,B取下自己的锁,获得药物。Amazon主页的左上角有一个商品分类浏览的下拉菜单 没有延迟,而且子菜单也不会在不应该的时候消失。它是怎样做到这一点的呢?答案是通过探测鼠标移动的方向和轨迹,具体查看Khan Academy工程师 Ben Kamens 写的 jQuery插件。转自:@markyun链接:前端菜鸟都逛的微信公众号《网页设计自学平台》ID:WEB_wysj (二维码自动识别)
个人觉得,在小公司面试,尤其是不太重视技术的小公司,你只要证明你能做事就行。这里我们暂且不谈。前段时间离职,目前拿到了国内一线游戏公司的前端offer。以下我是随便截取的一张招聘要求:就我看来,技术面试(就我所面试的经历总结)首先几个小问题查看你的重构能力(就HTML和CSS),例如简单的块元素行元素,深入一点的BFC,一些经典的兼容问题,差不多三个左右的问题就能摸个底。因为大部分技术深入一点就能看出你掌握多少,所以没必要像学生考试那样面面俱到。当然这不是重点,就目前前端面试都侧重于JavaScript的掌握,不懂Angularjs这样的新技术也没关系,但你会这些绝对加分,姑且不谈。JS对象相关操作,原型链,闭包,单元测试等js的技术点才是被问的重点。再次提示:技术面试很难遇到像考试那样的做题,需要你动手的无非给你一道综合技术题,大致看看你的掌握情况。我参加的技术面试没有固定的模式,但大致会围绕在我上述的几个点。但有一个地方要特别指出,公司其实挺看重你的行业的兴趣的,从上面的招聘信息都可以看出,需要“好奇心”。如果你对行业有探索和冒险精神,那么是绝对会加分的。有看博客写博客的习惯,有github开源项目,无论好坏,绝对能让面试官眼前一亮,加分不少。=========================个人拙见,勿喷=========================
与其找些临时抱佛脚的面试题,不如切合实际掌握一些web前端知识或者看看人家面试经历从中获取一些对自己有用的信息。我这里有个web前端程序员面试唯品会前端的成功案例,专门写下了这篇经验分享文章,希望对各位准备面试的人有些帮助哦。一面 首先,一般情况下都是自我介绍。个人感觉自我介绍的时候,其实除了说明自己的一些基本情况之外,一定要突出自己的学习过程,而这个过程最好就是充分地体现了自己的自学能力。我自己的话,我就会说我学前端一年多了,最开始怎样怎样努力地学习,然后做了哪些项目,一个个地列举。最后说我平时的学习方法,我自己就是通过视频教学网站(比如:、等等),看博客,看书,实践(如:、)等等方式自学。其实,感觉面试官并不会觉得你啰嗦,反而会很认真地从你的自我介绍中抽出一些点来提问你。 面试官其实问了不少东西,这里把记得的列举一下:
1.一般用jq的时候是怎么绑定事件的?答:我主要是用$(document).on()的方法,因为这个方法能使动态添加的dom节点也响应绑定的事件。这方法传入三个参数,事件名、事件类型、事件。我通常就把相应的事件独立成一个函数,然后调用,这样比较有封装性。 2.怎么实现js的模块化编程?答:这个我主要是结合了之前看的阮一峰老师的javascript模块化编程系列来答的。推荐大家去看一下,很好理解:《Javascript模块化编程(一)》、《Javascript模块化编程(二):AMD规范》、《Javascript模块化编程(三):require.js的用法》3.做的项目有用到h5吗?答:都有用到一些h5的新特性,不过像h5中canvers这些能实现比较多功能就没有用得特别多。但是我自己有做一些练习来锻炼自己,例如照片中不同的滤镜模式,模糊程度调节等等。4.有没有做过离线应用?答:这个我目前还没有做过,不过我一直有关注,也有收集一些相关的资料,稍后会学习这方面的内容。 5.说一下你印象最深个项目,遇到的难点及解决方法?答:这个我就详细说了自己独立完成前端开发部分的一个项目。解决方法我就突出表示大都都是我自己找资料,百度,Stack Overflow上提问解决的。(感觉面试官比较满意这点) 6.你是怎么处理浏览器之间的兼容性问题的?答:我是采用优雅降级的方法,我一般在谷歌浏览器上面最好了比较好的版本,然后再针对IE等浏览器写一些hack。如果涉及手机端的话,还会用@media做一些响应式的处理。例如...(又举例子) 7.为什么会学这些js框架(angular、node、react)?答:因为这些现在已经是前端的标配啦,前端发展地非常快,而且是往全栈方向发展的……什么什么的,反正就是说了一堆前端趋势和非学不可的理由。 8.怎样把一些内容加到页面上?答:这个分情况吧,例如一些弹框提示的话,就是事先已经知道内容,类似于弹出登陆框的话,就先在页面上写好,调整好位置,然后隐藏,点击某个地方在fadeOut出来那样,如果是那种列表数据渲染的话,就写成一个template,通过ajax等方式拿到数据渲染好之后,再append到相应的位置。(好像还说了一些其他的我自己也忘了) 还有一些忘记了…… 二面 首先和面试聊了一会公司的情况,也还是要自我介绍的,了解了这次实习的内容等等。然后面试官开始针对我简历上的内容和项目提问:1.怎样提高页面性能? 答:其实我就回答了一些基本上大家都会采用的提高性能的方法,例如较少页面的http请求数,css属性合写,js代码抽象和封装,模块化开发,组件化等等……反正就说了一大堆。2.怎么处理浏览器缓存问题?(这个问题好像面试官经常问)答:可以在修改后的文件末加一个版本号,还可以用gulp配置自动更新版本号。 3.如果修改的文件很多呢?答:(其实我已经回答过了,估计是面试官没有听到)所以可以用gulp自动化工具去配置自动更新修改了的文件的版本号啊,这样就不用手动添加了。4.boostrap的设计理念是怎样的?答:(说真的,没想过这个问题,但是我知道核心是栅格布局)我觉得boostrap的核心就是栅格布局,这个框架做了很多兼容性、响应式的处理,我也研究css的部分源码,例如……(又是举例子),然后我觉得这个一个非常好用,非常值得学习的框架。5.如果你学的这些框架,来我们这里用不上,这里比较偏后台一点,你怎么看?答:前端也有后台,例如node.js就是,语言的核心思想都差不多,就是mvc,mvvn等等……又说了一堆装逼的话6.做表单类页面需要注意哪些问题?答:我感觉最主要就是要提高用户体验,用js对表单输入的内容进行判断,然后快速反馈用户的输入是有效的还是无效的吧,例如,手机号码、邮箱等等的验证。7.怎样减少首屏加载时间?答:当时是列举了一些比较泛的方法其实,要了解还是百度一下比较好^_^
还有一些忘记了……
刚才电话接了一个面试,大概说一下。图片异步上传file、blob原生怎么写,angular的双向数据绑定实现原理,针对v8引擎的js性能优化,为什么chrome浏览器占用内存这么高,react相对于其他框架的优势和特点,差不多这些,大概半小时。总结一下,不熟悉的领域还真是跪的特别惨。
05-02 update我想你需要的一定是这个(?o?ωo??)很全面得前端面试题库,没事多看看,查缺补漏也相当的好∠( ? 」∠)_
这里面有几个面试题目还不错
最近离职疯狂面试了好多家公司,分享下自己的经验,只说印象比较深的几家:(交待下背景,应届毕业生,有过两个月node.js开发的实习经验,CSS基础还行,经验不多,JS比CSS掌握得好些,实习期间写过很多,所以工作有点偏向js或者nodeJs)1.一家50-100人规模的游戏公司,主要面node.js实习生:笔试直接是上机做,首先考到js的声明变量,其中就有个定义常量的我不知道,后面就是很多js数组的遍历的方法,比如filter(),each().....都有考,虽然方法的作用基本上都了解但是返回值居然忘掉了,然后就有关Node的,异步,promise,然后问有什么原生模块,第三方模块等等,最后js编程题,现在感觉真的,笔试最喜欢就是这些编程题了,觉得好好玩;2.某大型的互联网公司:面的是前端实习生,第一次是电话面试,会根据简历上的问题问一遍,问做过的项目,我的主要就问实习期间做了什么,遇到什么问题,怎么解决,然后问了node的模块、有什么作用、什么是ajax,怎么跨域、jsonp的原理、用过什么数据库,介绍下mongodb,还有有关http等问题,因为基本都懂所以进入第二轮,进到公司有两个人轮流问问题,第一个比较偏向js和更像hr会问的问题,技术上问js怎样把字符串保存成金额形式、问alert(a);var a="a";var a=function(){};alert(a),这两个alert分别弹出的是什么,还有一些布局,画出图来,然后问你怎么实现。第二个基本上都是css的问题,也是画图,问你怎么实现,问bootstrap是用什么东西写的,响应式的原理等等。3.中型上市公司,面的是javascript实习生:这公司给了我很大的启发,一进去是笔试,考的都是js题目,比如闭包、原型链、call()、apply()的区别、还有移动端的延迟、jquery性能优化等等,基本上都写出来了,然后面试的时候让我说做了什么项目,让我印象最深的困难,结果因为我表达不清楚,结果面试官很语重心长的跟我说,应届生技术不是最重要的,他们的期望是希望能清楚的理解到公司的需求,也能表达出来,于是拒绝了..其实我觉得确实是在上一家公司中确实能实习他们的需求,但是我一直准备的都是技术上的问题,压根没准备过怎么解答业务上的问题,所以真的让我回去把之前实习做过的东西整理一遍,以便下次一定要能说清楚4. 有两家,都是100人左右的比较新的互联网公司,面的是前端实习生(恰巧都有node方向),技术上的问题在css、js上基本上都是上面那些,其实闭包啊、浮动啊、html5/css3新特性啊都是容易问到的问题,然后也会问我一些关于node的问题,callback hell、socket、http相关的基本都会问到,问题多而杂,有时候面试官问着问着都忘记自己问过什么了,但是有点料都会要的5.某大型国企,非互联网行业,面的是前端实习:浮动问题、会什么框架...技术上的问题不是太多总结一下,纯属个人经验,经验有限,有错多多包涵:1.大型互联网公司对技术要求高,更多是原理上的东西,也很关心个人素质,难进,如果是要求学新技术的主要就看个人素质了;2.感觉小型互联网公司对技术栈比较关心,希望懂越多越好,但是只要不是太嫩,很多问题也有机会进去;3.某直聘与某沟、某忧相比,招聘流程相比相对可能会简单一些,感觉某钩个某忧尤其是大公司的时候跟校招流程差不多,运气好的话某直聘直接面一两轮就在校招之前进去了(我就试过,两次)。4.你怎么也想不到,你的下一家公司,就在今天下午通知你面试,明天上午就拿到offer了。所以不要气馁,越努力越幸运!再说一次这只是个人经验,没有代表性,有用的就拿去吧最后,有在广州找前端应届生的吗,个人希望偏node方向的,能长期做下去成为牛牛的~~
刚离职,暂时面了五家公司,我分别来说说吧。1.第一家是做数据的,用的技术较前卫,node,react,fis……先是十五分钟笔试,题目不多,涉及的也挺全面的,例如有css3弹性布局、移动端经常出现的兼容问题...有几道js理念基础的没做,直接跟他谈了,这位面试官一道一道题的跟我分析谈论。聊了很久,基本我的情况他都了解了,他也会跟我说那方面要加强,无论技术、人品我都很敬佩这位面试官。二面是CEO和我聊的,大概聊了下为什么离职,根据什么选择适合自己的公司,还有就是薪资。过了几天发offer了,由于薪资与我想象的相差有点多,就拒绝了(想着难得有机会面试,就试着面试多几家)。2.一个前端群的朋友内推去面试的,这是我十分期待的一份offer,第一天笔试,从HTML/CSS基础到各种场景下解决方案、性能优化、实现JS轮播插件原理、JS基础...很全面的笔试题,总共有正反两页,只有最后那题留空(实在不会呃),第二天和面试官面试(也就是推荐我去的那位),笔试题过了一遍,最后以我沟通不行为由结束了(我也不知道为什么)。3.也是朋友推的,只问了JS的几个问题,比如:闭包、this、字符串分割、AJAX原理...回答的不是很乐观,所以...也over了。4.在boss直聘联系我的,感觉面试官还不错,年纪30多的样子,像朋友那样聊天,不摆架子,问了一些问题:浏览器兼容性、对HTML5新增的东西、简单描述下实现轮播原理...然后他说他在纠结预处理器选择用less还是sass,我推荐他用sass,把sass比less强大功能都告诉了他咯。感觉这个还不错。5.很吐槽面试的第五家,当时技术主管不在,说还有半小时才回到,然后叫现在后台兼的前端来跟我聊聊。那个人问我经历,我说我没上过大学,然后他叫我定个计划,回去找华南理工大学的大学计算机理论基础知识书本 来学习几年,再学学C/C#,会发现不一样的。我了去...还约了几家清明节后面试,这几天补补JS基础中...我的web版小简历:
一个不知道使用搜索引擎的程序员不是一个好程序员,github上面一搜一堆好么...
面试题太多。
看了各位大神的描述,又长知识了,期待自己能找个好的工作
面百度的时候:面试官:你的那个项目网站啊,被我注入了啊!我:哈?面试官:我拿到你数据库的root权限了哦!我:………哈?面试官:咦,这个表是用来干嘛的啊?………………我:对不起对不起,我忘了防SQL注入了……当时做的时候比较急就忘了…sorry……说明要对自己的项目谨慎啊~
谢邀面试题啊、搞开发的、还用在这里问别人资料?网上多着呢、、忠告:如果时间来的急就买本书把基础好好过上几遍、比你磕面试题有用~
?&q=front+end
你的梦想是什么?难道就我一个人被问过T_T。。。
1.对WEB标准以及W3C的理解与认识
标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外
链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维
护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性;
2.xhtml和html有什么区别
HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言
最主要的不同:
XHTML 元素必须被正确地嵌套。
XHTML 元素必须被关闭。
标签名必须用小写字母。
XHTML 文档必须拥有根元素。
3.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
用于声明文档使用那种规范(html/Xhtml)一般为 严格 过度 基于框架的html文档
加入XMl声明可触发,解析方式更改为IE5.5 拥有IE5.5的bug
4.行内元素有哪些?块级元素有哪些?CSS的盒模型?
块级元素:div p h1 h2 h3 h4 form ul
行内元素: a b br i span input select
Css盒模型:内容,border ,margin,padding
5.CSS引入的方式有哪些? link和@import的区别是?
内联 内嵌 外链 导入
区别 :同时加载
前者无兼容性,后者CSS2.1以下浏览器不支持
Link 支持使用javascript改变样式,后者不可
6.CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先级高?
标签选择符 类选择符 id选择符
继承不如指定 Id&class&标签选择
后者优先级高
7.前端页面有哪三层构成,分别是什么?作用是什么?
结构层 Html 表示层 CSS 行为层 js
8.css的基本语句构成是?
选择器{属性1:值1;属性2:值2;……}
9.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?
Ie(Ie内核) 火狐(Gecko) 谷歌(webkit) opear(Presto)
10.写出几种IE6 BUG的解决方法
1.双边距BUG float引起的 使用display
2.3像素问题 使用float引起的 使用dislpay:inline -3px
3.超链接hover 点击后失效 使用正确的书写顺序 link visited hover active
4.Ie z-index问题 给父级添加position:relative
5.Png 透明 使用js代码 改
6.Min-height 最小高度 !Important 解决’
7.select 在ie6下遮盖 使用iframe嵌套
8.为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)
11.标签上title与alt属性的区别是什么?
Alt 当图片不显示是 用文字代表。
Title 为该属性提供信息
12.描述css reset的作用和用途。
Reset重置浏览器的css默认属性 浏览器的品种不同,样式不同,然后重置,让他们统一
13.解释css sprites,如何使用。
Css 精灵 把一堆小的图片整合到一张大的图片上,减轻服务器对图片的请求数量
14.浏览器标准模式和怪异模式之间的区别是什么?
盒子模型 渲染模式的不同
使用 window.patMode 可显示为什么模式
15.你如何对网站的文件和资源进行优化?期待的解决方案包括:
文件最小化/文件压缩
使用CDN托管
缓存的使用
16.什么是语义化的HTML?
直观的认识标签 对于搜索引擎的抓取有好处
17.清除浮动的几种方式,各自的优缺点
1.使用空标签清除浮动 clear:both(理论上能清楚任何标签,,,增加无意义的标签)
2.使用overflow:auto(空标签元素清除浮动而不得不增加无意代码的弊端,,使用zoom:1用于兼容IE)
3.是用afert伪元素清除浮动(用于非IE浏览器)
Javascript
1.javascript的typeof返回哪些数据类型
Object number function boolean underfind
2.例举3种强制类型转换和2种隐式类型转换?
强制(parseInt,parseFloat,number)
隐式(== – ===)
3.split() join() 的区别
前者是切割成数组的形式,后者是将数组转换成字符串
4.数组方法pop() push() unshift() shift()
Push()尾部添加 pop()尾部删除
Unshift()头部添加 shift()头部删除
5.事件绑定和普通事件有什么区别
6.IE和DOM事件流的区别
1.执行顺序不一样、
2.参数不一样
3.事件加不加on
4.this指向问题
7.IE和标准下有哪些兼容性的写法
Var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target
8.ajax请求的时候get 和post方式的区别
一个在url后面 一个放在虚拟载体里面
有大小限制
应用不同 一个是论坛等只需要请求的,一个是类似修改密码的
9.call和apply的区别
Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
10.ajax请求时,如何解释json数据
使用eval parse 鉴于安全性考虑 使用parse更靠谱
11.b继承a的方法
12.写一个获取非行间样式的函数
function getStyle(obj,attr,value)
if(!value)
if(obj.currentStyle)
return obj.currentStyle(attr)
obj.getComputedStyle(attr,false)
obj.style[attr]=value
13.事件委托是什么
让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行! 例子可见此链接
14.闭包是什么,有什么特性,对页面有什么影响
闭包就是能够读取其他函数内部变量的函数。 此链接可查看(问这个问题的不是一个公司)
15.如何阻止事件冒泡和默认事件
canceBubble return false
16.添加 删除 替换 插入到某个接点的方法
obj.appendChidl()
obj.innersetBefore
obj.replaceChild
obj.removeChild
17.解释jsonp的原理,以及为什么不是真正的ajax
动态创建script标签,回调函数
Ajax是页面无刷新请求数据操作
18.javascript的本地对象,内置对象和宿主对象
本地对象为array obj regexp等可以new实例化
内置对象为gload Math 等不可以实例化的
宿主为浏览器自带的document,window 等
19.document load 和document ready的区别
Document.onload 是在结构和样式加载完才执行js
Document.ready原生种没有这个方法,jquery中有 $().ready(function)
20.”==”和“===”的不同
前者会自动转换类型
21.javascript的同源策略
一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合
22.编写一个数组去重的方法
function oSort(arr)
var result ={};
var newArr=[];
for(var i=0;i&arr.i++)
if(!result[arr])
newArr.push(arr)
result[arr]=1
return newArr
·欢迎添加我微信:agoodjob1
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 web前端面试题及答案 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信