2017网易前端笔试题总结

来源:互联网 发布:linux cdn服务器搭建 编辑:程序博客网 时间:2024/05/17 04:26

整理了一下2017网易前端笔试题,附上了自己的答案,仅供参考,欢迎讨论和交流。如果有什么不对的地方,欢迎指正。

题目整理(不含答案)

网盘分享:

链接: https://pan.baidu.com/s/1dEYkyKp 

密码: hxec


单选题:

1.下列哪些不是伪元素选择器:

A. first-line

B. before

C. first-letter

D. behind

参考:D(应该是after)

CSS伪元素:

和一般的DOM中的元素样式不一样,它并不改变任何DOM内容。只是插入了一些修饰类的元素,这些元素对于用户来说是可见的,但是对于DOM来说不可见。伪类的效果可以通过添加一个实际的类来达到。

由于状态是动态变化的,所以一个元素达到一个特定状态时,它可能得到一个伪类的样式;当状态改变时,它又会失去这个样式。由此可以看出,它的功能和class有些类似,但它是基于文档之外的抽象,所以叫伪类。

伪元素选择器,伪元素的效果是需要通过添加一个实际的元素才能达到的。

/* 为某个元素的第一行文字使用样式。 */

:first-line

/* 为某个元素中的文字的首字母或第一个字使用样式。 */

:first-letter

/* 在某个元素之前插入一些内容。 */

:before

/* 在某个元素之后插入一些内容。 */

:after

 

2.下列哪些不属于HTML input元素种类:

A. search

B. range

C. datetime

D. bool

参考:D

Html<input>标签规定了用户可以在其中输入数据的输入字段。<input> 元素在 <form> 元素中使用,用来声明允许用户输入数据的 input 控件。输入字段可通过多种方式改变,取决于 type 属性。

参考资料:http://www.runoob.com/tags/att-input-type.html

描述

button

定义可点击的按钮(通常与 JavaScript一起使用来启动脚本)。

checkbox

定义复选框。

color

定义拾色器。

date

定义 date控件(包括年、月、日,不包括时间)。

datetime

定义 date time控件(包括年、月、日、时、分、秒、几分之一秒,基于 UTC时区)。

datetime-local

定义 date time控件(包括年、月、日、时、分、秒、几分之一秒,不带时区)。

email

定义用于 e-mail地址的字段。

file

定义文件选择字段和 "浏览..."按钮,供文件上传。

hidden

定义隐藏输入字段。

image

定义图像作为提交按钮。

month

定义 month year控件(不带时区)。

number

定义用于输入数字的字段。

password

定义密码字段(字段中的字符会被遮蔽)。

radio

定义单选按钮。

range

定义用于精确值不重要的输入数字的控件(比如 slider控件)。

reset

定义重置按钮(重置所有的表单值为默认值)。

search

定义用于输入搜索字符串的文本字段。

submit

定义提交按钮。

tel

定义用于输入电话号码的字段。

text

默认。定义一个单行的文本字段(默认宽度为 20个字符)。

time

定义用于输入时间的控件(不带时区)。

url

定义用于输入 URL的字段。

week

定义 week year控件(不带时区)。

 

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 层所有的结点都连续集中在最左边,这就是完全二叉树。

如图所示,3,4,5是第4层的三个叶结点,那么第3层有1,2两个叶结点。




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

setTimeout()

定义和用法: setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式。  

语法: setTimeout(code,millisec)  

参数: code (必需):要调用的函数后要执行的 JavaScript 代码串。millisec(必需):在执行代码前需等待的毫秒数。  

提示: setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。

log(1)设置了100ms的延迟,log(2)设置了0ms延迟,log(3)直接执行。

至于是指0ms的延迟有何作用?

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

参考资料:http://blog.csdn.net/xingxing1828/article/details/28424591

 

6.下面不属于TCP协议拥塞控制部分的是()

A. 快速重传

B. 带外数据

C. 慢启动

D. 快速恢复

参考:B

TCP的拥塞控制由4个核心算法组成:“慢启动”(Slow Start)、“拥塞避免”(Congestion voidance)、“快速重传 ”(Fast Retransmit)、“快速恢复”(Fast Recovery)。

TCP阻塞控制 参考资料:

http://blog.csdn.net/sicofield/article/details/9708383

http://www.cnblogs.com/hupp/p/4856134.html

 

7.HTML5中关于section元素使用正确的是()

A. 通常将section元素用做设置样式的页面容器

B. 在没有标题的内容区块应该使用section元素

C. 推荐使用section元素代替article元素、aside元素、或nav元素

D. 如果你想把一块内容分成几块时,应该使用section元素

