《孤勇者》这首歌里有几句歌词,”爱你不跪的模样,爱你对峙过绝望,不肯哭一场…战吗 战啊 以最卑微的梦…谁说站在光里的才算英雄。”写的真好,各行各业的从业者,更多的如同歌词中的孤勇者一样,在黑暗中默默前行,即使满身污泥也绝不放弃,我们是宇宙的尘埃,却是自己的英雄,谁说站在光里的才算英雄。经过了入门篇的学习,我们已经开始在黑暗中前行了,希望此文能给在黑暗中前行的你和我点亮一盏灯,指引着我们前进。本篇延续入门篇的一些方向迈进一步,称之为进阶,也会附上笔者当年的学习笔记供大家参考。这个篇章顺利进阶便能够进入到高级工程师和初级架构师的水准了,加油,坚持。文章的推荐资源会优先将官方一手资料和文档放在前面,随后是基础、进阶、高级、大牛的顺序推荐。
编程语言进阶
在专业篇,我会推荐给大家四门语言的学习资料和路径,分别是.NET、Java、C、Go。有人或许会问为什么不推荐“宇宙第一”的C++,主要是因为C++的学习周期过长且学习成本太高,本身介于C和Java之间的C++,因为其复杂的知识在一些领域慢慢被其他语言所替代,当然它还是牛的,毕竟现今主流的浏览器、数据库、Microsoft Office、图形界面、游戏引擎都是C++开发的,看个人选择,这里笔者因精力有限不想涉足,不过在技术集散地中会推荐给大家一些关于C++的一些资料和技术博客。
.NET
很多人会把C#理解为.NET,其实.NET是一个大而全的平台,就目前最牛的还得是Unity。因为巨硬(微软)拥抱开源的时间有点晚,.NET在国内的生态并不好,不过随着跨平台、云、收购Github、收购动视暴雪等系列操作下来,个人很看好.NET的发展,C#写着也爽啊,多优雅呀,硬爽就完事了。下面推荐.NET一些学习资料,从入门到放弃?(不对,从入门到精通),深入理解其中的编程范式和设计思想尤为重要,拆解语法糖背后的实现原理,是成长为.NET高级工程师必经之路。
- Microsoft | .NETSourceCode:.NET源码查看,学习源码必备。
- Microsoft | 官方中文学习文档:官方中文学习文档,微软的文档写的很棒,后续大家学习最新的版本可以直接去查阅官方文档。
- Book | 《C#图解教程第四版》:非常好用的入门书籍,上面的图解很通俗易懂,强烈推荐。语雀 | C#图解教程学习笔记
- Book | Essential C#:微软MVP写的一本书,剖析C# 语雀 | C#本质论学习笔记
- B站 | C#入门详解:这个应该是中文C#入门第一视频了,刘铁猛老师的工匠精神在其中深刻体现,也给了我很多启发和思考。语雀 | C#入门详解学习笔记
- B站 | C#入门详解二期:时隔多年,刘铁猛老师推出的二期,还在更新中,笔者会第一时间迁移视频过来。
- Book | 《C#多线程编程实战第二版》》:基础知识夯牢后,在实际工作中会慢慢开始接触到多线程的需求了,这里推荐给大家这本,从最开始的线程基础到线程池、任务并行库、C#6.0异步、并发集合、PLINQ等介绍的很好,还有一些锁的知识。语雀 | C#多线程学习笔记
- Book | 《C#高级编程》:字典书当然也可以查微软的文档,厚到可以当枕头。
- Book |《深入浅出WPF》:这本书是为数不多的介绍WPF技术的,也是刘铁猛老师写的,如果有想开发桌面端应用的可以学习下,现在MAUI跨平台技术还不够成熟,桌面端的主流还是Winform和WPF,在学习WPF的时候,要多去体会依赖树和MVVM设计思想。推荐另外两本WPF的书,Book |《WPF编程宝典》Book | 《葵花宝典:WPF自学手册》。语雀 | WPF学习笔记
- Book |《深入浅出ASP.NET Core》:介绍ASP.NET Core的开发,可快速浏览。语雀 | 深入浅出ASP.NET Core学习笔记
- B站 | .NET6开发:杨中科老师关于.NET6的介绍,涉及到最新特性、高级语法、ADO.NET、ASP.NET Core等。语雀 | .NET6学习笔记
- Book | 《ASP.NET Core框架揭秘》:主要阐述 ASP.NET Core 最核心的部分——请求处理管道。
- Book | 《ASP.NET Core微服务实战》:微服务入门书籍,开发微服务,并非只是学习一个特定框架或一门编程语言,而要开发能适应弹性伸缩环境、独立于托管容器、能随时启停的应用。后面在成长篇会单独出一期微服务开发。
Book | 《.NET内存管理宝典》:.NET内存管理的内部工作原理、陷阱和技术,深入了解GC的工作原理。
Java
国内Java环境还是很棒的,各大公司框架、架构很多用的都是Java,学习资料也超级多,这里推荐一些必读的书籍,这是一条通往高级Java工程师之路。
Book | 《Java核心技术卷一》:入门参考书,书中有较多地方进行 Java 与 C++ 的比较,也可以借着此书开启C++的学习之路。
- Book | Spring实战第四版:搞Java的得懂Spring吧,不过这本书说的是传统的 Spring。
- Book | Spring Boot实战:新式的微服务的Spring。
- Book | Effective Java:经验之书,感觉Effective系列都挺不错的,值得一读,培养自己如何高效的编码,配合这本书实战的项目是Github | Google Guava,不但是JDK的升级版本,更是这本书的最佳实践之一。
- Book | Java并发编程:介绍了基本类库提供的并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则,将小的线程安全类组合成更大的线程安全类,利用线程来提高并发应用程序的吞吐量,识别可并行执行的任务,提高单线程子系统的响应性,确保并发程序执行预期任务,提高并发代码的性能和可伸缩性等实践方案
- Book | 《Java性能权威指南》:较大程度地提升性能测试的效果,其中包括:使用 JDK 中自带的工具收集 Java 应用的性能数据,理解 JIT 编译器的优缺点,调优 JVM 垃圾收集器以减少对程序的影响,学习管理堆内存和 JVM 原生内存的方法,了解如何最大程度地优化 Java 线程及同步的性能等。
- Book | 《Java编程思想》:宏观角度了解 Java,对于Java中高级工程师必读书目。
- Book | 《精通Spring 4.x》:防身类巨厚书籍,分析原理讲解的很透彻。
- Book | 设计模式:设计模式中经典中的经典
Book | Head First 设计模式: 带领进入设计模式的世界,不要迷失在其中,牢记SOLID五大原则。
C
底层无可替代的语言,嵌入式领域的No.1。推荐三本书。
Book | 《C程序设计语言》:C 语言之父 Dennis M. Ritchie 和著名科学家 Brian W. Kernighan 合作的圣经级的教科书。
- Book | C语言程序设计现代方法:完整覆盖了 C99 标准,习题的质量和水准也比较高。更好的是,探讨了现代编译器的实现,以及和 C++ 的兼容,还揭穿了各种古老的 C 语言的神话和信条。
Book | 《C陷阱与缺陷》:C中的系列巨坑。
Go
C 语言太原始了,C++ 太复杂了,Go 语言是不二之选。如果你要写一些 PaaS 层的应用,Go 语言会比 C 和 C++ 更好,目前和 Java 有一拼。而且,Go 语言在国内外一些知名公司中有了一定的应用和实践。结合官方文档和李文周博客入门还是比较轻松的,觉得看的无聊也可以去B站随便搜一个视频跟着学(不过笔者认为这样效率很低)。
- Go | 标准库文档
- Blog | 为什么要学习Go
- Go | 李文周博客:写的比较全面,B站也有配套视频,不错的中文资料。
- B站 | Go语言入门:韩顺平老师的入门视频,很基础,建议直接跳到需要的地方1.5/2倍速播放。
- Github | Go经典文章
- Github | Go优秀Blogs
- Github | GoTalks
编程工具
工欲善其事必先利其器,一个合格的程序员首先要用好自身工具,关于很多优秀工具可以去GZH【DotNet技术官】-人间晚晴专栏中“来自程序员的器”那篇文章中查阅。Visual Studio Code和Git入门在入门篇中已推荐相关学习资源。
- Git | Git Pro
- B站 | Visual Studio 2022教程
- B站 | IDEA2022教程
- Tool | 超完整的Chrome浏览器客户端调试大全
-
数据结构与算法
学习算法是痛苦的过程,因为这是一场智力的挑战,不过在慢慢刷题的过程中,你会发现自己的意志力变得极其强韧(感谢LeetCode的折磨,哈哈哈)。
Book | 《大话数据结构》:写的特别精彩,图解很棒,特别适合用来自学。
- Tool | 数据结构动画图:动画展示数据结构的变化过程,配合大话数据结构这本书,相当好用,印象深刻,不易忘。
- Book | 《数据结构与算法分析》:国外大学教材,广受好评。
- Book | 《算法图解》:本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法。二分查找、大O表示法、两种基本的数据结构以及递归等
- Book | 《算法》:法领域经典的参考书,不但全面介绍了关于算法和数据结构的必备知识,还给出了每位程序员应知应会的 50 个算法,并提供了实际代码。
- Book | 《算法导论》:很经典的偏于理论方面的书。
- Book | 《编程珠玑》:很经典的算法书,其中都是一些非常实际的问题,并以其独有的洞察力和创造力,来引导读者理解并学会解决这些问题的方法,也是一本可以改善你思维方式的书。
- Wiki | 算法字典List of algorithms:超级多的算法,可以把这个网站作为算法字典来查阅。
LeetCode : 不用说了,刷题必备,想拿到大厂Offer,不刷题基本没戏,除非你是巨佬,可惜我们都是普通人,刷就完事了。坚持很重要,也可以和朋友一起打比赛,有一点现金奖励。刷题的过程笔者觉得也是锻炼你编程能力最快的方式。
网络模型
Book | 《图解TCP/IP》:计算机网络入门书籍
- Blog | The TCP/IP Guide
- Book | 《TCPIP详解卷一》:TCPIP最牛的一本书了。
- Book | 《TCP/IP网络编程》:介绍网络编程基础、操作系统等知识。
- Book | 《计算机网络:自顶向下方法》:从应用层开始沿协议栈向下讲解计算机网络的基本原理,强调应用层范例和应用编程接口,内容深入浅出,注重教学方法,理论与实践相结合。
- Book | 《Wireshark数据包分析实战》:实战工具,用Wireshark来抓包分析包。
Blog | Let’s code a TCP/IP stack.:一些列关于TCPIP的博客。
计算机原理
B站 | 计算机组成原理:讲解的比较通俗易懂,还在更新中。
Book | 计算机程序的构造和解释 : 美国麻省理工学院(MIT)多年使用的一本教材。本书中主要证实了很多程序是怎么构造出来的,以及程序的本质是什么。整本书主要是使用 Scheme/Lisp 语言,从数据抽象、过程抽象、迭代、高阶函数等编程和控制系统复杂性的思想,到数据结构和算法,到编译器 / 解释器、编程语言设计。
操作系统
Book | 《现代操作系统》:书中集中讨论了操作系统的基本原理,包括进程、线程、存储管理、文件系统、输入 / 输出、死锁等,同时还包含了有关计算机安全、多媒体操作系统、掌上计算机操作系统、微内核、多核处理机上的虚拟机以及操作系统设计等方面的内容。
- Book | 《深入理解计算机系统》:程序员所需了解的一些计算机知识。极其好的一本书,必读书目。本书从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性。
- Book | 《UNIX环境高级编程》:UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容
- Book | 《UNIX网络编程卷1》
Book | 《UNIX网络编程卷2:进程间通信》:此书从对Posix IPC和System V IPC的内部结构开始讨论,全面深入地介绍了4种IPC形式:消息传递(管道、FIFO、消息队列)、同步(互斥锁、条件变量、读写锁、文件与记录锁、信号量)、共享内存(匿名共享内存、具名共享内存)及远程过程调用(Solaris 门、Sun RPC)。
编译原理
Book | 《编译原理》:传说中的“龙书”,相当催眠,需反复阅读理解。本书深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。
数据库系统
主流的数据库关系型数据库和非关系型数据库,在专业篇各推荐一个,MySQL关系型数据库和非关系型数据库Redis/MongoDB
- Book | 《MySQL必知必会》:数据库入门基础书籍,可以应对绝大部分业务需求(小业务量)。
- Book | 《数据库系统概念》:数据库系统方面的经典教材之一,国外很多大学的教科书。
- Book | 《高性能MySQL》:这本书是 MySQL 领域的经典之作,拥有广泛的影响力。不但适合数据库管理员(DBA)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,都能从本书中有所收获。
- Book | 《MySQL技术内幕》:从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,能帮助你系统而深入地掌握InnoDB,更重要的是,它能为你设计管理高性能、高可用的数据库系统提供绝佳的指导。
- Book | 《数据库索引设计与优化》:通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL 运行的CPU 时间及执行时间,帮助读者从原理上理解SQL、表及索引结构、访问方式等对关系型数据库造成的影响,并能够运用量化的方法进行判断和优化,指导关系型数据库的索引设计。
- Blog | MySQL优秀工具和资源
- Blog | Learn Redis the hard way
Book | 《左手MongoDB,右手Redis》:介绍了非关系型数据库的基础知识和一些实际案例。
设计模式
这里设计模式只做入门推荐,后续在成长篇会详细介绍。
实战项目
项目需求1-聊天服务器
- 每个客户端可以用使用telnet ip:port的方式连接到服务器上。
- 新连接需要用用户名和密码登录,如果没有,则需要注册一个。
- 然后可以选择一个聊天室加入聊天。
- 管理员有权创建或删除聊天室,普通人员只有加入、退出、查询聊天室的权力。
聊天室需要有人数限制,每个人发出来的话,其它所有的人都要能看得到。
项目需求2-生产者 / 消费者消息队列服务
消息队列采用一个 Ring-buffer 的数据结构。
- 可以有多个 topic 供生产者写入消息及消费者取出消息。
- 需要支持多个生产者并发写。
- 需要支持多个消费者消费消息(只要有一个消费者成功处理消息就可以删除消息)。
- 消息队列要做到不丢数据(要把消息持久化下来)。
-
项目需求3-搭建个人网站
模仿StackOverFlow/Github。