消息队列八股文消息队列基础为什么要使用消息队列?消息队列主要解决三个问题:异步、解耦、削峰。 异步 如果没有消息队列,一个请求中可能需要同步执行很多操作: 1创建订单 -> 扣库存 -> 发短信 -> 发邮件 -> 写日志 -> 返回响应 如果每一步都同步执行,接口响应时间会很长。 使用消息队列后,可以把非核心逻辑异步化: 12345创建订单 -> 扣库存 -> 投递消息 -> 返回响应 | -> 发短信 ->
计网八股文应用层HTTP基础HTTP(超文本传输协议 HyperText Transfer Protocol)是应用层协议,主要用于客户端与服务端之间的数据传输 HTTP默认使用80端口 特点: 基于请求 - 响应模型:客户端发起请求,服务端返回响应 无状态:HTTP协议本身不会记住两次请求是否来自同一个用户 明文传输:HTTP本身不加密,HTTPS才会加密 基于TCP:HTTP/1、HTTP/2基于TCP(HTTP/3基于QUIC) HTTP请求报文结构: 1234请求行请求头// 空行请求体 例如: 123456GET /user?id=1 HTTP/1
Golang手撕笔记字符串操作由于字符串是不可变的,所以结果一般返回新字符串 strings.TrimSpcace(s string) string 去除字符串s的首尾空白字符(空格 / 换行符 / 制表符 / 回车) strings.Trim(s string, cutset string) string 去除字符串s中cutset里含有的字符,注意cutset字符串要看作一个字符集合,而不是一个整体 123s := "abbaccahello"str := strings.Trim(s, "abc")fmt.Prin
OS八股文操作系统基础用户态和内核态操作系统有两种状态:用户态和内核态;操作系统需要让应用程序运行,但又需要防止应用程序随便修改内存 / 杀死进程等,因此区分了两种状态,目的是保护操作系统的安全 用户态: 用户应用程序运行的状态。用户态的权限受限,不能直接操作硬件,也不能直接访问其他进程的内存和操作系统的内存 内核态: 操作系统内核运行的状态。内核态拥有最高权限,可以操作硬件,访问所有内存,可以进行进程调度,内存管理等 系统调用系统调用是指用户应用程序请求调用操作系统内核的接口 典型的系统调用有: 功能 接口 文件读写 read / write 网络通信 s
Redis八股文数据结构String类型最基础、最常用,key - value 底层: int:整数存int类型,省空间 embstr:短字符串 raw:长字符串 embstr和raw底层都会使用SDS来保存值,区别在于embstr只分配一次连续内存来保存redisObject和SDS;而raw会分配两次内存分别给redsObject和SDS 原因是embstr通常用于存储短字符串,而且是只读的,如果需要修改,redis会将其转化为raw类型再修改。因为如果字符串发生修改需要扩容,再用embstr就会导致redisObject和SDS整个内存都需要重新分配,因此长字符串通常用raw
MySQL八股文锁mysql的锁可分为全局锁、表级锁、行级锁三类: 全局锁 表级锁 表锁 元数据锁 意向锁 自增锁(AUTO-INC Lock) 行级锁 记录锁 间隙锁 临键锁(Next-Key Lock) 插入意向锁 (ps:这些锁按照加锁方式来分,可分为共享锁和排他锁) 全局锁对整个数据库实例加锁,使整个数据库只读,通常用于全库备份 表级锁 表锁:锁住整张表,分为表读锁和表写锁,阻塞其他线程对该表的读写操作,早期MyISAM存储引擎默认使用,操作简单但并发性能低 元数据锁:当我们对数据库表进行操作时,会自动给这张表加元数据锁。为了保护表结构等元数据,避免CRUD操作与DDL语
Golang八股文协程是什么协程是一种轻量级用户态线程,不由操作系统的内核管理,协程的创建和调度完全由 Go 调度器管理 GMP 模型GMP 指 Go 运行时系统的三个组件:Goroutine、Machine、Processor Goroutine:go 实现的协程,goroutine 最终要放在 M 上执行 Machine:操作系统的线程,M 必须和 P 绑定后才能执行 goroutine Processor:goroutine 的调度上下文,管理着一组 goroutine 队列,会对队列做一些调度:比如把占用 CPU 时间过长的 goroutine 暂停,运行后续 goroutine;如
raft共识性算法-Part.1最近在做 MIT 6.824 的 lab,其中 lab3 要求我们基于给出的代码框架,实现自己的 raft 算法。做该 lab 的时候遇到了不少困难,这是一个相当有趣又充满挑战的任务,有些地方必须要反复阅读论文并揣摩其中的意思才能理解。 如果你也在做这个 lab,不建议用 AI 逃课,论文中的 Part5 是必须要读的,否则实现代码的时候思路会很混乱。 论文连接:https://raft.github.io/raft.pdf 本篇文章主要聚焦于论文的第五部分,也就是 raft 算法的核心实现部分给出个人的理解。 The Raft consensus algori
Linux-Part.2Linux 总是无处不在的,或许我对他并不陌生,但从未系统学习过,这篇文章将记录我系统学习 Linux 的过程经历,遇到的问题,总结的笔记,便于我留存记录,也供大家参考学习 学习路线可参考:https://labex.io/zh/linuxjourney 设备 /dev 目录 在 Linux 中,连接到系统的各种硬件设备(键盘、硬盘等),都由一个特殊文件表示,这些文件被称为设备文件,位于 /dev 目录下,可以使用正常的标准命令来和这些文件进行交互 1ls /dev 这将显示许多条目,每个条目对应一个硬件设备或者虚拟设备,例如我们之前已经与 /dev/null 这个虚