自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Frank-Fu

业余码农

  • 博客(49)
  • 收藏
  • 关注

原创 雪花算法的原理

代码/** * 生成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 602

原创 自定义注解

自定义注解创建注解详解创建注解拦截详解使用注解输出结果创建注解/** * 类:定义注解 * 内容: * 创建人:frank-fu * 时间:2020/11/20 *///注解作用的位置,ElementType.METHOD表示该注解仅能作用于方法上@Target({ElementType.METHOD})//注解的生命周期,表示注解会被保留到什么阶段,可以选择编译阶段、类加载阶段,或运行阶段@Retention(RetentionPolicy.RUNTIME)//子类会继承父类的注解

2020-11-20 16:11:32 87

原创 二进制转换

二进制转换整数正整数实例分析总结负整数总结小数正小数负小数整数正整数实例十进制2的次幂二进制12000012210010321 + 2000114220100522 + 200101622 + 210110722 + 21 + 2001118231000………分析比如:100转成二进制1, 转成2的次幂:100 = 26 +25+222,0000 0000 根据 26中的6

2020-10-10 18:16:16 656

原创 HashMap原理

HashMap原理属性newHashMap()HashMap(int initialCapacity)HashMap(int initialCapacity, float loadFactor)put原理属性loadFactor:加载因子。作用:主要参与计算阈值大小的table:数组。作用:用来存放数据size:HashMap存放元素的数量。作用:记录存放元素的数量,以及参与判断是否需要扩容条件之一threshold:阈值。作用:当table数组中存放的数据量达到阈值大小,则进行扩容。计算方式:

2020-09-10 19:42:06 88

原创 数据结构:分类

数据结构数据结构分类逻辑结构存储结构二元组表达式集合结构线性结构图形结构树形结构数据结构分类数据结构分为:逻辑结构,存储结构(物理)逻辑结构逻辑结构也可以分为两种:分类一:树形结构,线性结构,集合结构,图形结构分类二:线性结构,非线性结构存储结构存储结构分为:顺序存储结构,链式(链接)存储结构,索引存储结构,哈希(散列)存储结构二元组重要!表达式示例:tree=(K,R)K={01,02,03,04,05,06}R={<01,02>, <01,05>,

2020-06-02 09:38:21 510

原创 Redis常见命令-字符串

SETSET key "value"解析:设置键为key,值为value(字符串)EXSET key "value" EX 10086解析:设置键为key,值为value(字符串),过期时间为:10086秒PXSET key "value" PX 10086解析:设置键为key,值为value(字符串),过期时间为:10086毫秒NXSET key "value" NX解析:设置键为key,值为value(字符串),如果当前key不存在,设置成功,key存在,则设

2021-12-29 16:03:48 497

原创 判断是否为空

import org.apache.commons.lang3.StringUtils;import java.util.Collection;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 基础数据校验 * * @author frank * @module * @date 2021/9/4 13:51 */public class EmptyUt.

2021-09-04 14:42:25 206

原创 quartz动态定时任务

场景:需求:支付的二维码,超过两个小时以后,如果还未支付,则自动转为取消支付,或者支付超时的状态需求分析:1,动态定时任务:每个支付的二维码创建的时候,创建一个动态的定时任务,两个小时候自动执行,更新支付状态,可以解决这个问题。(1)持久化:如果服务重启了,动态定时任务会丢失,导致部分数据没办法更新状态。(2)分布式:如果当服务重启时,自动扫描数据,重新计算时间,再次创建动态定时任务。可以解决(1)的问题,但是当分布式,多个节点的时候,都会重新加载所有的任务,这样性能上不

2021-08-21 12:00:22 2014 2

原创 Redisson延迟队列

目录场景:需求:需求分析:连接Redis监听延迟队列场景:需求:支付的二维码,超过两个小时以后,如果还未支付,则自动转为取消支付,或者支付超时的状态需求分析:1,动态定时任务:每个支付的二维码创建的时候,创建一个动态的定时任务,两个小时候自动执行,更新支付状态,可以解决这个问题。(1)持久化:如果服务重启了,动态定时任务会丢失,导致部分数据没办法更新状态。(2)分布式:如果当服务重启时,自动扫描数据,重新计算时间,再次创建动态定时任务。可以解决

2021-08-21 11:06:48 5464 7

转载 maven的pom.xml文件详解

本文转载:https://www.cnblogs.com/hafiz/p/5360195.html作者:阿豪聊干货<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-

2021-08-18 14:09:40 129

原创 @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 161

原创 IDEA修改maven内存大小

1,打开file->setting->Build,Execution,Deployment->Build Tools->Maven->Runner2,修改VM Options修改参数值为:-Xmx1024m

2021-08-10 14:53:31 3768

原创 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 68

原创 SpringCloud之Eureka使用

SpringCloud之Eureka使用搭建Eureka服务搭建user服务基本配置配置pom.xml配置application.properties配置Application创建UserController高可用创建application-user1.properties创建application-user2.properties修改application.properties总application.propertiesapplication-user1.propertiesapplication-us

2020-12-21 18:22:20 82

原创 SpringCloud之Eureka

SpringCloud之Eureka基本配置配置pom.xml配置application.properties配置Application增加security增加pom.xml增加application.properties高可用创建application-register1.properties创建application-register2.properties创建application-register3.properties修改application.properties总application.pro

2020-12-21 18:00:13 94 1

原创 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 83

原创 注解之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 991

原创 注解之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 139

原创 注解之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 254 1

原创 Float之存储格式

Float之存储格式前提存放格式符号位指数位尾数位前提float存储长度为32位存储分为:符号位,指数位,尾数位符号位:长度为1。作用:判断当前数字是正数还是负数指数位:长度为8。作用:小数位和整数位的分割,最终能够计算出那些是整数,那些是小数位尾数位:长度为23。作用:存放整个数字的二进制(不满23位的补0或超出的部分切割掉)float符号位指数位尾数位总长度为321823存放格式符号位判断当前待转换数字n(100.5),是正数还是负数,正数,指数

2020-10-10 16:42:38 1706 1

原创 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 389

原创 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 174

原创 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 503

原创 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 358

原创 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 316

原创 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 531

原创 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 928 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 251

原创 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 1298

原创 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 106

原创 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 120

原创 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 92

原创 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 481

原创 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 638 4

原创 HashMap之数组下标计算

HashMap之原理初始化loadFactorcapacitythreshold数组下标计算前提:HashMap是有数组+链表组成的,其中使用的算法有:hash(java8又使用了红黑树)初始化loadFactorloadFactor是参与计算HashMap扩容的一个加载因子new HashMap()会默认给loadFactor加载一个值0.75capacitycapacity并非HashMap的属性,指的是HashMap数组的大小,即table.lengththreshold

2020-08-21 13:58:01 3374 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 1123

原创 HashMap源码分析目录

HashMap源码分析目录链接: HashMap之resize链接: HashMap之hash链接: HashMap之clear链接: HashMap之remove链接: HashMap之containsKey链接: HashMap之put链接: HashMap之tableSizeFor链接: 运算符之位运算符

2020-08-20 14:48:34 101

原创 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 116

原创 运算符之位运算符

运算符之位运算符<< 左移实例分析>> 右移实例分析>>> 无符号右移| 或^ 异或说明:位运算符都是作用在二进制上的<< 左移实例比如 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 224

原创 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 86

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除