- 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
,理由如下: