摘要:
Caffeine 缓存是 Java 的高性能缓存库。本文简单记录下 Caffeine 缓存的用法。 依赖配置 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot 阅读全文
摘要:
定义 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。 观察者模式中有两个角色,一个是主题(Subject),一个是观察者(Observer)。观察者会观察主题,当主题发生了变化,观察者会做出相应的处理。主题跟观察者的关系是一对多。观察者模式也叫发布 阅读全文
摘要:
假设现在有这样一个方法,入参是父类型的集合参数,这是个通用方法,你需要共用它,你现在要传子类型集合进去,怎么办? class Animal { } class Dog extends Animal { } public class Service { public void doSth() { Li 阅读全文
摘要:
### 单体应用存在的问题 - 随着业务的发展,开发变得越来越复杂。 - 修改、新增某个功能,需要对整个系统进行测试、重新部署。 - 一个模块出现问题,很可能导致整个系统崩溃。 - 多个开发团队同时对数据进行管理,容易产生安全漏洞。 - 各个模块使用同一种技术进行开发,各个模块很难根据实际情况选择更 阅读全文
摘要:
## 知识点 1. class 文件结构 2. classloader 3. JVM 运行时数据区 4. 垃圾回收器和垃圾回收算法 5. JIT ## 类加载机制 JVM把`.class`文件加载到内存中时,创建对应的`class`对象,这个过程称之为类的加载机制。 ## 类的加载过程 Loadin 阅读全文
摘要:
起步依赖 Spring Boot 默认导入父工程依赖spring-boot-starter-parent,它里面已经申明好了众多的可能会用到的依赖。比如常用的spring-boot-starter-web,我们需要用什么,就在自己的pom.xml文件中定义就好了。 <parent> <groupId 阅读全文
摘要:
放眼望去,`java.util.concurrent`包下类大致包括:atomic 原子类、锁、并发集合、线程池、工具类。我们挑重要的了解一下。 ## Atomic 原子类 Java针对并发编程已经有了各种锁,为什么还需要原子类?原子类一定有些特别的应用场景? 在很多时候,我们需要的仅仅是一个简单的 阅读全文
摘要:
本文记录一些概念的定义或解释,都是网上 copy 来的,作回顾之用。 阅读全文
摘要:
想搞清楚这个问题,需要先看线程池原理:👉线程池原理 原因是,Worker线程启动后,会不断轮询,从阻塞队列中取任务,因为取不到任务,一直阻塞,Worker线程一直在运行。看代码: private Runnable getTask() { ... boolean timed = allowCoreT 阅读全文
摘要:
## 是什么 * 浅拷贝:通常来讲,一个对象使用`Object.clone()`方法属于浅拷贝,浅拷贝只拷贝基本类型和`String`类型的成员变量。它的特点是,一个对象如果有引用类型的成员变量(`String`除外),浅拷贝只是拷贝这个成员变量的引用到新的对象,即两个对象中的这两个成员变量,共用一 阅读全文