描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302555292
书中主题
商业项目的完整源码 从无到有,实现一个商业质量的多线程高并发服务器程序项目框架,只需要增加业务逻辑代码就可以利用本项目完成实际工作中诸多服务器项目的开发,如网络游戏服务器、交易服务器、通信服务器等。
商业项目的实现功能 ①按照包头 包体格式正确接收客户端发送的数据包, 完美解决数据粘包问题;②根据接收的数据包的不同来执行不同的业务处理逻辑;③把业务处理产生的结果数据包正确返回给客户端。
商业项目的开发技术 ①epoll高并发通信技术(水平触发模式LT);②通过线程池技术处理业务逻辑;③线程之间的同步技术包括互斥量与信号量;④连接池中连接的延迟回收技术,极大程度上消除诸多导致服务器程序工作不稳定的因素;⑤其他次要技术,包括信号的处理、配置文件的读取、日志的打印输出、调用fork创建子进程、创建守护进程等。
环境标准
VMware Workstation Pro:Ubuntu Linux、g 、Windows:Visual Studio 2019、Visual Studio Code
VMware Workstation Pro:Ubuntu Linux、g
Windows:Visual Studio 2019、Visual Studio Code
程序代码
全部实例源代码可以扫描右方二维码获取,配套开发工具及更多学习资源可以关注作者公众号“程序员速成”获取。
本书是一部介绍在Linux下使用C 开发网络通信服务器程序的书。本书共8章36节,介绍了一个完整的项目,其中包括通信框架和业务逻辑框架,有以下几个特点: ①项目本身是一个完整的多线程高并发的服务器程序; ②支持TCP长连接,按照“包头 包体格式”正确接收客户端发送过来的数据包,完美解决收包时的数据粘包问题; ③可根据收到的不同数据包选择不同的业务处理逻辑; ④可将业务处理产生的结果数据包正确返回给客户端。
项目中用到的主要开发技术和特色包括: ①epoll高并发通信技术,用到的触发模式是epoll中的水平触发模式(LT); ②通过线程池技术处理业务逻辑; ③线程之间的同步技术包括互斥量和信号量; ④连接池中连接的延迟回收技术,可极大程度地消除诸多导致服务器程序工作不稳定的因素; ⑤专门处理数据发送的一整套数据发送逻辑以及对应的发送线程; ⑥信号处理、配置文件读取、日志的打印输出、调用fork创建子进程、创建守护进程等技术。
本书适合作为已经掌握C/C 语言,希望进一步深入学习的开发人员的自学参考用书。
第1章课程介绍
1.1本书内容详细介绍
1.1.1内容总述
1.1.2为什么选择Linux操作系统平台
1.1.3讲解规划和学习建议
1.1.4书籍推荐和读书须知
1.2环境搭建详细介绍
1.2.1Windows下的Visual Studio 2019安装
1.2.2准备一个Word文档
1.2.3Windows下的虚拟机安装
1.2.4在虚拟机中安装Linux操作系统
1.2.5配置固定IP地址
1.2.6配置远程连接
1.2.7安装编译工具gcc、g 等
1.2.8共享一个操作目录
第2章进入Nginx之门
2.1Nginx简介、选择理由、安装和使用
2.1.1Nginx简介
2.1.2为什么选择Nginx
2.1.3安装Nginx,搭建Web服务器
2.1.4Nginx的启动和简单使用
2.2Nginx整体结构、进程模型
2.2.1Nginx的整体结构
2.2.2Nginx进程模型细说
第3章Nginx开发初步
3.1学习Nginx源码前的准备工作
3.1.1Nginx源码总述
3.1.2Nginx源码查看工具
3.1.3Nginx源码入口函数定位
3.1.4创建一个自己的Linux下的C语言程序
3.2Nginx源码学法,终端和进程的关系
3.2.1Nginx源码学习方法
3.2.2终端和进程的关系
3.3信号的概念、认识、处理动作
3.3.1信号的基本概念
3.3.2通过kill命令认识一些信号
3.3.3进程的状态
3.3.4常用信号列举
3.3.5信号处理的相关动作
3.4UNIX/Linux体系结构、信号编程初步
3.4.1UNIX/Linux操作系统体系结构
3.4.2signal函数范例
3.5信号编程进阶、sigprocmask范例
3.5.1信号集(信号屏蔽字)
3.5.2信号相关函数
3.5.3sigprocmask等信号函数范例演示
3.6fork函数详解、范例演示
3.6.1简单认识fork函数
3.6.2进一步认识fork函数
3.6.3完善fork代码
3.6.4一个和fork执行有关的逻辑判断
3.6.5fork失败的可能原因
3.7守护进程详解、范例演示
3.7.1普通进程运行观察
3.7.2守护进程基本概念
3.7.3守护进程编写规则
3.7.4守护进程不会收到的信号
3.7.5守护进程和后台进程的区别
第4章服务器程序框架初步
4.1服务器程序目录规划、makefile编写
4.1.1信号高级认识范例
4.1.2服务器架构初步
4.2读配置文件、查泄漏、设置标题实战
4.2.1基础设施之配置文件读取
4.2.2内存泄漏的检查工具
4.2.3设置进程名称(标题)
4.3日志打印实战,优化main函数调用顺序
4.3.1基础设施之日志打印实战代码一
4.3.2设置时区
4.3.3基础设施之日志打印实战代码二
4.3.4理顺main函数中代码执行顺序
4.4信号、子进程实战,文件I/O详谈
4.4.1信号功能实战
4.4.2Nginx中创建worker子进程
4.4.3日志输出重要信息讲解
4.4.4write函数思考
4.4.5掉电导致write写入的数据丢失破解法
4.4.6标准I/O库
4.5守护进程及信号处理实战
4.5.1守护进程功能的实现
4.5.2信号处理函数的进一步完善(避免僵尸子进程)
第5章网络通信实战
5.1C/S、TCP/IP妙趣横生、惟妙惟肖谈
5.1.1客户端与服务器端
5.1.2网络模型
5.1.3最简单的客户端和服务器程序实现代码
5.1.4TCP和UDP的区别
5.2TCP三次握手详析,telnet、Wireshark示范
5.2.1TCP连接的三次握手
5.2.2telnet工具使用介绍
5.2.3Wireshark监视数据包
5.2.4TCP断开的四次挥手
5.3TCP状态转换,TIME_WAIT详解,SO_REUSEADDR
5.3.1TCP状态转换
5.3.2TIME_WAIT状态
5.3.3SO_REUSEADDR选项
5.4listen队列剖析、阻塞与非阻塞、同步与异步
5.4.1listen队列剖析
5.4.2阻塞与非阻塞I/O
5.4.3异步与同步I/O
5.5监听端口实战、epoll介绍及原理详析
5.5.1监听端口
5.5.2epoll技术简介
5.5.3epoll原理与函数介绍
5.6通信代码精粹之epoll函数实战1
5.6.1提醒注意
5.6.2配置文件的修改
5.6.3epoll函数实战
5.7通信代码精粹之epoll函数实战2
5.7.1ngx_epoll_process_events函数调用位置
5.7.2ngx_epoll_process_events函数内容
5.7.3ngx_event_accept函数内容
5.7.4总结和测试
5.7.5事件驱动总结
5.7.6一道腾讯后台开发的面试题
5.8ET、LT深释,服务器设计、粘包解决
5.8.1ET、LT模式深入分析及测试
5.8.2本项目的服务器设计
5.9通信代码精粹之收包、解包实战
5.9.1收包分析及包头结构定义
5.9.2收包状态宏定义
5.9.3收包实战代码
5.9.4测试服务器收包避免推诿扯皮
第6章服务器业务逻辑处理框架
6.1业务逻辑之多线程、线程池实战
6.1.1学习方法
6.1.2多线程的提出
6.1.3线程池实战代码
6.1.4线程池的使用
6.2业务逻辑之打通业务处理脉搏实战
6.2.1线程池代码调整及补充说明
6.2.2线程池实现具体业务之准备代码
6.2.3threadRecvProcFunc成员函数讲解
6.2.4整体测试工作的开展
6.3预发包,多线程资源回收深度思考
6.3.1业务逻辑细节写法说明
6.3.2连接池中连接回收的深度思考
6.3.3程序(进程)退出时线程的安全终止
6.3.4epoll事件处理的改造
6.3.5连接延迟回收的具体应用
6.4LT发数据机制深释、gdb调试浅谈
6.4.1水平触发模式(LT)下发送数据深度解释
6.4.2gdb调试浅谈
6.5发数据、信号量、并发、多线程综合实战
6.5.1发送数据指导思想
6.5.2发送数据代码实战
6.5.3发送数据后续处理代码
第7章画龙点睛之服务器安全与完善
7.1过往总结、心跳包代码实战
7.1.1前面学习的总结
7.1.2心跳包概念
7.1.3心跳包代码实战
7.2控制连入数,黑客攻击防范及畸形包应对
7.2.1控制并发连入数量
7.2.2黑客攻击的防范
7.2.3超时直接踢出服务器的需求
7.3超负荷安全处理、综合压力测试
7.3.1输出一些观察信息
7.3.2遗漏的安全问题思考
7.3.3压力测试前的准备工作
7.3.4压力测试
7.4惊群、性能优化大局观
7.4.1CPU占比与惊群
7.4.2性能优化大局观
7.4.3性能优化的实施
7.4.4配置最大允许打开的文件句柄数
7.4.5内存池补充说明
第8章总结与展望
8.1遗留问题探讨增补之消息跳跃发送
8.1.1调整ngx_write_request_handler函数的代码顺序
8.1.2消息的跳跃发送
8.2结束语、课程总结
8.2.1本书概要总结
8.2.2技术总结
8.2.3项目的用途总结
8.2.4学习方法总结
8.2.5架构师之路
8.2.6代码统计与再见
自序
亲爱的读者,如果你已经读完了笔者的《C 新经典》《C 新经典: 对象模型》两本介绍C 语言基础的书籍,并决定进一步深入学习,以备将来用C 在Linux下从事网络通信/网络服务器开发和架构工作,那么这本《C 新经典: Linux C 通信架构实战》,是笔者推荐给你的第3本书,不可错过。
书籍介绍
本书要求读者
对C语言的掌握没有障碍;
对C 语言中的对象、类等概念的简单应用没有障碍(不要求对C 掌握得非常深,笔者也将展示用不多的C 开发知识就能写出极其强悍的商业代码);
不要求读者熟悉网络或者Linux操作系统。
本书展示了一个完整的项目,其中包括通信框架和业务逻辑框架。
相信读者一旦掌握了这个通信框架和业务逻辑框架,定会如虎添翼。采用此项目的框架作为公司的基础框架,只需在框架中融入业务逻辑代码即可,这为公司节省的资金和时间可能是巨量的。
书中的项目适用于客户端和服务器之间保持TCP长连接,并且两端之间不算太频繁地进行一些数据收发的场景,如网络游戏服务器等。
书中的项目不适用于客户端和服务器之间有大量数据需要持续收发的场景,如传递视频、传递大文件等。但是,一旦全面掌握了本项目并对其进行有针对性的改造,也是完全能够将其应用于其他场合的。
很多网络通信课程的老师或者相关书籍的作者喜欢什么都讲,不但自己疲惫不堪,也让学习的人晕头转向,学了这个忘了那个,分散精力,事倍功半,这绝对是知识传授者的失职。在笔者看来,知识传授者的一个最大职责,就是帮助读者鉴别哪些知识是最有用、最需要学的,哪些知识是价值不高的、可以暂时不学的。本书将讲解的重点定位在多线程高并发这个最常使用的、难度最大的服务器通信开发领域,不多讲,不少讲,正好够用。
有些读者一提到网络通信架构/网络服务器,就会想到各种现成的网络服务器框架(库,如ACE、Boost Asio、Libevent等),并且把大部分时间都花费在了熟悉和应用这些框架上。在笔者看来,不如用这些时间来研究一下这些网络服务器框架的底层实现手段和所涉及的技术,知其然并知其所以然,虽然我们不见得需要自己造轮子,但如果知道轮子是怎么造的就等于抓住了事物的本质和规律,就能够在关键时刻大显身手,并且使自己的技术素养和实力提升一大步。
在世界范围内,C 网络通信编程方面的图书并不多。究其原因,主要是编写这类书对作者的要求非常高。一般来讲,低于15年一线开发经验的作者,写出一本比较完善的C 网络编程书是相当勉强的。即便是达到15年一线开发经验,如果没有从零开始搭建一个完整的网络通信框架的亲身经历,去写这样一本实战书也很容易出现漏洞。
目前市面上名气最大的网络通信编程书当属《UNIX网络编程卷1套接字联网API》。这是一本非常棒的书,知识覆盖面广,讲解问题非常细致,体现了作者深厚的知识积累和广博的认知。但这本书也有它的局限性,例如书中讲解的多数都是知识点以及代码片段,并没有把这些代码片段串起来转化成一个商业项目或者商业框架,以使其能够直接用于项目中(能够用于项目中的代码才有最直接的价值)。
对于笔者而言,写这本书的压力巨大: 内容本身难度很高是其一; 要把这种难度的内容描述清楚让人看得懂则也是一个巨大的挑战(相信读者在现实生活中遇到过不少自己明白却把别人讲糊涂的人)。这本书的编写,充满艰辛,从敲定内容至整理成书耗时8个月,而笔者在从事开发行业近15年后才着手从零开始逐步搭建并完善书中的项目,又在实际的工作中不断检验和完善了近10年,最终才形成读者今天看到的这本书。可以说,这本书所讲授的项目,体现着笔者20多年一线开发实战经验积累的巅峰开发实力。
纵观以往,很少有人敢于尝试教只掌握C和基本C 语言的开发者去学习这种难度颇高的网络通信架构知识,但笔者愿意做这个摆渡人,通过这本书,用自己多年积累的知识,为读者铺设一条极速的成才之路,可以毫不夸张地说,学好这本书,读者可以节省少则3~5年,多则10年的在C 网络通信开发道路上成长和摸索的时间。
在整本书的教授中,笔者提供了非常完善的代码,给出翔实的代码注释,并始终带领读者认真解读每一行代码的含义。这些是日后真正在工作中拿过来就能用的商业品质的代码。选择这本书,你就等于找到了一个20多年经验的人来帮助自己写代码,详细地告诉你每行代码的含义,这在以往是难以想象的事情。选择这本书,你就能够和笔者一起,编写一套极高质量的服务器通信代码并对其轻松驾驭,在前进的道路上,你一定会比别人快得多!
本书共8章36节。
第1章,课程介绍。谈一谈本书的内容、讲解的规划以及学习的建议。详细阐述开发环境的搭建、必要信息的配置、必要工具的安装等问题。
第2章,进入Nginx之门。对Nginx进行简介,阐述选择Nginx作为讲解起点的理由,详细介绍Nginx的目录组织结构,介绍如何编译、安装和执行Nginx,讲述Nginx的进程模型以及一些值得关注和学习的Nginx特性。
第3章,Nginx开发初步。对Nginx源码进行全局性的介绍,教读者创建一个自己的Linux下的C语言程序。以“终端和进程关系详解”作为切入点,引入bash以及终端的概念,介绍strace工具的使用,对信号、fork创建子进程、守护进程等概念都进行了非常详细的讲解,为后续的学习打下坚实的基础。
第4章,服务器程序框架初步。详细阐述本书所搭建的服务器程序的各种规划(包括目录规划、编译工具的选择)并详解部分实战代码。这些实战代码,是作为一个服务器框架必备的基础设施,包括读配置文件、设置标题、日志的各种分级输出。同时把信号处理、创建子进程、创建守护进程等以往讲解过的知识全部融入服务器框架中来。
第5章,网络通信实战。详细阐述TCP/IP中最重要的概念(包括三次握手、四次挥手、TCP状态转换细节、listen队列),讲解基本的客户端/服务器通信程序的组成部分,引入网络辅助工具telnet、Wireshark并演示它们的使用。阐述阻塞和非阻塞、同步I/O和异步I/O的概念。对epoll网络模型的实现原理进行极其详细的介绍并编写相关的实战代码。此外,还详细讲解并解决服务器收包时的TCP粘包问题。
第6章,服务器业务逻辑处理框架。详细讲解为处理业务逻辑所引入的线程池概念和代码,深入探讨多线程资源的回收、连接池中连接的回收、线程的安全终止等高级话题。引入笔者独创的连接延迟回收机制确保服务器工作的稳定性,对于epoll中水平触发模式下数据的发送进行极深入的讲解和代码实战,同时,对如何使用gdb调试一个崩溃的程序并找到程序中的bug进行了细致的演示。
第7章,画龙点睛之服务器安全与完善。完整实现了心跳包代码实战。为了服务器的安全,在控制连入数量、防范黑客攻击、应对畸形数据包方面,笔者都下了巨大的工夫。此外,为了确保服务器超负荷运转时能够及时被发现,笔者在项目中的很多关键位置设置了负荷检查,在出现需要警惕的状况时(例如收到太多数据包来不及处理、积压太多数据包发送不出去时)可及时进行日志输出。可以说,各种可能的安全问题都被笔者缜密地想到和解决了。此外,笔者还编写了一个比较完整的客户端测试程序,用于测试整个服务器框架程序。在本章的最后,探讨了惊群问题以及如何实现服务器程序的性能提升这个关键话题。
第8章,总结与展望。依据笔者20多年的开发经验,为读者提供一些笔者自己的所思所想,期望对读者有所帮助!
本书阅读进度
不排除有基础好和学习速度特别快的读者可以很快读完本书并掌握得很好,但通常来讲,笔者建议如下的阅读进度。
整本书一共8章36节,笔者建议大概每周学习1节或者3周学习2节。整本书后半部分内容(第5章起)比前半部分内容学习难度更大、篇幅更大,所以,后半部分内容每节的学习花的时间可能更多,但是平均下来,笔者认为每节学习10天还是能够做到的,这意味着整本书大概需要350天(1年)的学习时间。
笔者必须提醒读者,在学习本书的过程中: 本节的内容没学明白,绝不可以往下学。网络通信类知识,有其固有的难度,笔者有多年的经验积累并竭尽全力去讲述,但读者千万不可以理所当然地认为知识本身很简单。如果有某一节没学明白,后续学习就会越来越困难,甚至不得不放弃学习,这种情况笔者绝不希望在任何读者身上出现。基础差的读者,哪怕一节课看3遍甚至10遍,哪怕学习时间再加长1倍、2倍甚至更多倍,也绝不可以在没弄懂的情况下学习下一节!
在阅读过程中,读者绝不可以只用眼睛看或者只用耳朵听,一定要动起手来,对书中每个地方的内容、代码,都要亲自实践来验证,并且都要保证验证成功。学习中遇到任何困难,都可以及时找作者或者其他读者沟通。切记,动手实践的步骤,是加深对知识理解和掌握的步骤,一旦缺少这个步骤,你的记忆就不深,掌握的知识就不牢。
运行环境
本书的范例全部在Linux操作系统下用g 编译器编译通过并能正确运行。
部分测试程序在Windows操作系统下的Visual Studio 2019中创建,所以,Visual Studio 2019也是需要安装的。
笔者搭建的演示环境采用的是VMware Workstation虚拟机并在其中安装乌班图(Ubuntu)64位Linux操作系统,连接Linux的终端用的是Xshell,代码的编辑环境采用Visual Studio Code。
对于上述环境不熟悉的读者,建议笔者用什么你们就用什么,一丝一毫都不差,以免节外生枝,导致搭建环境若干天也搞不定,影响学习进度。在配套的学习资料中,笔者会提供相应的软件,可能软件版本有点老,但是丝毫不影响学习,读者没有必要去追求最新版本,除非安装这些最新版本出了问题你自己能够搞定。
对于搭建环境熟悉的,出了问题自己能解决的读者,是否用虚拟机、是否用乌班图Linux、用哪个终端以及什么编辑软件等问题,自己怎么习惯就怎么来,没有条条框框的限制。
资料获取
本书有完整的配套学习资料(源码),读者可以免费获取。获取方法如下。
(1) 请查找并关注“程序员速成”微信公众号。
(2) 在微信公众号中输入“通信架构”4个字,就可以获取配套学习资料下载链接。
读者评论
笔者在出版本书之前,有数月的时间,通过网络推出本书所讲述的内容,收到了大量学习者的反馈和很多极高的评价,99%的评论都是五星好评。这里摘录一部分评论留言:
- 狂想老师的课真的太精彩了,服务器端开发小白看了之后简直打通了任督二脉!夸! 狂夸!希望大家都来买狂想老师的课!
- 最近搞个AI的特性,用上了你讲的架构和epoll的接口设计,主管直接加薪5000元,加薪后超越30k元的月薪了。
- 老师讲得特别棒,全是干货。
- 课程讲得非常好,受益匪浅,谢谢老师。
- 我把老师的C 课程和对象模型都学习完了,前面两门课程讲得不错,思路清晰,特别是讲C 11一些新知识点,不是把知识点硬塞给你,而是为了解决某些问题引入。这门课程我也是第一时间入手,相信老师的能力。非常好的课程!
- 从老师的《C 从入门到精通 C 11/14/17》跟过来的,说良心话,老师讲得真不错,逻辑清晰,详略得当。五星好评!
- 讲得很细致,一些基础概念都有提及,照顾到我们这些新手,让我们能学到平常难以接触的知识,很好。
- 我是跟着老师的对象模型过来的,不得不说,真是非常好的课程。
- C 工作14年的老菜鸟来学艺,希望能得到质的飞跃!技术这东西不服牛人不行,有些地方自学不只是多走弯路的事儿,是根本入不了道。
- 这个课程真的非常棒,之前没什么项目经验,所以没信心,学完这个课之后感觉自己提升很多,学到了很多知识,自信心增加,对我找工作帮助很大,感谢老师!
- 老师讲得真心好,不知不觉帮我解决了很多工作中遇到的没有理解透的难点,非常实用。如果不听老师的课,这些仅靠自己真是太难了,感谢老师让从事8年C语言工作的我重拾信心。
- 正好新公司要我接手服务器框架。2倍速听完了老师的课程,对我理解公司的代码有很大的帮助。为来年月薪30k元努力!!!
笔者寄语
实战能力是长期培养起来的,没有什么捷径。最有效的方法就是看高手如何解决问题,看高手怎么思考,怎么深入问题。但平时工作中几乎没有高手会有时间教你这些。
这本书之所以非常珍贵,就是因为这里面蕴含着我对解决问题及实战的各种思考。但我发现很多同学对这门课程的认识不足,学习力度不够,导致学习效果不佳。
这不是看电影,你们买张票,我在台上演,你们在台下看。不是这样,是你们要到台上来,跟我一起演,而且你们的戏份比我还要重。
这本书可以让绝大多数还在上学的人只学习1~2年的时间,毕业之后就可以吊打毕业5~10年的各路开发高手,前提是,你肯下工夫学,并且还得能学通、学透。
另外,这本书不是为了拼凑各种知识,不是为了贪大求全,什么都讲,本书会集中火力,讲解一些笔者认为最有用的东西,当读者自己有了比较好的基础后,就能够快速地去领悟去学习新的东西了。
致谢
20年前,笔者写过一本《Crystal Reports水晶报表设计与开发实务》,这本书的编写实在是太辛苦,有3个多月,每天大概要写到后半夜3点才能休息。书完成之后,整个人瘦了好几圈。
虽然书有一定的销量,但是跟付出比感觉不成比例。所以,从那时候开始,笔者就暗下决心,从此以后再也不写书了。
人算不如天算,2018年下旬,笔者通过网络,逐步发布一些C/C 类网络课程。意外的是,这些课程获得了极好的口碑,隐隐有超越世面绝大多数C/C 类课程的趋势。在这个时候,清华大学出版社电子信息教材事业部主任、首席策划盛东亮先生找到笔者,希望笔者能够写一本优质的C/C 类书籍。
因为多年前出书的辛劳产生的心理阴影,笔者当时本能地拒绝了写书这件事,但在笔者的心里却从此埋下了写书的种子。
几个月之后,笔者终于想通了写书这件事,觉得有两点好处:
①帮助更多的读者掌握更多的C 开发知识,这是为笔者自己增加福报,也是为这个社会尽一点自己的微薄之力,做一个对社会有用的人;
②扩大一下自身的知名度,增加收入,毕竟笔者也需要挣更多的钱养家,通过自己的劳动赚取收入,这是光荣的。
当笔者把出书的想法说给盛东亮先生时,他非常高兴并与笔者做了深入的沟通。我们二人年纪相仿,聊得很投机,在写书这件事情上观点也非常一致——希望这是一本高质量的、经典的C 书籍,是一本可以摆在书架上10年甚至20年的书籍,如果仅让读者选那么二三本最好的C 书时,希望这是其中一本。我相信,读者从书名中也能感受到笔者对这本书的用心。
在出书的交流过程中,盛先生给予了笔者相当多的支持与鼓励。可以说,如果没有盛先生当初的接洽和后续顺畅愉快的交流,如果不是许多实际的工作都能在最短的时间敲定并逐一落实,这本书也许根本不会出现在读者面前。所以,这份感谢,笔者要送给盛东亮先生。
最后
C 知识体系庞杂,而Linux C 通信架构方面的知识又具有相当的深度和难度。虽然笔者尽心尽力,但因水平所限,书中存在疏漏之处在所难免,恳请广大读者发现问题后不吝指教。
编者2020年7月
(1)狂想老师的课真的太精彩了,服务器端开发小白看了之后简直打通了任督二脉!夸!狂夸!希望大家都来买狂想老师的课!
——学员 午夜螳螂
(2)*近搞个AI的特性,用上了你讲的架构和epoll的接口设计,主管直接加薪5000元,加薪后超越30k元的月薪了。
——学员 逆流顺流/mg
(3)我把老师的C 课程和对象模型都学习完了,前面两门课程讲的不错,思路清晰,特别是讲C 11一些新知识点,并不是拿出知识点硬塞给你,而是为了解决某些问题引入。这门课我也是*时间入手,相信老师的能力,非常好的课程!
——学员 三枪打死个麻辣烫
(4)老师讲的特别棒,全是干货。
——学员 小姜很优雅
(5)很感激遇到老师!其实作为一个不自信的女程序员,对自己的未来一直很迷茫和困惑。学习了课程之后有种拨开云雾见月明之感,课程对我的意义不仅仅是知识的储备,更是对自己未来的一个规划和起步,也让我知道了想要得到珍贵的东西就得先付出时间和努力。 谢谢老师,祝老师日进斗金。
——学员 眼镜猫咪
(6)C 工作14年的老菜鸟来学艺,希望能得到质的飞跃!技术这东西不服牛人不行,有些地方自己自学不只是多走弯路的事儿,是根本入不了道。
——学员 wx5823d
(7)感谢老师的课程,之前学习过C 课程,已经跟老师学习了三个月了,收获满满。老师的讲解不仅让我对C 语言本身和Linux通信相关知识有了深刻的理解,更重要的是让我有了学习这些技术的思路和方向。如果没有老师这精彩的课程,我这三个月的时间可能就浪费掉了。“师傅领进门,修行在个人”,老师不仅帮我打下了坚实的基础,更帮我开启了一扇门,感谢老师每一节课的认真讲解,期待老师的更多课程。
——学员 NapoleoneOne
(8)这门课程值得反复学习,*后融入到项目中去,老师的讲解真是清晰易懂,非常适合自学者。
——学员 牛客人
(9)这个课程真的非常棒,之前没什么项目经验,所以没信心,学完这个课之后感觉自己提升很多,学到了很多知识,自信心增加,对我找工作帮助很大,感谢老师!
——学员 ykt1508
(10)老师讲的真心好,不知不觉帮我解决了很多工作中遇到的没有理解透的难点,非常实用。如果不听老师的课,仅靠自己真是太难了,感谢老师让从事8年C语言工作的我重拾信心。
——学员 mathlxy
评论
还没有评论。