(转)2017网易前端笔试题

2018-08-10  本文已影响0人  小白明1225

偶尔看到的文章,很喜欢就转过来了,若有侵权请告知删除。
原文地址:https://blog.csdn.net/sunday0904/article/details/77184077
(原文的解析还有文字更详细,原文作者编程题为java代码,此处用的是js代码)

单选题:

1.下列哪些不是伪元素选择器:
A. first-line
B. before
C. first-letter
D. behind
参考:D(应该是after)
2.下列哪些不属于HTML input元素种类:
A. search
B. range
C. datetime
D. bool
参考:D
3.二分查找算法不能在下面哪个数据结构中使用?
A. sorted linkedlist
B. sorted lineararray
C. sorted binary trees
D. sorted pointerarray
参考:A
4.已知一棵高度为4的完全二叉树的第4层(设根为第1层)有3个叶结点,则该完全二叉树第3层的叶结点个数是
A. 1
B. 3
C. 2
D. 4
参考:C
完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
5.以下代码的执行结果是什么?

setTimeout(function() {
    console.log(1);
}, 100)
setTimeout(function () {
    console.log(2);
}, 0)
console.log(3);

A. 1,2,3
B. 2,1,3
C. 3,2,1
D. 2,3,1
参考 :C
js是单线程的,setTimeout只是将函数放入队列,任然要等待空闲的时候再执行,即使时间设置为0
6.下面不属于TCP协议拥塞控制部分的是()
A. 快速重传
B. 带外数据
C. 慢启动
D. 快速恢复
参考:B
TCP的拥塞控制由4个核心算法组成:“慢启动”(Slow Start)、“拥塞避免”(Congestion voidance)、“快速重传 ”(Fast Retransmit)、“快速恢复”(Fast Recovery)。
7.HTML5中关于section元素使用正确的是()
A. 通常将section元素用做设置样式的页面容器
B. 在没有标题的内容区块应该使用section元素
C. 推荐使用section元素代替article元素、aside元素、或nav元素
D. 如果你想把一块内容分成几块时,应该使用section元素
参考:D
8.对算法估计空间复杂度,关注的是()
A. 程序代码占用的空间
B. 程序运行占用的总空间
C. 程序使用的辅助空间
D. 程序使用的数据空间
参考:C
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。临时占用的存储空间即程序使用的辅助空间。
9.var arr = []
typeof arr 的结果是:
A. array
B. function
C. object
D. undefined
参考:C
5种简单数据类型(也称基本数据类型):Undefined、Null、Boolean、Number、String
1种复杂数据类型:Object(基本上除了上述5种,其余都是Object)
10.JavaScript中下面选项关于this描述正确的是()
A. 在使用new实例化对象时,this指向这个实例对象
B. 在函数定义时,this指向全局变量
C. 当对象调用函数或者方法时,this指向这个对象
D. 在浏览器下的全局范围内,this指向全局变量
参考:A/C
11.某单链表中最常用的操作是在最后一个元素之后插入一个元素和删除链表中给定的元素,则下列选项正确的是()
A. 若仅有头指针,则插入操作及删除操作均是O(n)的
B. 既有头指针又有尾指针,则插入操作及删除操作均是O(1)的
C. 增加尾指针既能提升插入操作的效率,也能提升删除操作的效率
D. 既有头指针又有尾指针,则插入操作及删除操作均是O(n)的
参考:A (按照他的解释觉得D也是对的)
查找操作和删除操作都需要遍历链表,移动指针来确定元素位置,所以时间复杂度是O(n),是否有尾指针没有影响。不查找,直接操作的时间复杂度是O(1)。所以时间复杂度是O(n)。
12.以下代码的执行结果是什么?

var string = 'string';
var number = 0;
var bool = true;
console.log(number || string);
console.log(number && string);
console.log(bool || number);
console.log(bool && number);

