网易游戏雷火春招web前端工程师笔试卷0425
考试信息笔试题型详情单选不定项编程题问答题考试信息
招聘单位:网易游戏雷火事业群校园招聘
岗位:前端开发工程师
回复时间:4月23日
笔试时间: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.请以在浏览器中访问为例,描述一下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');
await会让出线程,await之后的代码首先执行,之后就跳出async函数执行js栈的余下代码。所以才会在script end之后输出async1 end。相关解答地址:async/await的执行顺序promise的resolve会被插入回调序列,在js栈结束后回调。答案:
script start
async1 start
async2
promise1
script end
async1 end
promise2
undefined
setTimeout
高亮的地方,会由于浏览器版本不同而处理顺序不同,见贺师俊老师的回答。这里也有很多讨论。同时,我尝试着在async2里继续套娃,得到的输出
setTimeout无论多少,都会在同步任务结束后才开始。在async4(在script end之前输出过了)的条件下,script end之后的输出:
async3 end
promise2
async2 end
async1 end
7.请描述一下CSS选择器的解析顺序。