奔三路 - 你30岁前的学习路!

奔三路学习网

当前位置: 主页 > 前端面试通 > 题库 >

15道网易18校招前端开发笔试题,带答案解析

时间:2018-04-08 22:44来源: 作者:Vuez
一颗完全二叉树有4层(根节点为第一层),若叶节点为3,则第3层节点数为几?

1. 以下代码的运行结果是?

A. 321 B. 123 C. 213 D. 312

 function a() { setTimeout( function(){ alert(1) }, 1000); setTimeout( function(){ alert(2) }, 0); alert(3); } a(); 

答:

1. A。考察setTimeout原理:Javascript是单线程执行的,当某一段代码正在执行的时候,所有后续的任务都必须等待,形成一个队列,一旦当前任务执行完毕,再从队列中取出下一个任务。这也常被称为 “阻塞式执行”。所以一次鼠标点击,或是计时器到达时间点,或是 Ajax 请求完成触发了回调函数,这些事件处理程序或回调函数都不会立即运行,而是立即排队,一旦线程有空闲就执行。假如当前 Javascript 进程正在执行一段很耗时的代码,此时发生了一次鼠标点击,那么事件处理程序就被阻塞,用户也无法立即看到反馈,事件处理程序会被放入任务队列,直到前面的代码结束以后才会开始执行。如果代码中设定了一个setTimeout,那么浏览器便会在合适的时间,将代码插入任务队列,如果这个时间设为 0,就代表立即插入队列,但不是立即执行,仍然要等待前面代码执行完毕。所以setTimeout并不能保证执行的时间,是否及时执行取决于 Javascript 线程是拥挤还是空闲。

至于settimeout(0)用有何用,就是起到了一个将事件加入到队列中,待执行的一个功能效果。
 

以下题目答案在文章末尾....

2. 一颗完全二叉树有4层(根节点为第一层),若叶节点为3,则第3层节点数为几?

3. 正则表达式的应用:匹配一个域名如 https: //www.zhihu.com/的正则如何书写?

4. 从1万亿个数中选出最小的20个数,最佳排序算法应是?

A.快速排序 B.选择排序 C.归并排序 D.堆排序

5. 将一个整数序列整理为升序,两趟处理后序列变为10,12,21,9,7,3,4,25。则采用的排序算法可能是?

A.快速排序 B.选择排序 C.冒泡排序 D.堆排序

6. 某系统中有3个并发进程,都需要同类资源4个,试问该系统保证不会发生死锁的最少资源数是多少?

7. 以下哪个不属于TCP拥塞控制的操作?

A. 带外数据 B. 慢启动 C. 快速恢复 D. 快速重传

8. 单链表删除一个结点,头指针,尾指针相关。

9. 二分查找算法不能用于以下哪个数据结构?

10. 伪元素选择器不包含以下哪个?

A. before B. first-line C. first-letter D. behind

11. 进程与线程

12. 关于适配器模式adapter的描述不正确的是?

13. 对于算法估计空间复杂度,关注的是程序

A.运行占用的总空间 B.使用的辅助空间 C.代码占用的空间 D.使用的数据空间

14. 关于section的描述正确的是?

15. 在Javascript中,有

var arr = [ ];

typeof arr的结果为:

A. function B. array C. object D. null

 

 

以下为答案:


2. 显而易见,4。

3. 参考正则表达式相关符号。

4. 堆排序。

典型的N取前M的题型,首先题目未说内存理想,根据常识1万亿=1T的数据量,那么是无法一下全部放入内存的。

在内存有限情况下,可把数据先放在磁盘上,然后在内存开辟一个容纳20个数的最小堆。每次从磁盘上读取一个数,若最小堆未满,则直接放入最小堆中后调整堆;若最小堆已满,则将这个数与最小堆根结点上的数值进行比较,若比根结点的数值小,则替换掉根结点上的值,然后重新调整最小堆使其符合最小堆的性质。

遍历完1万亿个数后,这个最小堆里面存放的就是20个最小值了。

最后想到的是可使用并行计算,也就是堆排序与归并排序相结合

假设可先平均分为Y个堆,时间复杂度为 O(N)

再使用X个任务并行选出每堆的前M个最小数,该步时间复杂度为O(\frac{N}{Y}logM) ,此时生成了Y组长度为M的有序序列。

使用多路归并排序选出Y组序列中前M个数,此时的时间复杂度为 O(MlogY)

总体时间复杂度为O(N+\frac{N}{Y}logM+MlogY)。至此算法达到了常数级别的优化。其实还可再进一步进行优化,具体可参考——皆传:如何在很大数量级的数据中(比如1个亿)筛选出前10万个最大值?

5. 快速排序。对于其他三种排序方法两趟排序后,序列的首部或尾部的两个元素应是有序的两个极值,而给定的序列不满足。

6. 如果一个进程有m个资源它就能够结束,不会使自己陷入死锁中。因此最差情况是每个进程有m-1个资源并且需要另外一个资源。如果留下有一个资源可用,那么其中某个进程就能够结束并释放它的所有资源,使其它进程也能够结束。所以避免死锁的条件是:r≥p(m-1)+1。带入上述条件公式:r≥3*(4-1)+1=10。所以答案为10个。

7. A. 带外数据。

8. 由于是单链表,所以即使存在尾指针,删除操作费时还是O(n),这个时间是找到待删除节点的前一个指针,并把它赋值为尾指针而造成的。

9. 二分法主要是解决在 “一堆数中找出指定的数” 这类问题。

而想要应用二分查找法,这“一堆数”必须有一下特征:

  • 存储在数组中
  • 有序排列

所以如果是用链表存储的,就无法在其上应用二分查找算法了。

10. D。

11.

12. 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适用场景如下:

  • 已经存在的类的接口不符合我们的需求;
  • 创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
  • 在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。

13. 个人认为是D:使用的数据空间,即代码所占用的内存空间。

14.

15. C。 参考ECMA-262

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
发布者资料
Vuez 查看详细资料 发送留言 加为好友 用户等级:注册会员 注册时间:2018-03-30 22:03 最后登录:2018-06-11 14:06
栏目列表
推荐内容

关注奔三路小程序,方便你我他