2017.3.25-2017.4.12网易前端实习笔面试

笔试

总的题型是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说到时候会想办法的,我估计时间问题也是我跪的原因之一。


总之,网易对校招生的要求就是基础知识一定要理解透彻理解的深。像我这种习惯了各种语法糖和新特性,使用惯了库的人还需要多补补基本概念。

你可能感兴趣的:(2017.3.25-2017.4.12网易前端实习笔面试)