谈一谈 cookie

本文讨论了HTTP无状态特性及其解决方案Cookie,包括Cookie的工作原理、设置与安全。此外,还涉及了缓存的强缓存与协商缓存机制,以及Session的安全优势。同时,深入讲解了Node.js中的模块化,尤其是module.exports与exports的区别。最后提到了Node.js的轮询机制和微任务、宏任务的概念。
摘要由CSDN通过智能技术生成

nodejs 模块化的暴露和引入

  1. 暴露:使用 module.exports.XXX=XXX: 给暴露的对象扩展一个XXX方法。

    使用:

    • module.exports = XXX:暴露的直接就是XXX方法。
    • exports.XXX = XXX: 给暴露的对象扩展一个XXX方法。
    • exports = XXX: 错误方法不能写。
  2. 引入:使用require方法引入即可,如果引入的是自定义模块,则方法的参数是模块路径。

谈一谈 cookie

  1. “HTTP 是一个无状态的协议”: 即使同一个客户端连续两次发送请求给服务器,服务器也识别不出这是同一个客户端发送的请求。为了解决 HTTP 无状态导致的问题,后来出现了 Cookie。
  2. Cookie 指某些网站为了辨别用户身份而储存在用户本地终端上的数据。
  3. Cookie 作为一段一般不超过 4KB 的小型文本数据,它由一个名称(Name)、一个值(Value)和其它几个用于控制 Cookie 有效期、安全性、使用范围的可选属性组成。
  4. Cookie 的设置:
    1. 客户端发送 HTTP 请求到服务器。
    2. 当服务器收到 HTTP 请求时,在响应头里面添加一个 Set-Cookie 字段。
    3. 浏览器收到响应后保存下 Cookie。
    4. 之后对该服务器每一次请求中都通过 Cookie 字段将 Cookie 信息发送给服务器。
  5. 一些设置:
    1. Expires 用于设置 Cookie 的过期时间。
    2. Max-Age 用于设置在 Cookie 失效之前需要经过的秒数。
    3. HTTPOnly:设置 HTTPOnly 属性可以防止客户端脚本通过 document.cookie 等方式访问 Cookie,有助于避免 XSS 攻击。

谈一谈 缓存

  1. 缓存是性能优化中简单高效的一种优化方式。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。
  2. 缓存分为强缓存和协商缓存:
    1. 强缓存:不会向服务器发送请求,直接从缓存中读取资源,并且显示from disk cache 或 from memory cache 字样,强缓存可以通过设置两种 HTTP Header 实现:Expires 和 Cache-Control。
    2. 协商缓存:协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程。

谈一谈 session

  1. 因为 Cookie 可以通过客户端修改,而 Session 只能在服务端设置,所以安全性比 Cookie 高,一般会用于验证用户登录状态。
  2. Session 是基于 Cookie 实现的另一种记录服务端和客户端会话状态的机制。
  3. Session 是存储在服务端,而 SessionId 会被存储在客户端的 Cookie 中。

分析 module.exports 和 exports 的区别

  1. 模块真正暴露出来的是 module.exports 指向的对象,module.exports 指向的对象可以随意修改。
  2. exports 指向的是最 module.exports 对象,可以直接给 exports 扩展属性和方法,但是如果修改了 exports 对象的指向(exports = XXX),则 exports 指向的就不是暴露的对象了,就不能暴露了。

nodejs 轮询机制

  1. nodeJS 使用了第三方库 libuv,nodeJS 会把一些异步操作(I/O、文件的读写)交给 libuv 处理。nodejs 的主线程没有必要等待,可以继续处理其他事情。
  2. libuv 会开启多个线程去执行这些异步操作,当异步代码操作完毕以后,会把回调函数放到回调队列中,主线程在适当的时候回去轮询回调队列。
  3. nodeJs 把异步代码分为了两大类,分别是微任务和宏任务。微任务优先宏任务执行。
  4. 宏任务也是根据异步代码不同,而产生多种回调队列,nodejs 会依次轮询这几个回调队列:timers、pendding callback、idle、poll、check、close:
    1. timers 阶段:处理setTimeout和setInterval的回调函数。
    2. pedding 阶段:处理系统级别操作的回调函数。
    3. idle 阶段:处理 nodejs 内部的回调函数。
    4. poll 阶段:处理 I/O 或者网络请求等异步操作的回调函数:
      • 当 poll 阶段不为空的时候,那么执行完回调函数,就继续执行下个阶段 check 了。
      • 当 poll 阶段为空,会一直等待 poll 中有其他的回调函数。
      • 或者当 poll 阶段为空的时候,如果 timer 阶段的计时器到期了,或者 check 阶段有 setImmediate 等待执行的时候,会直接跳入 check 阶段。
      • check 阶段:setImmediate 的回调函数。
      • close 阶段:执行一些关闭的函数。

微任务和宏任务

  1. nodejs 把所有的异步操作代码分为了微任务代码和宏任务代码。
  2. nodejs 会优先执行微任务代码,然后才执行宏任务代码。
  3. 微任务:process.nextTick,Promise 的 then\catch\finally、queueMicrotask。
  4. process.nextTick 一定是最先执行,其他微任务根据书写代码依次执行。
  5. 在宏任务每次执行下一个阶段之前,都会去检查微任务队列中是否有微任务需要执行,然后才会执行下一个阶段。

高频面试题

点我查看:前端高频面试题链接

此链接为 CSDN 内部链接,我收集整理的一些经常会问到的前端面试题,希望能对您所有帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值