A. ‘string’, 0, true,0
B. ‘string’, true,0, 0
C. ‘string’, ‘string’,true, 0
D. ‘string’, 0, true,true
参考:A
13.以下意图哪个是用来描述ADAPTER(适配器)?()
A. 定义一个用于创建对象的接口,让子类决定实例化哪一个类
B. 将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作
C. 将一个类的接口转换成客户希望的另一个接口,本模式使得原本由于接口不兼容而不能一起工作的那些类一起工作
D. 表示一个作用于某对象结构中的各元素操作,他使你可以在不改变各元素的类的前提下作用于这些元素的新操作
参考:C
适配器模式(Adapter)是将一个类(对象)的接口(方法或属性)转化成客户希望的另外一个接口(方法或属性),适配器模式使得原本由于接口不兼容而不能一起工作的那些类(对象)可以一些工作。速成包装器(wrapper)。
14.一个栈的入栈顺序是1,2,3,4,5,则栈的不可能输出顺序是:
A. 12345
B. 54321
C. 43512
D. 45321
参考:C
栈有两种原则,“先进先出”和“先进后出”。
A.先进先出,12345按顺序入栈,在分别出栈
B.先进后出,12345按顺序入栈,在分别出栈
C.先进后出,1不可能在2之前先出栈
D.先进后出,1234入栈,4出栈,5入栈,5321出栈
15.下面关于进程和线程说法不正确的是?
A. 线程是进程的一个实体,可作为系统独立调度和分派的基本单位
B. 线程可以通过相互之间协同来完成进程所要完成的任务
C. 一个进程中多个线程可以并发执行
D. 线程之间不共享进程中的共享变量和部分环境
参考:D
进程之间不共享变量和部分环境,要通过通信来实现,但是线程可以共享。
16.从1000000000000个书中选择最小的20个数,用以下那种排序算法比较方便?
A. 归并排序
B. 快速排序
C. 插入排序
D. 堆排序
参考:D
17.JavaScript中window对象的子对象不包含以下哪个对象?
A. document
B. self
C. history
D. message
参考:D
window、self、window.self三者是等价的。
window的主对象主要有如下几个:
document frames history location navigator screen
18.将一个整数序列整理为升序,两趟处理后序列变为10,12,21,9,7,3,4,25,则采用的排序算法可能是:
A. 插入排序
B. 快速排序
C. 选择排序
D. 堆排序
参考:C (个人觉得是B,插入排序相当于抽牌,从第二张不停往前移,直到前一张牌比自己小,10,12都比21小,所以为B)
19.下面可以匹配
<img src=”http://image.163.com”></img>
的正则表达式是?
A. <img src=”[.”]></img>
B. <img src=”[^”]
></img>
C. <img src=”[.”]”></img>
D. <img src=”[^”]
”></img>
参考:D
20.某系统中有12台设备,K个进程竞争使用,每个进程最多需要4台设备,该系统可能会发生死锁的K的最小值是()
A. 3
B. 5
C. 4
D. 6
参考:C

编程题:(此处为js参考代码,java代码请参考原文)

1、题目描述:
给出n阶方阵里所有数,求方阵里所有数的和。
输入描述:
3
1 2 3
2 1 3
3 2 1
输出:
18

var count=0;  
function swap(arr,i,j) {  
    if(i!=j) {  
        var temp=arr[i];  
        arr[i]=arr[j];  
        arr[j]=temp;  
    }  
}
function show(arr) {  
    document.write(arr+"<br />");  
}
function fn(arr,n) {     //为第n个位置选择元素  
        for(var i=n;i<arr.length;i++) {  
            swap(arr,i,n);
            if(n+1<arr.length-1) //判断数组中剩余的待全排列的元素是否大于1个  
                fn(arr,n+1); //从第n+1个下标进行全排列  
            else {
                show(arr); //显示一组结果  
                count++;
            }
            swap(arr,i,n);  //换回来,恢复原来的数组
        }  
    }
function perm(n) { 
    var arr = []
    for(let i =1;i<=n;i++){
        arr.push(i)
    }
    fn(arr,0)  
    console.log(count)
}  
perm(5);    //count刚好为5!,证明正确,至于和只需要count*5!

2.题目描述:
如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错串,例如1,10101,0101010都是交错01串。小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出这样的子串的长度是多少。
输入描述:
输入包括字符串s,s的长度是length(1≤length≤50),字符串中只包括0和1
输出描述:
输出一个整数,表示最长的满足要求的子串长度。
示例1
输入:
111101111
输出:
3

function fn_01(str){
    let re = /1{0,1}(01)+0{0,1}/g
    let str_01 = str.match(re)
    console.log(str_01)
    let index=0;
    if(str_01.length!==0){
        for(let i=0;i<str_01.length;i++){
            index = str_01[index].length>=str_01[i].length? index : i
        }
        return str_01[index].length
    }else{
        return 1
    }
    
}
上一篇下一篇

猜你喜欢

热点阅读