- Java197
 - 编程8
 - 设计78
 - DevOps8
 - 数据结构和算法16
 - 数据库101
 - 网络19
 - 分布式74
 - 大数据33
 - 软件工程3
 - 工作8
 - 笔记30
 - JavaSE61
 - JavaEE15
 - 软件20
 - 工具37
 - 框架68
 - 中间件9
 - 编程范式4
 - 编程语言3
 - Python6
 - 架构31
 - 设计模式27
 - 重构7
 - DDD2
 - UML4
 - 综合22
 - 监控2
 - 线性表4
 - 树6
 - 数据库综合3
 - 数据库中间件4
 - 关系型数据库20
 - 文档数据库12
 - KV数据库19
 - 列式数据库14
 - 搜索引擎数据库25
 - 网络综合8
 - 网络协议6
 - 网络技术4
 - 操作系统13
 - 操作系统应用2
 - 分布式综合3
 - 分布式理论12
 - 分布式协同13
 - 分布式调度6
 - 分布式高可用1
 - 分布式通信31
 - 分布式存储7
 - hadoop7
 - hive8
 - spark1
 - flink9
 - 其他15
 - 人工智能1
 - 基础特性15
 - 高级特性7
 - 容器7
 - IO10
 - 并发12
 - JVM12
 - JavaWeb6
 - 服务器8
 - 构建9
 - IDE4
 - 监控诊断6
 - JavaBean2
 - 模板引擎4
 - 测试5
 - Spring61
 - ORM3
 - 安全8
 - 缓存5
 - 流量控制2
 - 微服务5
 - 解决方案8
 - Git3
 - Shardingsphere2
 - Mysql10
 - 数据库``1
 - MongoDB11
 - Redis17
 - HBase12
 - Elasticsearch16
 - Elastic8
 - Linux11
 - 命令1
 - 分布式协同综合6
 - ZooKeeper6
 - RPC8
 - MQ17
 - hdfs4
 - 效能6
 - 方法论2
 - 规范3
 - Tomcat6
 - Maven7
 - Spring综合5
 - Spring核心24
 - Spring数据10
 - SpringWeb8
 - SpringIO4
 - Spring集成4
 - Spring安全1
 - Spring其他4
 - RPC综合4
 - Dubbo2
 - MQ综合2
 - Kafka9
 - RocketMQ4
 - 其他MQ1
 
源码级深度理解 Java SPI
SPI 简介
SPI 全称 Service Provider Interface,是 Java 提供的,旨在由第三方实现或扩展的 API,它是一种用于动态加载服务的机制。Java 中 SPI 机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。
Java SPI 有四个要素:
- SPI 接口:为服务提供者实现类约定的的接口或抽象类。
 - SPI 实现类:实际提供服务的实现类。
 - SPI 配置:Java SPI 机制约定的配置文件,提供查找服务实现类的逻辑。配置文件必须置于 
META-INF/services目录中,并且,文件名应与服务提供者接口的完全限定名保持一致。文件中的每一行都有一个实现服务类的详细信息,同样是服务提供者类的完全限定名称。 ServiceLoader:Java SPI 的核心类,用于加载 SPI 实现类。ServiceLoader中有各种实用方法来获取特定实现、迭代它们或重新加载服务。
JavaAgent
Javaagent 是什么?
Javaagent 是 java 命令的一个参数。参数 javaagent 可以用于指定一个 jar 包,它利用 JVM 提供的 Instrumentation API 来更改加载 JVM 中的现有字节码。
- 这个 jar 包的 MANIFEST.MF 文件必须指定 Premain-Class 项。
 - Premain-Class 指定的那个类必须实现 premain() 方法。
 
premain 方法,从字面上理解,就是运行在 main 函数之前的的类。当 Java 虚拟机启动时,在执行 main 函数之前,JVM 会先运行-javaagent所指定 jar 包内 Premain-Class 这个类的 premain 方法 。
Java 基础语法特性
注释
空白行,或者注释的内容,都会被 Java 编译器忽略掉。
Java 支持多种注释方式,下面的示例展示了各种注释的使用方式:
public class HelloWorld {
    /*
     * JavaDoc 注释
     */
    public static void main(String[] args) {
        // 单行注释
        /* 多行注释:
           1. 注意点a
           2. 注意点b
         */
        System.out.println("Hello World");
    }
}
Java 编码和加密
关键词:
Base64、消息摘要、数字签名、对称加密、非对称加密、MD5、SHA、HMAC、AES、DES、DESede、RSA
Base64 编码
Base64 原理
JVM 体系结构
JVM 能跨平台工作,主要是由于 JVM 屏蔽了与各个计算机平台相关的软件、硬件之间的差异。
JVM 简介
计算机体系结构
真实的计算机体系结构的核心部分包含:
- 指令集
 - 计算单元(CPU)
 - 寻址方式
 - 寄存器
 - 存储单元
 
JVM 体系结构简介
JVM 体系结构与计算机体系结构相似,它的核心部分包含:
深入理解 Java String 类型
String 类型可能是 Java 中应用最频繁的引用类型,但它的性能问题却常常被忽略。高效的使用字符串,可以提升系统的整体性能。当然,要做到高效使用字符串,需要深入了解其特性。
String 的不可变性
我们先来看下 String 的定义:
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
Java 正则从入门到精通
关键词:Pattern、Matcher、捕获与非捕获、反向引用、零宽断言、贪婪与懒惰、元字符、DFA、NFA
正则简介
正则表达式是什么
正则表达式(Regular Expression)是一个用正则符号写出的公式,程序对这个公式进行语法分析,建立一个语法分析树,再根据这个分析树结合正则表达式的引擎生成执行程序(这个执行程序我们把它称作状态机,也叫状态自动机),用于字符匹配。
如何学习正则
正则表达式是一个强大的文本匹配工具,但是它的规则很复杂,理解起来较为困难,容易让人望而生畏。
Java 内存模型
关键词:
JMM、volatile、synchronized、final、Happens-Before、内存屏障摘要:Java 内存模型(Java Memory Model),简称 JMM。Java 内存模型的目标是为了解决由可见性和有序性导致的并发安全问题。Java 内存模型通过 屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。
Synchronized
synchronized 的简介
synchronized 是 Java 中的关键字,是 利用锁的机制来实现互斥同步的。
synchronized 可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块。
如果不需要 Lock 、ReadWriteLock 所提供的高级同步特性,应该优先考虑使用 synchronized ,理由如下: