从零拆解大型 C/C++ 项目源码

文摘   2024-10-24 14:31   上海  

小方老师的《C/C++ 工程实践训练营》目前火热进行中。

在本次训练营中,小方老师将选择八个具有典型意义的 C/C++ 项目,并细粒度地剖析这些项目的源码,本次训练营的内容有两个维度的目标:

  • 学习 C/C++ 中大型项目的架构设计
  • 学习 C/C++项目具体组件的设计
  • 学习 C/C++ 实用开发技巧,在开发阶段规避大多数代码问题

我们常说一个人可以上的厅堂下得厨房,同样的道理,要想成为一名合格的架构,既要能总项目结构作出合理的设计,也要能写出具体模块的精细代码。架构设计方面包括程序的整体结构和消息流向,具体组件会涉及到多线程、日志模块、网络编程、设计模式、C++惯用法、Modern C++等常用知识点。

训练营目前有哪些项目?

目前小方老师已经给大家准备了 WebServer、即时通讯、文件服务器 3 个项目,剩下的 5 个项目会在开营后,由学员们推荐,然后遴选出具有代表性的项目进行讲解和学习。

如何剖析项目源码?

每个项目,小方老师会带着大家从整体架构的角度来剖析,比如对于 WebServer 项目,这是很多同学尤其是应届生同学接触最多的项目,但是一个高性能的 WebServer 项目应该如何设计呢?

我们会引入 One thread one loop 思想,在学习这个过程中,我们会涉及到自定义事件如何投递,接着小方将介绍唤醒机制。再比如这个模型要基于多线程,那么会涉及到多线程的编码知识,这样我们会引入多线程的介绍。

这是整体结构方面,再说具体的组件方面或者细粒度的代码方面。具体例子,对于日志模块,我们如何高效地输出日志呢?目前主流的日志框架设计由同步日志和异步日志,异步日志引入双缓冲区技术,再比如输出日志时,我们的日志既不能太多也不能太少,经常会听到某些言论说,某某日志性能可以达到每条输出上万条,那这种真的是日志组件需要考虑的问题吗?

再例如一些细粒度的代码,例如为什么 C++20 引入了 std::jthread,原来的 std::thread 存在什么问题?

再看下面的代码,实际开发中存在效率问题吗?如何写更好?

for (std::string str : strings) {
 //...
}

再比如,如果我要设计一个接口类,我只想给使用接口的人暴露指定的函数,但是实现上定义了很多的成员变量,接口的头文件会提供给用户,用户可以通过这个头文件中定义的成员变量猜测出我的实现,有办法避免吗?

再比如说,有个同学在微信上私聊小方老师,小方老师一眼就看出来大致是什么原因。聪明的读者,你能看出来吗?

接着这位同学贴出了他的代码,小方老师一看就知道这段代码存在两处可能存在崩溃的地方。

最后小方老师告诉他,在工作十余年,小方老师的代码从来不会出现这样的问题,所以到底有没有一种方式可以避免这类问题?

在这个训练营中,小方老师会介绍各种实际开发中避坑的工程实践做法。

非 C/C++ 的同学可以报名这个训练营吗?

只要有一门编程语言基础,例如 C,都可以。人常说,工欲善其事,必先利其器,既然是工程实践,在这个训练营中,小方老师也会介绍各种 C 和 C++ 的开发、调试技巧,尤其是对于大型项目,或者陌生的开源项目,能够调试,调试是一种非常实用、便捷的方式,调试并不是漫无目的地逐行代码运行,而不是毫无目的地加断点追踪,尤其是在一些复杂的多线程程序调试,调试技巧和方法尤其重要,这是学员们通过这个训练营可以得到的知识。

从来学习 C/C++ 并不是一定为了做 C/C++ 开发,而是选择了一门离操作系统、离网络更近的编程语言,更好滴学习操作系统和网络的运行机制和原理。所以,其他语言的同学,不用担心跟不上,训练营会为这部分同学解决开发环境问题。

训练营学习周期和时间安排

由于源码类的课程需要准备和学习的时间较长,此次的安排是隔周两次课,即当前周两次课,下周休息一周大家学习,再下一周两次课,每次的开课时间一天是选在工作日的晚上(9 点)和另一天安排在非工作日的晚上(8点),具体的时间会在训练营配套的知识星球中进行投票,每次会选一个大多数同学比较方便的时间。

为所有学员提供回放、课件和源码。

课程周期大约 2~3 月,实际进度根据学员的情况进行加餐和调整。

训练营适合哪些人群?

  • 寻找项目经验的同学
  • 项目实践不够的同学
  • 工作几年、不能从全局和架构角度设计生产项目的同学
  • 适合客户端或者其他语言想转 C/C++ 开发的同学
  • 因无项目经验找不到工作的同学
  • 技术经验不足担心被“优化的同学

训练营不适合哪些同学?

  • 提问问题态度恶劣,老气横秋的人;

  • 叶公好龙、三分钟热度的人;

  • 对自己不负责,懒于提高的人;

  • 把学习当作别人的事情,缺少主观能动性的人。

训练营定价

目前定价是 2200,人数每增长 5 人,费用增加 200。

知识星球和往期训练营同学八折优惠

需要报名的同学可以加微信 cppxiaofang,加微信请备注“训练营报名”,非诚勿扰。

训练营提供为期一年的技术支持,技术支持包括技术问题解答、职业指导、模拟面试、简历review、大厂内推等,有效期内无次数限制。

相关阅读

C/C++ 网络编程实战训练营 一期录像 限时特惠

C/C++ 网络编程二期录像 限时特惠

CppGuide
专注于高质量高性能C++开发,站点:cppguide.cn
 最新文章