[关闭]
@anoninz 2018-03-13T01:04:53.000000Z 字数 3849 阅读 825

面试课程笔记

面试 笔记


HTTP 协议类

主要特点:

报文的组成部分

两个部分: 请求报文 响应报文

请求报文:

响应报文 同上

HTTP 方法

GET POST 的区别

HTTP 状态码

持久连接

HTTP 协议采用「请求-应答」模式,普通情况下,每个请求/应答都新建一个连接,完成之后立即断开
Keep-Alive 模式: 1.1 版本 才支持的,使客服端到服务器端的连接持续有效,当出现对服务器的后继请求时,避免了建立或者重新建立连接。

管线化

持久连接的情况下,把请求打包发送过去,响应打包发送回来。
请求1->请求2->请求3
- 仅1.1支持
- GET 和 HEAD 可以管鲜花,POST 有所限制
- 初次连接时不应该应用管线机制,因为服务器不一定支持
- 不会影响响应到来顺序
- 不会带来大幅度的性能提升,chrome firefox 默认不开启管线化支持

原型链类

创建对象的方法

  1. var o1 = {name: 'o1'}
  2. var o2 = new Object({name: 'o2'})
  3. var M = function(name) {this.name = name}
  4. var o2 = new M('o3')
  5. var p = {name: 'p'}
  6. var o4 = Object.create(p)

原型、构造函数、实例、原型链

image.png  -142.7kB

通信类

什么是同源策略及限制

同源策略限制从一个源加载的文档或脚本来自另一个源的资源进行交货。
(同源:同样的端口 协议 域名)
这是一个用于隔离潜在恶意文件的关键的安全机制。

前后端如何通信

如何创建 Ajax

跨域通信的几种方式

JSONP

在 postmessage cors 之前
利用 script 标签的异步加载来实现的
1. 本地注册一个全局函数 callback 回调函数
2. 给服务端传一个 callback 名称,参数
3. 服务器传递回来一个内容 jsonp({data:xxx})
4. script.onload监听标签是否加载完成
5. 结束之后及时溢出 script 的 DOM 对象
6. 删除 callback 函数

Hash

在页面 A 通过 iframe 或者 frame 嵌入一个跨域的页面 B

  1. var B = document.getElementsByTagName('iframe')
  2. B.src = B.src + "#" + 'data';

在 B 中

  1. window.onhashchange = function() {
  2. var data = window.location.hash
  3. // 如果有其他的需要处理
  4. }

postMessage

窗口 A(http://a.com)向跨域的窗口 B(http://B.com)发送消息
Awindow.postMessage('data', 'http://B.com')
在 B 窗口监听

  1. window.addEventListener('message', function(event) {
  2. console.log(event.origin) // https://a.com
  3. console.log(event.source) // Awindow
  4. console.log(event.data) // data
  5. }, false)

WebSocket

  1. var ws = new WebSocket('wss:// a.org')
  2. ws.onopen = function(e) {
  3. console.log('Connection open ...')
  4. ws.send('hello')
  5. }
  6. ws.onmessage = function(e) {
  7. console.log(e.data)
  8. ws.close()
  9. }
  10. ws.onclose = function(e) {
  11. console.log('connection closed')
  12. }

CORS

浏览器会拦截 ajax 请求,如果浏览器认为这是跨域的,会在 HTTP 头中加一个 origin 再发送

  1. fetch('/some/url', {
  2. method: 'get',
  3. }).then((res)=>{
  4. }).catch((err)=>{
  5. })

安全类

CSRF

跨站请求伪造 Cross-site request forgery

攻击原理

image.png-76kB

防御措施

XSS

基本概念

攻击原理

向你页面注入脚本,提交 script 标签,

防御措施

让 xss 注入不可执行

区别

xss 向页面注入 script 标签,在 script 里面做想做的事情
csrf 利用本身的漏洞,自动执行接口,依赖用户需要登录网站

名称 原理 防御措施

算法

排序

堆栈、队列、列表

递归

波兰式和逆波兰式

二面

渲染机制

DOCTYPE

DTD(document type definition,文档类型定义)是一系列的语法规则,用来定义 XML 或者 (X)HTML的文件类型,浏览器会使用它来判断文档类型,决定使用何种协议来解析,以及切换浏览器模式。
DOCTYPE用来生命文档类型和 DTD 协议的,一个主要用途是文件的合法验证,如果不合法,name 浏览器解析时就会出现一些差错。
直接告诉浏览器,当前文档是哪个 DTD。

常见的 DOCTYPE

渲染过程

image.png-144kB

重排

DOM 结构中的各个元素都有自己的盒子模型,这些都需要浏览器根据各种样式来计算并根据计算结果将元素放到它该出现的位置,这个过程叫重排 reflow
触发条件:
- 增加删除修改 DOM 节点时,reflow+repaint
- 移动 DOM 位置,或者做动画的时候
- 修改 CSS 样式的时候
- Resize 窗口的时候,可能会
- 修改网页默认字体的时候

重绘 repaint

当各种盒子的位置、大小、属性(颜色、字体大小)确定下来之后,浏览器于是把这些元素都按照各自的特性绘制一遍,于是内容出现了。这个过程叫 repaint
触发条件:
- DOM 改动
- CSS 改动
如何尽量降低 repaint 频率?
先创建一个片段,然后一并塞进去,最后再加入页面上

JS运行机制

JS 的单线程
任务队列:同步任务队列,异步任务
Event Loop
哪些语句会放入异步任务队列
理解语句放入异步任务队列的时机

页面性能

提升页面性能的方法:
- 资源压缩合并,减少 HTTP 请求
- 非核心代码异步加载 -> 异步加载的方式 -> 异步加载的区别
- 利用浏览器缓存 -> 换准的分类 -> 缓存的原理
- 使用 CDN
- 预解析 DNS

  1. // 强制打开 https 页面的 a 标签预解析
  2. <meta http-equiv="x-dns-prefetch-control" content="on">
  3. // 预解析 DNS
  4. <link rel="dns-prefetch" href="//host_name_to_prefetch.com">

异步加载

  1. 异步加载的方式
    1. 动态脚本加载 js 异步加载
    2. defer
    3. async
  2. 异步加载的区别
    1. defer 是在 HTML 解析完之后才会执行,如果是多个,按照加载的顺序依次执行
    2. async 是在加载完之后立即执行,如果是多个,执行顺序和加载顺序无关

浏览器缓存

  1. 缓存的分类
    image.png-110.8kB

错误监控

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注