Java
文章平均质量分 52
hamish-wu
普通程序员
展开
-
oshi.util.Util.freeMemory 报异常的解决方法.NoSuchMethodError: com.sun.jna.Memory.close()V
oshi 的版本和jna 的版本搭配不当导致,有些版本的jna 不存在 Memory.close()方法。原创 2023-08-30 14:56:00 · 1170 阅读 · 0 评论 -
线上线程堆积导致的oom排查思路
背景一个项目文件存储服务选型seaweedfs,一个go 实现的分布式存储系统,项目使用Java作为开发语言,一个场景是客户通过http上传文件到fileService服务,fileService 收到文件之后,调用seaWeedFs-client 上传文件到seaweedfs 服务器,在运行一段时间之后发现大量的文件上传等待线程,最终导致项目oom.原创 2023-04-07 22:49:19 · 1028 阅读 · 1 评论 -
CyclicBarrier 和 ThreadPoolExecutor搭配使用
如果线程池参数配置为无界队列那么整个逻辑无法执行,CyclicBarrier 等待三个线程执行完毕,线程池只有两个工作线程,导致资源等待。多线程执行的时候确保所有线程到达同一位置后再执行。线程池,避免频繁新建现场的损耗。原创 2023-03-03 14:24:21 · 277 阅读 · 0 评论 -
Swagger Resolver error at definitions异常解决
Swagger 对于localDate、LocalDateTime 处理会报错,或者存在复杂的数据结构时,不支持。需要再swagger配置文件中自定义类型对应规则。原创 2023-02-02 10:39:13 · 562 阅读 · 0 评论 -
arthas 使用技巧
参考资料:https://www.jianshu.com/p/e34556a857ae。监控重载方法例如 rocketMQ 发送时。可以精确监测到某个方法避免 打印重复信息。增加条件参数个数大于3。原创 2022-11-01 14:20:00 · 1263 阅读 · 0 评论 -
springboot 集成druid 启动报 llegalAccessError
2.JDK动态代理利用的是接口信息来实现的代理,委托类必须实现某个或者某些接口,而Cglib则是利用继承关系,利用asm在运行时动态生成委托类的子类,从而实现对委托类的代理。3.Cglib由于是利用继承关系来实现代理的,因此无法代理被final修饰的类以及被final修饰的方法。参考资料:https://www.oschina.net/question/2342541_2319258。4.Cglib一般来说效率要比JDK动态代理效率更高,可以实现的代理也更为强大。...原创 2022-08-30 22:11:49 · 741 阅读 · 0 评论 -
TCC-Transaction Dubbo 项目 demo
最早接触 TCC-TRANSACTION 在16年,当时团队成员做了分布式事务的选型研究,可惜没有亲自参与研读代码,后边项目分布式事务的架构基本上使用了seata 和 rocket 事务消息,或者使用消息做最终一致性。在成为架构师的学习路上,分布式事务的深入研究必不可少,以TCC-TRANSACTION 作为切入点。原创 2022-08-24 22:37:24 · 533 阅读 · 1 评论 -
Spring Security 注解AuthenticationPrincipal 失效排查
背景项目使用了springframework.security接口入参使用了springframework.security 注解 @AuthenticationPrincipal注解失效,前端请求接口的时候发现Principal 为空。原创 2022-08-23 22:36:58 · 1814 阅读 · 0 评论 -
疑难问题:JDK 1.8 java.lang.IllegalStateException信息排查
背景生产环境有一个批量创建问文件夹的接口,接口逻辑一次传入多个文件夹名称,去发号器批量申请文件夹id某个场景下前端入参的文件夹名称重复,导致服务端报错如下。原创 2022-07-28 00:49:15 · 368 阅读 · 0 评论 -
IDEA for mac index 分析解决
一、分析问题idea 隔一段时间就是在打开项目的时候一致index,两次都是卡在jdk1.8开始怀疑是jdk 版本的问题,机器上安装了jdk11 和jdk1.8切换jdk 版本之后仍然如此二、删除cache 和index 文件夹mac 电脑上idea 的cache 的目录是$ pwd/Users/admin/Library/Caches/JetBrains/IntelliJIdea2021.2/caches$ pwd/Users/admin/Library/Caches/JetBrai原创 2022-05-26 16:34:03 · 788 阅读 · 0 评论 -
Mybatis-plus 自定义SqlSessionFactory
项目中需要用到Mybatis的插件,配置插件的时候需要自定义SqlSessionFactory网上的信息不太准确,本文记录订正并共享大家。Mybatis-plus 和Mybatis 是兼容的。所以网上的配置 mybatis 的SqlSessionFactory 的方法基本上可行,但是对于mybatis-plus 的一些特性会丢失例如@TableField(fill = FieldFill.INSERT)注解正确的配置方式:@Componentpublic class DateAutoFil原创 2022-03-09 22:36:55 · 10493 阅读 · 1 评论 -
Java8 优雅的判断对象是否为空
对象判空项目中经常遇到对象判空,如果是对象成员变量逐层判断, 会写很多if else 的逻辑语句 public String testSimple(Context c) { if (c == null) { return ""; } if (c.getUser() == null) { return ""; } if (c.getUser().getCity() == n原创 2022-02-08 23:30:52 · 6735 阅读 · 0 评论 -
Spring 异步线程中传递ThreadLocal
ThreadLocal 的传递原创 2021-12-28 00:01:07 · 1547 阅读 · 0 评论 -
mac Gradle idea中启动单元测试
gradle 单元测试配置原创 2021-12-22 01:16:00 · 729 阅读 · 0 评论 -
专业网盘中大文件夹移动、复制问题解决实践
网盘系统设计、线上oom、ES 查询参数、监控对比大文件的移动、复制逻辑实践原创 2021-12-17 00:28:11 · 818 阅读 · 0 评论 -
会员微服务设计文档
会员中心,会员中台设计概要,微服务思想,设计文档模板,评审模板,业务架构设计原创 2021-12-15 00:32:47 · 875 阅读 · 0 评论 -
阿里云OSS 文件List 转换为树形结果
java List 转换成Tree原创 2021-12-11 20:01:44 · 739 阅读 · 0 评论 -
MAT 分析线上OOM实战
线上oom 问题分析实战原创 2021-12-04 23:04:41 · 654 阅读 · 0 评论 -
jdk升级17 项目报错java.lang.reflect.InaccessibleObjectException
java11 升级到java17 项目启动正常,执行mybatis 查询的时候报错根据报错信息怀疑mybatis xml 配置问题,发现其实没有问题,jdk11 的时候正常启动reating a new SqlSessionSqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c88e19e] was not registered for synchronization because synchronization is原创 2021-09-20 23:04:31 · 22613 阅读 · 9 评论 -
ReentrantLock和Condition 实现生产者 运输者 消费者
生产者、运输者、消费者 三个线程协作使用公平锁实现,Condition 条件限制。/** * 三个线程,一个生产商 A 一个中间商B 一个消费者C * 生产商 每次生产1个商品 * 中间商每次运送 2个商品 ,消费者每次消费3个商品 * 如果梳理不满足 则不运送 不消费 */public class ThreePersionLockCondition { private final static ReentrantLock lock = new ReentrantLock(t原创 2021-08-24 23:26:04 · 145 阅读 · 0 评论 -
数据采集 htmlunit 使用心得
HtmlUnit is a “GUI-Less browser for Java programs”. It models HTML documents and provides an API that allows you to invoke pages, fill out forms, click links, etc… just like you do in your “normal” browser.翻译:HTMLUnit 是一个无界面的Java浏览器,可以渲染生成HTML文档,同时提供操作网原创 2021-08-11 13:57:16 · 259 阅读 · 0 评论 -
swagger 采坑记录
在使用swagger 时随着代码量增加命名逐步混乱,如果入参中swagger 注解使用不当会造成困扰举例:@ApiModel(value = "新版本customerBO", description = "企业信息表")这里的 value 中在swagger 内部处理是被合并的,也就说,swagger 不关心 这个注解的类信息,只是会根据 value的值进行合并,如果你命名两个相同的value 值,会发现swagger 入参的对象和代码中不一致。参考资料:https://blog.csdn.ne原创 2021-08-04 10:15:48 · 162 阅读 · 0 评论 -
一次springboot扫描范围引起的启动报错
公司的框架出了问题,多个项目启动报错,花费了半天时间解决,多亏最近钻研springframework源码。背景公司有一套分布式spring alibaba架构的系统,分为边缘服务,和服务池服务,服务治理一般,没有全局规划,半年前有外购一套分布式CRM系统,强行注册到一个服务中心,突然某个版本的多个边缘服务启动报错,导致测试停顿半天。启动代码@CanaryCloudApplication(applicationName = "b2b-consumer-edge", serverServletContex原创 2021-07-28 15:56:50 · 1166 阅读 · 0 评论 -
mybatis 启动报错 分析
问题背景:nacos 注册服务中心,在新的配置分组(crm)启动了一个微服务默认分组启动正常,通过打断点发现: 1.新的分组crm启动的报错点,在默认分组启动的时候 并未执行也就是 默认分组启动不会走initNodeHandlerMap() 方法mybatis 启动报错信息Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\Id原创 2021-06-15 09:28:39 · 545 阅读 · 0 评论 -
Java 11 HashMap 的hash计算细节分析
众所周知,java 中hashmap 基本的数据结构是 数组和 链表or 红黑树组成,在put或者get 操作的时候,计算数据下标是一个频繁的动作,本文分析一下java hashMap 的巧妙的算法设计。首先数组下标必定是一个数字,java中HashMap 的最大值为 2>>30(2的30次方) 1073741824实际场景中 hashMap的长度小于 2的16次方 (65536)hashMap 的hash计算static final int hash(Object key) {原创 2021-03-30 22:17:15 · 711 阅读 · 0 评论 -
Mysql8.0 数据按照时间排序不稳定引发的思考
Mysql order by 原理内部排序外部排序不稳定排序根据时间排序发生的问题数据更新前数据更新之后 id 623 排到末尾虽然根据时间排序规则,返回的结果没有逻辑问题,但对于用户来说就是消息列表更新之后, 消息顺序发生变动。增加排序字段根据时间和id 排序,这样的排序会保证了结果的稳定性,但是对于mysql来说, 排序是一个比较耗费资源的操作,本来一个排序字段可以完成的操作尽量不要增加排序字段。精确publishTimemysql8.0 中 的datetime 字段默认小数后0原创 2021-03-24 10:28:05 · 2412 阅读 · 2 评论 -
JDK 11 Object中定义的方法
这里写目录标题认识Object类1.构造方法2.获取运行时的对应类信息3.获取对象的hash值4.对象对比4.复制方法5.字符串表示对象6.并发相关方法6.1 唤醒一个线程6.2 唤醒所以线程,重新竞争6.3线程等待7.finalize()认识Object类Class is the root of the class hierarchy. Every class has a Object superclass. All objects,including arrays,implement the me原创 2021-03-20 18:24:22 · 258 阅读 · 0 评论 -
java 名词解释
子类化: 类不允许被集成 例如 父类的构造函数是 private 的情况下原创 2021-02-17 00:09:21 · 209 阅读 · 0 评论 -
Java 项目模块化探索
模块化是Java9 的新特性模块系统:模块是一个包的容器,Java 9 最大的变化之一是引入了模块系统(Jigsaw 项目)。module a1 { exports Car; requires kotlin.stdlib;}package Car;public class Car { public String get() { System.out.println("这里是被调用模块"); return "Car"; }}原创 2021-01-04 18:57:02 · 461 阅读 · 1 评论 -
spring 集成common-pool2
Common-pool2The Apache Commons Pool open source software library provides an object-pooling API and a number of object pool implementations. Version 2 of Apache Commons Pool contains a completely re-written pooling implementation compared to the 1.x serie原创 2020-12-24 10:28:15 · 1021 阅读 · 0 评论 -
HashTable源码简析
HashTable 数据结构是一种比较古老的 Dictionary 实现 ,大家常用的hashMap 是实现的AbstractMap。HashTable 内部使用了Table[] 数组和Entry<K,V> 链表实现。内部使用了synchronized 关键字保证线程安全,简单粗暴,但是有效。若担心多线程环境下 hashTable 的阻塞 可以使用 ConcurrentHashMap简单分析一下hashTable的源码。public synchronized V put(K key原创 2020-08-11 19:39:20 · 100 阅读 · 0 评论 -
JAVA Bean 转换工具 BULL 使用简介
How to Transform Any Type of Java Bean With BULL原创 2020-04-29 12:00:20 · 630 阅读 · 0 评论 -
JDK12 垃圾收集
Garbage Collection in JDK 12 and onward翻译 2020-03-28 16:27:45 · 233 阅读 · 0 评论 -
Java 内存溢出和Java泄露的几种情况
内存泄漏定义(memory leak):一个不再被程序使用的对象或变量还在内存中占有存储空间。一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。内存溢出 (out of memory) :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出...原创 2020-03-04 16:32:54 · 526 阅读 · 0 评论 -
JAVA 获取系统的配置信息
Java System.getProperty(“java.io.tmpdir”) 获取系统临时目录System.getProperty(“java.io.tmpdir”) 是获取操作系统的缓存临时目录在windows7中的目录是:C:\Users\登录用户~1\AppData\Local\Temp\在linux下的目录是:/tmp可以获取系统的配置信息,下面说一下System.get...原创 2020-03-04 15:47:50 · 617 阅读 · 0 评论 -
java集合数据复制到另外一个集合
文章目录Lsit中数据复制问题1.1copy问题1.2怎么高效的复制1.3 回答Lsit中数据复制问题这是由一道开放式面试题引发的文章,题目:加入内存足够大,一个集合中有100万条数据,怎么高效的把集合中的数据复制到另外一个集合1.1copy问题java 中复制分为浅拷贝和深拷贝如果考察浅拷贝:直接使用clone方法System.out.println("测试开始时");...原创 2019-11-23 12:06:30 · 18776 阅读 · 0 评论 -
Java 随机数
真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。这样的随机数发生器叫做物理性随机数发生器,虽然很可靠,但是使用计算机很难实现,它们的缺点是技术要求比较高。 在实际应用中往往使用伪随机数就足够了。这些数列看似是随机的数,实际上它们是通过一个固定的、可以重复的计算方法产生的。计算机产生的随机数有很长的周期性。它们不真正地随机,因为它们实际上是可以计算出来的,但转载 2015-10-29 13:56:07 · 515 阅读 · 0 评论 -
Apache 映射到 Tomcat
Apache 是centos 默认的http服务器 默认使用80端口 ,apache 使用量巨大。 Apache 管理命令 service httpd restart //重启 service httpd start //启动 service httpd stop //停止配置文件目录 cd /etc/httpd/conf vi httpd.c原创 2015-12-16 15:21:03 · 1771 阅读 · 0 评论 -
博客迁移
最近使用oschina今后此博客主要内容javaWeb开发,伪装成一个普通的额javaWeb工程师大数据,数据挖掘,爬虫相关的分享放置其他地方http://my.oschina.net/u/213327原创 2016-03-01 23:29:21 · 382 阅读 · 0 评论 -
Spring中bean的作用域
本文以Spring4.1.6 为例初期的spring中bean有两种:单例(singleton)和 原型(Prototype)spring 默认bean的scope 是 singleton,对于有状态的bean 不能重复使用需要设置scope 为Prototype即每次组装时生成一个全新的bean 的实例之后Spring web 应用又加入了 会话(Session)、请求(Request)、(gl原创 2017-03-23 20:30:21 · 354 阅读 · 0 评论