技术分享
文章平均质量分 90
各种Java、分布式、高并发、高可用相关的技术分享
跳小闹成长记-跳爸
好好学习,天天向上!同名微信公众号:跳小闹成长记
展开
-
单测结果不稳定的终极解决方案(Maven单测参数调优)
你是否曾在公司平台上执行单测任务时,发现相同的代码却得到不同的执行结果?是否曾在本地环境中成功执行的测试用例,在公司平台上却遭遇失败?本文作者亲身经历了这一令人困惑的问题,并决定揭开它的神秘面纱。原创 2024-01-04 20:10:28 · 1295 阅读 · 1 评论 -
断网无忧:ETCD客户端自动重连技术揭秘
之前在设计开发自动限流计数集群系统时,使用了ETCD来实现服务协调和集群选举。去年公司在做断网演练期间发现,ETCD客户端在和服务端断开连接之后,没有办法自动重新连接服务,恢复业务。具体表现如下图,机器心跳正常,但在ETCD上注册的服务离线。于是需要设计实现ETCD客户端与ETCD服务端的自动重连功能。确保在任何网络闪断或者网络临时中断的情况下,ETCD客户端能够在一定时间内自动注册到ETCD服务端,恢复服务。本文将和大家分享如何通过代理模式和观察者模式优雅的实现该自动重连方案。原创 2023-03-07 21:20:17 · 1054 阅读 · 1 评论 -
IDEA国际化资源Key无法全局重命名的解决方案
使用HibernateValidator校验参数的时,如果使用国际化资源,那么资源Key必须使用大括号。但是IDEA无法对含有大括号的国际化资源Key无法全局重命名。这会给咱们的开发带来很多不便。本文通过分析底层源码给出了对应的解决方案原创 2022-12-09 16:09:53 · 689 阅读 · 0 评论 -
基于ETCD的集群选主设计方案(Java代码实现)
最近在实际开发项目中需要做集群选主,因为系统已经接入了ETCD,于是打算基于ETCD进行选主方案设计。但是在实践的过程中,却没能在网上找到对ETCD的选主方案将的比较透彻的博文。于是自己则通过各种测试验证,最终实现了基于ETCD的完美选主方案。接下来就和大家分享下该实现方案。.........原创 2022-08-02 20:44:16 · 1676 阅读 · 4 评论 -
【开源】Sentinel高性能高可用集群限流解决方案
Sentinel集群限流的高性能高可用解决方案。通过接入协调集群和实现容错策略解决其单点故障问题;支持动态集群限流,单节点可支撑千万业务流量;支持资源路由让Token Server节点资源能够得到充分的利用....原创 2022-07-19 21:00:07 · 4207 阅读 · 0 评论 -
Idea设置编辑区Java代码颜色不生效(大部分为灰色)的官方解决方法
升级Idea之后原来的所有Java配置基本都不生效,大部分都变成了灰色。关闭Power Save Mode或者清空缓存重启之类的方法没有任何作用。最终终于通过官方方法解决。原创 2022-07-18 20:25:50 · 11409 阅读 · 4 评论 -
Log4j2中2.16.0版漏洞(CVE-2021-45105)原理、复现步骤和修复方法(2.17.0修复原理)
好不容易2.16.0发布之后,Log4j2官方,又突然发布了2.17.0版本,原因想必大家通过各种号推送都已经知道了。因为在2.16.0版本上发现了一个新的漏洞,该漏洞可能会导致DoS(Denial of Service)攻击。那这个漏洞到底是怎么回事呢?它会有哪些影响呢?今天咱们就一起来深度学习下该漏洞相关原理和攻击步骤。原创 2021-12-22 18:06:08 · 5879 阅读 · 0 评论 -
Log4j2中2.15.0版漏洞(CVE-2021-45046)的注入原理、复现步骤和如何修复(2.16.0修复原理)
当Log4j2发布2.15.0版修复了Log4j2基于Ldap的注入漏洞之后。2.15.0的版本很快就被爆出了新的注入漏洞。但是这次漏洞爆出之后,大家却不怎么着急升级,到底是为什么呢?这就需要从该漏洞的原理以及影响说起了。接下来我们就一起来探索下该漏洞的原理、复现步骤、影响范围,以及官方在2.16.0版本中是如何修复的。原创 2021-12-20 21:21:11 · 6773 阅读 · 1 评论 -
Log4j2注入漏洞万字剖析-汇总收藏版(攻击步骤、漏洞原理、2.15.0-RC1绕过原理以及2.15.0、2.16.0修复原理)
本文将和大家一起对Log4j2的漏洞进行全面深入的剖析。我们将从如下基本方面进行讲解。1、Log4j2漏洞的基本原理 2、Log4j2漏洞在Java高低版本中的不同攻击原理 3、Log4j2漏洞在Java高低版本中的攻击步骤 4、Log4j2漏洞在2.15.0-RC1中被绕过的原因 5、Log4j2最终修复方案(2.15.0)的原理原创 2021-12-16 10:16:52 · 12046 阅读 · 10 评论 -
Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(三)—复现步骤(攻击方法)
本文将和大家一起对Log4j2的漏洞进行全面深入的剖析。我们将从如下几个方面进行讲解。1、Log4j2漏洞的基本原理 2、Log4j2漏洞在Java高低版本中的不同攻击原理 3、Log4j2漏洞在Java高低版本中的攻击步骤 4、Log4j2漏洞在2.15.0-RC1中被绕过的原因 5、Log4j2最终修复方案(2.15.0)的原理原创 2021-12-14 21:11:11 · 4629 阅读 · 0 评论 -
Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(二)—漏洞原理
本文将和大家一起对Log4j2的漏洞进行全面深入的剖析。我们将从如下几个方面进行讲解。1、Log4j2漏洞的基本原理 2、Log4j2漏洞在Java高低版本中的不同攻击原理 3、Log4j2漏洞在Java高低版本中的攻击步骤 4、Log4j2漏洞在2.15.0-RC1中被绕过的原因 5、Log4j2最终修复方案(2.15.0)的原理原创 2021-12-14 21:04:57 · 11698 阅读 · 2 评论 -
Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(四)—漏洞修复原理(2.15.0-RC1、2.15.0、2.16.0)
本文将和大家一起对Log4j2的漏洞进行全面深入的剖析。我们将从如下几个方面进行讲解。1、Log4j2漏洞的基本原理 2、Log4j2漏洞在Java高低版本中的不同攻击原理 3、Log4j2漏洞在Java高低版本中的攻击步骤 4、Log4j2漏洞在2.15.0-RC1中被绕过的原因 5、Log4j2最终修复方案(2.15.0)的原理原创 2021-12-14 21:13:32 · 3211 阅读 · 0 评论 -
Log4j2注入漏洞(CVE-2021-44228)万字深度剖析(一)—开篇与基础知识
本文将和大家一起对Log4j2的漏洞进行全面深入的剖析。我们将从如下几个方面进行讲解。1、Log4j2漏洞的基本原理 2、Log4j2漏洞在Java高低版本中的不同攻击原理 3、Log4j2漏洞在Java高低版本中的攻击步骤 4、Log4j2漏洞在2.15.0-RC1中被绕过的原因 5、Log4j2最终修复方案(2.15.0)的原理原创 2021-12-14 17:47:04 · 7600 阅读 · 0 评论 -
SpringMVC中Controller接口返回json的字段(field)名称突然变了
最近线上系统突然出现一个了离奇的事情。线上有个接口返回的json中,一个字段的名称突然从data变成了result。从而导致前端代码无法正确解析处理数据,业务无法正常展示。通过深入分析发现居然是gson和jackson混用的锅。原创 2021-09-02 20:09:16 · 1354 阅读 · 0 评论 -
给服务端发送自定义类实例序列化数据实现反序列化攻击?
很久以前写过一篇文章《反序列化漏洞攻击原理(Dubbo反序列化漏洞剖析)》,最近在看评论的时候无意中发现我当时在文中留的一个小思考有朋友在询问答案。原始问题是:在反序列化攻击中为什么我们要大费周章执行恶意代码呢?为什么我们不自己在本地定义一个实例,让其在readObject的时候直接执行恶意代码。然后将这个实例序列化之后发送到服务端反序列化即可?原创 2021-08-17 19:56:43 · 198 阅读 · 0 评论 -
Linux I/O系列:不使用fsync如何尽快将数据写入磁盘(posix_fadivce的作用与实际应用)
通过前面的学习我想大家都应该知道咱们在开发过程中怎样才能够将数据安全地写入磁盘了。那么提到数据安全写入磁盘我们首先会想到使用fsync或者O_SYNC标识。但是如果我们不用fsync或者O_SYNC标识呢,咱们有没有什么办法能够让内核尽快将数据从Page Cache写入磁盘呢?当然有,接下来我们就和大家一起学习posix_fadvise函数。原创 2021-08-12 17:46:28 · 1913 阅读 · 0 评论 -
Linux I/O系列之直接内存(Direct IO)原理剖析和使用
在上一篇文章《Linux I/O操作fsync后数据就安全了么(fsync、fwrite、fflush、mmap、write barriers详解)》中咱们一起学习了在Linux中如何将数据安全的写入到磁盘。其中我们提到了直接IO。使用它能够在磁盘缓存空间和用户空间直接建立一个通道,这样咱们在用户空间就能够直接操作磁盘中的数据。本文咱们就一起深入学习直接IO。原创 2021-08-10 20:52:41 · 5112 阅读 · 0 评论 -
Linux I/O操作fsync后数据就安全了么(fsync、fwrite、fflush、mmap、write barriers详解)
前段时间一直在研究磁盘顺序写和随机写,以及Java直接内存相关的问题,于是在各类资料或者源码中常常看到flush、mmap等概念和相关使用。然后开始各个击破,一个一个去理解其含义。终于都理清楚之后,回来总结却发现,自己越来越糊涂了。于是产生了如下疑问:1、fsync和fwrite/fflush组合的区别是啥?2、mmap和fsync有什么关系?3、为什么都说fsync之后数据就不会丢失了,真的不会丢失么?4、数据写入磁盘就安全了么?5、为什么不能直接close文件,而需要先flush?原创 2021-08-02 18:22:54 · 9578 阅读 · 7 评论 -
Java动态日志级别变更框架源码实现(支持:Log4j/JDK Logger/Logback等),教你如何开启线上debug日志。
在实际开发运维过程中,对于日志我们都会遇到如下痛点。我们尝尝会遇到,突然线上出了某个问题。然后大家首先会想这个问题愈发测试环境可以复现么?如果不能复现,大家就会提出一个戳中大家痛点的问题”线上可以看debug日志么?“。然后大家都会想,要是线上能开debug日志就好了。然后想象是没好的, 现实是骨感的。为什么线上不能开debug想必就不用我在此哔哔了吧。原创 2021-07-14 16:58:20 · 964 阅读 · 0 评论 -
群晖NAS通过TTL串口控制4G(GSM)通信模块实现语音短信告警的解决方案(电话告警/语音助手/远程控制)
由于家里使用了小米网关连接的部分智能设备。使用使用两年的时间里,它的设防功能相对还是很适用。但是一直都觉得它有一个问题,那就是当家里设备触发告警之后,仅能够手机APP自带的推送消息来提醒。这种弱提醒方式很多时候都不会被楼主及时发现。再加上楼主平时不太喜欢将手机的提示语打开,所以基本都没有办法第一时间收到告警消息。于是一直在考虑是否可以通过电话的方式实现告警通知。这样当设备告警的时候就可以第一时间得到通知。因为家里有群晖NAS,再加上楼主是一枚标准码农,所以一直想通过在群晖设备上部署代码,然后通过什么模块原创 2021-04-09 20:18:30 · 3886 阅读 · 0 评论 -
[librxtxSerial.so+0x75da] Java_gnu_io_RXTXPort_nativeDrain+0xea错误最新解决方案(提供so包下载)
最近在使用RXTX做串口开发的时候,通过指导在http://fizzed.com/oss/rxtx-for-java下载了最新的RXTX包,并完成相应的配置之后。发现代码在Window下可以正常使用串口发接收数据。但是在Linux下(楼主使用的群晖918+),完成了相应的配置之后,代码能够打开串口,但是在读写数据的时候却报错:[librxtxSerial.so+0x75da] Java_gnu_io_RXTXPort_nativeDrain+0xea。原创 2021-04-08 21:04:12 · 1637 阅读 · 0 评论 -
深入源码分析SpringBoot中使用@ConditionalOnBean无效的问题(@ConditionalOnBean did not find any beans of type)
dsDefaultListableBeanFactory.getBeanNamesForType -> doGetBeanNamesForType ->AbstractBeanFactory.isTypeMatch -> AbstractAutowireCapableBeanFactory.getTypeForFactoryBean原创 2021-02-25 15:40:09 · 7704 阅读 · 0 评论 -
最新Mac版本OpenJDK8编译调试源码下载(直接使用无需修改,简单方便)
在前面一篇文章Mac10.14下使用Xcode10编译调试OpenJDK8最新教程(附源码)中咱们详细讲解了如何使用Mac对OpenJDK8的源码进行编译和调试。但是看过的同学都可能都觉得这过程太复杂了,涉及到好多文件的修改。稍不注意就会因为改错导致编译失败,然后有得不断的修改尝试。为了让大家能够快速的对OpenJDK8的源码进行编译。我特意整理了下源码,将需要修改的地方提前修改好,将一些操作整理成简单的脚本,并分享给大家。这样方便大家对源码编译,减少大家出错的概率。原创 2021-01-22 10:10:59 · 1177 阅读 · 0 评论 -
Mac10.14下使用Clion调试OpenJDK8最新教程(附源码)
四、Clion中调试代码导入代码:由于我们使用了compiledb包装编译OpenJDK源码。所以编译完成之后我们在源码根目录可以看到多了一个compile_commands.json文件,该文件由compiledb生成。配置Host:ProtobufClient.cpp:203] ERROR, no such host as localhost...原创 2021-01-21 21:28:53 · 2122 阅读 · 0 评论 -
Mac10.14下使用Xcode10编译调试OpenJDK8最新教程(附源码)
最近在深入研究Java锁升级的过程中遇到很多问题。这些问题从网上各类文章中都没有找到合适的答案(网上大部分都说的比较概念化,深入细节的关键点也没能说清楚,后续我会专门整理一篇从源码层面分析Java锁升级的文章,敬请期待),于是迫不得已只能自己下载JDK源码进行研究。因为要研究源码就不得不对源码进行编译、调试等操作。由于自己对C/C++不熟悉,所以在整个过程中遇到了很多问题、查阅了很多文章,也费力很多精力。本篇文章就对本次OpenJdk8的编译、调试过程进行一次整理记录。希望对有需要的同学有所帮助。原创 2021-01-21 19:13:42 · 2045 阅读 · 4 评论 -
Open Clustering HashMap实现原理:ThreadLocalMap中HashMap实现原理的深度剖析
我们都知道ThreadLocal的使用过程中存在内存泄露问题,但是你知道为什么吗?你知道ThreadLocalMap和Java中的HashMap在底层实现上有什么区别么?以及以ThreadLocalMap为什么要这样实现呢?原创 2021-01-14 09:27:20 · 365 阅读 · 0 评论 -
WEB跨域请求无法传递(携带)第三方Cookie的问题剖析(你一定不知道的SameSite)
Cookie的新属性SameSite很早就提出了,去年4月开始Google的Chrome终于开始全量支持该属性。由于该属性的支持却导致了之前我们很多跨域的业务场景都无法再传递Cookie了。最近开发工程中刚好遇到了该问题导致的Cookie不传递的问题,本文将给大家深度剖析下该类问题原因,以及如何解决类似问题。原创 2021-01-05 20:29:22 · 3019 阅读 · 2 评论 -
Maven使用SpringBoot部署https服务启动时加载KeyStore报错:Invalid keystore format(Maven官方解决办法)
最近在本地部署https服务的时候遇到一个问题。在创建好keystore签名文件之后,完成了一切配置工作。接着在启动的过程中却报错:Invalid keystore format。经过再三确认KeyStore签名文件格式本身并没有问题。接下来就和大家分享下该问题的根源,以及如何解决该问题。原创 2021-01-04 21:07:23 · 11178 阅读 · 0 评论 -
你听过HashMap中的探测技术(Probing)、数据聚集(Clustering)、寻址方式(Addressing)、墓碑删除(tombstones)么?
广义的HashMap其实并不是通过数组+链表实现的。日常大家说的Java中的HashMap仅仅是广义HashMap中的一种,且其各方面也不一定是最优的。广义的HashMap涉及到Open Addressing、Closed Addressing、Linear Probing、Quadratic Probing、Double Hashing、Primary Clustering和Sencondary Clustering等概念。原创 2020-12-25 14:34:20 · 1812 阅读 · 2 评论 -
Netty:Unable to load the library netty_transport_native_epoll_x86_64
应用启动报错:Unable to load the library 'netty_transport_native_epoll_x86_64', trying other loading mechanism. java.lang.UnsatisfiedLinkError: no netty_transport_native_epoll_x86_64 in java.library.path原创 2020-12-03 20:39:18 · 18332 阅读 · 10 评论 -
Parallel Scavenge垃圾回收器线上调优实战
一次线上对JDK默认垃圾回收器Parallel Scavenge垃圾回收器的简单调优实战。让Young GC和Full GC之间达到一个相对平衡状态。原创 2020-11-11 20:44:39 · 699 阅读 · 0 评论 -
Java默认垃圾回收器Parallel Scavenge导致Full GC增加
在JDK1.7和JDK1.8中,新生代和老年代默认的垃圾处理器都是Parallel Scavenge。随着允许时间推移,其会导致Survivor Space变得很小,导致老年代不断增减。最终引起Full GC。此过程会不断的重复,导致周期性的Full GC。原创 2020-11-09 20:41:57 · 2474 阅读 · 4 评论 -
一次线上集群CPU占用100%的问题分析过程
最近在搭建Ignite集群的过程中,突然发现线上机器运行一会儿之后CPU占用就会飙升到99%甚至100%。于是开始着手分析并解决了该问题。本文将详细讲解整个问题定位过程。原创 2020-09-29 19:40:58 · 979 阅读 · 0 评论 -
动态代理不生效导致的线上问题(线上系统无法监控告警)
SpringMVC中的spring-mvc.xml和spring-config.xml你真的了解么?原创 2020-10-09 21:24:59 · 379 阅读 · 0 评论 -
[开源]基于Disruptor的本地异步任务执行框架原理与基本使用
自从接触到Disruptor之后,就对其框架比较感兴趣,于是对其进行了深入学习。并续推出了”Disruptor高性能之道“系列文章。在深入学习之后,终于下定决心基于该高性能框架做一个属于自己的框架,这就是本期的开源本地异步任务框架。原创 2020-09-03 21:07:13 · 1017 阅读 · 4 评论 -
SprintBoot devtools导致同一个类出现两个不同的Class类(不建议使用SpringBoot Devtools)
SpringBoot DevTools在使用的过程中可能会导致同一个类出现两个Class类的情况,从而导致业务不按预想的代码逻辑执行。那么为什么会这样呢?我们将从其实现原理进行分析。原创 2020-08-20 21:14:07 · 1182 阅读 · 0 评论 -
MySQL版的DCL(Double Check Lock)导致死锁的案例分析(MySQL死锁日志解读)
最近在项目中需要设计一个关于MySQL的selectOrInsert操作场景。于是为了提高操作性能,我便采用了DCL(Double Check Lock)的思想。系统上线运行了很长一段时间都没有问题,但偶然间却发现其抛出了死锁异常。接下来,我就和大家一起来分析下该场景,以及为什么会出现死锁。原创 2020-10-14 10:48:36 · 358 阅读 · 0 评论 -
【开源】Sentinel控制台集群方案(使用Ignite解决单点故障问题)
Sentinel自动限流降级的集群方案。通过Ignite实现控制台集群方案。基于raft协议实现高可用高性能的Token Server。原创 2020-08-12 17:50:05 · 2926 阅读 · 2 评论 -
CAS深度剖析(CAS你都懂了么)
我想大家都知道在需要更新一个共享资源,此时想通过自旋等待的方式来防止加锁导致频繁的上线文切换,从而提高效率。那么是不是这种场景就一定适合使用CAS呢?答案当然是否定的。使用CAS会带来一定的CPU消耗,或者说是浪费。我们考虑这样一个场景,统一需要更新一个共享资源,但是这个资源的更新竞争非常大,在这个场景下其实我们就不适合使用CAS自旋的方式了,而是要采取加锁的方式。因为竞争大会导致更多的CPU时钟被自旋浪费,从而导致CPU使用高,且更新资源的速度也不快。而此时如果直接采用加锁的场景,则可以大大减少CPU原创 2020-07-14 21:07:29 · 570 阅读 · 0 评论