超详细的前端面经

超级详细的前端面经,参考了很多优质面经,并且系统的整理了,因为自己也要面试,所以整理的很用心。

地址: https://github.com/huyaocode/webKnowledge

我是19年参加的秋招,面经相对来说比较新。我面试成绩也很好:阿里、腾讯、头条、拼多多、360、依图都过了。我的核心就是我整理了这个GitHub项目,这对我的基础有很大帮助,而且很多面试题都有看过。


求star!

举个例子看我写的细不细

### 从输入 URL 到页面加载完成的过程

- 判断是否需要跳转(301)
- 从浏览器中读取缓存
- DNS 解析
- TCP 连接
- HTTP 请求发出
- 服务端处理请求,HTTP 响应返回
- 浏览器拿到响应数据,解析响应内内容,把解析结果展示给用户

1. 在浏览器地址栏输入 URL
2. 判断是否有永久重定向(301)
1. 如果有,直接跳转到对应 URL
3. 浏览器查看资源是否有**强缓存**,有则直接使用,如果是**协商缓存**则需要到服务器进行校验资源是否可用
1. 检验新鲜通常有两个 HTTP 头进行控制`Expires``Cache-Control`
- HTTP1.0 提供 Expires,值为一个绝对时间表示缓存新鲜日期
- HTTP1.1 增加了 Cache-Control: max-age=,值为以秒为单位的最大新鲜时间
4. 浏览器**解析 URL**获取协议,主机,端口,path
5. 浏览器**组装一个 HTTP(GET)请求报文**
6. **DNS 解析**,查找过程如下:
1. 浏览器缓存
2. 本机缓存
3. hosts 文件
4. 路由器缓存
5. ISP DNS 缓存
6. DNS 查询(递归查询 / 迭代查询)
7. **端口建立 TCP 链接**,三次握手如下:
1. 客户端发送一个 TCP 的**SYN=1,Seq=X**的包到服务器端口
2. 服务器发回**SYN=1, ACK=X+1, Seq=Y**的响应包
3. 客户端发送**ACK=Y+1, Seq=Z**
8. TCP 链接建立后**发送 HTTP 请求**
9. 服务器接受请求并解析,将请求转发到服务程序,如虚拟主机使用 HTTP Host 头部判断请求的服务程序
10. 服务器检查**HTTP 请求头是否包含缓存验证信息**如果验证缓存新鲜,返回**304**等对应状态码
11. 处理程序读取完整请求并准备 HTTP 响应,可能需要查询数据库等操作
12. 服务器将**响应报文通过 TCP 连接发送回浏览器**
13. 浏览器接收 HTTP 响应,然后根据情况选择**关闭 TCP 连接或者保留重用,关闭 TCP 连接的四次挥手如下**
1. 主动方发送**Fin=1, Ack=Z, Seq= X**报文
2. 被动方发送**ACK=X+1, Seq=Z**报文
3. 被动方发送**Fin=1, ACK=X, Seq=Y**报文
4. 主动方发送**ACK=Y, Seq=X**报文
14. 浏览器检查响应状态吗:是否为 1XX,3XX, 4XX, 5XX,这些情况处理与 2XX 不同
15. 如果资源可缓存,**进行缓存**
16. 对响应进行**解码**(例如 gzip 压缩)
17. 根据资源类型决定如何处理(假设资源为 HTML 文档)
18. **解析 HTML 文档,构件 DOM 树,下载资源,构造 CSSOM 树,执行 js 脚本**,这些操作没有严格的先后顺序,以下分别解释
19. **构建 DOM 树**
1. **Tokenizing**:根据 HTML 规范将字符流解析为标记
2. **Lexing**:词法分析将标记转换为对象并定义属性和规则
3. **DOM construction**:根据 HTML 标记关系将对象组成 DOM 树
20. 解析过程中遇到图片、样式表、js 文件,**启动下载**
21. 构建**CSSOM 树**
1. **Tokenizing**:字符流转换为标记流
2. **Node**:根据标记创建节点
3. **CSSOM**:节点创建 CSSOM 树
1. 从 DOM 树的根节点遍历所有**可见节点**,不可见节点包括:1)`script`,`meta`这样本身不可见的标签。2)被 css 隐藏的节点,如`display: none`
2. 对每一个可见节点,找到恰当的 CSSOM 规则并应用
3. 发布可视节点的内容和计算样式
23. **js 解析如下**
1. 浏览器创建 Document 对象并解析 HTML,将解析到的元素和文本节点添加到文档中,此时**document.readystate 为 loading**
2. HTML 解析器遇到**没有 async 和 defer 的 script 时**,将他们添加到文档中,然后执行行内或外部脚本。这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停。这样就可以用 document.write()把文本插入到输入流中。**同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作 script 和他们之前的文档内容**
3. 当解析器遇到设置了**async**属性的 script 时,开始下载脚本并继续解析文档。脚本会在它**下载完成后尽快执行**,但是**解析器不会停下来等它下载**。异步脚本**禁止使用 document.write()**,它们可以访问自己 script 和之前的文档元素
4. 当文档完成解析,document.readState 变成 interactive
5. 所有**defer**脚本会**按照在文档出现的顺序执行**,延迟脚本**能访问完整文档树**,禁止使用 document.write()
6. 浏览器**在 Document 对象上触发 DOMContentLoaded 事件**
7. 此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些**内容完成载入并且所有异步脚本完成载入和执行**,document.readState 变为 complete,window 触发 load 事件
24. **显示页面**(HTML 解析过程中会逐步显示页面)

