- 博客(491)
- 资源 (16)
- 收藏
- 关注
原创 spring扩展之基于HandlerMapping实现接口灰度发布的demo
新增一个自定义注解,用来标注接口的适配的版本号,默认为1.0版本/*** 自定义版本号注解*/}自定义HandleMapping,继承spring家的HandleMapping,并重写两个getCustomTypeCondition方法@Override= null?}}/*** 注册自定义的 ApiVersionHandleMapping*/@Override}}
2022-12-21 18:10:34
841
原创 实现了Spring的Aware接口的自定义类什么时候执行的?
以如下代码为例,自定义类MyAware实现了BeanFactroryAware,希望在MyAware中攀上BeanFactory这个亲戚,那spring是什么时候给我beanFactory的呢?在创建每一个bean时,都会执行一下这个invokeAwareMethods,这段代码的逻辑很简单,就是判断当前的bean是否是Aware类型的,如果是,具体是哪种。了解到用户可以通过实现相应的Aware接口来获取spring框架提供的能力,俗称“攀亲戚”我们通过debug堆栈信息就能看出。
2022-12-01 18:27:15
900
原创 springboot自定义starter采坑记录,could not autowire,No beans of xxxx
使用了springboot的各种starter,深感spi模式的方便,想着手动实现一个自定义starter,结果一动手就问题频出,在将starter打成jar后,又遇到了无法引用的情况。切忌眼高手低,再简单的东西都要手动实践一遍!本地引入的jar,里面的内无法被注入。
2022-11-25 11:38:45
595
原创 es多字段模糊匹配wildcardQuery,java实现
es 版本:7.10.1spring-cloud版本:2.3.5.RELEASEspring-boot-starter-data-elasticsearch 版本 2.3.12.RELEASEspring-data-elasticsearch 版本 4.0.9.RELEASEes查询,需求:title或者content任意一个字段能匹配到关键词即可。
2022-11-22 18:01:44
6921
原创 记一次failed to req API:/nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried:ConnectE解决过程
编码无小事,切不可粗心大意。
2022-11-21 10:52:06
24736
3
原创 暴力破解Leetcode 42:接雨水问题
问题描述 给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。(数组以外的区域高度视为0)数据范围:1≤n≤1000000,数组中每个值满足 >=0示例输入:[3,1,2,5,2,4]返回值:5说明:数组 [3,1,2,5,2,4] 表示柱子高度,在这种情况下,可以接 5个单位的雨水,蓝色的为雨水。
2022-09-14 14:45:05
1292
原创 模仿dubbo的ConsistentHashLoadBalance实现一个自定义负载均衡案例
模仿dubbo的ConsistentHashLoadBalance实现一个自定义负载均衡案例
2022-09-09 18:04:44
505
翻译 了解一致性hash原理,这篇文章就够了
在理解一致性hash算法之前,让我们来看一个在缓存中最经典的案例场景,理解这个运用场景之后,我们再去理解一致性hash算法就更容易了,在这个过程中我们还能体会一致性hash算法的优势之处,好了,让我们来描述一下这个经典的分布式缓存案例。
2022-09-09 15:03:41
395
原创 dubbo的负载均衡策略之RandomLoadBalance加权随机策略源码分析
RandomLoadBalance代码阅读起来没什么障碍,但里面包含的小细节(思想)还是很值得学习的,多阅读优秀的代码,模仿它,学习它,超越它!
2022-09-08 17:18:54
444
原创 解析知乎热榜
实现一个简单的需求,解析知乎热榜,主要涉及找到热榜接口、json解析、返回值中文乱码处理(Unicode编码)、RestTemplate配置等等。这只是简单的实现了功能,如果需要实际使用还有很多问题没有解决,比如自动获取的频率应该设置为多少,太频繁了可能导致被别人封禁,频率太低又没有时效性;如果要应对并发访问,可以将获取来了的数据存到自己的缓存系统中去,比如redis中,自己系统访问的时候优先访问本地缓存,缓存的过期时间就参照上面的分析来设置。...
2022-08-30 16:40:01
674
原创 mybatisplus动态sql整型数组使用in踩坑
项目中有个需求,根据多个整型id查询对应的信息理论上最终sql应该是如下所示:但前端传来的参数想着就把userIdArr转成1,2,3,4,5,6就行了然后将字符串形式的userArrIds作为参数传给mappe,于是写成动态sql如下按照预想的,它应该生成如下sql语句自测一下,发现无论userIdArr传多少个,都只能查出第一个,郁闷了半天才发现被自己“蠢哭了”,因为将Integer[] userIdArr转换成了String,最终的sql其实是这样的整个参数被当成了
2022-08-26 10:09:04
1492
原创 java实现已知Host,提取主域名(Guava)
news.sina.com 和 sina.com 各一次,应该统计为sina.com 两次。有个需求需要统计某台机器访问其他网站的频次,同一个主域名下的频次需要合并,即例如访问。
2022-08-09 14:46:49
1144
原创 将一个单向链表拆分成两个java实现
常见的一道笔试题:链表拆分,将一个单向链表和拆分成两个,如下所示:原始链表:1—>2—>3—>4—>5—>6—>7拆分后链表A:1—>3—>5—>7拆分后链表B:2—>4—>6思路:定义两个头节点,作为新链表的头,分别指向原链表的前两个元素再定义两个浮动,初始值分别指向新链表的头结点然后交替遍历原始节点,将各自的next赋值给新链表待遍历到最后,需要为两个新链表指定尾节点,即赋值为null最后退出循环。...
2022-07-14 18:25:54
881
原创 实例讲解ThreadPoolExecutor线程池任务执行过程
为了方便测试,设置核心线程数(corePoolSize)为2,最大线程数(maximumPoolSize)为3,任务队列长度为3。创建一个线程池,任务执行时长通过doSomeThing的sleep时长来决定。问题1启动线程池,还未提交任务,此时线程池有几个线程?答:0个,debug可以看出,创建线程池后,并没有往线程池添加线程。 提交第一个任务,待第一个任务执行完成之后,再提交第二个任务,此时线程池有几个线程?即在第一个任务执行完成后,提交第二个任务,是否会创建新线程?答:会创建新线程源码的注释上
2022-07-07 10:22:02
922
原创 Spring中@Autowired注解装配流程
众所周知,Autowired注解是通过AutowiredAnnotationBeanPostProcessor来解析的第一个问题AutowiredAnnotationBeanPostProcessor在哪里注册的?过程比较复杂,在使用xml和注解不同的场景中,略有不同,具体可以参考如下文章:xml开发方式下AutowiredAnnotationBeanPostProcessor的注册时机https://blog.youkuaiyun.com/leisure_life/article/details/125570942?
2022-07-02 16:31:09
910
原创 注解开发方式下AutowiredAnnotationBeanPostProcessor的注册时机
写一个测试方法,new的是AnnotationConfigApplicationContext ,指定basePackages进this()里面会new一个AnnotatedBeanDefinitionReader new AnnotatedBeanDefinitionReader()的过程中,有一行与众不同的代码继续跟进 正是在这个方法内,把AutowiredAnnotationBeanPostProcessor的注册到了Set中 在使用xml方式...
2022-07-02 13:54:36
320
原创 xml开发方式下AutowiredAnnotationBeanPostProcessor的注册时机
AutowiredAnnotationBeanPostProcessor是实现@Autowired的关键,它本身是在何时添加到sping容器中的?在使用xml方式开发的过程中,我们程序入口一般是ClassPathXmlApplicationContext创建ClassPathXmlApplicationContext时,会调用this构造函数 在构造函数中调用父类构造函数,完成一些属性的加载,以及配置文件路径的解析工作,然后进入正题——refresh() 在核心的refresh()方法中,有一个步骤是
2022-07-02 13:43:38
366
原创 springboot中内置tomcat什么时候创建的,又是什么时候启动的?
与spring和springboot相关的重要逻辑,如果想了解源头在哪,找refresh准没错启动类,run一路run直到refreshContext(context) 走到ServletWebServerApplicationContext#refresh()其实调用还是super.refresh(),也就是AbstractApplicationContext的refresh,再调用onRefresh()然后又回调回了ServletWebServerApplic
2022-06-29 08:56:31
519
原创 SpringBoot中spring.factories在哪里被加载的
Spring 自 3.2 引入 spring.factories SPI 后并没有真正的利用起来,使用的地方比较少,然而真正把 spring.factories 发扬光大的是在 Spring Boot 中 那在springboot中,spring.factories什么时候被加载的呢,里面的类又是什么时候被实例化的呢?从一个普通的springboot项目的main方法进去 就是这里,一个读取里面的类全限定性类名,然后进行实例化。 循环遍历,逐一初始化,用的是java的反射机制反射, forName..
2022-06-27 13:43:29
1130
原创 AutowiredAnnotationBeanPostProcessor什么时候被实例化的?
AutowiredAnnotationBeanPostProcessor是spring实现自动装配的基石,根据前文《 internalAutowiredAnnotationProcessor在哪冒出来的?》,我们已经知道了AutowiredAnnotationBeanPostProcessor是什么时候被加入BeanDefinition,那它又是在哪个步骤被实例化的呢?把断点打在 refresh()方法的invokeBeanFactoryPostProcessors处我们可以看看invokeBeanFact
2022-06-25 17:29:21
533
原创 KafkaTemplate配置ProducerInterceptor|springboot整合kafka,配置自定义拦截器
springboot整合kafka,配置自定义拦截器 ,KafkaTemplate配置ProducerInterceptor
2022-06-17 11:06:26
2116
原创 java字节码层面逐行分析,解释i++和++i的区别
源码 public void testAdd(){ int a = 10; a = a++; System.out.println(a); } public void testAddAdd(){ int a = 10; a = ++a; System.out.println(a); }编译后生成的字节码testAdd()public void
2022-05-24 14:18:04
258
原创 阿里巴巴Java开发手册推荐使用LongAdder,为什么呢?
高并发情况下各种累加器性能测试,包括synchronized、AtomicInteger、AtomicLong、LongAdder、LongAccumulator
2022-05-21 18:33:53
422
原创 CompletableFuture实现多个互不相干的方法并行调用
CompletableFuture.supplyAsync()和 CompletableFuture.allOf()解决多方法并行问题
2022-05-20 17:01:27
9068
1
原创 同事写了段代码,差点没看懂,java1.8特性List转Map & Function.identity()
如果只是简单的需求,还是最原始的写法清晰明了!后面的写法只是为了方便学习stream流的使用,让自己能看懂其他卷王写的“优秀”代码
2022-05-18 10:12:03
2123
原创 Spring的Aware接口有什么用?
ioc容器里面的对象分两种,一种是用户自定义对象,一种是容器对象Aware 接口可以理解为用来获取某些容器对象的方法例如一个普通的Bean对象,需要用到BeanFactory,可以这样做@Componentpublic class MyAware implements BeanFactoryAware { BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory)
2022-05-17 15:12:17
3692
原创 线程池ThreadPoolExecutor拒绝策略RejectedExecutionHandler
问题1:什么时候触发拒绝策略?问题2:拒绝策略有哪些?问题3:默认的拒绝策略是什么?问题4:你实际开发经历中的拒绝策略是什么?
2022-05-16 10:53:50
995
原创 借助linux的crontab定时任务不停机清理日志
为了方便定位问题,一般会打开日志记录,但运行一段时间后日志特别大,希望能定期清理,比如只保留近三天的日志。新建一个shell脚本,clear_up_log.sh,内容如下,对应需要清理的日志路径yes | cp /dev/null nohup.out编辑crontabvi /etc/crontab添加一个任务,时间根据自己的需要设置,我这测试5分钟一次#执行时间 清理脚本所在位置*/5 * * * * root /cron/clean_up_log
2022-05-12 15:08:48
994
原创 java新特性之Stream,演变过程
遍历数组1.0 public static void ergodicList(List<Integer> list){ for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } }遍历List1.5 public static void ergodicList(List<Integer> ..
2022-05-10 13:43:43
241
原创 spring 事务传播机制总结
spring事务的传播机制定义在 TransactionDefinition 接口中,定义了如下传播类型PROPAGATION_REQUIRED支持当前事务,如果没有当前事务就创建一个新的事务,是默认的传播行为。外围方法未开启事务内部会创建新事务,若新事务回滚,不影响外围方法。外围方法开启事务内部方法会加入到外围方法的事务中,使用同一个事务,不管内外谁发生异常,整个事务都将回滚。/** * Support a current transaction; create a
2022-04-28 15:20:52
663
原创 mvcc相关:innoDB之read view数据格式
源码struct read_view_t{ ulint type; /*!< VIEW_NORMAL, VIEW_HIGH_GRANULARITY */ undo_no_t undo_no;/*!< 0 or if type is VIEW_HIGH_GRANULARITY transaction undo_no when this high-granularity consistent read view was created */ trx_id_t..
2022-04-26 11:33:41
271
原创 mysql InnoDB两次写(doublewrite)
前置知识InnoDB的数据的读取和更新是以页为单位的,并不是以行为单位的;需要被操作的数据,会先以页(16K)为单位加载到内存中;内存中被修改了的页,称为脏页;被修改的数据(脏页)并不是立刻刷新到磁盘,而是通过fscyn函数调用才会刷新到磁盘;doublewriteInsert Buffer给InnoDB存储引擎带来了性能上的提升,doublewrite给InnoDB带来的是数据页的可靠性。当数据库宕机时,可能InnoDB存储引擎正在写入某个页到表中,而这个页只...
2022-04-25 11:16:42
510
原创 玩大了,机试让写一段代码模拟OOM,结果电脑死机了,面试官脸都绿了
public static void testStackOutOfMemory(){ while (true) { Thread thread = new Thread(new Runnable() { public void run() { while(true){} } }); thread.start(); } }上面这个必死,下面这个没试过 public static void testStackOutOfMemory() { ..
2022-04-18 15:01:42
261
原创 Spring @Transactional注解失效场景重现
环境jdk1.8 + springboot 2.1.0.RELEASE+mysql 8 innerDB存储引擎正常在数据插入一条数据抛出checked异常 @Transactional public ApiResult updateUser(@RequestBody UserParams user) throws Exception { SysUser sysUser = new SysUser(); sysUser.se..
2022-04-15 17:02:07
1006
原创 免费的图片识别接口,百度ocr的SDK使用java版
申请使用,个人完成认证可获得一定的免费使用场景,用来测试或者简单的场景足够了百度智能云-登录https://console.bce.baidu.com/ai/?_=1649487753967&fromai=1#/ai/ocr/overview/index创建应用,获得APP_ID、API_KEY和SECRET_KEY参考文档进行测试https://ai.baidu.com/ai-doc/OCR/Ikibizxqlhttps://ai.baidu.com/ai-d...
2022-04-09 16:10:57
2502
原创 jdk1.8 HashMap哈希表底层采用何种算法计算hash值?如何确定元素在哈希表的下标
关键代码取hash自身hashCode 按位异或hashCode无符号右移16位当数组的长度很短时,只有低位数的hashcode值能参与运算。而让高16位参与运算可以更好的均匀散列,减少碰撞,进一步降低hash冲突的几率。并且使得高16位和低16位的信息都被保留了。static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h.
2022-03-23 18:52:31
1183
1
redis的部分可用windows版本.txt
2020-09-24
代码统计工具(SourceCounter)
2018-06-15
https双向认证所需jar
2017-09-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人