笔试
总的题型是20道单选,一道问答,三道编程,两个小时。
单选前端知识和计算机基础对半分,前端那部分没什么好说,都是老生常谈,不难,计算机基础涵盖数学操作系统数据结构网络原理甚至还有linux都有涵盖。
印象最深的题是一个有7个元素的栈有几种出栈方式。
问答题是给一个成绩表格,点击分数可以排序,第一次正序排第二次倒序排。
编程题的编程环境有点坑爹,你要知道用他给的输入接口。还好,结束前两分钟全部AC了。
第一题:是一个集合相关的问题,理清逻辑很快就可以写出来
```
//第一题 集合
function xyf(arr) {
var w = +arr[0];
var x = +arr[1];
var y = +arr[2];
var z = +arr[3];
var p = [];
var q = [];
// console.log(w,x,y,z);
for (var i = w; i <= x; i++) {
p.push(i);
}
for (var j = y; j <= z; j++) {
q.push(j);
}
var result = [];
//这里可以优化,解构交换?
if (p.length > q.length) {
for (var i = w; i <= x; i++) {
for (var j = y; j <= z; j++) {
result.push(i / j);
}
}
} else {
for (var j = y; j <= z; j++) {
for (var i = w; i <= x; i++) {
result.push(i / j);
}
}
}
//集合去重
return result.filter(function(item, index) {
return result.indexOf(item) === index;
});
}
```
第三题是我第二个做的,因为第二题我认为是最难的。就是一个反向去重。
```
//第三题,倒数去重
function xyf(arr) {
arr = arr.filter(function(item, index) {
return arr.lastIndexOf(item) === index;
});
return arr.toString().split(",").join(" ");
}
```
第二题我笔试的时候用了eval,后来觉得现实中不会这样用,很不安全也耗性能就又改了一下
```
//第二题 奇怪的表达式 不用eval的话还需要解析+*-然后switch
function xyf(str) {
var oldTime = Date.now();
if (str.length === 1) {
return str;
}
//第一个参数
var first = str[0];
//存储表达式的数组
var arr = str.match(/[*+-]./g);
//结果
var result = eval(first + arr[0]);
var index = 1;
while (arr[index] && index < arr.length) {
var newStr = result.toString() + arr[index];
result = eval(newStr);
index++;
}
var newTime = Date.now();
console.log(newTime - oldTime);
return result;
}
// 性能好很多,但代码长了很多
function xyf(str) {
var oldTime = Date.now();
if (str.length === 1) {
return str;
}
//第一个参数
var first = str[0];
//存储表达式的数组
var arr = str.match(/[*+-]./g);
//结果
var result = cacl(first,arr[0].substring(0,1),arr[0].substring(1));
var index = 1;
while (arr[index] && index < arr.length) {
result = cacl(result,arr[index].substring(0,1),arr[index].substring(1));
index++;
}
var newTime = Date.now();
console.log(newTime - oldTime);
return result;
}
function cacl(num,exp,otherNum) {
//理论上这里要做输入类型判断
num = parseInt(num) ;
otherNum = parseInt(otherNum) ;
switch (exp) {
case "+":
return num + otherNum;
break;
case "*":
return num * otherNum;
break;
case "-":
return num - otherNum;
break;
default:
throw num,exp,otherNum+"error";
break;
}
}
```
面试
大约是6号,我接到猪厂的12号的面试邀请。没的说,马上买了昆明到杭州的往返机票。
期间参观了猪厂的各个建筑,总体感觉猪厂还是很注重员工待遇的。食堂和一天包五餐就不说了,一应俱全的硬件设施和娱乐方式,甚至加个班还有酒店级待遇。
我的处女面,就这样给了黄易,面试前的准备重点也在自己的项目、算法和es6上面,和面试官的关注点不一样。
不过也让我汲取到一个教训:校招还是非常注重基础的。
好了,回到正题来。
一面:
一面基本上是沿着简历问的,做过的项目,使用过的工具,和上面列的名词基本都问了。点到为止,不做过多的纠缠,我多说了反而被面试官打断。
比如说:
你在项目里使用了xxxxxx这个框架,为什么不用xxx和xxxx?它们分别解决什么问题?
你说你在项目里碰到了xx问题,那么具体是怎么解决的?
css选择器有哪些?
restful是什么?
...
...
然后聊完简历后面试官出了个题:手写左固定右适应的布局并且点击其中的列表项会alert出内容。
我html部分是用了section,css用flex布局,js本来遍历一下li元素逐个加上事件就好了但我偏要作死,用了个事件委托,结果把自己搞进坑里了。之后在讲解代码的时候考官呵呵一笑,还认真地询问我,捕获阶段真的是这样的?一面就跪在这了。
二面:考官一上来扔过来一个题。有点变态,因为这道小小的题考察了作用域、提升、闭包、原型链、new关键字、this、优先级等诸多js知识点,后来我查的时候发现是一道网上真题,还有人专门为这题分析了一遍。
链接如下:
我直接就懵了,做了一会就直接和面试官说有点难,需要想一下,然后他就去上厕所了,说你慢慢做。
过了几分钟,他回来了,我说这个题应该是考原型链,然后巴拉巴拉分析了我给出的答案,之后去搜这个题对答案,没想到后面搜的时候发现考的点太多了。这个题之后考官问了跨域和性能优化的事情,我随便答了几句就结束了,最后问他评价,他说基础不行。哎,我写ts写惯了,已经不怎么关注js原本这些奇葩的特性了,自然就跪了,事后恶补了《你不知道的Javascript》,才算进一步认识JS这门语言。
三面hr基本都是些套路
什么你为什么报考你这个大学你这个专业?
为什么选择来网易来杭州?投了其他企业吗?
你有女朋友吗?以后打算怎么安排?
......
最后我问了HR时间上能不能宽松些,因为云南大学大四还要上一个月课,HR说到时候会想办法的,我估计时间问题也是我跪的原因之一。
总之,网易对校招生的要求就是基础知识一定要理解透彻理解的深。像我这种习惯了各种语法糖和新特性,使用惯了库的人还需要多补补基本概念。