一、为什么参加 nginx 源代码培训?
1. 成为真正的架构师
在源代码级了解 nginx 所实现的 HTTP 协议处理功能,可以让你具备设计维护一个中大型网站整体架构的能力。
2. 成为 C 语言高手、开源级专家
nginx 源代码的变态级难度,可以锻炼你成为 C 语言底层高手、开源软件的业内行家。学完 nginx,你的能力可以参与大多数基础软件的开发(包括 Linux 内核);而阅读掌握其他的开源软件的源代码(如 mysql),对于你不再是问题。
3. 好工作
面对面试官深入讲解 nginx 源代码的数据结构、程序流程,以及高并发性能实现机制,可以让你轻松获得好公司的好职位。
二、nginx 是什么?
nginx 是一个俄罗斯程序员 Igor Sysoev 用 C 语言写的一个开源软件,主要用于互联网网站,负责接受客户端(PC网页、手机网页、手机App)的 HTTP 协议的请求,然后把请求分发给后端多个各种应用服务器(如 Tomcat、PHP 等)去处理,做负载均衡,然后再把后端传回来的结果页面,返回给前端。这种工作方式也被称作“反向代理”。
nginx 的官方网址:http://nginx.org
nginx 的特点是并发性能高,稳定,配置简单。目前发展成为最主流的负载均衡反向代理服务器,国内各大网站使用广泛。
在源代码层面,nginx 使用了 Linux 内核新提供的 epoll 功能,可以实现单进程单线程高速支持大并发量(万级)的连接与请求,并在此基础上采用了事件驱动的编程机制,这是目前软件行业为了支持高并发高性能,从多线程并发编程模式转向单线程异步事件驱动编程模式的优秀典范(Java领域有 Tomcat 到 Netty,也是在 Linux 上基于 epoll),再加上 nginx 的代码中 C 语言指针用得非常灵活(变态),所以 nginx 的源代码编程水平在业内也是得到广泛认可。
三、nginx 的源代码怎么学?
nginx 的源代码比一般开源软件的难读,自学的难度很高(国内不少程序员自学 nginx 源代码都半途放弃了),很容易在一些细节(如内存池)和难点(如配置文件的解析)等环节消耗过多时间精力,导致无功而返。因此跟着一个有源代码经验的老师学习,根据学生个人实际学习进展来安排学习节奏进度,充分的沟通与指导(避开非关键点,而关键代码逐行讲解),是保持持续的动力(不会半途而废)、减少时间消耗(降低成本)与越过难点(取得收获)的好方法。
跟着老师把 nginx 源代码的主要方面,包括主要程序流程、核心数据结构等,学习掌握后,自己就可以参与开源社区的交流,例如参与 nginx 官方社区的问题与解答,参与阿里 Tengine 的 pull request 的 review,以及其他第三方扩展应用(如 openresty)的 pull request 的 review 等,可以继续提高自己的水平,并获得业内的认可,逐步成为“传说中的牛人”。
四、百由工场的讲课老师水平如何?
我们的 nginx 源代码课程由鲁义明老师(技术马甲:百由)主讲。
鲁义明老师在 2013 年进行了 C 语言入门以及 Linux 入门的公开培训,然后在 2014、2015 年连续进行了两年的 nginx 源代码培训教学。目前从源代码的分析、教学,以及培养辅导学生方面,都积累了比较丰富的经验。两年中招收的学生都是工作三年左右、打算提高技术水平并提升职业规划发展的程序员,学成的学生有应聘到华为中研院的内核文件系统开发部门、游戏创业公司的后台负责、运营商的CDN部门等公司及部门任职。
鲁义明老师从1985年开始写代码(BASIC和汇编),一直到现在还从事软件开发工作。以前曾经在 A10Networks 的 Web 部门负责领导工作。A10Networks 与 F5、Citrix 等公司是业内主要的商业负载均衡产品供应商。
鲁义明老师现在的另外一个主要工作是为创业公司提供技术顾问服务(外包CTO),因此在行业技术的走向、创业发展机会方面,也始终跟随在行业的前沿。
五、具体的培训过程是什么样的?
老师指导学生搭建 nginx 源代码的开发与测试环境,指导学生去看 nginx 的官方文档,然后直接开始讲源代码,从 main( ) 函数开始。
具体的学习过程分为 7 级:
第 1 级:nginx 编译,测试环境的搭建。
第 2 级:nginx 模块编写,hello world 模块。
第 3 级:nginx 源代码,从 main( ) 函数到 ngx_init_cycle( ) 函数之前。
第 4 级:nginx 源代码,ngx_init_cycle( ) 函数。
第 5 级:nginx 源代码,多进程,事件(events)处理,HTTP 协议各阶段处理。
第 6 级:nginx 模块编写,某种复杂业务逻辑的模块(如大公司的应用需求的原型);或者一些 pull request 的 review。
第 7 级:参与 nginx 或分支的开发合作,如某个 feature 的开发或验证。
培训到第 7 级结束,达到毕业标准后颁发百由工场签发的毕业证书。
六、培训期多长时间?
6 个月。
第 1-3 级共 2 个月,是 nginx 的入门熟悉期、C 语言的入门熟悉期(针对以前没学过 C 语言的同学)、开发调试环境熟悉期,以及 nginx 从 main( ) 函数到 ngx_init_cycle( ) 函数之前的入门阶段。
第 4-7 级共 4 个月,进入 nginx 的实质性高难度代码阶段。根据往届学生的经历,第 3、4 两个月,学习压力是最大的。
七、具体的讲课方式以及上课时间?
线上大课与线下小课相结合。
线上大课每周一次,每次 2 个小时,一般安排在周末。线上大课一般讲共同的课程,照顾大多数同学的学习进度。
线上大课是通过打字、截屏、贴代码等方式进行的,讲课中随时可以停下来回答大家的问题,就单个技术点深入展开讨论。
线下,老师会每个月飞到学生所在城市,与学生面对面讲小课(一般在安静的咖啡馆),主要解决学生的个性化的问题。对于某些技术难点,老师可以给学生“手把手”的教、讲解。根据之前的教学经验,学生几乎或多或少都会遇到某几个难点(例如多级指针),自己大课后花费很多时间也研究不过去,基本都是通过老师面对面、手把手的讲解来解决的。
到培训中后期,学生对源代码掌握到一定程度后,我们会让学生在线上大课(或线下小课)中讲解自己阅读的源代码,老师进行指导纠正。这一方面是培养学生将来面试时讲解源代码的能力,另一方面也是学生将来工作中,进行团队内部协作,或者远程协作的良好工作方式与合作感觉。
我们没有视频教学。
八、什么时候开班?
目前没有开班计划。如果有开班,会在首页发通知。
九、学生开学后发现跟不上怎么办?
我们通过以下几个方面来解决这个问题。
第一,我们在招生报名时会进行面试,确实不合适的学生,我们也不建议报名学习。
第二,在开学后的两个月之内,或者在进入第 4 级学习之前,学生可以无条件退学,我们对全额交费的同学退还所有学费。
第三,学习过程中,针对学生的具体进度,我们可以对学生开展个性进度教学,为学生制定单独的学习进度。也会通过线下小课的方式,集中对学习进度落后的同学进行补课加量教学。
第四,对于某些学习期间遇到特殊情况的同学,可以在之后的一年内再免费参加一期学习。最多再参加一期。
十、培训过程中需要买什么教材或者参考书吗?
不需要任何教材或者参考书。
根据我们多年的开源代码阅读与开发经验,源代码是最好的文档!所以我们只教源代码,并且培养出来学生对任何一个新软件项目,都可以从头开始看源代码的能力与习惯。
另外,开源项目的官方文档是最好的产品功能说明书,可以帮助我们快速理解软件的功能。
当然,我们也知道网上有很多源代码的阅读笔记,也可以买到不错的源代码参考书,我们也不反对学生去看,我们只是希望学生最终会明白,看源代码比看参考书更简单直接明了。
写出来通俗易懂的源代码,是我们培养学生的重要方向。积累到一定阶段,我们希望学生阅读源代码,就像阅读散文或者小说一样。同样我们也希望学生将来能写出来优美优雅的源代码。
很不幸,nginx 的源代码,是这方面的“推理小说”,对学生是个挑战。
十一、学习及测试的环境是?
学员自备电脑,电脑中需要安装一个虚拟机,虚拟机里面安装一个 Linux(推荐 Ubuntu、CentOS)。nginx 的一般编译及调试都在 Linux 中进行。
学员如果要做实际网络测试,可以自行购买云主机(基本版一年500元左右),进行编译、安装、调试、测试与验证。
我们建议学生在云主机上开展学习及验证,用自己编译的 nginx 运营自己的一个小网站,面对网络中的各种实际访问,包括各种安全攻防,积累自己的经验,为自己的架构师之路打基础。
十二、在哪些城市招生?
目前主要在北京、深圳、南京、杭州、上海等城市招生。
其他城市的学生想报名也可以,上大课没问题,但是老师只能每两个月(甚至可能三个月)才能飞到学生所在的城市做面对面的小课教学。
十三、对报名学生的要求是?
有一定的编程基础及编程兴趣,符合以下之一即可:
写 C 语言超过 2 年;
写 C++ 超过 3 年;
写 Java、PHP、Javascript 等程序,或者其他程序,超过 5 年。
在校生达到上述标准的,也可以报名。
十四、学费是多少钱?
学费人民币 6 万元,报名时支付。
如果参加培训到两个月时,还不能达到 3 级标准,全额交费的学生可以申请退学费,全额退费。
学习两个月后,或者开始进入第 4 级学习后,不再退费。
非一次性全额交费的学生,申请退学时,不退费。
学习期满,未达到毕业标准的学员,可以申请参加下一个学习周期,最多只能再参加一次。
十五、是否有分期付款或助学贷款、学费代付?
目前没有。
十六、报名与录取方式
开班通知发布后会开始接受报名,最多招生10人,录满为止。
报名方式:请发简历到 service@xyouwork.com 报名。
报名后我们会安排面试。老师会到学生所在的城市约学生面谈,了解学生的详细情况,包括基础知识、学习能力、未来技术与职业的规划发展等。
面试通过后我们给学生发正式录取邮件。学生收到邮件后可以办理交学费事宜。
十七、咨询方式
微信ID:baiyou_luyiming
邮件:luyiming@xyouwork.com