在银四的期待里,你被问到哪些基础了

121 阅读5分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

金三银四,一转眼就到银四了。经历一番社会毒打后,来总结整理一番,希望在大环境不大好的情况下,我们依然能眼里有光,保持学习的热情,浇灌焦虑的内心。

2022常问基础,整理版

如有解释不当,希望可以留言指正我哦

https

相关提问:了解https吗,为什么https比较安全,https的加密过程

因为http是明文传输,容易被中间商劫持,所以就有了https,https是http+TCL\SSL的加密传输。它是用非对称加密的方式传输通信的key,再用对称加密的方式传输通信的内容。

如果会继续追问https详细加密过程,可以简单这么说

  1. 浏览器和操作系统中,会预先保存认证过的ca证书机构
  2. 浏览器会先用http方式请求(加密过程都是用http)服务器,带上支持的加密算法列表
  3. 服务器会返回使用加密算法,以及一个带有公钥的证书(服务器自身有公钥和私钥)
  4. 浏览器收到后,校验证书(ca证书机构)合法性,然后用公钥加密(非对称)一个随机字符串A(新秘钥),发给服务器
  5. 服务器用私钥解密,得到 字符串A,然后后续服务器传输内容,用此 字符串A作为加密key,使用对称加密传送内容给浏览器
CDN缓存和回源

CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过http响应头中的Cache-control: max-age的字段来设置CDN边缘节点数据缓存时间。当客户端向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。所以,如果我们修改了内容,最好加个版本号,来容CDN重新获取资源,从而减少不必要的麻烦

  • 好处

1、CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低。

2、大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源站的负载,解决网站高流量、大并发的问题。

  • 限制

1、CDN 对于不经常访问的资源是无效的。通常只有在 CDN缓存过期前有至少两次访问的资源才算有效。

2、CDN 对于不断变化的资源不适用。

3、CDN 对于不想公开资源可能是一个糟糕的选择。

缓存

强缓存

1、cache-controls:max-age  资源有效期

2、expires 多久之后过期

3、状态码是200

协商缓存

1、last-modifined: 服务器返回 last-modifined 后浏览器存在 if-modifined-since. 再次请求时把 if-modifined-since 发到服务器,服务器会跟last-modifined做对比,一致的话就返回304告诉浏览器读缓存。

2、ETag: 是文件的哈希值,if-none-match

3、状态码是304

网络安全
  • xss漏洞(cross-site-scripting:跨站脚本攻击):两种表现形式

 1、持久型:发帖子时输入执行代码,每次点击的时候都会执行

 2、输入型:一些搜索接口实现方式是url后带参数,可能就会被带上执行代码

防范:标签过滤,html转义

  • csrf攻击(cross-site-request-forgery:跨站请求伪造)是因为浏览器对cookie的管理机制造成的

防护策略:阻止不明外域的访问。提交时要求附加本域才能获取的信息。

事件循环

js是单线程语言,同步和异步任务分别进入不同的执行环境,同步的进入主执行栈,异步的进入任务队列。主线程内的任务执行完毕为空,会去任务队列读取对应的任务,推入主线程执行。 上述过程的不断重复就是 Event Loop (事件循环),每个宏任务结束后, 都要清空所有的微任务。

宏任务有

  1. script(整体代码)
  2. setTimeout/setInterval
  3. setImmediate
  4. requestAniamationFrame
  5. I/O(文件的读写)
  6. UI render(界面渲染)
  7. Promise
  8. 网络请求 微任务有
  9. process.nextTick(NodeJS)
  10. Promise中的then
  11. Async/Await(实际就是promise)
  12. MutationObserver(html5新特性) -- 监听DOM的变化,包括新增、删除、更新、属性变化等
cookie、localStorage的区别
  • cookie -- 只能存储一些ID之类简单的数据

可设置失效时间,没设置的话,默认是关闭浏览器后失效

大小:4KB

场景:登陆

  • local storage  永久性本地存储

除非被清除,否则永久保存

大小:5M

  • session storage 会话级别本地存储

当前页面会话下有效,页面关闭,数据清空

大小:5M

跨域
  • Jsonp

原理:用script标签请求接口地址,接口返回callback函数,页面事先也定义的此函数

优点:兼容性好

缺点:ie789不支持http的返回头,所以jsonp只能用get方式

  • cors跨域(cross-orgin-resource sharing 跨域资源共享)

原理:浏览器请求头 origin ,接口返回头 Access-Control-Allow-Credentials 一致的话技能进行通信

优点:可以发送任何请求

缺点:当前请求如果是复杂请求的时候得先以option方法发送一个预请求做个预检,再发真实的请求。发送两次请求可能会有性能上的损耗。

只有满足以下全部条件,才不会发起预检:

1、get,post,head 类型请求

2、没有添加自定义请求头

3、content-type 需要是默认的三个(表单提交): application/x-www-form-urlencoded、multipart/form-data、text/plain

还有设置了 content-type: application/json 这种也会 Access-Control-Max-Age: 86400,这个服务器返回的跨域头,可以设置多久时间内,不再预检