Java进阶知识详解
文章平均质量分 90
本专栏专门介绍了在学习工作中遇到的Java进阶知识,以及对这些知识较为深入的探究,博文重在讲解方法和思路,理清学习的知识体系。
听到微笑
这个作者很懒,什么都没留下…
展开
-
手把手教你改造Sentinel Dashboard 实现配置持久化
Sentinel客户端默认情况下接收到 Dashboard 推送的规则配置后,可以实时生效。但是有一个致命缺陷,Dashboard和业务服务并没有持久化这些配置,当业务服务重启后,这些规则配置将全部丢失。通过 API 直接修改 (loadRules通过DataSource适配不同数据源修改// 修改流控规则// 修改降级规则手动修改规则(硬编码方式)一般仅用于测试和演示,生产上一般通过动态规则源的方式来动态管理规则。上述。原创 2024-06-16 13:36:20 · 1741 阅读 · 0 评论 -
ShardingJDBC使用不当引发的线上事故
本文由故障现象定位到了具体的问题点是因为 MyBatis-Plus 批量插入没有返回数据库组件,而跟踪源码后我们却发现是因为ShardingJDBC不支持批量插入获取主键值。ShardingJDBC不支持批量插入后获取主键,主要是因为在批量插入操作中,ShardingJDBC可能需要将数据插入到多个不同的数据库节点,在这种情况下,每个节点都可能有自己的主键生成规则,并且这些节点可能并不知道其他节点的主键值。原创 2023-09-24 21:10:03 · 5453 阅读 · 0 评论 -
JVM Sandbox入门详解
在日常开发中,经常会接触到面向AOP编程的思想,我们通常会使用Spring AOP来做统一的权限认证、异常捕获返回、日志记录等工作。之所以使用Spring AOP来实现上述功能,是因为这些场景本质上来说都是与业务场景挂钩的,但是具有一定的抽象程度,并且绝大多数业务逻辑类都已经被Spring容器托管了。原创 2023-05-27 21:36:53 · 8378 阅读 · 0 评论 -
深入剖析Arthas源码
Arthas 相信大家已经不陌生了,肯定用过太多次了,平时说到 Arthas 的时候都知道是基于Java Agent的,那么他具体是怎么实现呢,今天就一起来看看Arthas源码。Arthas。至此 Arthas 整体流程分享完成,我们从 arthas-boot 开始,它的核心作用就是启动引导用户选择需要增强的Java进程PID,最终将PID传入 arthas-core 中;arthas-core根据用户选择的PID,利用Java Agent机制使用 arthas-agent 对目标进程进行增强;原创 2022-12-23 20:27:58 · 7830 阅读 · 3 评论 -
Java SPI详解
SPI的英文全称为Service Provider Interface,字面意思为服务提供者接口,它是jdk提供给“服务提供厂商”或者“插件开发者”使用的接口。在面向对象的设计中,模块之间我们一般会采取面向接口编程的方式,而在实际编程过程过程中,API的实现是封装在jar中,当我们想要换一种实现方法时,还要生成新的jar替换以前的实现类。而通过jdk的SPI机制就可以实现,首先不需要修改原来作为接口的jar的情况下,将原来实现的那个jar替换为另外一种实现的jar即可。总结一下SPI的思想:在系统的各个原创 2021-05-14 17:18:18 · 5565 阅读 · 1 评论 -
枚举反序列化原理
https://docs.oracle.com/javase/1.5.0/docs/guide/serialization/spec/serial-arch.html#enumEnum constants are serialized differently than ordinary serializable or externalizable objects. The serialized form of an enum constant consists solely of its name;.翻译 2021-01-15 16:29:39 · 1617 阅读 · 0 评论 -
图解JDK7及其早期版本HashMap扩容死锁问题
在JDK7及其早期版本中HashMap在多线程环境下会发生扩容死锁的问题。HashMap中在创建时默认会有16个桶,有一个默认加载因子0.75,如果Map中的Entry数量达到阈值(16*0.75)就会进行扩容,将原来的桶的数量扩展至原来的两倍,而在多线程环境下JDK7的HashMap会产生扩容死锁的问题。下列方法是Map进行扩容的核心方法:void resize(int newCapaci...原创 2019-11-15 14:47:56 · 1539 阅读 · 3 评论 -
深入解析LinkedHashMap
LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,也可以在构造时带参数,按照访问次序排序。public void test(){ Map<String,String> map=new LinkedHashMap<>(); map.put("a","...原创 2019-08-15 19:34:49 · 345 阅读 · 0 评论 -
深入解析HashMap源码
HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHash...原创 2019-08-15 10:25:12 · 275 阅读 · 0 评论 -
cglib代理
cglib代理 在此之前,我们学习了JDK动态代理,而JDK动态代理有一定的局限性,因为使用JDK动态代理时,被代理类必须实现接口,然后动态代理生成的代理类同时实现该接口实现代理模式,但在特定情况下没办法让被代理类实现接口,那么此时我们就需要使用cglib代理。代理模式的三要素两个成员:被代理对象、执行者(类似于Spring中切面的概念)使用场景:当某件事情不方便自己做,但是必须要做时...原创 2019-07-12 18:48:31 · 293 阅读 · 0 评论 -
ThreadLocal原理详解——终于弄明白了ThreadLocal
目录概述API介绍ThreadLocal的理解ThreadLocal的原理分析总结概述在java学习生涯中可能很多人都会听到ThreadLocal变量,从字面上理解ThreadLocal就是“线程局部变量”的意思。简单的说就是,一个ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的(每个线程都只能看到自己线程的值)。可能一开始把这句话放出来很难理解,那...原创 2019-01-02 10:43:16 · 23182 阅读 · 8 评论 -
Java8新特性default关键字,引出Java多继承问题
概述最近在看JDK集合的源码时,在Collection接口中发现了default关键字,并且惊奇的发现接口中的方法居然包含方法体,这顿时让我产生兴趣,为此我也稍微研究了一下default关键字。很多同学都知道Java在创立之初就摒弃了C++多继承的套路,因为它实在难以学习与使用,在Java的世界中类只能继承一个父类,但是一个接口可以继承多个接口,就比如这样:public interf...原创 2018-12-30 14:18:36 · 1392 阅读 · 1 评论 -
Java类加载过程&&静态代码块的初始化过程
问题的引入 还是老规矩,先说说自己遇到的问题。最近看到了一个比较有意思的Java程序,初次看到这段程序执行的结果还是挺让我意外的,话不多说先上程序,大家也可以揣摩一下(大神自行略过......)class Singleton{ private static Singleton singleton=new Singleton(); public static int c...原创 2018-12-04 20:20:15 · 1300 阅读 · 1 评论 -
JDK动态代理的深入理解
引入代理模式代理模式是框架中经常使用的一种模式,动态代理是AOP(面向切面编程)思想的一种重要的实现方式,在我们常用的框架中也经常遇见代理模式的身影,例如在Spring中事务管理就运用了动态代理,它将Service层原先应该进行的事务管理交给了Spring框架,大大简化了开发流程。在Hibernate中对象的懒加载模式,也运用了JDK的动态代理以及cglib代理。静态代理在说动态代理之...原创 2018-11-14 20:15:31 · 976 阅读 · 1 评论 -
JDK8之前,匿名内部类访问的局部变量为什么必须要用final修饰
前不久在学习中意外发现了自己原来忽略的一个小知识点,挺有意思的,现在我来给大家分享一下!我们先来看一段代码public class Hello { public static void main(String[] args) { String str="haha"; new Thread() { @Override public void run() { ...原创 2018-08-15 20:17:51 · 33649 阅读 · 68 评论 -
Java8 Lambda表达式入门
可能很多人都听说过java8的新特性----Lambada表达式,但可能很多人都不知道Lambda表达式到底有什么用,下面我带大家理解一下Lambada表达式。 在平时的编程中,我们常常会用到匿名内部类,见下面代码:package 示例;import static org.junit.Assert.*;//import org.junit.Test;publi...原创 2018-07-26 11:39:15 · 1466 阅读 · 4 评论