这才是你需要的C/C++Linux服务器开发学习路线!

前言

C语言和C++属于“造轮子”语言,几乎什么都能做。不过一般来说,C语言和C++主要还是做后台(服务端)开发比较多,包括:

通信公司后台开发

互联网公司后台开发

游戏公司后台开发

……

当然这个后台开发具体职责又有很多细分,比如:

有做数据处理和分析的

有做基础协议和通信的

有做服务端底层应用优化的

甚至还有做后台系统驱动和内核的

……

从技术学习和实际运用的角度来看,C/C++和Java到底区别在哪?

C/C++,它和Java确实不太一样。C语言和C++,尤其C++,语言粒度细、机制多,性能虽然高,但语言本身的包袱也确实重,我们更愿意称它“造轮子”的语言!也正是因为C语言和C++性能好、粒度细,所以什么都能做。而Java本身就是一种服务于互联网软件开发(后端开发+客户端开发)的语言,它有一个明显的“生态圈”的概念,所以应用领域非常清晰。我个人觉得C语言和C++编程比Java还是要难一些,Java毕竟是纯应用层的,C语言和C++则对程序员能力的要求要更高一些。

C/C++的应用方向大多都是后台或者server开发.,所以我认为必须要学会Linux系统。

不管怎样,下面即将要介绍的这些学习路线和内容适用于以上所有情况。

基础

数据结构与算法

排序与KMP

红黑树

B树与B+树

Hash与布隆过滤器

设计模式

责任链模式

过滤器模式

发布订阅模式

工厂模式

代理模式

工程管理

Makefi le/cmake/conf i gure

git/svn与持续集成

Linux 系统运行时参数命令

高性能网络设计

代码实现

网络io与select/poll/epoll

reactor的原理与实现

http/https web服务器的实现

websocket协议与服务器实现

方案分析

服务器百万并发的实现

redis/memcached/Nginx网络组件

Posix API与网络协议栈

UDP可靠性协议 QUIC/KCP

基础组件实现

池式组件

手写线程池与性能分析

ringbuffer与 内存池实现

异步请求池http/mysq1/redis/dns

mysq1连接池的实现

redis连接池的实现

高性能组件

原子操作CAS

消息队列与无锁实现

定时器方案红黑树时间轮最小堆

锁实现原理实现

服务器连接保活设计

try/catch组 件的实现

开源组件

libevent/libev框架实战

异步日志方案log4cpp

应用层协议设计ProtoBuf/Thr ift

OpenssI对称加密与非对称加密

Json数据解析/Xml解析器和工具包

字符编码Unicode原理及编程实践

框架

协程框架实现NtyCo

协程的设计原理与工程案例

协程的调度器实现与性能测试

用户态协议栈NtyTCP

tcp/ip设计与EpolI的实现

tcp/ip定时器与滑动窗口的实现

滑动窗口/拥塞慢启动

中间件开发

MySQL

SQL语句,索引,存储过程,触发器

数据库连接池与SQL协议剖析

存储引擎原理MyISAM与InnoDb

自己动手实现一个存储引擎

MySQI集群 方案与Rep1 ication原理

Redis

Redis相关命令与持久化

Redis连接池与协议实现_

存储原理与数据模型

主从同步与原子模型

集群方案主从复制/哨兵/集群

Nginx

Nginx反向代理与系统参数配置conf原理

广告内容推送Nginx过滤模块的实现

访问频率统计Nginx handler模块的实现

Nginx http状态机流程

进程间通信与Slab共享机制

MongoDB

接口编程与文档操作

集群方案与持久化备份

dfs

内核级支持的分布式存储Ceph

分布式小文件存储fastdfs

开源框架

Skynet

手撕Skynet高性能网关

actor实现与cluster集群/负载均衡

:skynet网络模块热更新数据共享

ZeroMQ

ZeroMQ Router-Dealer模式实现

消息模型与工程案例

网络机制与性能分析

DPDK

PCI原理与testpmd/ 13fwd/skeleton

kni数据流程与协议栈解析

DNS协议解析与服务器实现

高性能Nginx网关实现

半虛拟化virtio与vhost加速

Linux内核源码

进程管理

进程管理和调度

锁与进程间通信

系统调用与自定义syscall的实现

内存管理

物理内存管理

进程虚拟内存mm_ struct分析

项目:页面回收和页交换

内存管理

物理内存管理

进程虚拟内存mm_ struct分析

页面回收和页交换

文件系统

虚拟文件系统

Ext文件系统族

无持久存储的文件系统

扩展属性和访问控制表

设备驱动

内核编译与虚拟机系统升级

进程间通信组件实现

虚拟网络适配器的实现

性能分析

性能工具

高性能代码构建系统tundra

Http压测工具WRK

网站压测工具webbench

调试库

内存调试性能分析工具Valgr ind

谷歌C++测试框架GoogleTest

内存分配跟踪库MemTrack

内核跟踪

内核探测SystemTap

热图分析与生成

配套参考书籍资料

MySQL:《高性 能MySQL第3版》

Nginx:《深 入理解Nginx:模块开发与架构分析(第2版)》(陶辉)

Redis:《Redis 5设计与源码分析》(陈 雷)

Linux内核:《深 入理解Linux内核架构》(郭旭 译)

数据结构与算法:《算法导论》 (第3版)

性能分析:《性能之巅 洞悉系统、企业与云计算》

MongoDB:《MongoDB权威 指南》

Ceph:《Cep分布式存储学 习指南》(Ceph中 国社区)

Docker:《Docker容器 与容器云(第2版)》

TCP/IP:《Tcp/Ip详解卷一卷二卷三》

Linux系统编程:《Unix高 级环境编程》

计算机:《深入理解计 算机系统》

ZeroMQ:《ZeroMQ: 云时代极速消息通信库》

DPDK:《深 入浅出DPDK》

以上有不足的地方欢迎指出讨论,觉得不错的朋友希望能得到您的转发支持

最后,如果觉得学习资料难找的话,可以添加C/C++Linux学习交流群:960994558 学习资料已经共享在群里了,期待你的加入~

你可能感兴趣的:(这才是你需要的C/C++Linux服务器开发学习路线!)