Java
文章平均质量分 56
Frank-fu
这个作者很懒,什么都没留下…
展开
-
quartz动态定时任务
场景:需求:支付的二维码,超过两个小时以后,如果还未支付,则自动转为取消支付,或者支付超时的状态需求分析:1,动态定时任务:每个支付的二维码创建的时候,创建一个动态的定时任务,两个小时候自动执行,更新支付状态,可以解决这个问题。(1)持久化:如果服务重启了,动态定时任务会丢失,导致部分数据没办法更新状态。(2)分布式:如果当服务重启时,自动扫描数据,重新计算时间,再次创建动态定时任务。可以解决(1)的问题,但是当分布式,多个节点的时候,都会重新加载所有的任务,这样性能上不原创 2021-08-21 12:00:22 · 2073 阅读 · 2 评论 -
Redisson延迟队列
目录场景:需求:需求分析:连接Redis监听延迟队列场景:需求:支付的二维码,超过两个小时以后,如果还未支付,则自动转为取消支付,或者支付超时的状态需求分析:1,动态定时任务:每个支付的二维码创建的时候,创建一个动态的定时任务,两个小时候自动执行,更新支付状态,可以解决这个问题。(1)持久化:如果服务重启了,动态定时任务会丢失,导致部分数据没办法更新状态。(2)分布式:如果当服务重启时,自动扫描数据,重新计算时间,再次创建动态定时任务。可以解决原创 2021-08-21 11:06:48 · 5958 阅读 · 7 评论 -
雪花算法的原理
代码/** * 生成id * 每毫秒可产生4096不同id * 最多可以使用69.73年 * * @author chendehua * */public class IdGen { //机器节点 private long workerId; //数据中心 private long datacenterId; //序列号(自增) private long sequence = 0L; //初始时间(Thu, 04 Nov 2010 01:42:54 GMT) //主要原创 2021-08-16 11:31:17 · 667 阅读 · 0 评论 -
@Transactional无效
场景一举例:同一个类中方法调用,这种情况下事务是不起作用的。如下:public class UserServiceImpl implements UserService{ public void a() { b(); } @Transactional public void b() { return 1/0; } public static void main(String args[]) { a();原创 2021-08-12 16:09:48 · 181 阅读 · 0 评论 -
IDEA修改maven内存大小
1,打开file->setting->Build,Execution,Deployment->Build Tools->Maven->Runner2,修改VM Options修改参数值为:-Xmx1024m原创 2021-08-10 14:53:31 · 4280 阅读 · 0 评论 -
SpringCloud之Config
SpringCloud之Config基本新建config服务配置pom.xml配置application.properties新建user-dev.properties配置Application修改user服务修改UserController新增bootstrap.propertiesconfig服务高可用修改application.properties新建application-user1.properties新建application-user2.properties小结基本新建config服务配原创 2020-12-23 14:41:00 · 80 阅读 · 0 评论 -
SpringBoot之SpringApplication
SpringBoot之SpringApplication启动类第一部分初始化解析启动类@SpringBootApplicationpublic class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); }}第一部分初始化SpringApplication对象,并run/** * Static helper原创 2020-12-04 16:04:17 · 97 阅读 · 0 评论 -
注解之Documented
注解之DocumentedDocumented源码解析总结Documented源码/** * Indicates that annotations with a type are to be documented by javadoc * and similar tools by default. This type should be used to annotate the * declarations of types whose annotations affect the use of原创 2020-11-24 13:57:29 · 1011 阅读 · 0 评论 -
注解之Retention
注解之RetentionRetention源码解析RetentionPolicy源码总结Retention源码/** * Indicates how long annotations with the annotated type are to * be retained. If no Retention annotation is present on * an annotation type declaration, the retention policy defaults to * {原创 2020-11-24 11:59:14 · 165 阅读 · 0 评论 -
注解之Target
注解之Target源码源码/** * Indicates the contexts in which an annotation type is applicable. The * declaration contexts and type contexts in which an annotation type may be * applicable are specified in JLS 9.6.4.1, and denoted in source code by enum * const原创 2020-11-23 16:36:44 · 390 阅读 · 1 评论 -
自定义注解
自定义注解创建注解详解创建注解拦截详解使用注解输出结果创建注解/** * 类:定义注解 * 内容: * 创建人:frank-fu * 时间:2020/11/20 *///注解作用的位置,ElementType.METHOD表示该注解仅能作用于方法上@Target({ElementType.METHOD})//注解的生命周期,表示注解会被保留到什么阶段,可以选择编译阶段、类加载阶段,或运行阶段@Retention(RetentionPolicy.RUNTIME)//子类会继承父类的注解原创 2020-11-20 16:11:32 · 104 阅读 · 0 评论 -
二进制转换
二进制转换整数正整数实例分析总结负整数总结小数正小数负小数整数正整数实例十进制2的次幂二进制12000012210010321 + 2000114220100522 + 200101622 + 210110722 + 21 + 2001118231000………分析比如:100转成二进制1, 转成2的次幂:100 = 26 +25+222,0000 0000 根据 26中的6原创 2020-10-10 18:16:16 · 753 阅读 · 0 评论 -
Float之存储格式
Float之存储格式前提存放格式符号位指数位尾数位前提float存储长度为32位存储分为:符号位,指数位,尾数位符号位:长度为1。作用:判断当前数字是正数还是负数指数位:长度为8。作用:小数位和整数位的分割,最终能够计算出那些是整数,那些是小数位尾数位:长度为23。作用:存放整个数字的二进制(不满23位的补0或超出的部分切割掉)float符号位指数位尾数位总长度为321823存放格式符号位判断当前待转换数字n(100.5),是正数还是负数,正数,指数原创 2020-10-10 16:42:38 · 1991 阅读 · 1 评论 -
HashMap原理
HashMap原理属性newHashMap()HashMap(int initialCapacity)HashMap(int initialCapacity, float loadFactor)put原理属性loadFactor:加载因子。作用:主要参与计算阈值大小的table:数组。作用:用来存放数据size:HashMap存放元素的数量。作用:记录存放元素的数量,以及参与判断是否需要扩容条件之一threshold:阈值。作用:当table数组中存放的数据量达到阈值大小,则进行扩容。计算方式:原创 2020-09-10 19:42:06 · 105 阅读 · 0 评论 -
HashMap之getTreeNode
HashMap之treeifyBin前提作用业务逻辑整理源码分析getTreeNodefind前提jdk1.8之前HashMap的存储方式:链表+hashjdk1.8以后中HashMap的存储方式:链表+hash+红黑树算法作用根据key查找树结构中与之一致的对象业务逻辑整理1,如果table数组为空,或者大小未超过64,则重置table大小2,如果table大小超过64,把当前链表转换成红黑树2.1,循环链表,把每一个对象转换成红黑树,并绑定上下级关系2.2,重置红黑树相关原创 2020-09-09 15:14:48 · 426 阅读 · 0 评论 -
HashMap之get
HashMap之treeifyBin前提作用业务逻辑整理源码分析getgetNode前提jdk1.8之前HashMap的存储方式:链表+hashjdk1.8以后中HashMap的存储方式:链表+hash+红黑树算法作用根据key查找与之一致的对象,并返回对象的value值业务逻辑整理1,table不能为空,长度要大于0,根据key计算出对应的下标,该下标下的对象不能为空,否则返回空2,该下标对象(frist)的key与查找的可以是否一致,如果一致,则返回当前对象3,frist的下原创 2020-09-03 15:30:51 · 196 阅读 · 0 评论 -
HashMap之putTreeVal
HashMap之treeifyBin前提:作用业务逻辑整理源码分析前提:jdk1.8之前HashMap的存储方式:链表+hashjdk1.8以后中HashMap的存储方式:链表+hash+红黑树算法作用数据超过阈值则进行扩容链表转成红黑树业务逻辑整理1,如果table数组为空,或者大小未超过64,则重置table大小2,如果table大小超过64,把当前链表转换成红黑树2.1,循环链表,把每一个对象转换成红黑树,并绑定上下级关系2.2,重置红黑树相关信息源码分析/原创 2020-09-03 15:05:51 · 566 阅读 · 0 评论 -
HashMap之balanceInsertion
HashMap之treeifyBin前提:作用业务逻辑整理源码分析前提:jdk1.8之前HashMap的存储方式:链表+hashjdk1.8以后中HashMap的存储方式:链表+hash+红黑树算法作用数据超过阈值则进行扩容链表转成红黑树业务逻辑整理1,如果table数组为空,或者大小未超过64,则重置table大小2,如果table大小超过64,把当前链表转换成红黑树2.1,循环链表,把每一个对象转换成红黑树,并绑定上下级关系2.2,重置红黑树相关信息源码分析s原创 2020-09-01 14:15:29 · 398 阅读 · 0 评论 -
ConcurrentHashMap之put
ConcurrentHashMap之put业务逻辑代码putputValspreadinitTabletabAtcasTabAt业务逻辑代码put/** * Maps the specified key to the specified value in this table. * Neither the key nor the value can be null. * * <p>The value can be retrieved by calling the {@code g原创 2020-08-31 16:44:33 · 368 阅读 · 0 评论 -
HashMap之treeify
HashMap之treeify前提作用业务逻辑源码分析前提作用把Node对象转换成TreeNode结构把链表结构转换成树结构业务逻辑源码分析/** * Forms tree of the nodes linked from this node. * @return root of tree */final void treeify(Node<K,V>[] tab) { TreeNode<K,V> root = null; for (TreeN原创 2020-08-31 16:34:08 · 555 阅读 · 0 评论 -
ConcurrentHashMap之initTable
ConcurrentHashMap之initTable前提作用业务逻辑代码initTablesizeCtl的作用compareAndSwapInt的作用前提ConcurrentHashMap是线程安全的ConcurrentHashMap数据结构:数组+hash算法+链表(jdk1.8之前)+树结构(jdk1.8以后)当前jdk版本1.8作用map初始化,设置table大小业务逻辑1,如果当前table数组是空的,进入初始化,否则table,不需要初始化2,sizeCtl的意思,当原创 2020-08-28 15:24:31 · 993 阅读 · 1 评论 -
ArrayList之add
ArrayList之add作用代码new ArrayList()addensureCapacityInternalensureCapacityInternalgrowhugeCapacity作用集合添加对象代码new ArrayList()/** * The array buffer into which the elements of the ArrayList are stored. * The capacity of the ArrayList is the length of原创 2020-08-27 15:48:14 · 290 阅读 · 0 评论 -
HashMap之keySet
HashMap之keySet前提作用代码keySet函数分析KeySet类分析KeyIterator类分析大招结果前提了解迭代器作用获取map的所有的key代码keySet函数public Set<K> keySet() { Set<K> ks; return (ks = keySet) == null ? (keySet = new KeySet()) : ks;}分析如果keySet是空的,那么就new一个,否则就返回keySet懵逼原创 2020-08-27 14:39:17 · 1335 阅读 · 0 评论 -
String之equals与==
String之equals与==前提作用示例结果结果分析前提在String中equals与==区别作用equals比较内容是否相等==比较地址示例public static void main(String[] args) { String str1 = "hello"; String str2 = "hello"; System.out.println(" str1==str2: "+(str1==str2)); System.out.prin原创 2020-08-27 13:52:13 · 117 阅读 · 0 评论 -
String之equals
String之equals前提作用业务逻辑源码分析前提作用String类型比较内容的值是否相等业务逻辑比较两个对象的地址是否相等,返回true如果比较对象不是String类型,否则返回false被比较对象的值长度的与比较对象的值长度相等,否则返回false循环比较每一个字符,如果相等返回true,否则返回false源码分析/** * Compares this string to the specified object. The result is {@code * tr原创 2020-08-27 11:24:18 · 135 阅读 · 0 评论 -
Java代码块,静态代码块,构造方法执行顺序
Java代码块,静态代码块,构造方法执行顺序父类子类main结果总结顺序父类class A { { System.out.println("A:代码块"); } static { System.out.println("A:静态代码块"); } A() { System.out.println("A:构造方法"); }}子类class B extends A { { Sys原创 2020-08-26 16:28:01 · 107 阅读 · 0 评论 -
HashMap之moveRootToFront
HashMap之moveRootToFront前提:jdk1.8之前HashMap的存储方式:链表+hashjdk1.8以后中HashMap的存储方式:链表+hash+红黑树算法作用确定红黑树的根节点是HashMap的table数组中的值业务逻辑整理1,红黑树根节点不能为空,table数组不能为空2,获取红黑树根节点的应该放入的下标位置3,如果当前的下标位置放得对象与需要验证的对象,不是同一个对象3.1,设置红黑树根节点的值为改下标位置的值3.2,重置红黑树根节点的上下级关原创 2020-08-24 17:43:16 · 527 阅读 · 0 评论 -
HashMap之treeifyBin
HashMap之treeifyBin前提:jdk1.8之前HashMap的存储方式:链表+hashjdk1.8以后中HashMap的存储方式:链表+hash+红黑树算法作用数据超过阈值则进行扩容链表转成红黑树业务逻辑整理1,如果table数组为空,或者大小未超过64,则重置table大小2,如果table大小超过64,把当前链表转换成红黑树2.1,循环链表,把每一个对象转换成红黑树,并绑定上下级关系2.2,重置红黑树相关信息以下是详细注释/** * Replac原创 2020-08-21 18:27:33 · 690 阅读 · 4 评论 -
HashMap之数组下标计算
HashMap之原理初始化loadFactorcapacitythreshold数组下标计算前提:HashMap是有数组+链表组成的,其中使用的算法有:hash(java8又使用了红黑树)初始化loadFactorloadFactor是参与计算HashMap扩容的一个加载因子new HashMap()会默认给loadFactor加载一个值0.75capacitycapacity并非HashMap的属性,指的是HashMap数组的大小,即table.lengththreshold原创 2020-08-21 13:58:01 · 3574 阅读 · 2 评论 -
HashMap之属性
HashMap之属性table注释作用entrySetsize注释作用modCount注释作用threshold注释作用loadFactor注释作用table/** * The table, initialized on first use, and resized as * necessary. When allocated, length is always a power of two. * (We also tolerate length zero in some operations t原创 2020-08-20 17:30:52 · 1208 阅读 · 0 评论 -
HashMap源码分析目录
HashMap源码分析目录链接: HashMap之resize链接: HashMap之hash链接: HashMap之clear链接: HashMap之remove链接: HashMap之containsKey链接: HashMap之put链接: HashMap之tableSizeFor链接: 运算符之位运算符原创 2020-08-20 14:48:34 · 112 阅读 · 0 评论 -
HashMap之resize
HashMap之resize/** * Initializes or doubles table size. If null, allocates in * accord with initial capacity target held in field threshold. * Otherwise, because we are using power-of-two expansion, the * elements from each bin must either stay at sam原创 2020-08-20 14:17:21 · 135 阅读 · 0 评论 -
运算符之位运算符
运算符之位运算符<< 左移实例分析>> 右移实例分析>>> 无符号右移| 或^ 异或说明:位运算符都是作用在二进制上的<< 左移实例比如 n=50 ;n << 1 结果是多少?100n << 2 结果是多少? 200n << 5 结果是多少? 1600分析为什么会是这样的呢?运算的逻辑如下:1,n=50;2,n的二进制是:0011 00103,0011 0010 左移一位 0110 0原创 2020-08-19 11:49:25 · 673 阅读 · 0 评论 -
HashMap之hash
HashMap之hash业务逻辑整理1,如果key为空,则hash值为0,否则获取key的hashCode,并右位移16位,在与原值^计算/** * Computes key.hashCode() and spreads (XORs) higher bits of hash * to lower. Because the table uses power-of-two masking, sets of * hashes that vary only in bits above the cu原创 2020-08-14 15:49:59 · 96 阅读 · 0 评论 -
HashMap之clear
HashMap之clear先水一篇业务逻辑整理1,当前对象不为空,遍历对象,把每个hash对应下标的对象都设为空/** * Removes all of the mappings from this map. * The map will be empty after this call returns. */public void clear() { Node<K,V>[] tab; modCount++; if ((tab = table) !=原创 2020-08-14 15:36:00 · 287 阅读 · 0 评论 -
HashMap之remove
HashMap之remove前提:jdk1.8之前HashMap的存储方式:链表+hashjdk1.8以后中HashMap的存储方式:链表+hash+红黑树算法业务逻辑整理1,map不能为空,且hash对应的下标要存在。否则返回null2,取下标对应的对象,如果该对象的key与入参key一致,则返回该对象(node)3,否则,获取该对象的下一个对象4,如果当前对象是树结构,则调用getTreeNode,返回key对应的对象(node)5,如果不是树结构,循环对象,如果存在对象的key原创 2020-08-13 18:08:16 · 706 阅读 · 0 评论 -
HashMap之containsKey
HashMap之containsKey前提:jdk1.8之前HashMap的存储方式:链表+hashjdk1.8以后中HashMap的存储方式:链表+hash+红黑树算法业务逻辑整理1,map不能为空,且hash对应的下标要存在。否则返回null2,取下标对应的对象,如果该对象的key与入参key一致,则返回该对象3,否则,获取下一个对象,如果该对象为空,返回null4,如果当前对象是树结构,则调用getTreeNode,获取是否存在5,如果不是树结构,循环对象,如果存在对象的key原创 2020-08-13 16:13:23 · 2605 阅读 · 0 评论 -
HashMap之put
HashMap之put前提:jdk1.8之前HashMap的存储方式:链表+hashjdk1.8以后中HashMap的存储方式:链表+hash+红黑树算法业务逻辑整理1,判断当前map是否为空的,如果是则初始化。2,判断当前key的hash是否存在map中,2.1,如果不存在则直接添加对象当map中2.2,如果存在2.2.1,如果第一个的key与put的key一致,则把一致的对象赋值给e2.2.2,如果对象为红黑树存储方式,则把一致的对象赋值给e2.2.3,否则(存储方式非红原创 2020-08-13 14:01:33 · 112 阅读 · 0 评论 -
HashMap之tableSizeFor
HashMap之tableSizeFor/** * Returns a power of two size for the given target capacity. * 根据入参的值(cap),返回一个2幂次方的值 */static final int tableSizeFor(int cap) { //入参值减一,如:cap =10 则 n = 9 int n = cap - 1; // n >>> 1 ==>> (n >>原创 2020-08-11 18:21:06 · 99 阅读 · 0 评论 -
Java调用外部私有方法
描述:在写单元测试的时候,要测试一个私有方法解决方案:利用反射,调用私有方法 /**调用私有方法 * * @param c class名 * @param methodName 方法名 * @param parameters 方法参数 * @return Method实体 * @throws NoSuchMethodExc原创 2017-05-04 10:46:50 · 1625 阅读 · 0 评论