总结一下
面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。
还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。
为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。
前端面试题汇总
JavaScript
性能
linux
前端资料汇总
前端工程师岗位缺口一直很大,符合岗位要求的人越来越少,所以学习前端的小伙伴要注意了,一定要把技能学到扎实,做有含金量的项目,这样在找工作的时候无论遇到什么情况,问题都不会大。
-
扩展学习
-
- 本地存储小容量
-
本地存储大容量
-
往返缓存
===================================================================
-
HTTP缓存
-
浏览器缓存
其中 HTTP
缓存是在 HTTP
请求传输时用到的缓存,主要在服务器代码上设置;而浏览器缓存则主要由前端开发在前端 js
上进行设置。
浏览器与服务器通信的方式为应答模式,即是:浏览器发起 HTTP
请求 – 服务器响应该请求。那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中 HTTP
头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中。
-
强制缓存
-
协商缓存(也叫对比缓存)
强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果,强制缓存的情况主要有三种。
① 不存在该缓存结果和缓存标识,强制缓存失效,则直接向服务器发起请求(跟第一次发起请求一致)
② 存在该缓存结果和缓存标识,但该结果已失效,强制缓存失效,则使用协商缓存
③ 存在该缓存结果和缓存标识,且该结果尚未失效,强制缓存生效,直接返回该结果
那么强制缓存的缓存规则是什么?
当浏览器向服务器发起请求时,服务器会将缓存规则放入 HTTP
响应报文的 HTTP
头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是 Expires
和 Cache-Control
,其中 Cache-Control
优先级比 Expires
高。
Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求结果缓存的到期时间,即再次发起该请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。
到了HTTP/1.1,Expire已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,那么如果客户端与服务端的时间因为某些原因(例如时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存则会直接失效,这样的话强制缓存的存在则毫无意义。
在HTTP/1.1中,Cache-Control
是最重要的规则,主要用于控制网页缓存,主要取值为:
-
public:所有内容都将被缓存(客户端和代理服务器都可缓存)
-
private:所有内容只有客户端可以缓存,Cache-Control的默认取值
-
no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
-
no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
-
max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效
那缓存存到哪里了呢?
-
disk cache(硬盘中的缓存)
-
memory cache(内存中的缓存)
浏览器读取缓存的顺序为 memory –> disk –> 服务器请求
。
在缓存领域,还有一个是
service worker
;service worker
是在你手动设置了要缓存哪些文件时才会生效,而且可以离线使用缓存的文件,很厉害的,但是这里我们不做过多讲解。
内存缓存具有两个特点,分别是速度快和时间限制。
硬盘缓存读取速度比内存缓存要慢一些。
那这里就有一个疑问:强制缓存,什么时候存到 memory cache , 什么时候存在 disk cache;存储位置的规则是什么?
几乎所有的网络请求资源都会被浏览器自动加入到 memory cache
中。但是也正因为数量很大但是浏览器占用的内存不能无限扩大这样两个因素,memory cache
注定只能是个“短期存储”。常规情况下,浏览器的 TAB 关闭后该次浏览的 memory cache
便告失效 (为了给其他 TAB 腾出位置)。而如果极端情况下 (例如一个页面的缓存就占用了超级多的内存),那可能在 TAB 没关闭之前,排在前面的缓存就已经失效了。
但如果你真的不想让一个资源进入缓存,就连短期也不行,那就需要使用 no-store
。存在这个头部配置的话,即便是 memory cache
也不会存储,自然也不会从中读取了。
disk cache
会严格根据 HTTP 头信息中的各类字段来判定哪些资源可以缓存,哪些资源不可以缓存;哪些资源是仍然可用的,哪些资源是过时需要重新请求的。当命中缓存之后,浏览器会从硬盘中读取资源,虽然比起从内存中读取慢了一些,但比起网络请求还是快了不少的。绝大部分的缓存都来自 disk cache
。
那协商缓存的缓存规则是什么?
协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,主要有以下两种情况:
① 协商缓存生效,请求返回状态为304,不返回请求结果
② 协商缓存失效,请求返回状态为200和请求结果
协商缓存的标识也是在响应报文的 HTTP
头中和请求结果一起返回给浏览器的,控制协商缓存的字段分别有
Last-Modified / If-Modified-Since
和 Etag / If-None-Match
其中 Etag / If-None-Match
的优先级比 Last-Modified / If-Modified-Since
高。
Last-Modified / If-Modified-Since
Last-Modified
是服务器响应请求时,返回该资源文件在服务器最后被修改的时间。
If-Modified-Since
则是客户端再次发起该请求时,携带上次请求返回的 Last-Modified
值,通过此字段值告诉服务器该资源上次请求返回的最后被修改时间。服务器收到该请求,发现请求头含有 If-Modified-Since
字段,则会根据 If-Modified-Since
的字段值与该资源在服务器的最后被修改时间做对比,若服务器的资源最后被修改时间大于 If-Modified-Since
的字段值,则重新返回资源,状态码为200;否则则返回304,代表资源无更新,可继续使用缓存文件。
Etag / If-None-Match
判断
回到题目,如果你真想检验一个人的水平。第一步先考察一下基本的编程基础,问几个基本的编程问题,可以和前端相关也可以无关。比如垃圾收集大致是怎么做的,setTimeout 大致做了什么(说会在另一个线程里执行回调的直接毙掉)。
第二步考察一下知识面,问问http、tcp的基本知识,dns是怎么工作的,或者常用框架的实现原理,看看候选人是不是除了自己的一亩三分地什么都不关心。
第三步考察hold业务逻辑的能力,从一个简单的注册页,或者查询页开始,先让说下代码的基本架构,然后需求、性能、可靠性、安全层层加码,看看能不能很快的反馈出解决方案。能对答如流的要么做过,要么对他来说这种复杂度的东西是小case。
前三步都没问题,基本上说明候选人已经还行了,但是行到什么程度,不知道。如果想找比较厉害的,就增加个第四步,亮点项目考察。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了,我整理一套前端面试题分享给大家,希望对即将去面试的小伙伴们有帮助!
5ecb71ac0)**
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了,我整理一套前端面试题分享给大家,希望对即将去面试的小伙伴们有帮助!
[外链图片转存中…(img-OiNj9bxH-1715759386863)]
[外链图片转存中…(img-OebQFO5D-1715759386864)]