参考:D

<section>标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。一个section标签通常由内容及其标题组成。当一个内容需要被直接定义样式或通过脚本定义行为时,推荐使用div而非section标签。section标签中的内容可以单独存储到数据库中或输出到word文档中。

通常不推荐为那些没有标题的内容使用section标签,可以使用HTML5轮廓工具来检查页面中是否有标题 的section,如果使用该工具进行检查后,发现某个section的说明中有"untitiled section"(没有标题的section)文章,这个section就有可能使用不当。

section标签的作用是对页面上的内容进行分块,或者说对文章进行分段,请不要与有着自己的完整的、独立的内容”的article元素混淆。article标签代表文档、页面或应用程序中独立的、完整的、可以独自被外部引用的内容。

参考资料:

https://www.douban.com/group/topic/79128577/

http://www.w3school.com.cn/html5/html5_section.asp

 

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

构造函数中使用this(new实例化对象时),this指向这个新对象

测试代码:

var x = 2;function test(){    this.x = 1;}var ob = new test();alert(ob.x);//1alert(x); //2
函数定义时,this代表函数运行时自动生成一个内部对象,只在函数内部有效,所以定义时this指向这个函数内部,不是全局,和调用函数时的情况不一样。
 
当对象调用本身的方法时,this指向当前的对象。
测试代码:

function test(){    alert(this.x);}var ob = {};ob.x = 1;ob.m = test;ob.m(); // 1
当函数并不是某个对象的属性时,调用这个函数时,this指向全局对象。
随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。一共有四种形式的调用。
①作为函数调用,this相当于window
②作为对象的方法,this相当于对象
③作为构造器调用,this相当于实例化的对象
④apply()和call()调用,this可以进行指定。
 
11.某单链表中最常用的操作是在最后一个元素之后插入一个元素和删除链表中给定的元素,则下列选项正确的是()
A. 若仅有头指针,则插入操作及删除操作均是O(n)的
B. 既有头指针又有尾指针,则插入操作及删除操作均是O(1)的
C. 增加尾指针既能提升插入操作的效率,也能提升删除操作的效率
D. 既有头指针又有尾指针,则插入操作及删除操作均是O(n)的
参考:A
查找操作和删除操作都需要遍历链表,移动指针来确定元素位置,所以时间复杂度是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
表达式a  && 表达式b :  计算表达式a(也可以是函数)的运算结果,
如果为 True, 执行表达式b(或函数),并返回b的结果;
如果为 False,返回a的结果;
 
表达式a  || 表达式b :   计算表达式a(也可以是函数)的运算结果,
如果为 False, 执行表达式b(或函数),并返回b的结果;
如果为 True,返回a的结果;
转换规则:
对象为true
非零数字为true
非空字符串为true
其他为false
 
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
进程之间不共享变量和部分环境,要通过通信来实现,但是线程可以共享。
参考资料:
http://blog.csdn.net/luoweifu/article/details/46595285
http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html
 
16.从1000000000000个书中选择最小的20个数,用以下那种排序算法比较方便?
A. 归并排序
B. 快速排序
C. 插入排序
D. 堆排序
参考:D
堆排序适合处理大量数据的排序问题
http://www.cnblogs.com/worldpasser/p/3148639.html
不详细解释了,附上一个很经典的资料
http://www.jianshu.com/p/7d037c332a9d
 
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
简单选择排序的基本思想:比较+交换。
从待排序序列中,找到关键字最小的元素; 
如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; 
从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
因此我们可以发现,简单选择排序也是通过两层循环实现。
第一层循环:依次遍历序列当中的每一个元素
第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。
不详细解释了,附上一个很经典的资料
http://www.jianshu.com/p/7d037c332a9d
 
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
测试
var a='<IMG src="http://image.163.com">'var b=/<IMGsrc="[^"]*">/givar s=a.match(b)for(var i= 0;i<s.length;i++){    alert(s[i]);    alert(RegExp.$1)}
 
20.某系统中有12台设备,K个进程竞争使用,每个进程最多需要4台设备,该系统可能会发生死锁的K的最小值是()
A. 3
B. 5
C. 4
D. 6
参考:C
每个进程先分配(4-1=)3个设备,3*K + 1 ≤ 12,K ≤ 3.67,所以锁死的最小取值是 3 + 1 = 4.
 



编程题:
单行输入输出示例:
题目描述:求a+b的和。

 import java.util.Scanner; public class Sample {   public static void main(String[] args) {      Scannerin= newScanner(System.in);      while(in.hasNextInt()) {         int a = in.nextInt();         int b = in.nextInt();         System.out.println(a + b);      }   }}


 