内容真的太多了,我随便贴一点出来是看不完的。看看目录:

目录如下:

│  前端成长.md
│  前端资源汇总.md
│  概念.md

├─CSS
│  │  CSS选择器.md
│  │  README.md
│  │  其他题目.md
│  │
│  ├─动画
│  │
│  ├─居中元素
│  │  │  README.md
│  │  ├─垂直居中
│  │  └─水平居中
│  │
│  └─布局
│          BFC两栏布局.html
│          README.md
│          三栏-flex.html
│          三栏-浮动方案.html
│          三栏-绝对定位.html
│          三栏-网格布局.html
│          三栏-表格布局.html
│          双飞翼布局.html
│          圣杯布局.html
|
├─JS基础
│      BOM.md
│      DOM.md
│      ES6.md
│      node事件轮询.md
│      README.md
│      ServiceWorker.md
│      this.md
│      事件.md
│      事件轮询机制.md
│      事件队列.md
│      作用域.md
│      全局内置对象.md
│      其他题目.md
│      函数.md
│      原型链与继承.md
│      变量类型和类型转换.md
│      垃圾回收与内存泄露和优化.md
│      正则.md

├─NodeJS
│  │  npm.md
│  │  README.md
│  │  异步IO.md
│  │  模块机制.md
│  │
│  └─核心模块
│          path.md
│          process.md

├─React
│  │  react-router.md
│  │  react-script.md
│  │  React与Vue区别.md
│  │  React中性能优化.md
│  │  README.md
│  │  Redux.md
│  │  setState.md
│  │
│  ├─Hooks
│  │  │  README.md
│  │  │  常用hooks.md
│  │  │  自定义Hooks.md
│  │  │
│  │  └─组件复用例子
│  │          class.jsx
│  │          HOC.jsx
│  │          hooks.jsx
│  │          render-props.jsx
│  │
│  └─基础
│          context.md
│          Hooks.md
│          lazy与suspense.md
│          memo.md
│          PureComponent与Component区别.md
│          VDOM.md
│          高阶组件.md

├─TypeScript
│      interface与type.md
│      README.md
│      TS中类.md
│      接口.md
│      类型.md

├─Vue
│      README.md

├─webpack
│      loader.md
│      package-lock.json.md
│      plugins.md
│      README.md
│      sourcemap.md
│      webpack配置文件.md
│      安装.md
│      模块化.md

├─Web安全
│      CSRF.md
│      README.md
│      SQL注入.md
│      XSS.md

├─其他
│      hybird.md
│      正则.md
│      错误监控.md

├─工具插件
│      README.md
│      规范风格.md

├─性能优化
│  │  CDN.md
│  │  README.md
│  │  SEO.md
│  │  webpack中优化.md
│  │  性能测试.md
│  │  浏览器渲染.md
│  │  编写高性能的Javascript.md
│  │  网络优化.md
│  │  雅虎军规.md
│  │
│  └─testDemo
│      │  opentime-1.html
│      │  opentime-2.html
│      │
│      └─slowServer
│              index.js
│              js-bottom.html
│              js-header.html
│              slow.js

├─操作系统
│      README.md
│      死锁与银行家算法.md
│      进程与线程.md

