cookie、session、token、jwt的区别
误区纠正 cookie是浏览器的存储机制,应该和localstorage、sessionStorage、indexedDB、webSQL这种对比 session是保存在服务器的一个一组数据(k-v结构),有些网站采取session来用户机制,通常会把sessionID存储在cookie中。此外,session是一个抽象概念,具体实现可以用Redis token和jwt,他们是信息的编码的东西,是信息本身 cookie、session、token本质上是不同维度的东西,token也可以存储在cookie中,也可以存储在浏览器的localStorage中 cookie是存储在client...
TCP流量控制和拥塞控制的区别
流量控制:端到端的控制,目的是放在发送方发送的数据过快,导致接收方处理不过来,通过滑动窗口实现。接收方在ACK报文中告诉自己的接受窗口的大小,这样就告诉了发送方可接受的最大数据量 拥塞控制:网络层面的控制,目的是放在过多的数据包同时在网络中传输,导致网络拥塞。主要通过慢启动、拥塞避免算法、超时重传、快速重传、快速恢复算法实现
TCP和UDP的区别
连接:TCP是面向连接,需要3次握手。UDP不需要 可靠性:TCP会通过超时重传、流量控制、拥塞控制来保证传输的可靠。UDP没有这些保证可靠性 传输方式:TCP的传输是以字节流的形式,没有边界,会有粘包问题。UDP的传输是一个包一个包发送,有边界 TCP优劣势:保证数据的可靠,但是实时性没有UDP好 UDP优劣势:实时性和速度好,但是不可靠
http和https有什么区别
安全性:http是明文传输,数据在传输过程中不加密,容易被窃听和篡改。https通过SSL/TLS来对数据加密 建立链接:http只需要进行TCP三次握手即可建立链接,而https还需要进行SSL/TLS的四次握手 端口号:http默认端口号是80,https是443 证书:https需要通过CA机构申请数字证书来验证服务器的身份
epoll的ET和LT模式
epoll 是 Linux 提供的一种用于处理大规模 I/O 并发的机制,全称是 event poll。它属于 I/O 多路复用技术的一种,旨在高效管理大量的文件描述符(file descriptors, FDs)以及响应各类 I/O 事件 与传统的 select 和 poll 不同,epoll 使用了事件通知的方式,避免了重复遍历文件描述符集合的高开销。epoll 提供了更好的扩展性,适用于处理数以千计的并发连接,因此非常适合在网络服务器等高并发场景下使用 LevelTriggered:简称LT,当FD有数据可读时,会重复通知多次,直至数据处理完成。是epoll的默认模式 EdgeTriggered:简称ET,当FD有数据可读时,只通知一次,不管数据是否处理完成 Level是指信号只需要处于水平,就一直会触发;而edge则是指信号为上升沿或者下降沿时触发。和电路信号有关:水平触发是level trigger 一旦触发就能维持那个level而边缘触发edge trigger...
进程间通信
管道匿名管道「|」ps auxf | grep mysql 上面这种管道是没有名字,所以「|」表示的管道称为匿名管道,用完了就销毁 命名管道(mkfifo)mkfifo myPipe myPipe 就是这个管道的名称,基于 Linux 一切皆文件的理念,所以管道也是以文件的方式存在,我们可以用 ls 看一下,这个文件的类型是 p,也就是 pipe(管道) 的意思 12ls -lprw-r--r--. 1 root root 0 Jul 17 02:45 myPipe 接下来,我们往 myPipe 这个管道写入数据 12echo "hello" > myPipe // 将数据写进管道 // 阻塞... 因为管道里的内容没有被读取,只有当管道里的数据被读完后,命令才可以正常退出 12cat < myPipe //...
进程上下文切换
进程由哪些部分组成?进程上下文又由哪些部分组成?进程的组成 进程控制块(Program control...
Redis缓存场景
介绍旁路缓存和缓存异常的场景 旁路缓存(Cache-Aside)Cache Aside Pattern 中服务端需要同时维系 db 和 cache,并且是以 db 的结果为准 读策略: 从缓存中读取数据;如果缓存命中,则直接返回数据;如果缓存不命中,则从数据库中查询数据;查询到数据后,将数据写入到缓存中,并且返回给用户 写策略: 更新数据库Mysql中的记录,然后删除Redis中的缓存记录 场景: 举个例子,假设某个用户的年龄是 20,请求 A 要更新用户年龄为 21,所以它会删除缓存中的内容。这时,另一个请求 B 要读取这个用户的年龄,它查询缓存发现未命中后,会从数据库中读取到年龄为 20,并且写入到缓存中,然后请求 A 继续更改数据库,将用户的年龄更新为 21。最终,该用户年龄在缓存中是 20(旧值),在数据库中是 21(新值),缓存和数据库的数据不一致 为什么「先更新数据库再删除缓存」不会有数据不一致的问题? 假如某个用户数据在缓存中不存在,请求 A 读取数据时从数据库中查询到年龄为 20,在未写入缓存中时另一个请求 B 更新数据。它更新数据库中的年龄为...
Redis分布式锁
什么是分布式锁分布式锁是实现分布式系统之间共享资源的一种方式 Redis实现分布式锁的要点加锁: 12345set lock_key owner nx px n /* 不能用setnx,因为setnx不能带过期参数 px n 表示设置过期时间是n秒 */ 解锁: 先判断owner是否为加锁客户端,是的话才能将lock_key删除 采用lua脚本让两个操作变成一个原子操作: 123456// 先判断owner是否为加锁客户端if redis.call("get", KEYS[1]) == ARGV[1] then return redis.call("del", KEYS[1]) // 将lock_key删除else return...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment