网易游戏雷火2020春招web前端工程师笔试卷0425

网易游戏雷火2020春招web前端工程师笔试卷0425

    • 考试信息
    • 笔试题型
    • 详情
      • 单选
      • 不定项
      • 编程题
      • 问答题

考试信息

招聘单位:网易游戏雷火事业群校园招聘
岗位:前端开发工程师
回复时间: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

  1. await会让出线程,await之后的代码首先执行,之后就跳出async函数执行js栈的余下代码。所以才会在script end之后输出async1 end。相关解答地址:async/await的执行顺序
  2. promise的resolve会被插入回调序列,在js栈结束后回调。

高亮的地方,会由于浏览器版本不同而处理顺序不同,见贺师俊老师的回答。这里也有很多讨论。同时,我尝试着在async2里继续套娃,得到的输出

在async4(在script end之前输出过了)的条件下,script end之后的输出:
async3 end
promise2
async2 end
async1 end

  1. setTimeout无论多少,都会在同步任务结束后才开始。

7.请描述一下CSS选择器的解析顺序。

你可能感兴趣的:(笔试)