audition-faq
遵循直觉索引,看到问题的第一时间
如果是能精确分类的问题,应该放到具体的知识点下,作为注意、作为练习题
如果是无法精确分类的,涉及到多个知识点的,优先放到对应大类的 faq 文件下
如果是面试才会遇到的疑难杂症,则放到面试 faq 文件下
每个 faq 的 section 都记录 review time
牛客网平台操作手册
综合题 (典中典问题)
八股和场景设计题可以看下极客时间,总结的比较全面和深入,能覆盖绝大多数面试八股。算法基本都是高频 leetcode 原题,刷高频 100 基本够用了,简单的 dfs 考的比较多。项目自圆其说吧,可能会问一些项目现存的问题和你对这些问题的思考。
如何优化 FMP
变体: 页面卡顿问题如何分析解决
一个列表,假设有 100000 个数据,这个该怎么办
我们需要思考的问题:该处理是否必须同步完成?数据是否必须按顺序完成?
解决办法:
(1)将数据分页,利用分页的原理,每次服务器端只返回一定数目的数据,浏览器每次只对一部分进行加载。
(2)使用懒加载的方法,每次加载一部分数据,其余数据当需要使用时再去加载。
(3)使用数组分块技术,基本思路是为要处理的项目创建一个队列,然后设置定时器每过一段时间取出一部分数据,然后再使用定时器取出下一个要处理的项目进行处理,接着再设置另一个定时器。
当你在浏览器中输入 Google.com 并且按下回车之后发生了什么
当你在浏览器中输入 Google.com 并且按下回车之后发生了什么;;
*1. 浏览器查找域名的 IP 地址
首先会对 URL 进行解析,分析所需要使用的传输协议和请求的资源的路径。如果输入的 URL 中的协议或者主机名不合法, 将会把地址栏中输入的内容传递给搜索引擎。如果没有问题,浏览器会检查 URL 中是否出现了非法字符,如果存在非法字符,则对非法字符进行转义后再进行下一过程。
浏览器会判断所请求的资源是否在缓存里,如果请求的资源在缓存里并且没有失效,那么就直接使用,否则向服务器发起新的请求。
请求一旦发起,浏览器首先要做的事情就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。
如果没有则向本地 DNS 服务器发起请求。本地 DNS 服务器也会先检查是否存在缓存,如果没有就会先向根域名服务器发起请求,获得负责的顶级域名服务器的地址后,再向顶级域名服务器请求,然后获得负责的权威域名服务器的地址后,再向权威域名服务器发起请求,最终获得域名的 IP 地址后,本地 DNS 服务器再将这个 IP 地址返回给请求的用户。还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问
用户向本地 DNS 服务器发起请求属于递归请求,本地 DNS 服务器向各级域名服务器发起请求属于迭代请求。
*2. 数据传输依赖主机的 MAC 地址
当浏览器得到 IP 地址后,数据传输还需要知道目的主机 MAC 地址
- 因为应用层下发数据给传输层,TCP 协议会指定源端口号和目的端口号,然后下发给网络层。
- 网络层会将本机地址作为源地址,获取的 IP 地址作为目的地址。然后将下发给 数据链路层
- 数据链路层的发送需要加入通信双方的 MAC 地址
我们本机的 MAC 地址作为源 MAC 地址,目的 MAC 地 址需要分情况处理:
- 通过将 IP 地址与我们本机的子网掩码相与,我们可以判断我们是否与请求主机在同一个子网里,如果 在同一个子网里,我们可以使用 APR 协议获取到目的主机的 MAC 地址
- 如果我们不在一个子网里,那么我们的请求应该转发给我们的网关,由它代为转发,此时同样可以通过 ARP 协议来获取网关的 MAC 地址,此时目的主机的 MAC 地址应该为网关的地址。
3. Nginx 代理
一些大一点的网站会将你的请求到反向代理服务器中,因为当网站访问量非常大,网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。
此时,客户端不是直接通过 HTTP 协议访问某网站应用服务器,而是先请求到 Nginx,Nginx 再请求应用服务器,然后将结果返回给客户端,这里 Nginx 的作用是反向代理服务器。同时也带来了一个好处,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。
服务器给浏览器响应一个 301 永久重定向响应,这样浏览器就会访问
http://www.google.com/
而非http://google.com/
为什么服务器一定要重定向而不是直接发送用户想看的网页内容呢?其中一个原因跟搜索引擎排名有关。如果一个页面有两个地址,就像
http://www.yy.com/
和http://yy.com/
,搜索引擎会认为它们是两个网站,结果造成每个搜索链接都减少从而降低排名。而搜索引擎知道 301 永久重定向是什么意思,这样就会把访问带 www 的和不带 www 的地址归到同一个网站排名下。还有就是用不同的地址会造成缓存友好性变差,当一个页面有好几个名字时,它可能会在缓存里出现好几次。
4. 建立 TCP 连接
5. HTTPS 的 TLS 握手
6. 浏览器发送 HTTP 请求
- 请求方法 URI 协议/版本
- 请求头 (Request Header)
- 请求正文
7. 服务器响应
当通过 Nginx 的反向代理,我们到达了 web 服务器,服务器端会返回一个 html 文件作为响应,浏览器接收到响应后,开始对 html 文件进行解析,开始页面的渲染过程。
8. 浏览器解析 HTML
浏览器首先会根据 html 文件构建 DOM 树,根据解析到的 css 文件构建 CSSOM 树,如果遇到 script 标签,则判端是否含有 defer 或者 async 属性,要不然 script 的加载和执行会造成页面的渲染的阻塞。当 DOM 树和 CSSOM 树建立好后,根据它们来构建渲染树。渲染树构建好后,会根据渲染树来进行布局。布局完成后,最后使用浏览器的 UI 接口对页面进行绘制。这个时候整个页面就显示出来了。
在浏览器显示 HTML 时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。比如我要获取外图片,CSS,JS 文件等
这些地址都要经历一个和 HTML 读取类似的过程。所以浏览器会在 DNS 中查找这些域名,发送请求,重定向等等…
不像动态页面,静态文件会允许浏览器对其进行缓存。有的文件可能会不需要与服务器通讯,而从缓存中直接读取,或者可以放到 CDN 中
融入 SSR 的过程
9. TCP 四次挥手 断开连接
最后一步是 TCP 断开连接的四次挥手过程。
开放性题目
需要提前准备一下, 类似与项目中难点
怎么主动去学习前端技术
线上问题的排查思路
本地是否复现、二分法排除、回捞日志: 用户行为日志、框架运行时日志、js error 监控
提问环节
https://juejin.cn/post/7266721485811925033?searchId=202308161924539466393124BCED84D3C5
代码提交规范,代码规范是什么,有没有自动化工具,有没有规范文档。提交规范是什么,有没有文档和特殊要求,分支如何管理。为什么要列这一条,是因为我有一个朋友的公司要求一个需求必须提若干个 PR
,每个 PR
必须包含若干个 commit
,同时每个 PR
的代码总数不能超过五百行。Code Review
到无所谓,毕竟自己写的代码自己有义务改到最好,但是每天除了写代码,大多的时间都用在怎么拆分 commit
和 PR
上面了就很没必要了。
迭代,这一条要问清楚开发任务是如何迭代的,几周一个迭代,如何发版,需求如何下发到开发手上,工期是不是由自己评估,如果干不完如何处理延期,需求变动是延长工期还是放入下个迭代还是硬塞给你。我有一个朋友的公司就是那种最开始的任务估三天时间,然后在这三天里各种加需求,改设计图,然后工期不变,导致最后不得不加班,还是义务加班。
与后端沟通,开发中是如何跟后端沟通的,接口是提前出,还是跟前端同步出,如果是同步的话,联调单独计算工期还是算在前端开发工期里,这一条我现在公司就挺好的,页面开发时间和联调时间分开的。
代码质量,这个要问测试流程,有几轮测试,如何测试,对 bug
数有没有要求,bug
流转规范,我上家公司就没有这个要求,只要保证最后上线日没有 bug
就行,所以开发和测试相处的还算愉快,现在这个公司要求两周不能超过三个 bug
,不然就会影响绩效,所以经常看见开发,测试,产品,设计在一块争论这是不是 bug
,什么原因引起的,这个 bug
该给谁,这也是我不喜欢的一个点。
后续上手, 如何保证快速上手. 文档这一块是否重视? 用的什么知识库工具? 飞书、语雀?
大量在招人, 是有哪些新的工作量缺人吗? 规划
问一问前端基建
问一问单测和 ts 的权衡