Java
文章平均质量分 92
一梦喂马.
这个作者很懒,什么都没留下…
展开
-
springboot实现多租户动态路由代码
01 背景当我们在做项目时,特别是ToB的项目,会发生一种场景,即大的业务流程是一样的,但是在某个节点,不同的租户有不同的业务需求。这就需要我们针对不同的租户将代码路由到不同的实现上面,从而执行正确的业务逻辑。如下图所示,我们现在有个业务逻辑,需要依次执行A、B、C、D四段代码逻辑。但是B和D节点,不同的租户有不同的业务逻辑,需要单独去实现,这时就需要我们能通过租户标识动态的路由到自己的实现上面。02 思路我们上节图中的B节点为例。首先,我们得创建一个X租户和所有租户的父类,比如我们这里就叫原创 2021-03-18 15:56:10 · 1935 阅读 · 7 评论 -
排查 JVM 总是 full GC 的问题
有时候,full GC 过多,会占用大量的 CPU 资源,导致 JVM 发生过多的 STW 问题我们开始写触发该场景的业务代码import java.util.concurrent.TimeUnit;/** * @author [email protected] * @date 2020/6/8 **/public class GcTest { public static void main(String[] args) throws InterruptedException {原创 2020-06-08 14:12:16 · 307 阅读 · 0 评论 -
排查 CPU 100% 的 Java 程序
这种问题,一般开发人员还是很难遇到,或者说是遇到了也会交给很厉害的人去处理,所以这里我们就自己模拟场景,然后去排查解决。当然实际生产情况查询原因更难,有很多复杂的情况。话不多说,首先是编写触发的代码public class CpuTest { public static void main(String[] args) { while (true) { /* */ } }}然后我们执行代码在这里我是在 centos 系统执行原创 2020-06-08 12:48:50 · 199 阅读 · 0 评论 -
JDK8源码阅读:wait方法和sleep方法的区别
wait和sleep的区别,这真是在面试中一个高高高高频的面试题。哈哈,要想说完这两个家伙的所有区别还是不太容易的,今天我们就来总结下这两个方法的区别。把小本本拿出来,一条条记下来。我们先来看看源码,是不是一听要看源码就脑阔疼,放心,这两个方法源码还是容易理解的。因为它们两个是native方法????。 /** * Causes the current thread to w...原创 2019-12-03 14:22:11 · 388 阅读 · 4 评论 -
JDK8源码阅读:HashMap
1.是什么是通过K-V键值对来保存数据的数据结构,K和V都可以为null。继承关系如下图所示:数据结构如下图所示:2.构造函数和主要属性加载因子loadFactor非常重要,这个决定了什么时候进行数组的扩容操作每次扩容时,都扩容为原来数组长度的2倍// 存放数据的数组默认初始大小为16static final int DEFAULT_INITIAL_CAPACITY = 1...原创 2019-03-03 00:39:26 · 145 阅读 · 0 评论 -
Java的一些冷门知识点
1、注释中的代码也能执行public static void main(String[] args) { // 下面这行代码会执行,因为 \\u000d 是一个换行符 // \u000d System.out.println("hello world");}2、除数为0也会不报错下面的代码会在控制台打印Infinity System.out.println(1.0 /...原创 2018-09-21 16:55:08 · 2264 阅读 · 0 评论 -
JDK8源码阅读:LinkedList
是什么?LinkedList 是一个双向链表结构的集合,非线程安全。主要属性transient int size = 0;:表示集合的元素个数transient Node<E> first;:指向第一个元素transient Node<E> last;:指向最后一个元素新增方法public boolean add(E e) { ...原创 2018-09-06 18:36:10 · 137 阅读 · 0 评论 -
JDK8源码阅读:ArrayList
是什么ArrayList是一个非线程安全的集合,实现了RandomAccess接口。 JDK中写到实现了RandomAccess接口的List,用普通的for循环比增强for循环效率更高,如下面代码所示,上面的循环运行速度更快 for (int i=0, n=list.size(); i < n; i++) list.get(i); runs faste...原创 2019-03-02 22:12:25 · 151 阅读 · 0 评论 -
JDK8源码阅读:ThreadLocal
1.是什么只要线程处于活动状态且ThreadLocal实例可访问,每个线程都拥有对其线程本地变量副本的隐式引用; 一个线程消失后,它的所有线程局部实例副本都要进行垃圾收集(除非存在对这些副本的其他引用)2.源码解读2.1.给ThreadLocal设置值ThreadLocal的set方法,其实是首先获取当前线程,然后通过当前线程获取ThreadLocal的内部类ThreadL...原创 2018-08-22 23:24:42 · 303 阅读 · 0 评论