SPI 简介
SPI 全称 Service Provider Interface,是 Java 提供的,旨在由第三方实现或扩展的 API,它是一种用于动态加载服务的机制。Java 中 SPI 机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。
SPI 全称 Service Provider Interface,是 Java 提供的,旨在由第三方实现或扩展的 API,它是一种用于动态加载服务的机制。Java 中 SPI 机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。
Javaagent 是什么?
Javaagent 是 java 命令的一个参数。参数 javaagent 可以用于指定一个 jar 包,它利用 JVM 提供的 Instrumentation API 来更改加载 JVM 中的现有字节码。
premain 方法,从字面上理解,就是运行在 main 函数之前的的类。当 Java 虚拟机启动时,在执行 main 函数之前,JVM 会先运行-javaagent
所指定 jar 包内 Premain-Class 这个类的 premain 方法 。
在命令行输入 java
可以看到相应的参数,其中有 和 java agent 相关的:
关键词:
Base64
、消息摘要
、数字签名
、对称加密
、非对称加密
、MD5
、SHA
、HMAC
、AES
、DES
、DESede
、RSA
Base64 内容传送编码是一种以任意 8 位字节序列组合的描述形式,这种形式不易被人直接识别。
Base64 是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的 ASCII 字符序列,常用在需用通过文本协议(比如 HTTP 和 SMTP)来传输二进制数据的情况下。Base64 并不是加密解密算法,尽管我们有时也听到使用 Base64 来加密解密的说法,但这里所说的加密与解密实际是指编码(encode)和解码(decode)的过程,其变换是非常简单的,仅仅能够避免信息被直接识别。
JVM 能跨平台工作,主要是由于 JVM 屏蔽了与各个计算机平台相关的软件、硬件之间的差异。
真实的计算机体系结构的核心部分包含:
String 类型可能是 Java 中应用最频繁的引用类型,但它的性能问题却常常被忽略。高效的使用字符串,可以提升系统的整体性能。当然,要做到高效使用字符串,需要深入了解其特性。
我们先来看下 String
的定义:
1 | public final class String |
String
类被 final
关键字修饰,表示不可继承 String
类。
String
类的数据存储于 char[]
数组,这个数组被 final
关键字修饰,表示 String
对象不可被更改。
为什么 Java 要这样设计?
关键词:Pattern、Matcher、捕获与非捕获、反向引用、零宽断言、贪婪与懒惰、元字符、DFA、NFA
正则表达式(Regular Expression)是一个用正则符号写出的公式,程序对这个公式进行语法分析,建立一个语法分析树,再根据这个分析树结合正则表达式的引擎生成执行程序(这个执行程序我们把它称作状态机,也叫状态自动机),用于字符匹配。
关键词:
JMM
、volatile
、synchronized
、final
、Happens-Before
、内存屏障
摘要:Java 内存模型(Java Memory Model),简称 JMM。Java 内存模型的目标是为了解决由可见性和有序性导致的并发安全问题。Java 内存模型通过 屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。
synchronized
是 Java 中的关键字,是 利用锁的机制来实现互斥同步的。
synchronized
可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块。
如果不需要 Lock
、ReadWriteLock
所提供的高级同步特性,应该优先考虑使用 synchronized
,理由如下:
synchronized
做了大量的优化,其性能已经与 Lock
、ReadWriteLock
基本上持平。从趋势来看,Java 未来仍将继续优化 synchronized
,而不是 ReentrantLock
。ReentrantLock
是 Oracle JDK 的 API,在其他版本的 JDK 中不一定支持;而 synchronized
是 JVM 的内置特性,所有 JDK 版本都提供支持。在 Java8 中,Collection
新增了两个流方法,分别是 stream()
和 parallelStream()
。
Stream
相当于高级版的 Iterator
,他可以通过 Lambda 表达式对集合进行各种非常便利、高效的聚合操作(Aggregate Operation),或者大批量数据操作 (Bulk Data Operation)。
所谓的I/O,就是计算机内存与外部设备之间拷贝数据的过程。由于 CPU 访问内存的速度远远高于外部设备,因此 CPU 是先把外部设备的数据读到内存里,然后再进行处理。
关键词:
InputStream
、OutputStream
、Reader
、Writer