某次面试总结

今天很有幸去一家很不错的互联网公司面试,在学校找工作两个月面试都不顺利。只靠自己的力量是不够的,在朋友帮忙推荐的情况下,我得到了这家公司的面试邀请(我自己之前竟然没有查到)。

面试分为五轮,没错,是五轮,从13:20分左右一直持续到16:30左右。下面是我对这次面试的总结:

第一面 前端技术面试

面试官一看就是很厉害的前端,从气场上完全感受得到。(其实我来早了,估计打扰面试官午休了,内心小愧疚。)面试官是比较严肃的,面试的时候基本上是出一些由浅入深的JavaScript题目,一步一步考察应聘者的能力。
比如一开始是这样的:

1
2
3
4
for (var i = 0; i < 5; i++) {
console.log(i);
}
//0 1 2 3 4

然后是这样的:

1
2
3
4
5
6
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000 * i);
}
//5 5 5 5 5

最后是这样的(闭包):

1
2
3
4
5
6
7
8
9
for (var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000 * i);
})(i)
}

// 0 1 2 3 4

还有这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
setTimeout(function() {
console.log(1);
});

new Promise(function(resolve) {
console.log(2);
console.log(3);
resolve();
}).then(function() {
console.log(4);
})

console.log(5);

//2 3 5 4 1

生成数组

要求给定n和s生成一个有n个s的数组。
我的想法只是用循环去做,还有迭代(迭代也是循环)。
面试官给出了一种hack方法:

1
2
3
4
5
6
7
var n = 5;
var s = 'a';
var arr = new Array(n+1);
var newArr = arr.join(s).split('');
console.log(newArr);
//Array(5) ["a", "a", "a", "a", "a"]
//注意join()和split()不会改变原数组。

DOM方面性能优化

我只提到了减少DOM操作,用css动画代替dom操作的动画。
去网上查了一下,不查不知道一查吓一跳,请看前端性能优化指南

原生dom的操作

用习惯jQuery的我觉得很惭愧,竟然记不太清楚原生的DOM操作,后续我会从心学习并整理一遍。学习JavaScript——DOM

this

一句话概括this。
很考察总结概括能力了,还好我看了书。
我的回答是:this指向函数调用对象。有几种方法可以改变函数调用时的this,比如new一个构造函数,使用call()apply()bind()方法绑定this,还有就是隐式绑定和显示绑定。这个在《你不知道的JavaScript》读书笔记(二)里面有过总结。
面试官问了call()apply()、和bind()方法的区别。我简单回答了call()apply()的传参方面的不同,但是bind()我确实没有答上来。
面试官又一次给我解释了:call()apply()是立即执行的,bind()返回的是函数,需要重新调用,并在调用的时候传参,我是知道的,但竟然没有想到。

xss

以评论系统为例:服务端过滤用户输入的内容就可以了。一般在显示的时候过滤。但是有一个问题就是如果是类似操作数据库的脚本攻击,服务端应该尽早去发现才可以。???

跨域

我提到了服务器端设置响应头的方法。
jsonp的方式我只是提到,没有解释太清楚。

CSS盒模型

为什么在CSS3里面特意加入了对怪异盒模型的支持。

1
box-sizing: border-box;

我简单说明了border-box在布局上的好处,比如设置padding之后不会影响之前的布局啊啥的。

水平垂直居中

老生常谈了。网易跨境电商web前端面试:垂直+左右居中
有一种方法没有提到,就是设置元素displaytabletable-cell

第二面 某产品线经理

电梯调度建模,设计类,以及类的通信。
我首先想到的是一台主机控制多台电梯类型的。简单说一下其中的作用,比如主机接收信号然后调度各个电梯。
然后面试官提出疑问,如果主机坏了,那么就会导致全部的电梯不能使用,所以提出每部电梯是一个主机,电梯之间相互联系,由电梯之间自己决定谁去运动。

后来针对我的解决方案提出另一个问题:如果用户一直按电梯按钮,就会一直向主机发送请求,如果主机响应的比较慢就会造成宕机,有没有什么好的解决方案。我的回答类似于前端表单提交的案例,点击一次后禁用按钮,或者不发送请求。

简单说明新产品线的规划,让我谈谈看法。
我确实有些胆怯,不认为我能扛得起来,表明自己在设计模式和架构上的欠缺,认为必须有高级主导才能使产品更好。

看我的作品,问我学习的过程和方法。

第三面 另一个某产品线经理

问我学习的方法,看我的作品,介绍自己负责的产品。(说实话,真的是赏心悦目)我也谈了我的一些看法,主要是问一下和我见到的已有的产品有什么不同之类的。

第四面 HR

介绍薪资待遇,公司情况。有鼓励也有打预防针。

第五面 CTO老王

交流思想的过程,发现其高度我不能望其项背。考验人品的过程,比如和产品经历的纠纷,学习和同事的交流等。后面甚至谈到对于技术革命的理解。

结果

回来的路上发了offer,职位是实习生,一个月考核期,到时候再考虑签三方的事情。虽然有些被动,但是我只能赌一把了,相信自己的能力能够达到他们的要求吧。

0%