- 博客(44)
- 收藏
- 关注
原创 基于Spring AOP和CGLIB代理实现引介增强(Introduction Advice)示例
是AOP Alliance MethodInterceptor 的子接口,允许拦截器实现其他接口,并通过使用该拦截器的代理提供。引入通常是混合的,支持构建复合对象,这些对象可以实现 Java 中多重继承的许多目标。如果该目标类是接口,则将为给定接口创建一个 JDK 代理。如果该目标类是任何其他类,则将为给定类创建一个 CGLIB 代理。一个Java类,没有实现某个接口,在不修改Java类的情况下,使其具备该接口的功能。CGLIB代理:如果目标对象没有实现接口,那么可以使用CGLIB代理。
2023-10-28 13:25:24 247
原创 GlobalTransactional
handleGlobalTransaction(MethodInvocation,GlobalTransactional)这个方法,是TM侧的TM的拦截器。wrapIfNecessary(Object, String, Object)方法,是 TM、GlobalLock和 TCC 模式的扫描仪。RM是资源管理器,管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。TM是事务管理器,定义全局事务的范围:开始全局事务、提交或回滚全局事务。看看seata术语表。
2023-10-15 20:26:21 628
原创 ThreadLocal、ThreadLocalMap、InheritableThreadLocal源码解读
若线程消失,其“thread-local”实例的所有变量的副本都会垃圾回收(除非存在对这些变量的副本的其他引用)。这些变量与普通变量不同,每个的线程可以通过各自的get或set方法对这些的独立的初始化的变量的副本(copy)进行操作。当创建子线程时,父线程所具有的全部的可以继承的“thread-local”的变量的值可被子线程接收,作为子线程的初始值。中的方法chileValue()方法,使子线程的值是父线程值的任意自定义函数的映射值。通常,子线程的值和父线程的值是相同的,但是可以通过重写类。
2023-06-19 09:07:52 390
原创 【Java代码】MP3、flac歌曲批量生成同名的“xxx.lrc”歌词文件导入索尼黑砖二代
【Java代码】MP3、flac歌曲批量生成同名的”xxx.lrc“歌词文件导入索尼黑砖二代
2023-04-23 18:38:02 2342
原创 AspectJ切面自定义注解实现参数分组校验——代码实现(3)
springboot+maven二、代码实现2-1.注解定义2-2.组定义2-3.constraints使用2-4.切面定义2-5.复用ValidatorFactory2-6.单测校验针对加款组调用接口单测1:缺少默认组参数,执行结果:金额不能为空单测2:缺少调额组的参数,执行结果:okkkk单测3:缺少加款组的参数,执行结果:币种不能为空单测结果表明,分组成功,即可实现分组校验。@ValidGroupParam注解支持可多个组参数校验,同时也支持对方法的多个Object
2022-07-04 23:48:39 434
原创 AspectJ切面自定义注解实现参数分组校验——基础概念(2)
maven需要引入依赖,aspectjweaver。二、创建AspectJ2-1.基础概念AspectJ提供了面向切面编程的实现,AspectJ有三个核心概念:**Aspect(切面):**通过横切多个对象来做模块化的关联,每个切面侧重一个特定的横切功能。**Join point(执行点):**脚本执行过程中的一个点,例如方法的执行或属性的访问。Advice(通知):切面在特定执行点采取的行动。Pointcut(与执行点相切的点):使用规则表达式与执行点相切的点。advice通过pointcut的规
2022-07-04 23:05:18 585
原创 AspectJ切面自定义注解实现参数分组校验——基础概念(1)
maven需要引入的依赖:二、validation-api源码解读通常使用validation-api对产数校验会使用注解配合、等注解使用进行参数校验。但是,当前只支持对组进行校验。也就是说,不支持对参数进行分多个组校验。接口Reference如下,源码阐述如下,可以看出,constraints(指、等注解)是默认是归属默认组,验证的也只是默认组。除非明确的定义了其他一些组。即注解只是针对默认组进行验证。注解Reference如下,源码阐述如下,可以看出,当constraints与注解做一
2022-07-04 17:53:58 427
原创 Mysql 5.7 创建索引官方解读
Mysql 5.7通常我们在使用时会创建所有的索引。索引的创建对于 InnoDB 表尤其重要,其中主键决定了数据文件中行的物理布局。是另一种添加索引的方式,针对已经创建的表添加索引。注意,这种方式是被映射到 来创建索引。而且对于PRIMARY KEY不能使用,需要使用。支持虚拟列的二级索引。当启用 设置后,每次在 InnoDB 表上创建索引后会运行 语句。2.key part形式的索引规范创建具有多个key part的索引。索引键值是通过连接给定key part的值形成的。key part可以结尾,
2022-06-27 00:08:12 855
原创 谷歌A/B实验——重叠实验基础设施解读
〇、来源谷歌ab实验论文Overlapping Experiment Infrastructure: More, Better, Faster Experimentation第四章——OVERLAPPING EXPERIMENT INFRAS- TRUCTURE一、背景介绍统计解决方案是一个多因素系统,其中每个因素对应于系统中的一个可变参数。实际上,一个请求将在 N 个同时进行的实验中进行,其中每个实验将修改不同的参数,N 等于参数的数量。多因素实验得到了大量理论和实践的支持 [^1]。然而,多因
2021-07-14 20:10:39 2178 1
原创 Future源码解读
Future源码解读〇、[源码版本] jdk 1.8一、Future概述[举例1]示例代码[举例2]示例代码内存一致性影响二、Future接口的方法cancel方法isCancelled方法isDone方法get方法〇、[源码版本] jdk 1.8一、Future概述Future表示异步计算的结果。提供了检查计算是否完成、等待计算完成以及检索计算结果的方法。结果只能在计算完成后使用方法get取回,必要时阻塞,直到它准备好。取消由cancel方法执行。提供了其他方法来确定任务是正常完成还是被取消。
2021-07-08 10:24:04 250
原创 Executors源码解读——创建ExecutorService线程池
创建ExecutorService线程池线程池概述线程池创建Executors源码解读newFixedThreadPool()newWorkStealingPool()newSingleThreadExecutor()newCachedThreadPool()newSingleThreadScheduledExecutor()线程池概述1)线程的创建需要操作线程资源、栈空间等,大量且频繁的创建与销毁需要消耗大量时间。2)使用线程池处理,就可以复用一组线程,把一小组任务交给线程池分发处理。3)线程池内
2021-07-07 19:41:29 528 1
原创 ExecutorService源码解读
ExecutorService源码阅读ExecutorService接口详解[源码版本]jdk 1.8[解读]ExecutorService关闭方法概述[举例1]代码示例[解读]ExecutorService任务执行方法概述[解读]Executors工厂方法概述[举例1]代码示例[解读]内存一致性影响接口方法详解`shutdown`方法`shutdownNow`方法`isShutdown`方法`isTerminated`方法`awaitTermination`方法`submit`方法` Future sub
2021-07-07 15:31:06 425
原创 Executor源码解读
Executor接口[解读]不再显式创建线程[解读]不严格要求执行是异步的[解读]任务在调用者线程之外的某个线程中执行[解读]施加了某种限制的复合执行器[解读]concurrent包中提供的Executor的实现对象[解读]内存一致性影响[解读]Executor接口只提供了execute方法[解读]不再显式创建线程Executor接口是执行提交的Runnable任务的对象。这个接口提供了一种方法,将任务提交与每个任务如何运行的机制解耦,包括线程使用、调度等的细节。通常使用 Executor而不是显式创建
2021-07-07 10:49:10 666
原创 redis的zset使用(java)——存取List< Object>
1 需求要往redis存取List< Object>。2 条件1)Object:是一个UserEvent对象,对应3个字段:Integer productId;String eventCode;Long timestamp;2)要求存取个数不超过xx个。超过xx个,则剔除早期加入的数据。备注:存之前的每个userEvent对象都是不一样的。3)使用zset实现。3 zset使用原理1)zset是有一个score参数,这个分数是zset存储结构的顺序依据。可以按分数从小
2021-06-08 20:21:16 5662
原创 封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>
封装自定义的RedisTemplate切库工具读取List序列化的byte数组的步骤注入LettuceConnectionFactory连接池代码思路RedisStandaloneConfiguration单机配置实例代码LettuceClientConfiguration连接池配置实例思路LettuceClientConfiguration连接池配置关键代码封装自定义的redis切库工具类实现一个自定义的RedisTemplate需要什么?切库关键代码redis中读取List序列化的byte数组关键步骤使
2021-03-02 16:24:08 1080
原创 flink实时流遇到的问题排查——部分数据未落库redis问题
flink实时流遇到的问题排查遇到的坑技术和环境问题表述简化代码问题排查思路结论遇到的坑技术和环境技术:kafka、zookeeper、DataStream、redis环境表述:kafka生产者KafkaProducerTest类mock 5 条日志后,FlinkDataRealTimeFlowDeal类有建消费者,消费日志数据进行实时流DataStream处理,进行日志清洗、数据落库redis。问题表述理论上:KafkaProducerTest生产者每次执行x条日志,消费者实际读取x条日志,
2021-02-26 16:01:08 590
原创 java.lang.ClassNotFoundException: retrofit2.Retrofit$Builder解决思路
ClassNotFoundException报错报错推测可能是jar包问题功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入报错org.springframework.web.util.NestedServletException
2020-12-10 20:29:30 1395
原创 js中toFixed方法的两个坑
js中toFixed方法的两个坑toFixed返回结果是string,后续使用它计算会丢失精度toFixed返回结果可能出现负零-0.00toFixed返回结果是string,后续使用它计算会丢失精度toFixed返回结果可能出现负零-0.00只处理数字位,不处理符号位...
2020-11-18 13:17:58 3473
原创 Shiro并发登录人数控制遇到的问题和解决
shiro并发登录人数控制遇到的问题和解决问题1:KickoutSessionControlFilter不起作用问题2:KickoutSessionControlFilter中cache为null空指针异常问题3:服务器重启后首页访问:subject.getPrincipal()报ClassCastException异常问题1:KickoutSessionControlFilter不起作用public ShiroFilterFactoryBean shiroFilter(SecurityManager
2020-11-12 18:35:59 543
原创 Shiro授权流程图
Shiro授权流程Shiro授权流程图Shiro授权流程文字说明Shiro授权流程图参考:https://www.w3cschool.cn/shiro/skex1if6.html根据Shiro授权流程文字说明,绘制流程图如下:Shiro授权流程文字说明流程如下:首先调用 Subject.isPermitted*/hasRole接口,其会委托给 SecurityManager,而 SecurityManager 接着会委托给 Authorizer;Authorizer 是真正的授权者,如果我
2020-11-11 09:01:14 596
原创 流操作AnyMatch比较两个list是否含有相同的元素
import java.util.Arrays;import java.util.List;/** * @Author zhanglifang * @create 2020-07-29 17:29 */public class AnyMatch { public static void main(String[] args) { List list1 = Arrays.asList("JDK6", "JDK8", "JDK10"); List list2
2020-07-29 18:03:00 1775
原创 1002 写出这个数 (20分)-Java
题目读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:yi san wu代码示例import java.util.Scanner;/** * @Author zhangli
2020-07-14 21:06:13 274
原创 synchronized同步方法概述
synchronized同步方法1、“线程安全”与“非线程安全”:非线程安全情况:多个线程对同一个对象中的实例变量进行并发访问时,产生脏读。解决方法:对实例变量的值进行同步处理。2、方法内的变量为线程安全3、实例变量非线程安全解决方法:在相应类中的方法前加关键字synchronized两个线程访问同一个对象中的同步方法,一定是线程安全的。4、synchronized取得的锁都是对象锁线程如何取得对象锁:多个线程访问同一个对象,哪个线程先执行带synchronized关键字的方法,哪个线程
2020-07-13 08:51:16 175
原创 List「Object[]」转Map「Integer,String」处理
题目有一个List<Object[]>,里面的元素分别是[1,“a”],[2,“b”],[1,“c”],[2,“d”]…,请写一个函数将其转换为一个Map<Integer,String>,以List的Object[]第一个元素为关键字,将同关键字的字符组装在一起,以逗号间隔开。例如:转化结果为{1:“a,c”},{2,“b,d”}。代码示例import java.util.*;/** * @Author zhanglifang * @create 2020-07-10
2020-07-10 20:51:46 1006
原创 redis知识归纳
目录Redis有哪些数据结构?有大量key需要设置同一时间过期,需要注意什么?Redis分布式锁怎么回事?假设Redis里有1亿个key,其中有10万个key是以同一个固定前缀开头,如何将它们全部找出?如何用Redis做异步队列?Redis是如何持久化的?Redis有哪些数据结构?String、Hash、List、Set、SortedSet,还有HyperLoglog,Geo,Pub/Sub。有大量key需要设置同一时间过期,需要注意什么?会引发的问题:大量的key过期时间设置过于集中时,过期时间
2020-07-05 18:59:39 253
原创 Java创建对象的方式——反序列化创建对象
目录Java创建对象的几种方式反序列化创建对象思路代码示例Java创建对象的几种方式Java创建对象的方式共有4种。分别为:1、通过new语句实例化一个对象。2、通过反射机制创建对象。3、通过clone()方法创建一个对象。4、通过反序列化的方式创建对象。思考:反序列化是怎么创建对象的呢?反序列化创建对象思路反序列化创建对象的过程,需要将流转换为对象。那么,可以通过序列化,将对象的状态写在流里面,根据需要把该流读取出来重新构造一个相同的对象。代码示例首先创建一个Car类实现Seria
2020-06-30 16:40:29 4474 1
原创 HashMap的put方法(Java7)和putVal方法(Java8)
目录数组+链表:存在性能最坏情况O(n)Java7的HashMap的put方法思路数组+链表+红黑树:性能提高到O(logn)Java8的HashMap的putVal方法思路数组+链表:存在性能最坏情况O(n)Java8以前,HashMap底层数据结构采用数组+链表的结构。数组特点:查询快,增删慢。链表特点:查询慢,增删较快。HashMap:结合了数组和链表的优势。同时HashMap的操作是非Synchronized,因此效率比较高。Java7的HashMap的put方法思路put源码:pu
2020-06-28 21:21:02 313
原创 Mybatis中(#{ })模糊查询like(使用oracle的concat函数嵌套拼接SQL)
需求:模糊查询需要左右各拼接一个’%’,如:like %key% 。项目情况:mybatis中动态传参一般采用占位符#{key}。使用数据库:orecle。错误的尝试:尝试使用:like '%' + #{key} + '%'这样写不起作用。再次尝试:like #{%key%}这样写也不起作用。解决方法:最后使用2次concat函数嵌套拼接实现了。注:oracle中concat函数只能拼接两个字符,所以使用两次concat函数。代码如下:select...from...<
2020-06-17 19:57:30 1712
原创 SQL Server和MysQL中的联表更新sql示例
目录需求说明SQL Server中联表更新sql示例MySQL中联表更新sql示例需求说明需求说明:把表B的报名号数据,更新到另一张表A的报名号列。通过表A证件号码和表B身份证号相等。SQL Server中联表更新sql示例UPDATE a SET a.bmh=b.bmh FROM A a INNER JOIN B b ON a.zjhm=b.sfzhMySQL中联表更新sql示例UPDATE A a , B bSET a.bmh=b.bmh WHERE a.zjhm=b
2020-06-12 11:05:24 216
原创 mybatisPlus中的field-strategy(字段更新插入策略):null值插入和更新问题
目录mybatisPlus中null值更新和插入问题实际项目解决方法示例field-strategy字段更新插入策略介绍枚举类FieldStrategy源码枚举类字段简介mybatisPlus中null值更新和插入问题配置mybatisPlus的项目中,默认进行了不是全量更新的策略:NOT_NULL。即在利用updateWrapper更新时,会做null判断,如果传参数为null,就不会更新。在实际项目需求中可能配置更新策略为:NOT_NULL,但是某些场景更新时需要插入这个null值进行更新。如何
2020-06-09 10:28:08 16558 2
原创 SQL Server更新某一列中多个字典码对应内容(sql示例)
目录示例-查询出多个字典码对应的内容示例-替换多个字典码对应的内容说明CHARINDEXFOR XML PATH示例-查询出多个字典码对应的内容建立表格:学生-学习科目表student_study注意:科目kemu列内容是字典码,需要更换成对应内容。建立表格:编号-学科对应表格xueke注意:这张表是字典码编号和科目xueke的对应关系表。查询结果:SQL代码:select a.kemu,stuff(( select ','+b.xueke from xueke b
2020-06-08 13:26:40 571
原创 Navicat中无法自定义标量值函数的问题
目录自定义标量函数代码自定义函数无法创建问题自定义标量函数代码我的思路:我要创建一个自定义标量函数。使用软件:navicat12.1版本。点击Fx图标进行创建。代码中,使用num作为入参,根据num的大小返回颜色。num大于0返回白色,否则返回蓝色。注意:定义返回数据的类型使用RETURNS,注意结尾有S。CREATE FUNCTION getOtherColor(@num INT)RETURNS VARCHAR(255)ASBEGIN #Routine body goes here.
2020-05-10 21:06:33 9880 5
原创 关于list遍历时sychronizedList方法和synchronized同步块的线程安全问题思考
目录我的难点我的思考过程我的难点关于慕课网的socket课程学习中,qiujuer老师在课程中讲到:关于多线程操作时,利用sychronizedList方法解决List内部方法线程不安全问题,但是对于list遍历仍然会触发异常。难点*1为什么会触发异常呢?接着老师又讲到其他解决方案,在stop()方法内部添加同步块。stop()方法中用到了List的遍历操作和clear()操作。然后在boradcast(String str)方法名上添加同步块。方法内部用到了List的遍历操作。难点*2为什么同
2020-05-09 19:49:16 869
原创 网络地址和广播地址的快速计算方法
目录前提条件小窍门原理网络地址快速计算示例广播地址快速计算示例前提条件由IP地址和子网掩码,快速计算网络地址和广播地址。小窍门前提:当子网掩码组成只有255和0组成时。小窍门原理利用255(或者0)和其他数字的&(与操作)、|(或操作)特殊的结果来快速计算。网络地址快速计算示例计算公式:网络地址 = IP地址&子网掩码小窍门原理应用:数字取192:由小窍门第一条...
2020-05-04 21:37:09 15260
原创 Lambda表达式及应用
Lambda表达式概念语法形式: () -> {}组成:括号:表示参数列表;箭头:表示lambda运算符,读作goes to;花括号:表示方法体。参数列表相关概念:参数个数:无参数,或者,1个或多个;另外,只有一个参数时括号可以省略。参数的类型:一般不定义参数类型,由编译器推理得到,或者特殊情况下,可以自己指定这些参数的类型。方法体:方法体中可以放参数相关的多句执...
2020-04-26 15:54:42 700
原创 匿名内部类探究——它是一个实例
目录匿名内部类匿名内部类匿名内部类声明格式:new 类名/接口名(){要重写的方法...}匿名内部类有什么特点呢?匿名内部类没有类名,它也就不能定义出构造器,所以它没有自己的构造器。匿名内部类是隐式地继承了一个特定的类,或者隐式地实现了一个特定的接口。匿名内部类无法定义静态成员和静态方法。匿名内部类不能用public,protected,private,static修饰。...
2020-04-25 18:34:43 674 1
原创 广播地址的计算方法(与运算、或运算)
目录我的学习过程Python中逻辑运算符notandor位运算符取反(~)与(&)或(|)广播地址计算方法IP地址子网掩码网络地址广播地址我的学习过程今天学习UDP的单播、多播、广播中,出现了广播地址的计算。这个涉及到十进制转二进制,位运算等概念。位运算按位取反、与、或让我想起了之前python中的逻辑运算符not、and、or。正好可以再回忆一遍。它们是否类似道理呢?Python中...
2020-04-22 18:08:16 19352
原创 Linux中点号,星号,加号,问号实战
目录Linux中的星号,点号和加号概念我的学习过程:我的思考过程:点号(.)星号(*)加号(+)问号(?)linux星号,点号,加号,问号在正则表达式中的实战Python代码部分我的正则表达式解读c1:匹配'zxcv.'c2:匹配'e1234ee'c3:匹配'eee'c4:匹配最后两个'ee'Linux中的星号,点号和加号概念我的学习过程:昨天在学习暂存区添加项目文件时,用到命令:git ...
2020-04-20 17:25:44 7802
原创 git pull和push整理和归纳
目录各个模块概念工作区版本库暂存区远程仓库pull和push流程相关的命令暂存区相关版本库相关远程仓库相关利用远程仓库协作开发各个模块概念我的理解:Git是版本管理工具,它主要对指定目录下的一些特定的文件的修改进行版本管理。相关的模块有:远程仓库(Remote Repository)、版本库(Repository)、暂存区(Index)、工作区(workspace)。网上找的图:工...
2020-04-19 19:21:06 1060
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人