在软件开发的宏大版图中,C++ 语言宛如一座巍峨的高山,吸引着无数开发者攀登探索。而 Linux 操作系统,以其开源、稳定、高效的特性,成为了众多开发者钟爱的开发平台。将 C++ 与 Linux 相结合,就如同为开发者配备了一把无坚不摧的利刃,能够在系统级编程、高性能计算、游戏开发等诸多领域披荆斩棘。对于 C++ 程序员而言,掌握 Linux 环境下的 C/C++ 编程技术,不仅仅是提升自身技能的关键一步,更是在激烈的职场竞争中脱颖而出的必备法宝。这就好比一位武林高手,不仅要熟练掌握各种招式,更要修炼深厚的内功。而 Linux C/C++ 编程技术,就是 C++ 程序员的 “内功心法”。
在日常开发中,我们常常会遇到各种挑战:如何优化代码性能,让程序运行得更加高效?怎样利用多线程技术,充分发挥多核处理器的优势?如何与底层系统进行交互,实现更强大的功能?这些问题,都能在 Linux C/C++ 编程技术的世界中找到答案。接下来,就让我们一同踏上这趟 Linux C/C++ 编程技术的探索之旅,从基础语法到高级应用,从文件操作到网络编程,从多线程处理到内存管理,全方位地深入学习,修炼 C++ 程序员的深厚 “内功”。无论你是初出茅庐的编程新手,还是经验丰富的开发老兵,相信都能在这篇文章中收获满满,为自己的编程之路注入强大的动力。
一、C/C++ Linux全栈开发
大厂标准 , 面试常问, 工作常用技术栈;手写代码实现:sdpk文件系统,dpdk用户态协议栈,异步网络库zvnet ,协程,io_uring,Nginx,bpf,线程池,内存池,连接池,原子操作,ringbuffer,定时器,死锁检测,分布式锁,日志,probuf,kafka,grpc,udp可靠传输;上线项目:KV存储项目,图床项目,即时通讯项目,内网穿透channel,魔兽游戏项目等。
1.1精进基石专栏
(1)数据结构与算法
随处可见的红黑树
红黑树的应用场景进程调度cfs,内存管理
红黑树的数学证明与推导
手撕红黑树的左旋与右旋
红黑树添加的实现与添加三种情况的证明
红黑树删除的实现与删除四种情况的证明
红黑树的线程安全的做法
分析红黑树工程实用的特点
磁盘存储链式的B树与B+树
磁盘结构分析与数据存储原理
多叉树的运用以及B树的定义证明
B树插入的两种分裂
B树删除的前后借位与节点合并
手撕B树的插入,删除,遍历,查找
B+树的定义与实现
B+树叶子节点的前后指针
B+树的应用场景与实用特点
B+树的线程安全做法
海量数据去重的abhloriter bitap
hash的原理与hash函数的实现
hash的应用场景
分布式hash的实现原理
海量数据去重布隆过滤器
布隆过滤的数学推导与证明
(2)设计模式
创建型设计模式
单例模式
策略模式
观察者模式
工厂方法模式与抽象工厂模式
原型模式
结构型设计模式
适配器模式
代理模式
责任链模式
状态模式
桥接模式
组合模式
(3)c++新特性
stI容器,智能指针,正则表达式
unordered_ _map
stl容器
hash的用法与原理
shared_ ptr,unique_ ptr
basic_ regex,sub_ match
函数对象模板function, bind
新特性的线程,协程,原子操作,lamda表达式
atomic的用法与原理
thread_ local 与condition_ var iable
异常处理exception_ _ptr
错误处理error _ category
coroutine的用法与原理
(4)Linux工程管理
Makefi le/ cmake/conf igure
Makefile的规则与make的工作原理
单文件编译与多文件编译
Makefile的参数传递
多目录文件夹递归编译与嵌套执行make
Makefile的通配符,伪目标,文件搜索
Makefile的操作函数与特殊语法
configure生成makefile的原则
cmake的写法
分布式版本控制git
git的工作流程
创建操作与基本操作
分支管理,查看提交历史
git服务器搭建
Linux系统运行时参数命令
进程间通信设施状态ipcs
Linux系统运行时长upt ime
CPU平均负载和磁盘活动iostat
监控,收集和汇报系统活动sar
监控多处理器使用情况mpstat
监控进程的内存使用情况pmap
系统管理员调优和基准测量工具nmon
密切关注Linux系统glances
查看系统调用strace
ftp服务器基本信息ftptop
电量消耗和电源管理powertop
监控mysq| 的线程和性能mytop
系统运行参数分析htop/top/atop
Linux网络统计监控工具netstat
显示和修改网络接口控制器ethtool
网络数据包分析利刃tcpdump
远程登陆服务的标准协议teInet
获取实时网络统计信息iptraf
显示主机上网络接口带宽使用情况iftop
(5)gdb调试
vscode远程连接Linux
vscode gdb开发环境设置
gdb调试概述
gdb调试准备
gdb调试命令详解
gdb多线程调试
gdb附加进程调试
gdb core fles调试
1.2高性能网络设计专栏
(1)网络编程异步网络库zvnet
网络io与io多路复用select/poll/epoll
socket与文件描述符的关联
多路复用select/poll
代码实现LT/ET的区别
事件驱动reactor的原理与实现
reactor针对业务实现的优点
poll封装send_ cb/recv_ _cb/ accept_ _cb
reactor多核实现
跨平台(select/epoll/kqueue)的封装reactor
redis,memcached, nginx网 络组件
http服务器的实现
reactor sendbuffer与recvbuffer封装http协议
http协议格式
有限状 态机fsm解析http
其他协议websocket, tcp文件传输
(2)网络原理
服务器百万并发实现(实操)
同步处理与异步处理的数据差异
网络io线程池异步处理
ulimit的fd的百万级别支持
sysctI. conf的rmem与wmem的调优
conntrack的原理分析
Posix API与网络协议栈
connect,listen, accept与三次握 手
listen参数backlog
syn泛洪的解决方案
close与四次挥手
11个状态迁移
大量close_ wait与time wait的原因与解决方案
tcp keepalive与 应用层心跳包
拥塞控制与滑动窗口
UDP的可靠传输协议QUIC
udp的优缺点
udp高并发的设计方案
qq早期为什么选择udp作为通信协议
udp可靠传输原理
quic协议的设计原理
quic的开源方案quiche
kcp的设计方案与算法原理
协程调度器实现与性能测试
调度器的定义分析
超时集合,就绪队列,io等待集合的实现
协程调度的执行流程
协程接口实现,异步流程实现
hook钩子的实现
协程实现mysql请求
协程多核方案分析
协程性能测试
(3)自研框架:基于dpdk的用户态协议栈的实现(已开源)
用户态协议栈设计实现
用户态协议栈的存在场景与实现原理
netmap开源框架
eth协议,ip协议, udp协议实现
arp协议实现
icmp协议实现
应用层posix api的具体实现
socket/bind/listen的实现
accept实现
recv/send的实现
滑动窗口/慢启动讲解
重传定时器,坚持定时器,time_ wait定时器,keepalive定时器
手把手设计实现epoll
epoll数据结构封装与线程安全实现
协议栈fd就绪回调实现
epoll接口实现
LT/ET的实现
高性能异步io机制io_ _uring
与epo1l媲美的io_ uring
io_ _uring系统调用io_ _uring_ setup, io_ _ur ing_ register, io_ _ur ing_ enter
liburng的io_ uring的关系
io_ uring与epoll性能对比
io_ _uring的共享内存机制
io_ uring的使用场景
io_ ur ing的accept, connect, recv, send实现机制
io_ uring网络读写
io_ uring磁盘读写
proactor的实现
windows异步机制iocp(以下为新增)
iocp完成端口的工作机制
iocp的精髓重叠io
iocp处理维护连接以及连接上的收发数据
iocp多线程处理方案
1.3基础组件设计专栏
(1)池式组件
手写线程池与性能分析(项目)
线程池的异步处理使用场景
线程池的组成任务队列执行队列
任务回调与条件等待
线程池的动态防缩
扩展: nginx线程池实现对比分析
内存池的实现与场景分析(项目)
内存池的应用场景与性能分析
内存小块分配与管理
内存大块分配与管理
手写内存池,结构体封装与API实现
避免内存泄漏的两种万能方法
定位内存泄漏的3种工具
扩展:nginx内存池实现
mysq|连接池的实现(项目)
连接池性能的影响的2个因素,top连接和mysq|认证
连接请求归还策略
连接超时未归还策略
链接断开重连策略
连接数量最优策略
(2)高性能组件
原子操作CAS与锁实现(项目)
互斥锁的使用场景与原理
自旋锁的性能分析
原子操作的汇编实现
无锁消息队列实现(项目)
有锁无锁队列性能
内存屏障Barrier
数组无锁队列设计实现
链表无锁队列设计实现
网络缓冲区设计
RingBuffer设计
定长消息包
ChainBuffer 设计
双缓冲区设计
定时器方案红黑树,时间轮,最小堆(项目)
定时器的使用场景
定时器的红黑树存储
时间轮的实现
最小堆的实现
分布式定时器的实现
手写死锁检测组件(项目)
死锁的现象以及原理
pthread_ _mutex_ lock/pthread_ _mutex_ _unlock dIsym的实现
有向图的构建
有向图dfs判断环的存在
三个原语操作 lock before, lock_ after, unlock_ after
死锁检测线程的实现
手写内存泄漏检测组件(项目)
内存泄漏现象
第三方内存泄漏与代码内存泄漏
malloc与free的dIsym实现
内存检测策略
应用场景测试
手把手实现分布式锁(项目)
多线程资源竞争互斥锁
自旋锁
加锁的异常情况
非公平锁的实现
公平锁的实现