适合人群:计算机相关专业在校生、转入互联网开发、转后台开发岗位、有C/C++基础、底层原理理解不够深入。
内容:强化理论知识,并以项目运用,项目实现为主导来教学,1对1学习计划,简历书写/面试复盘指导。
【2024|第15代版本Linux C/C++全栈开发合集(职场常用/面试常问技术点+项目实战)】
目录
数据结构与算法
1.红黑树
- 红黑树的应用场景,进程调度
cfs
, 内存管理 - 红黑树的数学证明与推导
- 手撕红黑树的左旋与右旋
- .红黑树添加的实现与添加三种情况的证明
- 红黑树删除的实现与删除四种情况的证明
- 红黑树的线程安全的做法
- 分析红黑树工程实用的特点
2.B树与B+树
- 磁盘结构分析与数据存储原理
- 多叉树的运用以及B树的定义证明
- B树插入的两种分裂
- B树删除的前后借位与节点合并
- 手撕B树的插入,删除,遍历,查找
- B+树的定义与实现
- B+树叶子节点的前后指针
- B+树的应用场景与实用特点
- B+树的线程安全做法
3. Hash
与BloomFilter
,bitmap
hash
的原理与hash
函数的实现hash
的应用场景- 分布式
hash
的实现原理 - 海量数据去重布隆过滤器
- 布隆过滤的数学推导与证明
设计模式
1.创建型设计模式
- 单例模式
- 策略模式
- 观察者模式
- 工厂方法模式与抽象工厂模式
- 原型模式
2.结构型设计模式
- 适配器模式
- 代理模式
- 责任链模式
- 状态模式
- 桥接模式
- 组合模式
c++新特性
1.STL容器,智能指针,正则表达式
unordered_map
- STL容器
hash
的用法与原理shared_ptr
,unique_ptr
basic_regex
,sub_match
- 函数对象模板
function
,bind
2.新特性的线程,协程,原子操作,lamda
表达式
atomic
的用法与原理thread_ local
与condition_ variable
- 异常处理
exception_ ptr
- 错误处理
error_ category
coroutine
的用法与原理
Linux工程管理
1.Makefile/cmake/configure
- Makefile的规则与make的工作原理
- 单文件编译与多文件编译
- Makefile的参数传递
- 多目录文件夹递归编译与嵌套执行make
- Makefile的通配符,伪目标,文件搜索
- Makefile的操作函数与特殊语法
- configure生成makefile的原则
- cmake的写法
2.分布式版本控制git
- git的工作流程
- 创建操作与基本操作
- 分支管理,查看提交历史
- git服务器搭建
3.Linux系统运行时参数命令
- 进程间通信设施状态
ipcs
- Linux系统运行时长
uptime
- CPU平均负载和磁盘活动
iostat
- 监控,收集和汇报系统活动
sar
- 监控多处理器使用情况
mpstat
- 监控进程的内存使用情况
pmap
- 系统管理员调优和基准测量工具
nmon
- 密切关注Linux系统
glances
- 查看系统调用
strace
ftp
服务器基本信息ftptop
- 电量消耗和电源管理
powertop
- 监控
mysql
的线程和性能mytop
- 系统运行参数分析
htop
/top
/atop
- Linux网络统计监控工具
netstat
- 显示和修改网络接口控制器
ethtool
- 网络数据包分析利刃
tcpdump
- 远程登陆服务的标准协议
telnet
- 获取实时网络统计信息
iptraf
- 显示主机上网络接口带宽使用情况
iftop
4.vscode gdb 调试
vscode gdb
开发环境gdb
调试准备gdb
调试命令详解gdb
多线程调试gdb
附加进程调试gdb core files
调试
网络编程
1.网络io
与io
多路复用 select
/poll
/epoll
socket
与文件描述符的关联- 多路复用
select
/poll
- 代码实现
LT
/ET
的区别
2.事件驱动 reactor
reactor
针对业务实现的优点epoll
封装send_cb
/recv_cb
/accept_cb
- reactor 多核实现
- 跨平台(
select
/epoll
/kqueue
)的封装reactor
redis
,memcached
,nginx
网络组件
3.http
服务器的实现
reactor sendbuffer
与recvbuffer
封装http
协议http
协议格式- 有限状态机
fsm
解析http
- 其他协议
websocket
,tcp
文件传输
网络原理
1.服务器百万并发实现(实操)
- 同步处理与异步处理的数据差异
- 网络
io
线程池异步处理 ulimit
的fd
的百万级别支持sysctl.conf
的rmem
与wmem
的调优conntrack
的原理分析
2. Posix API
与网络协议栈
connect
,listen
,accept
与三次握手listen
参数backlog
syn
泛洪的解决方案close
与四次挥手- 11个状态迁移
- 大量
close_wait
与time_wait
的原因与解决方案 tcp keepalive
与应用层心跳包- 拥塞控制与滑动窗口
3.UDP的可靠传输协议QUIC
udp
的优缺点udp
高并发的设计方案- qq早期为什么选择
udp
作为通信协议 udp
可靠传输原理quic
协议的设计原理quic
的开源方案quiche
kcp
的设计方案与算法原理
协程框架
1.协程设计原理与汇编实现
- 协程存在的3个原因
- 同步与异步性能,服务端异步处理,客户端异步请求
- 协程原语
switch
,resume
,yield
, - 协程切换的三种实现方式,
setjmp
/longjmp
,ucontext
, 汇编实现 - 汇编实现寄存器讲解
- 协程初始启动
eip
寄存器设置 - 协程栈空间定义,独立栈与共享栈的做法
- 协程结构体定义
2.协程调度器实现与性能测试
- 调度器的定义分析
- 超时集合,就绪队列,io等待集合的实现
- 协程调度的执行流程
- 协程接口实现,异步流程实现
hook
钩子的实现- 协程实现
mysql
请求 - 协程多核方案分析
- 协程性能测试
用户态协议栈
1.用户态协议栈设计实现
- 用户态协议栈的存在场景与实现原理
netmap
开源框架eth
协议,ip
协议,udp
协议实现arp
协议实现icmp
协议实现
2.tcp的原理实现
- tcp 11个状态实现
- 滑动窗口与慢启动
- 重传定时器,坚持定时器
time_wait
定时器,keepalive
定时器
3.应用层posix api
的具体实现
socket
/bind
/listen
的实现accept
实现recv
/send
的实现
4.手把手设计实现epoll
epoll
数据结构封装与线程安全实现- 协议栈
fd
就绪回调实现 epoll
接口实现LT
/ET
的实现
异步io
机制
1.io_uring
io_uring
系统调用io_uring_setup
,io_ur ing_register
,io_uring_enter
liburng
的io_uring
的关 系io_uring
与epoll
性能对比io_uring
的共享内存机制
2.io_uring
的使用场景
io_uring
的accept
,connect
,recv
,send
实现机制io_uring
网络读写io_uring
磁盘读写proactor
的实现
池式组件
1.手写线程池与性能分析(项目)
- 线程池的异步处理使用场景
- 线程池的组成任务队列执行队列
- 任务回调与条件等待
- 线程池的动态防缩
nginx
线程池实现对比分析
2.内存池的实现与场景分析(项目)
- 内存池的应用场景与性能分析
- 内存小块分配与管理
- 内存大块分配与管理
- 手写内存池,结构体封装与API实现
- 避免内存泄漏的两种万能方法
- 定位内存泄漏的3种工具
nginx
内存池实现
3.mysql
连接池的实现(项目)
- 连接池性能的影响的2个因素,
tcp
连接和mysql
认证 - 连接请求归还策略
- 连接超时未归还策略
- 链接断开重连策略
- 连接数量最优策略
高性能组件
1.原子操作CAS
与锁实现(项目)
- 互斥锁的使用场景与原理
- 自旋锁的性能分析
- 原子操作的汇编实现
2.无锁消息队列实现(项目)
- 有锁无锁队列性能
- 内存屏障
Barrier
- 数组无锁队列设计实现
- 链表无锁队列设计实现
3.网络缓冲区设计
RingBuffer
设计- 定长消息包
ChainBuffer
设计- 双缓冲区设计
4.定时器方案红黑树,时间轮,最小堆(项目)
- 定时器的使用场景
- 定时器的红黑树存储
- 时间轮的实现
- 最小堆的实现
- 分布式定时器的实现
5.手写死锁检测组件(项目)
- 死锁的现象以及原理
pthread_mutex_Iock
/pthread_mutex_unlock dIsym
的实现- 有向图的构建
- 有向图
dfs
判断环的存在 - 三个原语操作
lock_before
,lock_after
,unlock_after
- 死锁检测线程的实现
6.手写内存泄漏检测组件(项目)
- 内存泄漏现象
- 第三方内存泄漏与代码内存泄漏
malloc
与free
的dIsym
实现- 内存检测策略
- 应用场景测试
7.手把手实现分布式锁(项目)
- 多线程资源竞争 互斥锁,自旋锁
- 加锁的异常情况
- 非公平锁的实现
- 公平锁的实现
开源组件
1.异步日志方案spdlog
(项目)
- 日志库性能瓶颈分析
- 异步日志库设计与实现
- 批量写入与双缓存冲机制
- 奔溃后的日志找回
2.应用层协议设计ProtoBuf
(项目)
- IM,云平台,
nginx
,http
,redis
协议设计 - 如何保证消息完整性
- 手撕
protobuf IM
通信 协议 protobuf
序列化与反序列化protobuf
编码原理
Redis
1.Redis
相关命令详解及其原理
string
,set
,zset
,list
,hash
- 分布式锁的实现
lua
脚本解决ACID原子性Redis
事务的ACID性质分析
2.Redis
协议与异步方式
Redis
协议解析- 特殊协议操作订阅发布
- 手撕异步
redis
协议
3.存储原理与数据模型
string
的三种编码方式int
,raw
,embstr
- 双向链表的
list
实现 - 字典的实现,
hash
函数 - 解决键冲突与
rehash
- 跳表的实现与数据论证
- 整数集合实现
- 压缩列表原理证明
4.主从同步与对象模型
- 对象的类型与编码
- 字符串对象
- 列表对象
- 哈希对象
- 集合对象
- 有序集合
- 类型检测与命令多态
- 内存回收
- 对象共享
- 对象空转时长
redis
的3种集群方式主从复制,sentinel
,cluster
- 4种持久化方案
MySQL
1.SQL
语句,索引,视图,存储过程,触发器
MySQL
体系结构,SQL
执行流程SQL CURD
与高级查询- 视图,触发器,存储过程
MySQL
权限管理
2.MySQL
索引原理以及SQL
优化
- 索引,约束以及之间的区别
- B+树,聚集索引和辅助索引
- 最左匹配原则以及覆盖索引
- 索引失效以及索引优化原则
EXPLAIN
执行计划以及优化选择过程分析
3.MySQL
事务原理分析
- 事务的
ACID
特性 MySQL
并发问题 脏读,不可重复读,幻读- 事务隔离级别
- 锁的类型,锁算法实现以及锁操作对象
S
锁、X
锁、IS
锁、IX
锁- 记录锁,间隙锁,
next-key lock
- 插入意向锁,自增锁
MVCC
原理剖析
4.MySQL
缓存策略
- 读写分离,连接池的场景以及其局限a
- 缓存策略问题分析
- 缓存策略强一致性解决方案
- 缓存策略最终一致性解决方案
- 2种
mysql
缓存同步方案从数据库与触发器+udf
- 缓存同步开源方案
go-mysql-transfer
- 缓存同步开源方案
canal
原理分析 - 3种缓存故障,缓存击穿,缓存穿透,缓存雪崩
Kafka
1.Kafka
使用场景与设计原理
- 发布订阅模式
- 点对点消息传递
Kafka Brokers
原理Topics
和Partition
2.Kafka存储机制
- Partition存储分布
- Partition文件存储机制
- Segment文件存储结构
- offset查找message
- 高效文件存储设计
gRPC
1.gRPC
的内部组件关联
ClientSide
与ServerSide
,Channel
,Serivce
,Stub
的概念- 异步
gRPC
的实现 - 回调方式的异步调用
Server
与Client
对RPC
的实现
2.基于http2
的gRPC
通信协议
- 基于
http
协议构造 ABNF
语法- 请求协议
Request -Headers
gRPC
上下文传递
Nginx
1.Nginx
反向代理与系统参数配置conf
原理
Nginx
静态文件的配置Nginx
动态接口代理配置Nginx
对Mqtt
协议转发Nginx
对Rtmp
推拉流Openresty
对Redis
缓存数据代理shmem
的三种实现方式- 原子操作
nginx channel
- 信号
- 信号量
2.Nginx过滤器模块实现
- Nginx Filter模块运行原理
- 过滤链表的顺序
- 模块开发数据结构
ngx_str_t
,ngx_list_t
,ngx_buf_t
,ngx_chain_t
error
日志的用法ngx_comond_t
的讲解ngx_http_module_t
的执行流程- 文件锁,互斥锁
slab
共享内存- 如何解决"惊群"问题
- 如何实现负载均衡
3.Nginx Handler模块实现
Nginx Handler
模块运行原理ngx_module_t
/ngx_ http_module_t
的讲解ngx_http_top_body_ filter
/ngx_http_top_header_filter
的原理ngx_rbtree_ t
的使用方法ngx_rbtree
自定义添加方法Nginx
的核心数据结构ngx_cycle_t
,ngx_event_moule_t
http
请求的11个处理阶段http
包体处理http
响应发送Nginx Upstream
机制的设计与实现- 模块性能测试
skynet
1.Skynet
设计原理
- 多核并发编程-多线程,多进程,
csp
模型,actor
模型 actor
模型实现-lua
服务和c
服务- 消息队列实现
actor
消息调度
2.skynet
网络层封装以及lua
/c
接口编程
skynet reactor
网络模型封装socket
/socketchannel
封装- 手撕高性能
c
服务 lua
编程以及lua
/c
接口编程
3.skynet
重要组件以及手撕游戏项目
- 基础接口
skynet.send
,skynet.call
,skynet.response
- 广播组件
multicastd
- 数据共享组件
sharedatad datasheet
- 手撕万人同时在线游戏
分布式API网关
1.网关Openresty
Nginx
与lua
模块Openresty
访问Redis
,MySQL
Restful API
接口开发Openresty
性能分析
2.Kong
动态负载均衡与服务发现
nginx
,openresty
,Kong
之间的“苟且”- 动态负载均衡的原理
- 服务发现实现的原理
Serverless
- 监控,故障检测与恢复
- 代理层缓存与响应服务
- 系统日志
SPDK
1.SPDK
文件系统设计与实现
NVMe
与PCle
的原理NVMe Controller
与bdev
之间的rpc
blobstore
与blob
的关系
2.文件系统的posix api
实现
- 4层结构设计
vfs
spdk
的异步改造posix
同步api
open
/write
/read
/close
的实现
3.文件系统的性能测试与承接mysql
业务
LD_PRELOAD
更好mysql
系统调用实现iodepth
讲解- 随机读,随机写,顺序读,顺序写
CUDA
1.gpu
并行计算cuda
的开发流程
cpu
+gpu
的异构计算- 计算机体系结构中的
gpu
cucda
的环境搭建nvcc
与srun
的使 用cuda
的向量加法与矩阵乘法MPI
与CUDA
2.音视频编解码中的并行计算
cuda
的h264
编解码cuda
的mpeg
编解码ffmpeg
的cuda
支持
workflow
1.workflow
的应用场景
workflow
的编程范式与设计理念mysql
/redis
/kafka
/dns
的请求实现parallel
处理与任务组装
2.workfIow
的组件实现
- 线程池实现
DAG
图任务msgqueue
的实现- 纯
c
的jsonparser
实现
通信协议 mqtt
1.mqtt
的高效使用场景
mqtt
的发布订阅模式- 解决低带宽网络环境的数据传输
- 3种
Qos
等级 OAuth
与JWT
的安全认证
2.mqtt
的broker
mqtt
的遗嘱机制- 发布订阅的过滤器
mosquitto
的docker
部署mqtt
的日志实时监控
Docker
1. Docker
内核功能
- 进程
namespace
UTS namespace
IPC namespace
- 网络
namespace
- 文件系统
namesapce
cgroup
的资源控制
2.Docker
容器管理与镜像操作
Docker
镜像下载与镜像运行Docker
存储管理Docker
数据卷Docker
与容器安全
Docker
网络管理
- 5种
Docker
网络驱动 pipework
跨主机通信OvS
划分vlan
与隧道模式GRE
实现跨主机Docker
间通信
Docker
云与容器编排
Dockerfile
的语法流程- 编排神器
Fig
/Compose
FIynn
体系架构Docker
改变了什么?
Kubernetes
1.k8s
环境搭建
k8s
集群安全设置k8s
集群网络设置k8s
核心服务配置kubectl
命令工具yaml
文件语法
2.Pod
与Service
的用法
Pod
的管理配置Pod
升级与回滚DNS
服务之于k8s
http
7层策略与TLS
安全设置
3.k8s集群管理(项目)
Node
的管理namespace
隔离机制k8s
集群日志管理k8s
集群监控
4.k8s
二次开发与k8s API
RESTful
接口API
聚合机制API
组Go
访问k8s API
性能与测试工具
1.测试框架gtest
以及内存泄漏检测
googletest
与googlemock
文件- 函数检测以及类测试
test fixture
测试夹具- 类型参数化
- 事件测试
- 内存泄漏
- 设置期望,期待参数,调用次数,满足期望
2.性能工具与性能分析
MySQL
性能测试工具mysqlslap
Redis
性能测试工具redis-benchmark
http
性能测试工具wrk
Tcp
性能测试工具TCPBenchmarks
- 磁盘,内存,网络性能分析
3.火焰图的生成原理与构建方式
- 火焰图工具讲解
- 火焰图使用场景与原理
nginx
动态火焰图MySQL
火焰图Redis
火焰图
观测技术bpf
与ebpf
1.内核bpf
的实现原理
- 跟踪,嗅探,采样,可观测的理解
- 动态
hook:kprobe
/uprobe
- 静态
hook:tracepoint
和USDT
- 性能监控计时器
PMC
模式 cpu
的观测taskset
的使用BPF
工具bpftrace
,BCC
2.bpf
对内核功能的观测
- 内存观测
kmalloc
与vm_area_struct
- 文件系统观测
vfs
的状态 - 磁盘
io
的观测bitesize
,mdflush
bpf
对网络流量的统计bpf
对redis-server
观测- 网络观测
tcp_connect
,tcp_accept
,tcp_close
内核源码机制
1.进程调度机制哪些事儿
qemu
调试内存- 进程调度
cfs
与其他的四个调度类 task_struct
结构体RCU
机制与内存优化屏障
2.内核内存管理运行机制
- 虚拟内存地址布局
SMP
/NUMA
模型- 页表与页表缓存原理
- 伙伴系统实现
- 块分配(
Slab
/Slub
/Slob
) 原理实现 brk
/kmalloc
/vmalloc
系统调用流程
3.文件系统组件
- 虚拟文件系统
vfs
Proc
文件系统super_block
与inode
结构体- 文件描述符与挂载流程
分布式数据库
1.不一样的kv
存储RocksDB
的使用场景
- 前缀搜索
- 低优先级写入
- 生存时间的支持
Transactions
- 快照存储
- 日志结构的数据库引擎
2.TiDB
存储引擎的原理
TiKV
的Key-Value
存储引擎- 基于
RBAC
的权限管理 - 数据加密
3.TiDB
集群方案与Replication
原理
- 集群三个组件
TiDB Server
,PD Server
,TiKV Server
Raft
协议讲解OLTP
与OLAP
分布式文件系统
1.内核级支持的分布式存储Ceph
ceph
的集群部署monitor
与OSD
ceph
5个核心组件ceph
集群监控ceph
性能调调优与benchmark
2.分布式ceph
存储集群部署
- 同步机制
- 线性扩容
- 如何实现高可用
- 负载均衡
分布式协同
1.注册服务中心Etcd
etcd
配置服务、服务发现、集群监控、leader选举、分布式锁etcd
体系结构详解(gRPC
、WAL
、Snapshot
、BoItDB
、Raft
)etcd
存储原理深入剖析(B树、B+树)etcd
读写机制以及事务的acid
特性分析raft
共识算法详解(leader
选举+日志复制)
2.协同事件用户态文件系统fuse
(项目)
fuse
的使用场景- 文件系统读写事件
fuse
的实现原理- /
dev
/fuse
的作用
3.P2P
框架的实现
- 网关
NAT
表分析 NAT
类型,完全锥型NAT
,对称NAT
,端口限制锥形NAT
,IP
限制锥型NAT
- 代码逻辑实现
NAT
类型检测 - 网络穿透的原理
- 网络穿透的3种情况
C/C++全栈开发学习资料、大厂面试题、教学视频和 T9学习路线图,
↓↓↓↓↓↓见下面文章底部点击免费领取↓↓↓↓↓↓
包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等)