《孤勇者》这首歌里有几句歌词,”爱你不跪的模样,爱你对峙过绝望,不肯哭一场…战吗 战啊 以最卑微的梦…谁说站在光里的才算英雄。”写的真好,各行各业的从业者,更多的如同歌词中的孤勇者一样,在黑暗中默默前行,即使满身污泥也绝不放弃,我们是宇宙的尘埃,却是自己的英雄,谁说站在光里的才算英雄。经过了入门篇的学习,我们已经开始在黑暗中前行了,希望此文能给在黑暗中前行的你和我点亮一盏灯,指引着我们前进。本篇延续入门篇的一些方向迈进一步,称之为进阶,也会附上笔者当年的学习笔记供大家参考。这个篇章顺利进阶便能够进入到高级工程师和初级架构师的水准了,加油,坚持。文章的推荐资源会优先将官方一手资料和文档放在前面,随后是基础、进阶、高级、大牛的顺序推荐。

编程语言进阶

在专业篇,我会推荐给大家四门语言的学习资料和路径,分别是.NET、Java、C、Go。有人或许会问为什么不推荐“宇宙第一”的C++,主要是因为C++的学习周期过长且学习成本太高,本身介于C和Java之间的C++,因为其复杂的知识在一些领域慢慢被其他语言所替代,当然它还是牛的,毕竟现今主流的浏览器、数据库、Microsoft Office、图形界面、游戏引擎都是C++开发的,看个人选择,这里笔者因精力有限不想涉足,不过在技术集散地中会推荐给大家一些关于C++的一些资料和技术博客。

.NET

很多人会把C#理解为.NET,其实.NET是一个大而全的平台,就目前最牛的还得是Unity。因为巨硬(微软)拥抱开源的时间有点晚,.NET在国内的生态并不好,不过随着跨平台、云、收购Github、收购动视暴雪等系列操作下来,个人很看好.NET的发展,C#写着也爽啊,多优雅呀,硬爽就完事了。下面推荐.NET一些学习资料,从入门到放弃?(不对,从入门到精通),深入理解其中的编程范式和设计思想尤为重要,拆解语法糖背后的实现原理,是成长为.NET高级工程师必经之路。

编程工具

工欲善其事必先利其器,一个合格的程序员首先要用好自身工具,关于很多优秀工具可以去GZH【DotNet技术官】-人间晚晴专栏中“来自程序员的器”那篇文章中查阅。Visual Studio Code和Git入门在入门篇中已推荐相关学习资源。

  • Git | Git Pro
  • B站 | Visual Studio 2022教程
  • B站 | IDEA2022教程
  • Tool | 超完整的Chrome浏览器客户端调试大全
  • Tool | MySQL NDB

    数据结构与算法

    学习算法是痛苦的过程,因为这是一场智力的挑战,不过在慢慢刷题的过程中,你会发现自己的意志力变得极其强韧(感谢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

  • Mysql | MySql官方文档

  • 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》:介绍了非关系型数据库的基础知识和一些实际案例。

    设计模式

    这里设计模式只做入门推荐,后续在成长篇会详细介绍。

  • Book |《大话设计模式》

实战项目

项目需求1-聊天服务器

  • 每个客户端可以用使用telnet ip:port的方式连接到服务器上。
  • 新连接需要用用户名和密码登录,如果没有,则需要注册一个。
  • 然后可以选择一个聊天室加入聊天。
  • 管理员有权创建或删除聊天室,普通人员只有加入、退出、查询聊天室的权力。
  • 聊天室需要有人数限制,每个人发出来的话,其它所有的人都要能看得到。

    项目需求2-生产者 / 消费者消息队列服务

  • 消息队列采用一个 Ring-buffer 的数据结构。

  • 可以有多个 topic 供生产者写入消息及消费者取出消息。
  • 需要支持多个生产者并发写。
  • 需要支持多个消费者消费消息(只要有一个消费者成功处理消息就可以删除消息)。
  • 消息队列要做到不丢数据(要把消息持久化下来)。
  • 能做到性能很高。

    项目需求3-搭建个人网站

  • 模仿StackOverFlow/Github。