web前端整套面试题(三)--网易的面试题
题型分析:
一、选择题部分(30分)
元素出栈可能性
排序方法的优缺点
HTTP请求方法
关系型数据库种类
多线程(进程与线程共享)
计算机网络协议
linux指令
JQuery实现方法
二、编程题(60分)
集合
奇怪的表达式求值
消除重复元素
三、问答题(10分)
JS实现Excel表格列项排序功能
具体问题:
一、选择题
1、元素1,2,3,4,5,6,7入栈,有多少种出栈的可能性?
相似问题:
1.1、饭后,姐姐洗碗,妹妹把姐姐洗过的碗一个一个地放进碗橱摞成一摞。一共有n个不同的碗,洗前也是摞成一摞的,也许因为小妹贪玩而使碗拿进碗橱不及时,姐姐则把洗过的碗摞在旁边,问:小妹摞起的碗有多少种可能的方式?
1.2、给定n个数,有多少种出栈序列?
1.3、一个有n个1和n个-1组成的字串,且前k个数的和均不小于0,那这种字串的总数为多少?
答案:f(n) = f(0)*f(n-1) + f(1)*f(n-2) + f(2)*f(n-3) +...f(n-1)*f(0) 此题套进公式f(7) = 429(公式见下面图片)
2.在100 0000个数中选出最大的五个数字,那种排序方法最为快速?
附上以前的一个博客,整理的关于排序算法相关的东西:http://www.cnblogs.com/zhangxue521/p/6748085.html
答案是:快速排序(为什么我记得在数据结构课上老师说,只要是数据比较大的时候找最小的或者最大的几个就用堆排序呢)
快速排序:真的,100 0000的数据量以内,见到快排,就选了吧。
原理:快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
优势:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。
缺点:不稳定,在序列有序或者逆序的情况下最不利于发挥其长处
希尔排序:
原理:希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
优势:快,数据移动少
缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取,并且插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。
堆排序:我就觉得它比较快
原理:堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。
优势:由于它在直接选择排序的基础上利用了比较结果形成。效率提高很大。它完成排序的总比较次数为O(nlog2n),它是对数据的有序性不敏感的一种算法。
缺点:在小规模序列中使用它不合适(不要杀鸡用牛刀?)
归并排序:我怎么就觉得这个快
原理:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
优势:使用它对两个己有序的序列归并,将有无比巨大的优势。其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlog2n),且对数据的有序性不敏感。
缺点:需要与待排序序列一样多的辅助空间,所以数据节点数据量大,则不适合使用
3.以下不属于http请求方法的是?
答案:set
考点是http请求的八种方法
方法 | 概述 |
---|---|
get | 请求页面的详细信息,并返回实体主体。 |
post | 向指定资源提交数据进行数据请求(例如提交表单,或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
put | 从客户端向服务器传送的数据取代指定的文档内容。 |
delete | 请服务器删除指定的页面。 |
head | 类似与Get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
connect | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
options | 允许客户端查看服务器的性能。 |
trace | 回显服务器收到的请求,主要用于测试或诊断。 |
4.以下不属于关系数据库的是?
数据库类型主要可分为:网状数据库(Network Database)、关系数据库(Relational Database)、树状数据库(Hierarchical Database)、面向对象数据库(Object-oriented Database)等
5.多线程(进程与线程共享)
问题:以下属于同一个进程内线程共享的部分是?
解析:(很无奈~~)
1>线程共享的环境包括:
1、进程代码段
2、进程的公有数据(利用这些共享的数据,易于线程间实现相互之间的通讯)
3、进程打开的文件描述符
4、信号的处理器
5、进程的当前目录
6、进程用户ID与进程组ID。
7、线程的堆共有,栈私有
2>线程的非共享的个性包括:
1.线程ID
每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程。
2.寄存器组的值
由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便将来该线程在被重新切换到时能得以恢复。
3.线程的栈
栈是保证线程独立运行所必须的。
线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程必须拥有自己的函数栈,使得函数调用可以正常执行,不受其他线程的影响。
4.错误返回码
由于同一个进程中有很多个线程在同时运行,可能某个线程进行系统调用后设置了errno值,而在该线程还没有处理这个错误,另外一个线程就在此时被调度器投入运行,这样错误值就有可能被修改。 所以,不同的线程应该拥有自己的错误返回码变量。
5.线程的信号屏蔽码
由于每个线程所感兴趣的信号不同,所以线程的信号屏蔽码应该由线程自己管理。但所有的线程都共享同样的信号处理器。
6.线程的优先级
由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程的优先级。
6.计算机网络
A: UDP是可靠服务(Wrong)
解析: UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
UDP是无连接的;尽最大努力交付的(不可靠的);面向报文的;没有拥塞控制的;支持一对一、一对多、多对一、多对多的交互通信;首部开销小只有8个字节(TCP有20个字节)。
B: NAT是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术(Right)
解析: NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
C: TCP建立和关闭链接都只需要四次握手(Shake hands?先mark)(Wrong)
解析: 三次握手建立链接,四次挥手关闭连接
所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。
第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+。
第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+,放在确定字段中发送给对方.并且在数据段放写ISN的+
D: HTTP返回码302表示永久重定向,需要重新URL(Uniform resource locator)(Wrong)
解析:
, 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:
redirect: 代表永久性转移(Permanently Moved)。
redirect: 代表暂时性转移(Temporarily Moved )。
7.下面Linux命令,不能打印该目录下所有的文件和文件夹的是?
ls命令是Linux下最常用的命令。ls命令就是list的缩写。
缺省下ls用来打印当前目录的清单,如果ls指定其他目录,那么就会显式指定目录里的文件及文件夹清单,通过ls命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限等等。
echo*: echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。
dir: dir命令是ls命令的一个别名,也是directory的缩写。通常列出的文件会以不同的颜色进行显示,不同的颜色代表不同的文件类型
二。编程题
1.小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个。小易遇到了困难,希望你来帮助他。
输入描述:
输入包括两行:
第一行为序列长度n(1 ≤ n ≤ 50)
第二行为n个数sequence[i](1 ≤ sequence[i] ≤ 1000),以空格分隔
输出描述:
输出消除重复元素之后的序列,以空格分隔,行末无空格
输入例子:
9
100 100 100 99 99 99 100 100 100
输出例子:
99 100
思路:
- 你把题目给你的数据存进数组
- 反过来将没有重复的元素放进新数组
- 再讲最后的新数组反转输出即可
/***************java********************/
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
while(scan.hasNextLine())
{
String num=scan.nextLine();
String str=scan.nextLine();
find(str);
}
}
public static void find(String str)
{
String[] ch=str.split(" ");
List<String> list=new ArrayList<String>();
/*从最后取元素加入集合,
这样才能保证是把最后相同的元素留下,
为后面倒序输出做铺垫
*/
for(int i=ch.length-1;i>=0;i--)
{
if(!list.contains(ch[i]))
list.add(ch[i]);
}
/*因为集合是倒序加入元素的,
所以在输出的时候要将集合中的元素再倒序输出,
才能保证输出的是最后相同的元素
*/
for(int i=list.size()-1;i>=0;i--)
{
if(i!=0)
System.out.print(list.get(i)+" ");
else
System.out.print(list.get(i));
}
}
}
2。问题:
常规的表达式求值,我们都会根据计算的优先级来计算。比如/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 )。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少
输入描述:
输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9.
保证表达式都是合法的,排列规则如样例所示。
输出描述:
输出一个数,即表达式的值
输入例子:
3+5*7
输出例子:
56
思路:1.字符串变成字符数组,
2.switch一下,case到操作符,根据+-*做前一个位置和后一个位置数值的操作,
3.将结果赋给操作符后一个位置
import java.util.Scanner;
public class 网易表达式求值 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String biaodashi = scanner.nextLine();
char[] cha = biaodashi.toCharArray();
int result = 0;
for (int i = 0; i < cha.length-1; i++) {
switch (cha[i]) {
case '+':
result = (cha[i-1] -48) + (cha[i+1]-48);
cha[i+1] = (char) (result+48);
break;
case '-':
result = (cha[i-1] -48) - (cha[i+1]-48);
cha[i+1] = (char) (result+48);
break;
case '*':
result = (cha[i-1] -48) * (cha[i+1]-48);
cha[i+1] = (char) (result+48);
break; default:
break;
}
} System.out.println(result);
}
}
3问题:
小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.
小易的老师给了小易这样一个集合:
S = { p/q | w ≤ p ≤ x, y ≤ q ≤ z }
需要根据给定的w,x,y,z,求出集合中一共有多少个元素。小易才学习了集合还解决不了这个复杂的问题,需要你来帮助他。
输入描述:
输入包括一行:
一共4个整数分别是w(1 ≤ w ≤ x),x(1 ≤ x ≤ 100),y(1 ≤ y ≤ z),z(1 ≤ z ≤ 100).以空格分隔
输出描述:
输出集合中元素的个数
输入例子:
1 10 1 1
输出例子:
10
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class 网易集合 {
public static void main(String[] args) {
// list有序可重复,set无序无重复
Scanner scanner = new Scanner(System.in);
int w = scanner.nextInt();
int x = scanner.nextInt();
int y = scanner.nextInt();
int z = scanner.nextInt();
Set<Double> set = new HashSet<Double>();
for (int p = w; p <= x; p++) {
for (int q = y; q <=z; q++) {
set.add(p*1.0/q);
}
}
System.out.println(set.size());
}
}
三、问答题
在页面上有如下表格,当点击成绩的时候,所有行数据根据成绩从低到高排序,再点击成绩则变为从高到低排序,请用JavaScript实现以上功能,可以使用jQuery
名字 | 性别 | 成绩 |
---|---|---|
张三 | 男 | 77 |
李四 | 女 | 87 |
王五 | 未知 | 50 |
一个简单的只符合此题要求的排序:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>简单的点击成绩进行排序</title>
<script type="text/javascript" src="js/jquery.1.11.3.min.js" ></script>
</head>
<body>
<table id="table">
<thead>
<tr>
<th>名字</th>
<th>姓名</th>
<th id="sortCell">成绩</th>
</tr>
</thead>
<tbody id="tbody">
<tr>
<td>aaa</td>
<td>男</td>
<td>111</td>
</tr>
<tr>
<td>bbb</td>
<td>女</td>
<td>222</td>
</tr>
<tr>
<td>ccc</td>
<td>男</td>
<td>3333</td>
</tr>
<tr>
<td>ddd</td>
<td>女</td>
<td>1</td>
</tr>
</tbody>
</table> <script>
var tbody = document.querySelector('#table').tBodies[0];
// 表头
var th = document.querySelector('#table').tHead.rows[0].cells;
// 成绩的表头
var chengjiSort = th[2];
// 下面的每一行
var tr = tbody.rows;
chengjiSort.flag = 1;
chengjiSort.onclick = function(){
var array =[];
// 将每一行数据都存进数组里
for (var i = 0; i < tr.length; i++) {
array.push(tr[i]);
}
// 进行排序
array.sort(function(a,b){
if(chengjiSort.flag == 1){
return a.cells[2].innerHTML - b.cells[2].innerHTML;
}else{
return b.cells[2].innerHTML - a.cells[2].innerHTML ;
}
});
// 重新添加到表格中去
for (var i = 0; i < array.length; i++) {
tbody.appendChild(array[i]);
}
chengjiSort.flag = -chengjiSort.flag;
}
</script>
</body>
</html>
web前端整套面试题(三)--网易的面试题的更多相关文章
- web前端整套面试题(一)--js相关
一.单选 1.以下哪条语句会产生运行:(A) A.var obj = ( ); B.var obj = [ ]; C.var obj = { }; D.var obj = / /; B代表数组,C代表 ...
- web前端整套面试题(二)--今日头条面试题
12道单选,7道不定项选择,2道编程题 一.单选(12题) 1.[单选题]在HTML中,( )可以在网页上通过链接直接打开邮件客户端发送邮件. A.<a href=”telnet:ming.zh ...
- Web前端年后跳槽必看的各种面试题
幸运且光荣的被老大安排了一个任务 - “去整理些前端面试题”.年前确实不是招人的好时候,所以我们前端团队经过了超负荷的运转,终于坚持过了春节.春节以后就开始招人啦,这套题考察的目标就是基础基础再基础, ...
- web前端----JavaScript的DOM(三)
一.JS中for循环遍历测试 for循环遍历有两种 第一种:是有条件的那种,例如 for(var i = 0;i<ele.length;i++){} 第二种:for (var i in l ...
- web前端基础知识-(三)JavaScript基本操作
JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行. JavaScrip ...
- Web前端基础——jQuery(三)
本文主要从以下几方面介绍jQuery应用中的内容: 1 jQuery 节点遍历2 jQuery 中的过滤器3 jQuery 属性操作4 jQuery Dom节点操作5 几个jQuery例子6 jQue ...
- Web前端性能优化的三个偏方
首先牢骚几句...这一次性能优化针对的模块,初次开发阶段客户给的时间就非常少,俩月时间跳过设计一边需求分析一边编码,最后干出6000+的代码行.最终结果嘛,呵呵,除开一堆bug不说,性能就是个非常大的 ...
- Web前端基础(6):CSS(三)
1. 定位 定位有三种:相对定位.绝对定位.固定定位 1.1 相对定位 现象和使用: 1.如果对当前元素仅仅设置了相对定位,那么与标准流的盒子什么区别. 2.设置相对定位之后,我们才可以使用四个方向的 ...
- Web前端2019面试总结3(东软集团面试题)
严禁转载,严禁分享,只供私自鉴赏,请君悉知! 一:基础题 1.什么是margin塌陷?请写出至少三种解决margin塌陷的方法. 答:当两个盒子在垂直方向上设置margin值时,会出现一个有趣的塌陷现 ...
随机推荐
- BW模型数据删除
删除数据一般可以按请求(Request)来删除,需要从顶层模型往下删:也可以完成删除,在模型中就没有删除的顺序.本例中采用完全删除,但是按照从顶层模型往下的顺序删除数据. 1.删除信息立方体数据 ...
- fileupload页面跳转找不到原页面的解决方法
做了个上传图片的功能,之前做的全都对,完全可以实现,但是后来再弄的时候,只要FileUpload控件里面有字(选择了图片),再按button.它尽然不执行button1_click事件,直接页面跳转, ...
- STL容器的resize方法
刚才写DFS程序,为了加个创建DFS树然后再次遍历的功能,把初始化的代码给封装到init()函数里,然后直接调用之后对同样是邻接表表示的DFS树进行DFS. 然后令人诧异的是竟然没有打印结果,调试发现 ...
- 【转】使用JMeter做性能测试的心得
企业应用开发过程中,性能测试是很重要的一个环节,在这个环节中Apache的JMeter以它开源.100%纯Java.操作方便等优点发挥着很大的作用. 经过一段时间的使用,多少有些心得和技巧,拿出来共享 ...
- java web 程序---注册页面密码验证
<%@ page language="java" import="java.util.*" pageEncoding="gb2312" ...
- java代码数组求平均值,最大值,最小值
(测试类) package com.badu; public class Tste { public static void main(String[] args) { Class5 sa=new C ...
- [Java.Web][Servlet]常用请求头
response.setStatus(302); response.setHeader("location", "/day04/1.html"); 这段代码可以 ...
- Java实现HTML转换为PDF的常见方法
最近在自己的项目中需要动态生成融资单合同,这里需要把对应的html转换为对应的pdf融资合同.因此需要通过Java实现将HTML转PDF.自己之前没有接触过这一块的东西,所以上网查了一下,网上有很多的 ...
- git 怎么上传文件到github上
1.安装git sudo apt-get install git 2.配置全局变量 git config --global user.name langhunm git co ...
- Oracle关于date类型数据的总结
往Oracle数据库中插入日期型数据(to_date的用法) INSERT INTO FLOOR VALUES ( to_date ( '2007-12-20 18:31:34' , 'YYY ...