后端
文章平均质量分 80
lkx444368875
这个作者很懒,什么都没留下…
展开
-
SpringCloud组件Ribbon的IRule的问题排查
SpringCloud组件Ribbon的IRule负载均衡策略实现中遇到的问题以及排查原创 2023-10-10 16:01:24 · 1398 阅读 · 1 评论 -
实战之ClassLoader动态加载插件无法回收引用排查
类加载器引用无法回收的问题实战排查,通过Jprofile对引用进行追踪和排查思路。原创 2021-12-28 16:05:19 · 1377 阅读 · 6 评论 -
实战spring-boot-starter-websocket之断网心跳续期实践
业务中需要应用到Websocket长连接进行数据传输,由于服务使用的是Zuul1.0版本,对ws协议支持较弱,后续尝试使用了spring-boot-starter-websocket来完成的。关于怎么集成的话网上有非常多的文章了,我就不多费口舌了。我们目前实现的功能是可以通过WebSocket调用接口发送埋点,另外还需要监听用户离开的事件为这个埋点画上一个终止访问时间。目前测试下场景有:小程序进程杀死主动退出后台挂起【会认为退出,重新唤醒则连接】横跨页面断线重连直接断网前4点触发了任意操作原创 2021-11-30 14:46:55 · 3242 阅读 · 3 评论 -
排列组合:将实体的属性设置重组
需求描述:根据给定的每个字段的所有值进行排列组合得到一个唯一条件的实体对象。比如:Model中有A\B\C三个字段:A字段可能的值是1,2,3B字段可能的值是4,5,6C字段可能的值是1,2,5这个时候需要根据ABC三个字段的值进行重组,得到一个唯一属性的Model。比如:Model1 : A -> 1,B->4,C->1Model2 : A -> 1,B->4,C->2Model3 : A -> 1,B->4,C->5Mo原创 2021-07-28 17:11:24 · 210 阅读 · 0 评论 -
SpringBoot小技巧之启动加速
相信大家使用Spring的时候每次重启都是一个很头疼的问题,随着应用规模越来越大,类越来越多,启动的速度非常慢,下面分享一个通过懒加载的方式让应用加速启动。Started UserServiceApplication in 38.37 seconds (JVM running for 40.383)我们目前的应用启动可能要花费接近40秒的样子,每次调试都很头疼,当然可以安装一些Jrebel 的方式热部署,但那个插件有很多乱七八糟的问题。原理是将所有的bean都设置为Lazy模式,当需要用到的时候,原创 2021-06-24 16:59:13 · 1257 阅读 · 0 评论 -
java中的CAS原子性操作
概念CAS(compare and swap),比较和交换,是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。 该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值现代的大多数CPU都实现了CAS,它是一种无锁(lock-free),且非阻塞的一种算法,保持数据的一致性1.java中的原子性操作1.1java如何实现原子性操作的在java中通过锁和循环cas原创 2021-03-20 17:05:47 · 428 阅读 · 0 评论 -
HashMap之Hash解读
HashMap基础源码阅读最近又看了一下hashMap的源码,发现了一些之前没有关注到的内容,比如Hash为什么要这么设计?后续的很多功能都会基于这个Hash算法进行延伸,比如扩容等等,今天重新再来认识一遍hash的算法。首先展示代码:// 构建hashstatic final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}//原创 2021-02-28 13:19:24 · 463 阅读 · 1 评论 -
基于模版方法模式优化if、else的思路
平常在公司看到很多业务逻辑的代码可能就是if/else各种判断,虽然也有一些设计模式能够解决一些问题,但是感觉都不是特别好用。刚好这次有个场景比较符合这个命题来聊一下如何去实践的.先说一下场景吧:目前有些场景需要基于BinLog的变化去做一些业务变更操作,比如有一些表字段中冗余了各种名称,希望这些源表发生变更的时候,能够顺带更新冗余字段表中的值。随着一些表的数据越来越大,一些表关联让SQL越来越慢,目前是希望压缩数据,所以数据发生变化了需要实时通知某些业务。还有一些最终一致性的业务基于阿里云原创 2020-12-11 19:45:11 · 311 阅读 · 3 评论 -
Redis应用实践之资源抢占的思考
Redis应用实践之资源抢占的思考场景描述实现思路抢占过程代码片段总结场景描述如果在某个应用中写了一个轮训的定时任务,每30秒执行一次。在集群模式下(假设3台),就相当于3台应用都会执行这个定时任务,这个时候问题就来了:如何保证只有一个节点获得执行权限,其他节点处于备胎状态。一旦获得执行权限的节点挂掉了,从其他备胎节点挑选一个负责执行。接下来带着这些思考如何通过redis去实现实现思路抢占过程通过setnx来抢占该key的值。k = key ,value = ip_时间戳如原创 2020-08-22 12:03:42 · 426 阅读 · 0 评论 -
SpringJdbcTemplate 批量新增返回自增编号功能
因为业务上有些功能是希望批量新增的数据能够返回对应的自增主键,单条的JdbcTemplate实现很简单,但是批量的话,可能需要稍微改造一点点。因为我们的框架内部是在jdbctemplate上封装了一点点,所以就这一部分上加入了通用的批量添加功能,和批量修改隔离开。/*** 批量返回新增结果** @param sql 要执行的SQL* @param parameterSource 参数对象* @return* @throws SQLException*/priva原创 2020-05-13 14:59:04 · 686 阅读 · 2 评论 -
Java读写锁ReentrantReadWriteLock之锁降级案例
之前了解读写锁的时候,只知道读读共享,读写互斥。当线程先获取到写锁,然后再去获取读锁时,接着再释放写锁。这个过程叫做锁降级。如果当前线程先获取读锁,然后再去获取写锁,这个时候会出现死锁的情况。这个时候小脑袋瓜就开始嗡嗡作响了。锁为什么能够降级,却不能够升级?在什么场景下会出现锁降级的情况?问题1 : 锁为什么能够降级,却不能够升级?首先读锁可以被多个线程持有,但是写锁同一时刻只能...原创 2020-03-09 19:28:18 · 1328 阅读 · 3 评论 -
Spring与Mybatis集成的相关实现类流程
一直很喜欢Myabtis功能与Spring集成的非常不错,对开发效率有很大的提高。之前一直很想了解Mabatis的相关流程思路,与Spring是如何去集成的。下面我们来看一下很多关键的类的相关流程:注意上图是发生在Spring初始化容器的BeanDefinition阶段Spring相关ImportBeanDefinitionRegistrar : 根据该改名字就能猜到大概,就是导入...原创 2020-01-02 16:32:50 · 203 阅读 · 0 评论 -
ReentrantLock中Condition的wait方法、signal方法简单场景回顾
这里不讲代码,只是用图大概描述Condition在ReentrantLock中做了一件怎么样的事情。流程描述Lock lock = new ReentrantLock();Condition condition = lock.newCondition();当多个线程开始抢占ReentrantLock的锁时lock.lock();ReentrantLock锁时互斥的,同一时刻只可能...原创 2019-12-16 17:35:34 · 1454 阅读 · 0 评论 -
String的intern理解与实践
String的intern方法之前遇到过一个问题很值得思考String s1 = new String("hello");String intern1 = s1.intern();String s2 = "hello";System.out.println(s1 == s2); // 返回的是falseString s3 = new String("hello") + new Str...原创 2019-11-26 17:27:57 · 128 阅读 · 0 评论 -
第三方接口对接之鉴权
第三方接口对接鉴权记录一次和第三方接口对接的过程。对接要求对方的接口做了加密验证,需要将参数进行加密生成一个Signature签名。然后对方也会根据参数做一样的步骤来比对签名是否相等来判断参数是否被篡改或者判断身份是否一致。对方提供了以下几个参数:accessKey : 和参数进行混合的keyaccessSecret: 进行base64编码的时候的密码dateTime : 密钥生...原创 2019-04-24 15:06:47 · 2512 阅读 · 0 评论 -
Spring + Jta +JDBCTemplate 分布式事物实现方式
最近项目中需要用到多数据源管,数据访问层采用的是JDBCTemplate去做的,一开始是在数据源这块做了一个多数据源的操作类,通过拦截器注解去动态赋值指定的数据源操作,这种做法在查询中是没有问题的,但是DML操作时,会出现问题:事物中无法动态操作数据源,导致很多操作指针对第一个库。查询资料的时候发现: DataSourceTransactionManager这个事物管理类只针对单个数据源进行事原创 2017-07-31 16:41:41 · 1149 阅读 · 0 评论 -
Java基础之HashMap阅读总结
工作中常常会遇到常用的类,但是由于封装的太好,一般也不会出现太多的问题,就导致对底层的实现了解的比较少,最近想把这些东西全部都梳理一下,也顺便多学习一些实现思路。欢迎共同探讨带着几个问题去读源码: 1. HashMap是基于哪种数据结构实现的? 2. HashMap是如何存储的? 3. HashMap是如何取值的?边读代码边理解: 其实只要阅读他的Put方法就能够知道前两个问题的答案!原创 2017-07-31 18:27:18 · 226 阅读 · 0 评论 -
回眸Spring - 事物运行原理机制
Spring的事物是如何运作的? 首先带着问题看源码: - Spring的事物是通过哪些原理实现的? - Spring的事物机制是如何提交和回滚的? ==希望你有阅读过Spring源码的经历,不然有的东西可能理解不清楚..==Spring的事物是通过哪些原理实现的? 首先给大家布置一个代码场景(以项目代码为例): spring-dataSource.xml原创 2017-08-10 13:42:01 · 629 阅读 · 0 评论 -
spring cache 集成 cacheCloud redis
spring cache 集成 cacheCloud redis原创 2018-01-02 10:35:47 · 2275 阅读 · 0 评论 -
ConcurrentHashMap源码阅读笔记
HashMap是我们用的比较多的数据结构,但是它在高并发下面进行put操作时,很有可能会引起死循环,这主要是在它扩容的情况下,导致链表头尾可能存在重复节点,而这时候解决的办法有很多,如Hashtable和Collections.synchronizedMap(hashMap),但是这俩货的性能是存在缺陷的,因为都是锁整个对象。 这时候ConcurrentHashMap出现了,他很好的弥补了Ha原创 2018-01-02 10:37:49 · 178 阅读 · 0 评论 -
ArrayList中的sort排序
ArrayList中有一个sort排序方法,只要你实现了Comparator的接口,按照你自己的排序业务进行实现,你只要告诉这个接口按照什么类型进行排序就OK了。这种方式类似于设计模式中的策略模式,把流程划分好,具体的业务逻辑由用户指定。这时候我们需要带着问题去看看里面具体是如何实现的..环境描述JDK : 1.8伪代码: public static void main(String[] args原创 2018-01-02 10:38:32 · 5893 阅读 · 0 评论 -
日常问题操作汇总
maven idea maven打包的时候,针对SNAPSHOT结尾的jar包从cachecloud-open-client-basic-1.0-20180507.072005-3.jar , 导致运行的时候没有找到jar包<plugin> <artifactId>mave原创 2018-05-18 17:42:11 · 192 阅读 · 0 评论 -
swagger-bootstrap-ui 一款不一样的API文档
简介基于swagger-bootstrap-ui做了一些优化拓展,原地址是在 swagger-bootstrap-ui 访问,一些特性功能可以在原地址上进行参考.本项目没有打包到mavne私服中,需要自己本地编译。github地址 : https://github.com/liukaixiong/Swagger-Bootstrap-UI 主要是优化了功能,增加了入参的层级管理,针对实体...原创 2018-05-22 16:42:44 · 26387 阅读 · 10 评论 -
SpringMVC的Body参数拦截
SpringMVC对出参和入参有非常友好的拓展支持,方便你对数据的输入和输出有更大的执行权,我们如何通过SpringMVC定义的结果做一系列处理呢?入参RequestBodyAdvice : 针对所有以@RequestBody的参数做处理参考案例 : JsonViewRequestBodyAdvicepublic class JsonViewRequestBody...原创 2018-05-31 16:22:45 · 2894 阅读 · 0 评论 -
CAT+Feign+hystrix整合消息调用链路
FeignFeign 是一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud ...原创 2018-07-02 17:38:43 · 2359 阅读 · 13 评论 -
CAT消息丢失问题排查Sorry, the message is not there. It could be missing or archived.
当点击CAT的查看LogViews时出现Sorry, the message is not there. It could be missing or archived.这时候出现这种问题会一头雾水,去github上查看貌似也没有给出明确答复。这里根据自己的猜想以及源码角度的查看来定位问题。首先咨询CAT维护相关人员得到一个非常重要的信息就是消息编号中的小时数不同项目名-ac13bd...原创 2019-01-30 14:51:36 · 1671 阅读 · 0 评论 -
SpringBoot+thymeleaf+thymeleaf-layout-dialect后台页面布局
最近在做针对框架的后台管理系统,涉及到一些技术点做记录。项目框架 : SpringBoot、Thymeleaf页面框架:x-admin布局框架: thymeleaf-layout-dialectSpringBootpom.xml<dependency> <groupId>org.springframework.boot</groupId> ...原创 2019-03-05 15:08:27 · 6407 阅读 · 0 评论