您的位置:首页 > 职场人生

【备战秋招Day 5】经典面试题17-20及在线编程题13-15答案

2017-07-20 22:41 387 查看
转载IMWeb团队,知乎地址:https://zhuanlan.zhihu.com/p/27922337

经典面试题

17.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

分为4个步骤:

(1),当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址。

(2), 浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。

(3),一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应。

(4),此时,Web服务器提供资源服务,客户端开始下载资源。

18.HTTP状态码

100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息

200 OK 正常返回信息

201 Created 请求成功并且服务器创建了新的资源

202 Accepted 服务器已接受请求,但尚未处理

301 Moved Permanently 请求的网页已永久移动到新位置。

302 Found 临时性重定向。

303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。

304 Not Modified 自从上次请求后,请求的网页未修改过。

400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。

401 Unauthorized 请求未授权。

403 Forbidden 禁止访问。

404 Not Found 找不到如何与 URI 相匹配的资源。

500 Internal Server Error 最常见的服务器端错误。

503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

19.请解释一下 JavaScript 的同源策略。

概念:同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。指一段脚本只能读取来自同一来源的窗口和文档的属性。

20 .GET和POST的区别,何时使用POST?

GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符

POST:一般用于修改服务器上的资源,对所发送的信息没有限制。

GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。

然而,在以下情况中,请使用 POST 请求:

无法使用缓存文件(更新服务器上的文件或数据库)

向服务器发送大量数据(POST 没有数据量限制)

发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠。

前端思考题

9.ajax请求的时候get 和post方式的区别是什么?

区别在:

一个在url后面,一个放在虚拟载体里面

有大小限制

安全问题

应用不同:一个是论坛等只需要请求的,一个是类似修改密码的。

10. Web前端密码加密是否有意义?(既然前端代码都是直接可以看到的,那加密是否还有意义?)

我总结一下,首先大家都知道走 HTTPS 才是目前唯一负责的方式。但在 HTTP 环境下,无论如何都可能会被劫持流量,不管前端做不做加密都会被轻易成功登录。这个时候保护密码明文是否有意义?有人站队前端加密无意义,考虑的是这个加密对本站的安全性没有任何提升;但如果你是从保护用户的角度出发,用户多站点共享密码是现状,你在没法改变这一点的情况下,如果能够保护密码明文,至少降低了一点该用户其他网站(即使是 HTTPS 的网站)被一锅端的风险。这怎么能说完全没有意义?有人说 HTTP 流量可以直接注入脚本,直接拿到用户输入的密码,这没错。但是注入脚本就是代价,只要能够提高一点点门槛就不能说没有意义,很多时候是这些收益和成本之间的权衡。

在线编程题

13.避免全局变量

要求:给定的 js 代码中存在全局变量,请修复:

思路:在Javascript语言中,声明变量使用的都是关键字var,如果不使用var而直接声明变量,则该变量为全局变量。

function globals() {
//只需要在声明myObject时加上var就行了
var myObject = {
name : 'Jory'
};

return myObject;
}


14.将字符串转换为驼峰格式

要求:修改 js 代码中 parseInt 的调用方式,使之通过全部测试用例。

parseInt(string, radix)

//当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

思路:举例,如果 string 以 “0x” 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

function parse2Int(num)
{
return parseInt(num,10);
}
//解释来自于W3school


15.计时器

要求:实现一个打点计时器,要求:

1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1;

2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作;

3、第一个数需要立即输出。

思路:setInterval() 方法会按照指定周期不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。注意第一个数需要立即输出即可。

function count(start, end) {
//立即输出第一个值
console.log(start++);
var timer = setInterval(function(){
if(start <= end){
console.log(start++);
}else{
clearInterval(timer);
}
},100);
//返回一个对象
return {
cancel : function(){
clearInterval(timer);
}
};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: