java
文章平均质量分 54
每年进步一点点
这个作者很懒,什么都没留下…
展开
-
java agent
看到一个不错的博文,记录一下,以便后续查看。https://blog.csdn.net/liuyueyi25/article/details/104640588原创 2021-04-27 20:05:34 · 181 阅读 · 0 评论 -
ArrayList.subList注意点
平时经常用到ArrayList.subList进行list的截取,发现里面有一些注意点,记录一下 List<Integer> oldList = new ArrayList<Integer>(){{add(1);add(2);add(3);}}; List<Integer> newList = oldList.subList(1, 2); SubList返回的是原list的视图,并不是创建了一个新的集合 public Lis原创 2021-03-30 10:07:16 · 254 阅读 · 0 评论 -
mybatis 一级缓存与二级缓存
背景:一直没关注过mybatis的一级缓存与二级缓存是什么,以及怎么使用的。最近由于mybatis二级缓存导致内存泄漏的问题,使得自己抽出时间来看了一下。先说一级缓存,作用域一个sqlSession,在同一个sqlSession中,相同的sql第一次查询时会查询数据库并缓存起来,放到hashMap中,第二次的时候会直接从hashMap中读取数据。二级缓存是作用域是sqlSessionFactory,一级缓存作用域只是一个sqlSession,如果需要多个sqlSession共享的话,需要用到二级原创 2021-01-25 14:52:54 · 263 阅读 · 0 评论 -
cpu过高问题定位及解决
1 top 查找进程号2 top -H -p 进程号 获取进程中cpu占用过高的线程,按cpu占用倒叙排列3 jstack 进程号 > a.stack 连接到该进程,将此时该进程的栈信息存储4 printf %0x 线程号 将第二步骤占用cpu高的线程号拿过来,转换为16进制5 cat a.stack |grep -A 100转储堆快照: jmap -dump:format=b,file=文件名 [pid]...原创 2021-01-18 16:21:44 · 345 阅读 · 0 评论 -
redisson分布式锁源码解析
近期用到分布式锁,选用了redissio,选用的原因:封装,实现了锁的重入,锁自动续期、防止超时机制、使用方便易上手(实现了JUC的lock接口)先看一下简单使用(需要在finally中手动释放锁):@Test public void testRedisson() throws Exception{ String test = "testLock"; RLock lock = null; try { lock = re原创 2021-01-08 17:06:33 · 394 阅读 · 0 评论 -
Java Agent使用指南
https://www.cnblogs.com/rickiyang/p/11368932.html转载 2021-01-07 21:52:28 · 185 阅读 · 0 评论 -
记一次redis迁移遇到CPU占用过高问题
背景:项目需要做wredis到redis的数据迁移,考虑到三种方案:1 redis和wredis同时写,读的时候根据配置选择从redis还是wredis读取数据。2 通过wredis到redis的数据同步,代码中直接修改redis的地址。3 通过scan的方式扫描redis中的数据,再通过Pipeline的方式写入。对比了一下方案的优缺点:1 缺点是时间成本高,业务中有些数据过期时间长,切换周期长;优点是可以平滑切换;2 缺点是需要dba的同学配合,如果遇到问题,不好回退(仅仅是原创 2020-08-08 16:29:54 · 781 阅读 · 0 评论 -
Random与ThreadLocalRandom 解析
问题:既然已经有了Random为什么还需要ThreadLocalRandom?正文Random是使用最广泛的随机数生成工具了,即使连 Math.random()的底层也是用 Random实现的 Math.random()源码如下:可以看出 Math.random()直接指向了 Random.nextDouble()方法。Random使用这开始之前,我们先来了解一下 Random的使用。Random random = new Random();...转载 2020-07-20 18:39:50 · 503 阅读 · 0 评论 -
日志框架 SLF4j
是什么:SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统为什么:在java.util.logging, logback, log4j等日志系统存在的基础上,为什么要用slf4j框架作为一个门面呢?SLF4J 是一个日志抽象层,允许你使用任何一个日志系统,并且可以随时切换还不需要动到已经原创 2020-07-01 14:30:30 · 655 阅读 · 0 评论 -
池化技术-数据库连接池
概述什么是连接池1)先讲一下“池”, 池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。其他几种池的设计思想也是如此,池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。为什么要使用原创 2020-05-15 12:19:15 · 578 阅读 · 0 评论 -
java 代理模式使用与原理
概念:通俗来讲:中介、黄牛等都是一种代理,他们有你的信息,来为你提供额外的支持。映射到程序上来讲就是代理对象持有被代理对象的引用,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。代理分为静态代理和动态代理静态代理静态就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了租客接口public int..原创 2020-05-10 11:02:18 · 160 阅读 · 0 评论 -
迭代器-快速失败与安全失败
快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值...转载 2020-04-16 11:03:36 · 340 阅读 · 0 评论 -
事务(一)springboot事务不生效
在项目中,遇到了事务不生效的情况,首先从以下几点排查:mysql表必须支持事务:引擎为INNODB SpringBoot启动事务 @EnableTransactionManagement 方法上加注解@Transactional//默认只对RuntimeException起作用,可通过rollbackfor修改 方法必须为public修饰 同类中事务的方法不能嵌套在其他方法中, ...原创 2020-02-18 11:14:25 · 602 阅读 · 0 评论 -
如何排查cpu过高的问题
Java线上服务有可能会出现CPU使用率过高,那应该如何定位该问题呢?首先模拟一下cpu使用率过高的问题:public static void main(String[] args) { int i = 0; while (true){ File file = new File("/log1.out"); t...原创 2020-02-11 21:44:45 · 540 阅读 · 0 评论 -
Arrays.asList注意点
在进行数组转List的时候,经常会用到Arrays.asList();如果不注意的话,这个方法可能就会踩坑。问题复现:public static void arrays2List(Integer[] numbers){ List<Integer> integers = Arrays.asList(numbers); integers.add(1...原创 2020-02-04 15:11:57 · 127 阅读 · 0 评论 -
java clone深拷贝与浅拷贝
使用场景:如果要进行对象clone的话,需要实现Cloneable接口,并调用.clone方法。实现:在进行clone的过程中,需要注意如果拷贝的是引用类型的对象(String除外),都是拷贝的地址,而不是拷贝的值。这样做的缺点就是如果改变了克隆的对象的值,被克隆对象的值也会被修改,因为都指向的是同一块堆中的数据。看一下下面的代码public class CloneTest ...原创 2020-01-13 10:04:08 · 191 阅读 · 0 评论 -
布隆过滤器
海量数据处理以及缓存穿透这两个场景让我认识了布隆过滤器 ,我查阅了一些资料来了解它,但是很多现成资料并不满足我的需求,所以就决定自己总结一篇关于布隆过滤器的文章。希望通过这篇文章让更多人了解布隆过滤器,并且会实际去使用它!下面我们将分为几个方面来介绍布隆过滤器: 什么是布隆过滤器? 布隆过滤器的原理介绍。 布隆过滤器使用场景。 通过 Java 编程手动实现布...转载 2020-01-07 11:43:10 · 192 阅读 · 0 评论 -
springboot @Responsebody返回xml解决
在引入springcloud时,使用的时Netflix eureka。仅仅是注册上去的时候,发现访问controller返回的是xml格式。百度后发现是jackson-dataformat-xml.jar这个jar包导致的。看了一下依赖树发现是spring-cloud-starter-netflix-eureka-server中依赖了此jar包。将此jar包排除出去,即解决。特记录一下...原创 2019-12-23 20:19:11 · 3498 阅读 · 0 评论 -
SimpleDateFormat 线程不安全的原因剖析及解决方案
在项目中经常会用到日期转换工具SimpleDateFormat。SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")由于此方法会经常被用到,所以常常会用静态来修饰,以实现复用。但这样其实是有问题的。举个例子public class Test { public static SimpleDa...原创 2019-12-09 23:01:07 · 559 阅读 · 0 评论 -
java类加载机制(二)自定义类加载器
自定义类加载器1 继承classLoader类2 重写findClass方法看一下自定义的类加载器:/** * @program: springanalysis * @description: * @author: jiaxiaotong * @create: 2019-12-05 12:14 */public class MyClassLoader exten...原创 2019-12-05 13:11:42 · 97 阅读 · 0 评论 -
java 类加载机制(一) 类加载顺序以及双亲委派原则
看到一篇关于类加载机制的博客,觉得讲的很不错,顺带整理个笔记。文章末尾附链接。类的加载顺序先看一个例子:想一下这个会输出的结果是什么public class ClassLoaderTest { public static ClassLoaderTest classLoaderTest = new ClassLoaderTest(); public static ...原创 2019-12-04 23:04:50 · 358 阅读 · 0 评论