├─算法
│  │  排序算法.md
│  │
│  └─树的遍历
│          广度优先遍历.js
│          深度优先遍历.js

├─编程题与分析题
│      bind、apply实现.md
│      compose.md
│      debounce-demo.js
│      deepCopy.js
│      name的值是多少.md
│      promise.js
│      PromiseAll.md
│      README.md
│      reduce实现map.md
│      reduce案例.js
│      this指向.md
│      两任务并行.md
│      以下代码输出值.md
│      作用域.md
│      使用Promise封装一个AJAX.md
│      实现flatten函数.md
│      实现一个sleep函数.md
│      尽早按序打印Ajax请求.js
│      异步编程.md
│      手写Promise.md
│      柯里化.md
│      深浅拷贝.md
│      类型判断.md
│      观察者模式.md
│      闭包.md
│      防抖节流.md

├─网络
│      Ajax.md
│      CDN.md
│      cookie和session.md
│      HTTP.md
│      HTTPS.md
│      nginx.md
│      README.md
│      RESTful.md
│      TCP.md
│      UDP.md
│      从输入URL到页面加载完成的过程.md
│      缓存.md
│      跨域.md

└─面试



加油,好好复习。到时候找我内推,我帮你修改简历后内推 、写推荐语(自己编辑好发给我) 、 内推并保持联系与你的联系。

# [关于内推你需要知道的事情](https://github.com/huyaocode/webKnowledge/issues/8)

为什么要内推?

找到熟悉 / 可靠的人去帮你内推,然后与他保持联系。你可以知道更多信息,比如:

  • 查看面试进度信息

    • 简历挂没挂?有没有把你晾在一边不管?你可知道?
    • 内推人可直接帮你查看面试进度信息
  • 填写推荐语

    • 好的推荐语可以让你脱颖而出。HR是很忙的,好的简历多的是,万一他没发现你简历中的亮点把你挂了呢
  • 特殊情况紧急联系

    • 有一次我面试,A公司发了offer之后需要在几天内签约,快到期了。但是 B 公司还在面试中,B公司更好。我需要联系B公司为我加速面试流程。那次我还好好不容易联系上了,B给我一天内面了终面并保证了我的结果,最后我签了B的offer,并且可以放心大胆的放弃Aoffer。
  • 处理速度更快

为什么少在牛客网,BOSS直聘等招聘平台或信息平台上面投递简历?

  • 牛客网
    • 牛客的讨论区被各种内推塞的满满的,热门的帖子你敢投吗? 一个部门被很多人投递,你岂不是在自找难度?
    • 有骗简历的风险
    • 投了基本无法联系上,比如我在为什么要找内推里说的那些,你办不到
    • 说海量 HC 可能只是招聘方需要海量备胎。问问内推人简历是不是太多,如果是,换一个部门。
  • BOSS 与 拉钩 等招聘平台
    • 投了难以联系上,而且处理速度比内推慢
    • 如果有给你发消息说看中你简历的,基本不用理会(除非你是大佬)。给你发消息的多数是机器人,你给他发了简历之后他会给你内推,但是不会管你。我是亲眼见过BOSS上用机器人发消息的。 简历是很多的,HR处理给他发简历的都来不及。还有就是程序员那种,程序员天天加班没时间来给你看,对方是程序员的话很可能他就是用的爬虫。(当然也不绝对都是机器人,你自己看得出来就好)

到底怎么内推?

  1. 首选熟人内推,保证联系上那种
  2. 你觉得靠谱的人内推

我靠谱不?

靠谱,我们内推是任务,我当工作来完成

如何联系我?

我的微信: purple12369


#面经分享##面经##秋招##前端#
全部评论
顶!
1 回复 分享
发布于 2020-07-24 19:29
关于内推你需要知道的事情: https://github.com/huyaocode/webKnowledge/issues/8
点赞 回复 分享
发布于 2020-07-19 19:58
哪个公司
点赞 回复 分享
发布于 2020-07-19 21:49
老哥稳
点赞 回复 分享
发布于 2020-07-20 09:57
谢谢up,等我闭关修炼完了找你内推
点赞 回复 分享
发布于 2020-07-24 22:06

相关推荐

11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
10-28 15:45
门头沟学院 C++
西南山:海康威视之前不是大规模裁员吗
点赞 评论 收藏
分享
12 105 评论
分享
牛客网
牛客企业服务