这是我经历的最棒的一次面试,面试体验很好,面试官也挺不错,会引导你往哪个方向去思考。
一面:
首先是比较帅气的一个小哥,先是让自我介绍,完了之后面试官说讲的太快了(哈哈)
然后问了下实习做的东西,主要用的什么?对React了解多少?讲讲虚拟DOM的概念,Diff算法有了解过吗?MVVM模式有了解吗?然后问如何去判断(跟踪)状态数据变化了,从而触发视图UI?
因为简历里有写看过jQuery源码,然后问了些jQuery源码的东西。主要是Deferred对象。与ajax返回的对象有何区别?
下来是一个div
里面有一个a
标签一个img
标签,然后让把整个布局画出来,并解释为什么?
后面全程都是在这个基础上的题目。
1. 如果要把a
变成一个块级元素,怎么去设置?并画出布局
2. 行内元素与块级元素有什么区别?inline-block
与block
又有什么区别?
3. 画一下上面整个的DOM
结构,包括文本节点以及属性节点这些(感觉这个挺细节的)
4. 后面还有如何去获取a
标签的href
属性(这个当时只说了一种方式,直接访问a.href
,但貌似这个不是面试官想要的,后面面试官有提到getAttribute()
方法。)
5. 如何要给a
设置宽和高,以及Padding,Margin如何去设置?并且画出整个布局?因为这个又涉及到margin
重叠的情况,又问如何去防止margin
重叠
6. 设宽度之后,设的是哪一部分的宽度?如何去规定要设哪一部分的宽度?(box-sizing)
第二个场景,有一个ul
,里面有很多li
元素,如何去使得点击每个元素打印出对应的索引。(一开始考虑用事件委托来做,但是判断e.target
是ul
的第几个孩子不是特别方便,还是用了最原始的方法,给所有li
绑定点击事件,这里其实涉及到闭包的问题,如何去规避?一个是考虑到let
,另一个就是自执行函数,并将索引作为参数传进去)
二面:
二面是一个比较温和的面试官,也是先让自我介绍,有提到熟悉原生JS
,然后面试官问对CSS
熟吗,表示不是很熟悉。然后面试官说那先从不熟悉的开始吧。
- 实现一个布局,上面一个
div
,100px
高,中间一个div
,高度自适应,最下面一个div
,高100px
。(当时第一反映是用flex做,不过现在想想直接这种布局排下来不就是那种布局,只不过需要把中间的height
设置成100%) ajax
传输数据的时候,在xhr.send(data)时,这个data可以有多种数据格式,比如JSON,比如FormData等等,问如何把一个对象变成这些格式?另外如何去设置?(设置HTTP Header就可以,里面的Content-Type)- 对HTTP熟悉不?讲一下熟悉哪一些方面?讲了缓存和状态码
- 有哪些常见的状态码,如何去判断返回的Code是4开头的?(正则表达式,并要求写出来)
- 缓存机制有哪些?说说有什么字段(讲了强缓存和协商缓存)
- Max-age和Expire有什么区别?
- Etag和last-modified有什么不同?
- ES6有用过哪些觉得好的特性?(let,箭头函数,class, iterator遍历器),主要讲了for…of这个操作
下来就问遍历对象的几种方法,for … in 可以遍历到原型链上的方法吗?可是为什么一个
a = { name: 'a' }
遍历之后,只会打印出一个name呢?而没有原型链上的属性?(涉及到可枚举和不可枚举的概念)
后面就是手写代码。instanceof
有用过吗?实现一个instance(obj, fn)
函数Math.max
有了解过吗?实现一个max
函数,如何用数组的foreach
方法。(这里用到call和apply)obj = { name: '1' }
,问obj.call
等于什么?另外有一个函数Fn
,问Fn.call
等于什么?- 最后就问我有什么问题?
三面(HR面):
这个HR感觉随和,一进去就说把包当下,放轻松一点。
然后问觉得之前的面试怎么样?
下来就是问实习主要做了什么?参加的比赛主要做了什么?实验室的项目主要是研究什么?对网易有什么认识?或者说为什么要来网易?然后为什么不投网易云音乐等等。对自己未来十年有什么想法,最想做的等等。