多行输入输出规范示例
题目描述:
给出n阶方阵里所有数,求方阵里所有数的和。
输入描述:
3
1 2 3
2 1 3
3 2 1
输出:
18
 

import java.util.Scanner; public class Sample2 {   public static void main(String[] args) {      Scannerin= newScanner(System.in);      int n = in.nextInt();      int ans = 0,x;      for(int i = 0; i< n; i++) {         for(int j = 0; j < n; j++){            x = in.nextInt();            ans += x;         }      }      System.out.println(ans);   }}

 
1.题目描述:
小易有一些彩色的砖块,每种颜色由一个大写字母表示,各个颜色砖块看起来都完全一样,现在有一个给定的字符串s,s中的每个字符代表小易某个砖块的颜色。小易想把他所有的砖块排成一行,如果最多存在一对不同颜色的相邻砖块,那么这行砖块就很漂亮的。请你帮助小易计算有多少种方式将他所有的砖块排成漂亮的一行。(如果两种方式所对应的砖块颜色序列是相同的,那么认为这两种方式是一样的。)
例如:
s = “ABAB”,那么小易有6种排列的结果:
AABB,ABAB,ABBA,BAAB,BABA,BBAA
其中只有AABB和BBAA满足最多只有一对不同颜色的相邻砖块。
输入描述:
输入包括一个字符串s,字符串s的长度length(1≤length≤50),s中的每个字符都为一个大写字母(A到Z)。
输出描述:
输出一个整数,表示小易有多少种方式。
示例1
输入:

ABAB
输出:
2


思路:

计算一共有多少种颜色,只有1种颜色,那么对应只有1种顺序,两种颜色,则对应2种顺序,超过2种颜色则至少有2个相邻不同颜色的砖块,不符合要求,则对应0.
solution: 

import java.util.Scanner; public class Main {   public static void main(String[] args) {      Scannerin= newScanner(System.in);      Strings = in.next();           if(s == null || s.length() == 0){         System.out.print(0);      }           int[] count = new int[26];      for(int i = 0;i < s.length();i++){         count[s.charAt(i) - 'A']++;      }      int record = 0;      for(int i = 0; i < count.length;i++) {         if(count[i] > 0 ) {            record++;         }      }      if(record > 2) {         System.out.print(0);      }else if(record == 2) {         System.out.print(2);      }else {         System.out.print(1);      }   }}



2.题目描述:
如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错串,例如1,10101,0101010都是交错01串。小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出这样的子串的长度是多少。
输入描述:
输入包括字符串s,s的长度是length(1≤length≤50),字符串中只包括0和1
输出描述:
输出一个整数,表示最长的满足要求的子串长度。
示例1
输入:
111101111
输出:
3
思路:
遍历所有情况,计算每个交叉子串的长度,取最大值
solution:
import java.util.Scanner;  public class Main {   public static void main(String[] args) {      Scannerin= newScanner(System.in);      Strings = in.next();      if(s == null || s.length() == 0){         System.out.print(0);      }           char[] c = s.toCharArray();       int max = 0;      for(int i = 0;i < c.length;i++) {         int count = 1;         for(int j = i + 1;j<c.length;j++) {            if(c[j] != c[j - 1]){                count ++;                max = Math.max(max, count);            }else {                max = Math.max(max, count);                break;            }         }      }           System.out.print(max);   }}






3.题目描述 :
小易为了向他父母表现他已经长大独立了,他决定搬出去自己居住一段时间,一个人生活增加了很多花费;小易每天必须吃一个水果,并且每天支付x元的房屋租金。当前小易手中已经有f个水果和d元钱,小易也能去商店购买一些水果,商店每个水果售价p元,小易为了表现他独立生活的能力,希望能独立生活的时间越长越好,小易希望你来帮他计算他最多独立生活多少天。
输入描述:
输入包括一行,四个整数x,f,d,p(1 ≤ x,f,d,p ≤ 2*10^9),以空格分割。
输出描述:
输出一个整数,表示小易最多能独立生活多少天。
输入:
3 5 100 10
输出:
11
思路:
分两种情况讨论,计算并取整(向下取整)
solution:
import java.util.Scanner; public class Main {   public static void main(String[] args) {      Scannerin= newScanner(System.in);      int x = 1,f = 1,d = 1,p = 1;      while(in.hasNextInt()) {         x = in.nextInt();         f = in.nextInt();         d = in.nextInt();         p = in.nextInt();      }           if(f*x > d){         System.out.print(d/x);      }else {         System.out.print((d - f*x)/(p + x) + f);      }   }  }



原创粉丝点击