招聘单位:网易游戏雷火事业群校园招聘
岗位:前端开发工程师
回复时间:2020年4月23日
笔试时间:2020年4月25日 13:00 - 14:30 (考试时长90分钟)
笔试平台:牛客网
单选:4题
不定项:6题
编程题:1题
问答题:7题
题目我都大概搜了一下百度添加了引用,如果有错或者有更好的引用地址,请评论!!
1.在var set = new Set([0, 2, 2, 0, 0, 5, 9, {}, {}, NaN, NaN])中,set.size为多少?7?
2.权限为765的文件,下列哪个是正确的权限标记? -rwxrw-r-x
3.已知一棵二叉树,中序遍历是DBFEACHGI,后序遍历是DFEBHIGCA,则前序遍历为:ABDEFCGHI
4.哪种前端构建技术可以剔除JS中没有被使用的代码:Tree Shaking?
1.以下哪些排序算法是不稳定的排序算法:快速排序,堆排序
原有的顺序不变,那这种排序算法就是稳定的。如:冒泡排序、基数排序、插入排序、归并排序、桶排序、二叉树排序等。
反之,如果不能保证原有顺序,这种算法就是不稳定的。如:选择排序,希尔排序,堆排序,快速排序等。
2.调用数组的以下哪些方法,可能会改变原数组的值:splice,sort,reverse
总结
会改变原来数组的有:
pop()—删除数组的最后一个元素并返回删除的元素。
push()—向数组的末尾添加一个或更多元素,并返回新的长度。
shift()—删除并返回数组的第一个元素。
unshift()—向数组的开头添加一个或更多元素,并返回新的长度。
reverse()—反转数组的元素顺序。
sort()—对数组的元素进行排序。
splice()—用于插入、删除或替换数组的元素。
3.给定正则表达式/^(SE)?[0-9]{12}$/,满足此匹配条件的字符串有:
‘1234567890’
’123456789123’
‘ESX1234567Y’
‘SI12345678’
4.JS中以下哪些运算值为true:1247?
1.Symbol(1) === Symbol(1)
2.!{}
3.NaN === NaN
4.!’’
5.!-1
6.!NaN
7.Symbol.for(1) === Symbol.for(1)
8.![]
5.以下哪些flex的属性是在容器元素上的
align-content
justify-content
flex-grow
align-items
6.下列哪个git命令不是合并代码用的:git blame, git commit(这个不知道是不是。。)
git命令合并代码:(1)git merge;(2)git pull;(3)git cherry-pick
执行git blame;命令时,会逐行显示文件,并在每一行的行首显示commit号,提交者,最早的提交日期等
没有调试,不可跳出
已知斐波那契数列是从0和1开始,后面的两个数都是前两个数之和。
// 请用JS实现一个性能较好的方法 fib(n), 返回斐波那契数列的第n个数。
示例的输入=> 输出分别为
0 => 0
1 => 1
2 => 1
通过率100%代码(应该):
// 时间复杂度O(n),空间复杂度O(1)
if (Number.isInteger(n) === true) {
let a, b, temp;
if (n == 0) return 0;
else if (n <= 2) return 1;
else {
a = b = 1;
for (let i = 3; i < n + 1; i++) {
temp = a + b;
a = b;
b = temp;
}
return temp;
}
}
还有递归方式和数组循环:Link
这个类型的问题,如需画图或推导,可在草稿上作答,手机拍照扫码上传。
1.写一段JS代码按照浏览器渲染的顺序遍历下列每个节点,遍历时打印出当前节点的类型及类名。
<div class="root">
<div class="container">
<section class="sidebar">
<ul class="menu"></ul>
</section>
<section class="main">
<article class="post"></article>
<p class="copyright"></p>
</section>
</div>
</div>
2.请用JS实现一个类似new关键字的方法create,使create(Foo, a, b, c) 和new Foo(a,b,c…)的执行效果相同
3.请描述一下单页面路由的实现方式?
4.请以在浏览器中访问www.163.com为例,描述一下DNS通过域名查询到具体的IP的过程。
5.请描述一下浏览器的缓存机制。
6.请写出下面代码的运行结果:
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0);
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function() {
console.log('promise2');
});
console.log('script end');
答案:
script start
async1 start
async2
promise1
script end
async1 end
promise2
undefined
setTimeout
高亮的地方,会由于浏览器版本不同而处理顺序不同,见贺师俊老师的回答。这里也有很多讨论。同时,我尝试着在async2里继续套娃,得到的输出
在async4(在script end之前输出过了)的条件下,script end之后的输出:
async3 end
promise2
async2 end
async1 end
7.请描述一下CSS选择器的解析顺序。