![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java 工具类
lixia0417mul2
避免成为那些从来没有接触过真正技术的所谓技术生涯
展开
-
liteflow使用注意事项
liteflow使用注意事项原创 2024-06-11 00:26:12 · 276 阅读 · 0 评论 -
理解容器的cpu限流
cpu限流原创 2023-12-29 10:26:36 · 452 阅读 · 0 评论 -
StackOverflowError的JVM处理方式
Stack Overflow的处理原创 2023-12-27 23:18:07 · 654 阅读 · 0 评论 -
jdbc设置StatementTimeout后还需要设置socket timeout参数吗
java中socket的超时时间原创 2023-10-18 22:01:40 · 428 阅读 · 0 评论 -
Java的Socket Timeout和tcp的存活探测包是不是一个东西
Socket.setTimeout 和 Tcp keepAlive原创 2023-10-18 21:59:19 · 420 阅读 · 0 评论 -
数据库主从切换过程中Druid没法获取连接错误
druid无法创建db连接原创 2023-10-18 01:57:25 · 333 阅读 · 0 评论 -
为何RoaringBitmap能成为Java里面事实上的位操作的标准结构
RoaringBitmap作为位存储结构的优势原创 2023-10-10 23:15:24 · 162 阅读 · 0 评论 -
线程池优雅关闭
线程池优雅关闭 线程异常中止原创 2023-08-07 22:05:16 · 276 阅读 · 0 评论 -
java日常常见的几种安全问题
常见的几种安全问题 常见安全问题及解决措施原创 2023-07-11 22:25:24 · 371 阅读 · 0 评论 -
日志消息直接发送到kafka设计
日志消息直接推送kafka 日志消息不保存到本地磁盘原创 2023-07-10 21:33:26 · 558 阅读 · 0 评论 -
大数值使用BitSet存储导致的内存溢出
使用BitSet导致内存溢出 Redis的BitMap使用不当导致Redis内存溢出 BitSet存储大的整数的注意事项原创 2023-06-21 22:17:42 · 941 阅读 · 0 评论 -
netty解析http协议异常Connection closed before received headers 分析
netty解析http协议 http协议解析错误 netty解析http协议错误 http协议不完整导致的解析异常原创 2023-06-15 22:26:59 · 499 阅读 · 0 评论 -
PowerMock 重要知识点(二)
PowerMock 私有静态方法 PowerMock 验证私有静态方法 PowerMock spy 类原创 2023-06-06 22:58:38 · 774 阅读 · 0 评论 -
Powermock使用的知识点
powermock注意事项 powermock重要知识点原创 2023-05-29 23:18:57 · 600 阅读 · 0 评论 -
Spring Resource注解 支持泛型依赖注入
Resource是支持类型注入的 Spring依赖注入是包含泛型匹配的 Spring包含泛型的依赖注入源码解析原创 2023-05-26 23:43:37 · 343 阅读 · 0 评论 -
PowerMock 中如何使用mock类的构造函数
powermock 类的构造函数 powermock 模拟类实例的构造函数 powermock 模拟类实例的构造方法原创 2023-05-26 20:59:04 · 1523 阅读 · 0 评论 -
PowerMock 使用spy注解来解决类中方法之间调用的mock问题
A方法调用B方法时如何mock mockio.spy解决方法调用的mock问题原创 2023-05-24 22:06:56 · 1312 阅读 · 0 评论 -
PowerMock 私有/公共方法和静态方法对doReturn..when 和 when.thenReturn的不同表现
powermock mock 私有方法 mock共有方法 mock 静态方法 when..thenReturn实际调用方法导致空指针异常原创 2023-05-24 21:44:21 · 1815 阅读 · 0 评论 -
java.net.SocketTimeoutException: null 和 java.net.SocketTimeoutException: connect timed out的区别
SocketTimeoutException: null SocketTimeoutException: connect timed out 连接超时原创 2023-05-11 22:42:35 · 3315 阅读 · 0 评论 -
VisualVM 工具使用
VisualVM使用 内存泄漏排除工具 线程排除工具原创 2023-05-04 22:13:31 · 579 阅读 · 0 评论 -
源码解析logback日志输出异常堆栈
logback如何打印异常堆栈 打印错误日志的正确姿势 如何打印异常堆栈 logback中怎么样才能打印异常堆栈信息原创 2023-03-24 20:46:09 · 2347 阅读 · 0 评论 -
使用spring事务操作事务不能保证绝对的安全
应用程序中使用数据库事务是如何崩溃的 应用程序为何不能获知事务的执行结果 事务保证是如何失效的原创 2023-03-05 13:20:45 · 86 阅读 · 0 评论 -
使用antlr实现一个简单的表达式解析
antlr解析表达式 自定义公式的解析 解析计算表达式原创 2023-02-24 21:39:50 · 833 阅读 · 0 评论 -
ReflectionTestUtils在单元测试中的妙用
单元测试 ReflectionTestUtils用法 Mockito 用法原创 2023-02-14 21:10:54 · 1341 阅读 · 0 评论 -
spring容器中如何使用Mockito优雅的注入依赖的依赖
Mockito Spy Mock InjectMocks 正确注入依赖的依赖原创 2023-01-30 00:36:35 · 2249 阅读 · 0 评论 -
mysql 通过不同索引更新相同记录会导致死锁吗
mysql 死锁 mysql update死锁 mysql 锁原理原创 2023-01-28 00:56:48 · 1131 阅读 · 0 评论 -
JMH性能测试-要点记录
jmh注意点 jmh性能测试 Roaring64BitMap和Roaring32Bitmap性能对比原创 2022-11-13 02:06:22 · 317 阅读 · 0 评论 -
互联网中常见的随机数+分布式中常见的防止重复处理的方式
随机数 Random 幂等 重复提交 分布式重复处理原创 2022-09-02 01:51:06 · 567 阅读 · 0 评论 -
由排行榜实时更新想到的树状数组
排行榜常规实现1.单机:使用普通数值存储每个用户的分数,更新某个用户的分数的时间复杂度是O(1),查询用户分数排行榜的时间复杂度是O(NlogN),如果总共有100000个用户,有1000个用户在同时更新,那么时间复杂度是O(1000) + 1000 * O(100000 * log100000) = 1800000100=1800w次操作2.分布式: 分布式一般是基于redis的zset有序集合实现,每个用户的分数时每个有序集合元素的score的值,redis的zset集合的底层数据结构是跳表,更新分原创 2022-07-07 02:01:20 · 162 阅读 · 0 评论 -
Arthas vmtool命令小结
arthas 查看jvm内存对象的值原创 2022-06-22 22:06:31 · 1264 阅读 · 0 评论 -
http(s)正向代理和反向代理
正向代理:client --> forward proxy --> internet --> server反向代理client --> internet --> backward proxy --> server正向代理所处的位置和反向代理所处的位置是不一样的,正向代理代理的是客户端,反向代理代理的是服务端,网络抓包工具finder属于正向代理的一种,而nginx则是反向代理的最经典的代表正向代理的作用一般有IP代理(隐藏客户端真实ip),以及网络分析等用途,原创 2022-04-28 20:47:31 · 613 阅读 · 0 评论 -
apollo 配置中心小结
1.apollo的服务注册和发现是使用的eruka实现的,这里configservice服务和adminservice服务会注册到eruka中,其中: configservie供客户端client查询配置信息使用,而adminservice供protal后台管理界面调用。2.client客户端如何几乎实时的获取到配置的变更通知?答案是 htttp长轮询机制,原理如下: 对于客户端来说,他会一直向服务器发起请求,对于服务端来说,在收到客户端的http请求后,并没有立刻返回数据,而是等待数据满足条件或者超时原创 2022-02-26 02:21:17 · 241 阅读 · 0 评论 -
maven -父子项目和多模块项目
1.父子项目 关键点:a.父pom中子项目1b.子项目中父项目主要是继承的作用,即子项目的pom中可以使用父项目中已经定义好的dependency这里还有一个关于父子项目的展示结构问题:是父子缩进的目录结构还是父子并行的目录结构?首先这两者对于功能来说没有任何影响,其次这两者展示的不同是由于父pom中的模块定义不同引起的:一种是子项目另一种是./子项目</module2.多模块项目,关键点:子模块2如何应用子模块1的类和方法,一般子模块1都是一些比较基础的commmon方法类,子模块原创 2022-02-22 18:25:11 · 1103 阅读 · 0 评论 -
gc --JNI调用引发的长gc问题
[GC (GCLocker Initiated GC) 2022-02-16T12:14:20.890+0800: 494843.997: [ParNew: 482593K->398863K(6134208K), 33.2018739 secs] 2539521K->2610445K(12949952K), 33.2035558 secs] [Times: user=330.26 sys=1.53, real=33.20 secs]为何新生代才使用来的482M(总大小6G)就引发ygc的原因属原创 2022-02-21 17:55:22 · 809 阅读 · 0 评论 -
mat查找多线程并发下大对象导致的堆内存问题
场景代码大概如下: 多线程并发请求接口,接口中的代码首先从guavacache.getIfAbsent()查找对象A,假设本地内存没有,代码又调用fetchFromRedisList获取数据,获取到数据后把对象A放到本地内存中 ps:对象A极大,占用大概有几十M问题分析:首先这里有并发问题,多个线程会同时调用fetchFromRedisList方法并购造成对象A,而不是想象中的只有一个线程去获取,其他线程等待获取结果的guavacache.get(Loadable)模式,导致内存溢出这里最重要的是怎原创 2022-02-16 01:29:02 · 630 阅读 · 0 评论 -
MAT内存查找工具的注意事项
1.打开Mat 的keep unreachable object open选项,这样才能够查看到所有对象(包括即将被gc回收掉的对象),2.在打开了keep unreachable 选项的情况下如何查看不可达的object: 步骤如下:右键点击内存文件的图标–>选择gc root选项–>选择unreachable选项–>可以查看到所有不可达的对象列表–>点击某个不可达的对象–>Immediate Dominator查看直接应用了不可达对象的直接上级下面介绍下什么叫做:Dom原创 2022-02-16 00:52:39 · 1322 阅读 · 0 评论 -
雪花算法-小结
雪花算法生成的Id是长整数,64位组成结构如下:1bit 不用 + 41bit时间戳+10bit工作机器id+12bit序列号,在容器上面部署时最大的问题是怎么确定10bit的机器id编号,最简单的方法是容器重启的时候workerId的值从redis中自增,这样不同机器的workerId就会不一样,唯一的风险是机器数量超过1024个,这里如果重新循环复用机器id的话需要做一个告警,或者也可以把10bit的机器id增加到比如12位,相应的缩减序列号的位数到10位,但是这样每台容器每毫秒的最大并发只有2的1原创 2022-02-09 16:51:02 · 197 阅读 · 0 评论 -
spring-retry小结
spring-retry主要是为了规范化请求重试的逻辑,主要应用于调用外部服务的场景,使用例子如下: RetryTemplate template = new RetryTemplate(); // 重试策略:次数重试策略 SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy(3, Collections.singletonMap(Exception.class, true)); templ原创 2022-01-28 19:54:17 · 853 阅读 · 0 评论 -
canal 使用注意事项
canal是一个同步mysql二进制日志到kafka分布式队列的工具,直接支持数据从mysql同步到kafka的主题中主要要注意的事项是顺序性问题,常见的有以下几种配置:一个数据库的所有数据写到一个topic主题中,然后按照表名作为分区键,每个表的数据发送到不同的分区中 --保证了表的数据都在同一个分区中1.1 一个数据库的部分表数据写到一个topic主题中,另一些表数据写到另一个topic主题中,针对每个topic主题按照表名作为分区键,每个表的数据发送到不同的分区中 --保证了表的数据都在原创 2022-01-28 19:51:47 · 2859 阅读 · 0 评论 -
disruptor小结--消费者
disruptor主要有以下两种消费模式:两种消费模式的共同点:消费线程的总数量是一样的,都等于传入的hander的数量,也就是入参多少handler处理器就有多少个线程被创建出来,代码参见: //重复消费的处理器代码: private void processEvents() { T event = null; long nextSequence = sequence.get() + 1L; while (true)原创 2022-01-26 21:40:26 · 598 阅读 · 0 评论