java笔记
文章平均质量分 78
牧竹子
且行且珍惜
展开
-
xxl-job分布式框架源码路由/负载均衡策略算法
xxl-job就是因为内涵丰富的调度策略,使得框架的多样性,灵活性更高。现在就开始讲解xxl-job的核心路由策略算法,总共有10种路由策略,对于以后想从事分布式微服务开发,任务调度的学习是很有必要的。个人认为这个路由算法可以作为标准样例应用在其他分布式路由策略中,后面有时间的话我会整理为工具类牧竹子注:2023/6/4获取注册地址集合的最后一个/**} }转载 2023-06-04 21:27:11 · 402 阅读 · 0 评论 -
ArrayList ,AbstractList和iterator在remove时会抛出异常ConcurrentModificationException
/修改次数,替换,删除,排序都算修改 listIterator(final int index);} //ArrayList继承AbstractList ArrayList extends AbstractList {//list.remvove(e)实际调用方法 fastRemove(e) {//不执行checkForComodification } private class Itr implements Iterator < E > {原创 2023-03-23 13:01:39 · 484 阅读 · 0 评论 -
TransmittableThreadLocal实现原理
InheritableThreadLocal只会在线程池中的线程初次创建的时候,从父线程拷贝属性,而父线程再次修改这个属性时,线程池中的这个线程是无法再次感知到的。我们在日常的开发中,很少主动new线程,都是使用线程池,而线程池中,不会频繁的创建线程,更多的场景是线程创建一次,重复使用。如果线程中的属性在上次使用后被修改,下次使用后,子线程中保存的属性值依然是首次使用时的值TransmittableThreadLocal实现父线程值传递变更值给线程池子线程可以看到,使用TransmittableThrea原创 2022-07-06 14:23:30 · 1410 阅读 · 0 评论 -
ThreadLocal和InheritableThreadLocal实现原理
可见threadLocals为Thread的内部变量,每个Thread类的实例,都有自己的threadLocals变量总结ThreadLocal属性保存在每个线程实例中,线程实例通过Map结构管理所有的ThreadLocal属性,Map的key为ThreadLocal属性。ThreadLocal属性是Thread的内部变量,父子线程是不同的线程实例,显然在子线程中无法获取父线程设置的属性:ThreadLocal属性是Thread的内部变量,父子线程是不同的线程实例,显然在子线程中无法获取父线程设置的属原创 2022-07-04 17:05:52 · 223 阅读 · 0 评论 -
ThreadLocal父子线程数据传递
ThreadLocal父子线程数据传递?(面试题:如何在子线程拿到父线程threadLocal的值)2、使用InheritableThreadLocal解决3、带来的问题:在线程池中只能获取初始化线程时父线程的值4、解决:使用阿里开源工具类transmittable-thread-local通过装饰类调用前重新将父线程的值进行赋值5、解决2:通过线程池包装类解决POM依赖...转载 2022-07-04 15:29:28 · 630 阅读 · 0 评论 -
常用的缓存机制
文章目录1. LRU (Least Recently Used)最近最少使用2. LFU (Least Frequently Used)最近最不常用使用页面置换3.比较LRU 和 LFU 的缺点TinyLFU统计频率Count–Min Sketch 算法保新机制Window特性淘汰策略(eviction policy)异步的高性能读写总结1. LRU (Least Recently Used)最近最少使用核心思想:如果数据最近被访问过,那么将来被访问的可能性也更高。实现:1) 新数据插入链表头原创 2021-02-16 09:31:51 · 1240 阅读 · 0 评论 -
eureka源码
功能快捷键eureka服务端EurekaServerAutoConfiguration自动配置类,注册各种bean,包括PeerAwareInstanceRegistry用于服务注册(实际就是父类AbstractInstanceRegistry提供的ConcurrentHashMap(ConcurrentHashMap<String, Map<String, Lease>> )存放存放eureka服务端:服务注册列表:registry)、以及jersey。这里扫描获取所有@Pa原创 2020-10-20 13:10:19 · 255 阅读 · 0 评论 -
Java锁升级
基础知识之一:锁的类型锁从宏观上分类,分为悲观锁与乐观锁。乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java中的乐观锁基本都是通过CAS操...转载 2019-11-18 23:15:10 · 294 阅读 · 0 评论 -
IO,NIO,AIO和高性能模型
简介首先,传统的 java.io包,它基于流模型实现,提供了我们最熟知的一些 IO 功能,比如 File 抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。java.io包的好处是代码比较简单、直观,缺点则是 IO 效率和扩展性存在局限性,容易成为应用性能的瓶颈。很多时候,人们也...转载 2019-09-25 17:48:37 · 337 阅读 · 0 评论 -
LinkedHashMap源码和实现LRU算法
LinkedHashMap特别有意思,它不仅仅是在HashMap上增加Entry的双向链接,它更能借助此特性实现保证Iterator迭代按照插入顺序(以insert模式创建LinkedHashMap)或者实现LRU(Least Recently Used最近最少算法,以access模式创建LinkedHashMap)。下面是LinkedHashMap的get方法的代码public V get(...转载 2019-09-19 22:35:42 · 235 阅读 · 0 评论 -
Java之SPI机制
之前开阿里的HSF框架,里面用到了Java的SPI机制,今天闲暇的时候去了解了一下,通过写博客来记录一下SPI的全名为Service Provider Interface,我对于该机制的理解是为接口寻找服务实现类。现在公司的系统都是进行了模块的划分,系统抽象为多个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于...转载 2019-07-12 17:45:52 · 138 阅读 · 0 评论 -
NIO概述
简介Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。Java NIO: Channels and Buffers(通道和缓冲区)标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓...转载 2019-04-25 21:56:11 · 202 阅读 · 0 评论 -
FastJson对Object对象的解析问题
问题描述ActivityRuleBase 基础类,ActivityRuleUserVo,ActivityRulePayTypeVo 继承ActivityRuleBase 类public class Activity implements Serializable { private Long id; // private String name; //活动名称 private Li...原创 2019-02-25 19:17:37 · 2699 阅读 · 0 评论 -
java三大特性之封装
封装封装的优点DEMO体现封装封装(英语:Encapsulation)在面向对象中封装是指隐藏对象的属性和实现的细节,仅对外提供公共访问方式。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。 要访问该类的代码和数据,必须通过严格的接口控制。 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。 适当的封装可以让程式码更容易原创 2017-03-01 18:33:01 · 689 阅读 · 0 评论 -
java异常信息丢失之异常链
异常链除了 try…catch…finally我们还知道些什么,是不是这就是全部了呢?那我们就用案例告诉你,事实不仅仅如此。先来看一个异常捕获情况package com.test;import java.io.IOException;public class TestB { void method1() throws Exception { throw new Excepti原创 2017-03-05 03:08:19 · 1206 阅读 · 0 评论 -
java三大特性之多态
多态的定义多态的三个必要条件多态的表现形式多态的种类多态的实现方式基于继承实现的多态基于接口实现的多态经典实例答案分析多层父子调用的优先级多态的定义多态程序中定义的引用变量和通过该引用变量调用的方法所指向的具体类型和具体类型的方法在编程时并不确定,而只有在程序运行期间某一刻才能具体确定的情况称之为多态。写的有点饶,但是可以看到几个重点是引用的变量和该变量的方法在没运行时我原创 2017-03-06 10:44:18 · 492 阅读 · 0 评论 -
finally在try和catch块以及return中的执行顺序
执行顺序无catch时当有catch时执行顺序图DEMO验证参考资料执行顺序无catch时finally会在try包含的return之后执行,会在try外面的return之前执行当有catch时finally是在catch执行之后catch包含的return之前执行的执行顺序图try包含的return | v catch | v finally | v catc原创 2017-03-06 10:42:53 · 698 阅读 · 0 评论 -
Java集合类
Java集合类集合的基础关系图Iterator└Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack ├Set ├Queue └Map ├Hashtable ├HashMap └WeakHashMapCollection是集合接口: - Set子接口:无序,不允许重复 - List子接口:有序原创 2017-03-03 14:06:02 · 765 阅读 · 0 评论 -
Enum支持序列化吗以及设计模式策略枚举
背景Enum是否支持序列化,以及底层的实现原理Enum类型的策略枚举这种设计模式如何实现和优缺点Enum支持序列化吗支持,在Java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化。Enum底层实现当我们使用enmu来定义一个枚举类型的时候,编译器会自动帮我们创建一个final类型的类继承Enum类,所以枚举类型不能被继承,这个类中有几个属性和方法都是st原创 2017-09-24 16:40:09 · 7520 阅读 · 0 评论 -
HashMap中的为什么hash的长度为2的幂而&位必须为奇数
背景哈希算法在Java中是经常用的的一个算法,也是一些常用数据结构中必用的一个算法,它为上层的复杂数据结构提供了基础支撑。哈希算法的实现有很多种,除了这里讲的map中的hashcode算法,还有其他哈希算法:1.直接定址法 2.数字分析法 3.折叠法 4.平方取中法 5.减去法 6.字符串数值哈希法 7.旋转法更多算法请参考另一篇作者的文章: hash算法原理详解HashMap中的Ha原创 2017-11-09 23:43:28 · 14073 阅读 · 18 评论 -
多线程-ThreadLocal
前言面试多线程好像必不可少的一个知识点 是什么?有什么用?应用场景?ThreadLocal类用来提供线程内部的局部变量。这些变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量,ThreadLocal实例通常来说都是private static类型,不允许外部修改。 它和线程同步是相反的作用,以实现每个线程内的变量都是独自分开的,互不影响...原创 2018-03-06 23:46:14 · 379 阅读 · 0 评论 -
实战java高并发程序设计-笔记进行中
《JAVA并发编程实践》:出书时间太早,内容比较散,专业术语翻译较早和现在有差异 《Java并发编程的艺术》:手绘图较多文字内容较少,主要讲解并发实现的底层原理和面临的问题,底层原理方面面试必考内容 《实战java高并发程序设计》:出书时间2014年时间很近。文字内容整理规范,专业术语规范,重在讲解相关概念,底层原理请参考上面的那本书《Java并发编程的艺术》综上推荐书名《Java并发编程...原创 2018-03-07 17:52:43 · 706 阅读 · 0 评论 -
线程池ThreadPoolExecutor、Executors参数详解与源代码分析
线程池ThreadPoolExecutor、Executors参数详解与源代码分析 ThreadPoolExecutor是核心 Executors是一个方便使用的线程池创建工具为了防止使用者错误搭配ThreadPoolExecutor构造函数的各个参数以及更加方便简洁的创建ThreadPoolExecutor对象,JavaSE中又定义了Executors类,Eexcutors类提供了创建常...转载 2018-03-01 15:41:16 · 559 阅读 · 0 评论 -
java的三大特性之继承
引语继承的定义和特点构造器protected关键字向上转型向下转型引语高级语言为了避免重复写代码,那么就可以使用父子一样的继承关系使新的子类拥有和父类一样的特性,同时也能拥有自己特有的属性。但是java的继承特点是什么。继承的定义和特点继承是使用已存在的类的定义作为基础建立新类的技术。 在这种关系中,已有类我们称之为父类,这个新类我们称之为子类。 继承的特点子类拥有父类除构造器外原创 2017-02-27 18:52:12 · 568 阅读 · 0 评论