深入分析 ThreadLocal 发表于 2020-03-28 | 分类于 Java 概述ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal 变量通常被 private static 修饰。当一个线程结束时,它所使用的所有 ThreadLocal 实例副本都可被回收。 每个访问 Threa ... 阅读全文 »
深入分析 Synchronized 发表于 2020-03-12 | 分类于 Java Synchronized 用法Synchronized 是 Java 提供的一个并发控制的关键字。主要有两种用法,分别是同步方法和同步代码块。 通过编译可以发现,被 Synchronized 关键字修饰的同步块前后分别生成 monitorenter 和 monitorexit 字节码指令。monit ... 阅读全文 »
IntelliJ IDEA 快捷键 发表于 2019-12-15 跳转 Ctrl+Alt+[ ] 项目跳转 Ctrl+Shift+A Find Action Ctrl+E 文件跳转(Recent Files) Ctrl+Shift+E (Recent Changed Files) Ctrl+Shift+Backspace 修改位置跳转(Last Edit ... 阅读全文 »
Java NIO 知识总结 发表于 2019-11-15 | 分类于 Java 概念NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的 I/O 模型,也是 I/O 多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O 处理问题的有效方式。 通道 (Channel)通道 Channel 是原 I/ ... 阅读全文 »
Java 类加载机制 发表于 2019-11-05 | 分类于 Java 类加载过程class 文件在虚拟机的整个生命周期包括加载、验证、准备、解析、初始化、使用和卸载 7 个阶段,通过 ClassLoader.loadClass() 方法可以加载一个 Java 类到虚拟机中,并返回 Class 类型的引用。 加载:通过一个类的完全限定名查找此类的字节码文件,并利用字节 ... 阅读全文 »
Java 序列化与反序列化 发表于 2019-10-20 | 分类于 Java 概念序列化是将 Java 对象转换成与平台无关的二进制流,而反序列化则是将二进制流恢复成原来的 Java 对象,二进制流便于保存到磁盘上或者在网络上传输。 原因 永久性保存对象,保存对象的字节序列到本地文件或者数据库中 通过序列化以字节流的形式使对象在网络中进行传递和接收 通过序列化在进程间传递对象 ... 阅读全文 »
从计算机内存模型到 Java 内存模型 发表于 2019-10-10 | 分类于 Java 计算机内存模型CPU 缓存 缓存可以缩小 CPU 与低速内存之间的差距。以三层缓存架构为例: L1 Cache:最接近 CPU, 容量最小(如32K、64K、256K等)、速度最高,每个核上都有一个L1 Cache。 L2 Cache:容量更大(如256K)、速度较低,一般情况下,每个核上都有一个 ... 阅读全文 »
理解 Spring IoC 发表于 2019-10-07 | 分类于 Java Spring IoC概述IoC 全称为 Inversion of Control ,翻译为 “控制反转”。 如何理解“控制反转”好呢?理解好它的关键在于我们需要回答如下四个问题: 谁控制谁 控制什么 为何是反转 哪些方面反转 通过一个例子可以更方便理解IoC。假设一个人想喝新鲜橙汁,在没有饮品店 ... 阅读全文 »
浅谈 SPI 机制 发表于 2019-09-04 | 分类于 Java SPI的概念面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候不用在程序里动态指明,这就需要一种服务发现机制。SPI 就是提供这样的一个机制:为某个接口寻 ... 阅读全文 »