更新时间:2021-07-23 18:23:40
封面
版权信息
内容简介
前言
第1章 C++必知必会
1.1 C++RAII惯用法
1.2 pimpl惯用法
1.3 C++11/14/17新增的实用特性
1.4 统一的类成员初始化语法与std::initializer_list<T>
1.5 C++17注解标签(attributes)
1.6 final、override关键字和=default、=delete语法
1.7 auto关键字的用法
1.8 Range-based循环语法
1.9 C++17结构化绑定
1.10 stl容器新增的实用方法
1.11 stl中的智能指针类详解
第2章 C++后端开发必备的工具和调试知识
2.1 SSH工具与FTP工具
2.2 makefile与CMake
2.3 使用Visual Studio管理和阅读开源项目代码
2.4 gdb调试
2.5 gdb常用命令详解——利用gdb调试Redis
2.6 使用gdb调试多线程程序
2.7 使用gdb调试多进程程序——以调试Nginx为例
2.8 gdb实用调试技巧
2.9 gdb tui——gdb图形化界面
2.10 gdb的升级版——cgdb
2.11 使用VisualGDB调试
第3章 多线程编程与资源同步
3.1 线程的基本概念及常见问题
3.2 线程的基本操作
3.3 惯用法:将C++类对象实例指针作为线程函数的参数
3.4 整型变量的原子操作
3.5 Linux线程同步对象
3.6 Windows线程同步对象
3.7 C++11/14/17线程同步对象
3.8 如何确保创建的线程一定能运行
3.9 多线程使用锁经验总结
3.10 线程局部存储
3.11 C库的非线程安全函数
3.12 线程池与队列系统的设计
3.13 纤程(Fiber)与协程(Routine)
第4章 网络编程重难点解析
4.1 学习网络编程时应该掌握的socket函数
4.2 TCP网络通信的基本流程
4.3 设计跨平台网络通信库时的一些socket函数用法
4.4 bind函数重难点分析
4.5 select函数的用法和原理
4.6 socket的阻塞模式和非阻塞模式
4.7 发送0字节数据的效果
4.8 connect函数在阻塞和非阻塞模式下的行为
4.9 连接时顺便接收第1组数据
4.10 如何获取当前socket对应的接收缓冲区中的可读数据量
4.11 Linux EINTR错误码
4.12 Linux SIGPIPE信号
4.13 Linux poll函数的用法
4.14 Linux epoll模型
4.15 高效的readv和writev函数
4.16 主机字节序和网络字节序
4.17 域名解析API介绍
第5章 网络通信故障排查常用命令
5.1 ifconfig命令
5.2 ping命令
5.3 telnet命令
5.4 netstat命令
5.5 lsof命令
5.6 nc命令
5.7 curl命令
5.8 tcpdump命令
第6章 网络通信协议设计
6.1 理解TCP
6.2 如何解决粘包问题
6.3 解包与处理
6.4 从struct到TLV
6.5 整型数值的压缩
6.6 设计通信协议时的注意事项
6.7 包分片
6.8 XML与JSON格式的协议
6.9 一个自定义协议示例
6.10 理解HTTP
6.11 SMTP、POP3与邮件客户端
6.12 WebSocket协议
第7章 单个服务的基本结构
7.1 网络通信组件的效率问题
7.2 原始的服务器结构
7.3 一个连接对应一个线程模型
7.4 Reactor模式
7.5 one thread one loop思想
7.6 收发数据的正确做法
7.7 发送、接收缓冲区的设计要点
7.8 网络库的分层设计
7.9 后端服务中的定时器设计
7.10 处理业务数据时是否一定要单独开线程
7.11 非侵入式结构与侵入式结构
7.12 带有网络通信模块的服务器的经典结构
第8章 Redis网络通信模块源码分析
8.1 调试Redis环境与准备
8.2 探究redis-server端的网络通信模块
8.3 探究redis-cli端的网络通信模型
8.4 Redis的通信协议格式