本博客内容较多,请善用
Ctrl + F
作为程序员,编程当然是基础中的基础。
每个优秀的程序员,至少应该掌握并精通一门编程语言(根据自己的兴趣和技术方向选择)。
本人较为精通 Java ,且熟悉 C/C++/JavaScript,略懂 Shell/Python 等脚本语言。
Java 领域的知识点非常庞杂,我整理成了多个教程项目,每个项目都包含大量文档和代码。
Java 教程 📚 - 本人作为一名 Java 程序员,十年的技术积累,汇总与此。
JavaCore 教程 📚 - Java 核心技术教程。
- Java 基础 - 基本数据类型、类和对象、方法、数组、枚举、控制语句、异常、泛型、反射、注解
- Java 高级 - Java 正则、Java 编码和加密、Java 本地化、JDK8
- Java 容器
- Java 容器简介 - 关键词:
Collection
、泛型
、Iterable
、Iterator
、Comparable
、Comparator
、Cloneable
、fail-fast
- Java 容器之 List - 关键词:
List
、ArrayList
、LinkedList
- Java 容器之 Map - 关键词:
Map
、HashMap
、TreeMap
、LinkedHashMap
、WeakHashMap
- Java 容器之 Set - 关键词:
Set
、HashSet
、TreeSet
、LinkedHashSet
、EmumSet
- Java 容器之 Queue - 关键词:
Queue
、Deque
、ArrayDeque
、LinkedList
、PriorityQueue
- Java 容器简介 - 关键词:
- Java 并发
- Java 并发面试题集 💯
- Java 并发简介 - 关键词:
进程
、线程
- Java 线程基础 - 关键词:
Thread
、Runnable
、Callable
、Future
- Java 并发核心机制 - 关键词:
synchronized
、volatile
、CAS
、ThreadLocal
- Java 并发锁 - 关键词:
AQS
、ReentrantLock
、ReentrantReadWriteLock
、Condition
- Java 原子类 - 关键词:
CAS
、Atomic
- Java 并发容器 - 关键词:
ConcurrentHashMap
、CopyOnWriteArrayList
- Java 线程池 - 关键词:
Executor
、ExecutorService
、ThreadPoolExecutor
、Executors
- Java 并发工具类 - 关键词:
CountDownLatch
、CyclicBarrier
、Semaphore
- Java 内存模型 - 关键词:
JMM
、原子性
、可见性
、有序性
、Happens-Before
- JAVA IO
- Java IO 工具类 - 关键词:
File
、RandomAccessFile
、System
、Scanner
- Java BIO - 关键词:
InputStream
、OutputStream
、Reader
、Writer
- Java NIO - 关键词:
Channel
、Buffer
、Selector
、多路复用
- Java 序列化 - 关键词:
Serializable
、Externalizable
、ObjectInputStream
、ObjectOutputStream
、transient
- Java 网络编程 - 关键词:
Socket
、ServerSocket
、DatagramPacket
、DatagramSocket
- Java IO 工具类 - 关键词:
- Java 虚拟机
- JVM 内存区域 - 关键词:程序计数器、虚拟机栈、本地方法栈、堆、方法区、运行时常量池、直接内存、
OutOfMemoryError
、StackOverflowError
- JVM 垃圾收集 - 关键词:
GC Roots
、Serial
、Parallel
、CMS
、G1
、Minor GC
、Full GC
- JVM 字节码 - 关键词:
bytecode
、asm
、javassist
- JVM 类加载 - 关键词:类加载过程、
ClassLoader
、双亲委派、 - JDK 命令行工具 - 关键词:
jps
、jstat
、jmap
、jstack
、jhat
、jinfo
、jconsole
、jvisualvm
、MAT
- JVM 实战 - 关键词:VM 参数、分析、调优
- Java 故障排查 - 关键词:CPU、内存、磁盘、网络、GC
- JVM 内存区域 - 关键词:程序计数器、虚拟机栈、本地方法栈、堆、方法区、运行时常量池、直接内存、
JavaTech 教程 📚 - 汇总了 Java 开发中常见的主流技术的应用、特性、原理。
- 框架 - Spring 教程 📚、Spring Boot 教程 📚、Mybatis
- 缓存 - Redis 📚、Ehcache、Caffeine
- 消息队列 - Kafka 📚、RocketMQ、ActiveMQ
- 安全 - Shiro、Spring Security
- 测试 - Junit、Mockito、JMH
- 服务器 - Tomcat、Jetty、Nginx 📚
- RPC - Dubbo
如果说编程语言好比是武功招式,那么数据结构和算法就相当于是内功。要想成为编程高手,必须具备一定的数据结构和算法功底。
要想学好数据结构和算法,在我看来,就是多刷题。
数据结构和算法教程 📚 - 包含基本数据结构和算法的讲解和示例,以及平时在 leetcode 上刷题的代码。
数据库大体上可以分为关系型数据库和 Nosql 数据库。
关系型数据库的特性和原理,基本上大同小异。
Nosql 数据库就真的是各有各的不同了。
数据库教程 📚 - 本人接触的最多的数据库就是 Mysql、Redis,本教程内对于这两种数据库的特性和原理讲解比较细致,其他数据库内容没那么细致。
Mysql 📚
Redis 📚
- Redis 面试总结 💯
- Redis 入门指南 ⚡
- Redis 数据类型和应用
- Redis 持久化
- Redis 复制
- Redis 哨兵
- Redis 集群
- Redis 事务
- Redis 发布与订阅
- Redis 运维 🔨
linux-tutorial 📚 是一个 Linux 教程。
主要内容如下:
- Linux 命令 📚 是一个 Linux 常用命令行教程。
- Linux 系统运维 📚
- Linux 软件运维 📚
- Docker 教程 📚
大型软件为了应对海量数据、高并发,一般都会被设计为分布式系统。
分布式系统需要解决很多不同领域的问题。
- 系统原理面试题
- 基础理论
- 核心技术
- 缓存 - 关键词:
进程内缓存
、分布式缓存
、缓存雪崩
、缓存穿透
、缓存击穿
、缓存更新
、缓存预热
、缓存降级
- 负载均衡 - 关键词:
轮询
、随机
、最少连接
、源地址哈希
、一致性哈希
、虚拟 hash 槽
- 消息队列 - 关键词:
重复消费
、消息丢失
、消息顺序性
、消息积压
- 分布式存储 - 关键词:
读写分离
、分库分表
、迁移
、扩容
- 分布式锁 - 关键词:
数据库
、Redis
、ZooKeeper
、互斥
、可重入
、死锁
、容错
、自旋尝试
- 分布式 ID - 关键词:
UUID
、自增序列
、雪花算法
、Leaf
- 分布式事务 - 关键词:
2PC
、3PC
、TCC
、本地消息表
、MQ 消息
、SAGA
- 分布式会话 - 关键词:
粘性 Session
、Session 复制共享
、基于缓存的 session 共享
- 缓存 - 关键词:
- 微服务
如果你是做通信领域的开发,或者是 Web 应用的开发,那就或多或少需要了解一些计算机网络的知识 。
本人做 C 程序员时,从事过两年通信领域的开发,整理了一些基本的计算机网络知识点,汇总于此。
计算机网络面试题 💯
理解计算机网络,首先需要从宏观层面了解计算机网络通信的分层结构。最有代表性的是 OSI 七层结构模型,但现实中更流行的是五层结构模型(本人也比较倾向于这种模型)。
了解网络分层结构,需要了解每个网络层级在网络通信中的定位,以及这个层级主要的通信设备、通信协议。
- 计算机网络指南 - 关键词:核心概念、拓扑结构、作用范围、性能指标、体系结构
- 物理层 - 关键词:调制、解调、数字信号、模拟信号、通信媒介、信道复用
- 链路层 - 关键词:点对点信道、广播信道、
PPP
、CSMA/CD
、局域网、以太网、MAC
、适配器、集线器、网桥、交换机 - 网络层 - 关键词:
IP
、ICMP
、ARP
、路由 - 传输层 - 关键词:
UDP
、TCP
、滑动窗口、拥塞控制、三次握手 - 应用层 - 关键词:
HTTP
、DNS
、FTP
、TELNET
、DHCP
对计算机网络分层有了基本的认知后,可以根据个人的工作、学习需要,针对性的会接触到的协议或技术加深理解。
bigdata-tutorial 📚 是一个大数据教程。
🔰 知识储备:
不想做架构师的程序员不是好程序员,也写不出好代码。
体现架构师水平的,就是其架构设计功力。架构设计当然需要一定的方式方法,但是更重要的前提是:需要对系统涉及到的计算机科学的各个知识领域有宏观、微观的认知。只有理解才会运用,这就像战士不熟悉手里的武器,怎么能充分发挥战斗力呢?
所以,架构师需要不断拓展知识储备,厚积薄发。如果是一个通信系统,需要学习计算机网络;如果是一个分布式系统,需要了解分布式系统;如果要应对海量数据,需要学习大数据;如果使用了数据库,需要学习数据库。。。
简言之:路漫漫兮其修远,吾将上下而求索。
🔰 工具:
- UML - 架构设计,不画些 UML,实在说不过去。
- UML Cheat Sheet - 全面介绍 UML 各种图,也适合作为速查手册。
如果把软件开发工作比作是一场战争,那么系统架构无疑是战略层面的工作。众所周知,万丈高楼平地起,系统架构就像是软件的地基,如果一开始就歪了,那么代码写得再漂亮,软件也难以成功。
软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。重点是分而治之,先将大型系统抽象为各个组件或模块;然后逐一解决各组件、各模块的功能、性能问题;最后将这些组件、模块整合成对外服务的一个整体。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
- 单例模式 (Singleton Pattern)
- 简单工厂模式 (Simple Factory Pattern)
- 工厂方法模式 (Factory Method Pattern)
- 抽象工厂模式 (Abstract Factory Pattern)
- 构造者模式 (Builder Pattern)
- 原型模式 (Prototype Pattern)
- 适配器模式 (Adapter Pattern)
- 桥接模式 (Bridge Pattern)
- 装饰者模式 (Decorator Pattern)
- 组合模式 (Composite Pattern)
- 外观模式 (Facade Pattern)
- 享元模式 (Flyweight Pattern)
- 代理模式 (Proxy Pattern)
- 模板方法模式 (Template Method Pattern)
- 命令模式 (Command Pattern)
- 迭代器模式 (Iterator Pattern)
- 观察者模式 (Observer Pattern)
- 解释器模式 (Interpreter Pattern)
- 中介者模式 (Mediator Pattern)
- 职责链模式 (Chain of Responsibility Pattern)
- 备忘录模式 (Memento Pattern)
- 策略模式 (Strategy Pattern)
- 访问者模式 (Visitor Pattern)
- 状态模式 (State Pattern)
改善既有代码的设计。
关键词:过长函数、过大的类、基本类型偏执、过长参数列、数据泥团、switch 声明、临时字段、被拒绝的馈赠、异曲同工的类、发散式变化、霰弹式修改、平行继承体系、过多的注释、重复代码、冗余类、纯稚的数据类、夸夸其谈未来性、依恋情结、狎昵关系、过度耦合的消息链、中间人、不完美的库类
统一建模语言(英语 - Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。UML 是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML 展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
前端编程教程 📚 - 不会前端的后端不是好后端,这里是二手前端技术的总结。
- Regex Cheat Sheet - 全面介绍正则表达式,也适合作为速查手册。
- Markdown Cheat Sheet - 全面介绍 Markdown 语义。
- 静态网站生成器 - Hexo、Jekyll、hugo、VuePress、Gitbook(官方停止更新)、Docsify
- 版本控制 - Git、Svn、Github、Gitlab
- 持续集成 - Jenkins、gitlab-ci、travis-ci
方法论,是人们认识世界、改造世界的方法的理论。同样,项目管理、编程、写文档都应该有一定的方式方法,帮助我们合理、高效、快速的达成目标。