目录
  1. 1. node 知识点
    1. 1.1. TODO
    2. 1.2. HTTP/HTTPS
    3. 1.3. 三次握手/四次握手
    4. 1.4. OSI
    5. 1.5. Redis 持久化 persistence
    6. 1.6. HTTPS 加密
    7. 1.7. TCP 和 UDP 的区别
    8. 1.8. 数据库中的四种事务隔离级别
    9. 1.9. commonJS 和 ES6 的引入方式
    10. 1.10. Session & cookie
    11. 1.11. JWT
node知识点

node 知识点

TODO

  1. ALL REDIS

  2. MONGO 分片 master 和 slave

  3. OSI 模型 和数据流程

  4. nodejs 架构

    libuv: 用 c 构造的跨平台异步 I/O 库

    C++ Bindings: 将上层的 js 代码和下层 C/C++类库链桥接,底层模块为了更好的性能,采用 C/C++来实现

  5. require 引用 深层次逻辑

  6. nodejs event loop

  7. 进程和线程

HTTP/HTTPS

HTTP 1.0 HTTP 1.1 HTTP 2.0
无状态 长链接 Keep-Alive 头部压缩
明文传输 对头堵塞 二进制格式
单向请求 数据流
Header 过大 多路复用:一个连接中并发多个请求或回应,而不用按照顺序
服务器推送
HTTP HTTPS
80 443
TCP 三次握手 TPC 3 次+SSL4 次
需要 CA 证书
明文传输 SSL/TLS 安全加密

三次握手/四次握手

  1. ACK —— 确认,使得确认号有效
  2. RST —— 重置连接(经常看到的 reset by peer)就是此字段搞的鬼。
  3. SYN —— 用于初如化一个连接的序列号。
  4. FIN —— 该报文段的发送方已经结束向对方发送数据。
三次握手的意义
1. 确认双方都有接收发送信息的能力
2. 利用数据包的选项来传输特殊的信息
3. 交换初始序列号 ISN(Initial Sequence Number)
四次握手
1. 三次握手是 ack+syn 放在一个报文里面发送的
2. client 的 fin 仅代表 client 不再发送数据
3. server 的 ack => client 的 fin. server 的 fin 还需要上层应用决定
1. client 的发送和 server 的接收能力 正常
2. client 的接收发送和 server 的接收发送 正常
3. client 开始发包, ack 使 确认号有效
每次 ack 都为对方发送的 syn 上+1 每次 ack 都为对方发送的 syn 上+1

OSI

应用/表示/会话 => 传输/网络/数据链路/物理

HTTP 在应用层

TCP,UDP 在传输层

Redis 持久化 persistence

  1. rdb
  2. aof
  3. no
  4. rdb+aof
rdb aof
原理 在额定时间内,新增/修改了多少条数据 根据 query / 时间,记录执行语句
优势 恢复速度快
生成对应不同时间点的多个备份文件
适合冷备
数据恢复全面
生成执行日志
缺点 数据丢失风险 体积大
恢复速度慢

HTTPS 加密

TCP 和 UDP 的区别

tcp upd
三次握手/四次握手 面向无连接
仅支持单播传输 有单播,多播,广播的功能
面向字节流 UDP 是面向报文的
可靠传输 不可靠性
TCP 提供全双工通信 头部开销小,传输数据报文时是很高效的。

数据库中的四种事务隔离级别

  1. Read Uncommitted(未提交读)会出现不可重复读、幻读问题
  2. Read Committed(提交读) 会出现脏读、不可重复读、幻读
  3. Repeatable Read(重复读)会出幻读
  4. Serializable(串行化)保证所有的情况不会发生
  5. Deafult=>Repeatable Read

三种特殊错误

  • 脏读dirty read
    transaction A upsert a document, transaction B read it, if A failed and revert, b got fucked up by an unexsited doc

    特指,transaction A 做到一半还未 commit 导致的错误

  • 不可重复读 unrepeatable read
    transaction A read docs twice while transaction B changed the docs and committed.

    the two reading results are different

  • 幻读 phantom problem
    幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

commonJS 和 ES6 的引入方式

commonJs es6
导出 module.exports /exports
引入 const fs = require(“fs”)
代码运行时同步阻塞性地加载模块 动态 静态
缓存可以解决重复查找和重复执行的问题,有就使用,没有就找然后写入缓存 export 的变量被改动了,会影响 import 的结果
cookie session
大小限制 在 4kb 理论无上限
位置 client server
有安全隐患 相对安全
数据类型 ascii only any

JWT

文章作者: Niko Yu
文章链接: https://www.nikoyu.asia/node%E7%9F%A5%E8%AF%86%E7%82%B9.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Niko Yu Blog
打赏
  • 微信支付
  • 支付宝
  • 私人微信

评论