编程 📚
作为程序员,职业生涯的第一步,当然是掌握并精通至少一门编程语言。
编程入门推荐:Python、JavaScript
编程进阶推荐:C、C++、Java、Go(应该至少精通一门)
Java 领域的知识点非常庞杂,我整理成了多个教程项目,每个项目都包含大量文档和代码。
- Java 教程 📚 - 本人作为一名 Java 程序员,十年的技术积累,汇总与此。
- JavaCore 教程 📚 - Java 核心技术教程。内容包含:Java 语法基础特性、Java 语法高级特性、Java 并发、JVM、Java IO/NIO 、Java 容器等。
- JavaWeb 教程 📚 - 内容包含:JavaEE(Servlet、Jsp 等)、JavaWeb 主流技术及框架(Mybatis、Ehcache、Shiro、Quartz 等)。
- Spring 教程 📚 - Spring 框架实战教程。
- Spring Boot 教程 📚 - Spring Boot 框架实战教程。
- Spring Cloud 教程 [TODO]
如果说编程语言好比是武功招式,那么数据结构和算法就相当于是内功。要想成为编程高手,必须具备一定的数据结构和算法功底。
要想学好数据结构和算法,在我看来,就是多刷题。
数据结构和算法教程 📚 - 包含基本数据结构和算法的讲解和示例,以及平时在 leetcode 上刷题的代码。
- 数据结构和算法指南
- 复杂度分析 - 关键词:
时间复杂度
、空间复杂度
、大 O 表示法
、复杂度量级
- 数组和链表 - 关键词:
线性表
、一维数组
、多维数组
、随机访问
、单链表
、双链表
、循环链表
- 栈和队列 - 关键词:
先进后出
、后进先出
、循环队列
- 线性表的查找
- 线性表的排序
- 跳表 - 关键词:
多级索引
- 哈希表 - 关键词:
哈希函数
、装载因子
、哈希冲突
、开放寻址法
、拉链法
- 树和二叉树 - 关键词:
二叉树
、满二叉树
、完全二叉树
、前序遍历
、中序遍历
、后序遍历
、二叉查找树
- 堆
- B+树
- LSM 树
- 字典树
- 图
数据库大体上可以分为关系型数据库和 Nosql 数据库。
关系型数据库的特性和原理,基本上大同小异。
Nosql 数据库就真的是各有各的不同了。
数据库教程 📚 - 本人接触的最多的数据库就是 Mysql、Redis,本教程内对于这两种数据库的特性和原理讲解比较细致,其他数据库内容没那么细致。
大型软件为了应对海量数据、高并发,一般都会被设计为分布式系统。
分布式系统需要解决很多不同领域的问题。
- 系统原理面试题
- 分布式基础理论 - 关键词:拜占庭将军问题、CAP、BASE
- 分布式事务 - 关键词:2PC、3PC、TCC、本地消息表、MQ 消息、SAGA
- 负载均衡 - 关键词:轮询、随机、最少连接、源地址哈希、一致性哈希
- 缓存 - 关键词:进程内缓存、分布式缓存、缓存雪崩、缓存穿透、缓存击穿、缓存更新、缓存预热、缓存降级
- 消息队列 - 关键词:重复消费、消息丢失、消息顺序性、消息积压
- 分布式锁
- 分布式会话 - 关键词:粘性 Session、Session 复制共享、基于缓存的 session 共享
- 分布式存储
- 分布式 ID - 关键词:UUID、自增序列、雪花算法、Leaf
- 分库分表
- RPC
计算机网络 📚
如果你是做通信领域的开发,或者是 Web 应用的开发,那就或多或少需要了解一些计算机网络的知识 。
理解计算机网络,首先需要从宏观层面了解计算机网络通信的分层结构。最有代表性的是 OSI 七层结构模型,但现实中更流行的是五层结构模型。
了解网络分层结构,需要了解每个网络层级在网络通信中的定位,以及这个层级主要的通信设备、通信协议。
- 物理层 - 关键词:调制、解调、数字信号、模拟信号、通信媒介、信道复用
- 数据链路层 - 关键词:点对点信道、广播信道、
PPP
、CSMA/CD
、局域网、以太网、MAC
、适配器、集线器、网桥、交换机 - 网络层 - 关键词:
IP
、ICMP
、ARP
、路由 - 传输层 - 关键词:
UDP
、TCP
、滑动窗口、拥塞控制、三次握手 - 应用层 - 关键词:
HTTP
、DNS
、FTP
、TELNET
、DHCP
对计算机网络分层有了基本的认知后,可以根据个人的工作、学习需要,针对性的会接触到的协议或技术加深理解。
大数据教程 📚
- Hive 教程 📚
- Hdfs 教程 📚
- Hbase 教程 📚
- Zookeeper 教程 📚
- Kafka 教程 📚
TODO:有待完善,不断补充。。。
TODO:有待完善,不断补充。。。
🔰 知识储备:
不想做架构师的程序员不是好程序员,也写不出好代码。
体现架构师水平的,就是其架构设计功力。架构设计当然需要一定的方式方法,但是更重要的前提是:需要对系统涉及到的计算机科学的各个知识领域有宏观、微观的认知。只有理解才会运用,这就像战士不熟悉手里的武器,怎么能充分发挥战斗力呢?
所以,架构师需要不断拓展知识储备,厚积薄发。如果是一个通信系统,需要学习计算机网络;如果是一个分布式系统,需要了解分布式系统;如果要应对海量数据,需要学习大数据;如果使用了数据库,需要学习数据库。。。
简言之:路漫漫兮其修远,吾将上下而求索。
🔰 工具:
- UML - 架构设计,不画些 UML,实在说不过去。
- UML Cheat Sheet - 全面介绍 UML 各种图,也适合作为速查手册。
如果把软件开发工作比作是一场战争,那么系统架构无疑是战略层面的工作。众所周知,万丈高楼平地起,系统架构就像是软件的地基,如果一开始就歪了,那么代码写得再漂亮,软件也难以成功。
软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。重点是分而治之,先将大型系统抽象为各个组件或模块;然后逐一解决各组件、各模块的功能、性能问题;最后将这些组件、模块整合成对外服务的一个整体。
设计模式教程 📚 - 软件设计中常见问题的典型解决方案。
- 创建型模式:创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性。
- 结构型模式:结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
- 行为型模式:行为模式负责对象间的高效沟通和职责委派。
重构教程 📚 - 改善既有代码的设计。
重构是不改变软件系统外部行为的前提下,改善它的内部结构。
前端编程教程 📚 - 不会前端的后端不是好后端,这里是二手前端技术的总结。
工欲善其事,必先利其器
- Git
- 正则表达式极简教程 - 全面介绍正则表达式,也适合作为速查手册。
- Markdown 极简教程 - 全面介绍 Markdown 语义。
- Travis CI 极简教程
- 电子书生成器
- Gitbook 教程 📚 - Gitbook 可以根据 Markdown 生成电子书。我整理了一个教程,并包含了几个常用模板。
- Docsify - 类似 Gitbook,可以根据 Markdown 生成电子书。比 Gitbook 更方便,官方手册很详尽。
方法论,是人们认识世界、改造世界的方法的理论。同样,项目管理、编程、写文档都应该有一定的方式方法,帮助我们合理、高效、快速的达成目标。