JAVA
文章平均质量分 73
dianxiaoer20111
这个作者很懒,什么都没留下…
展开
-
@Transaction不回滚事务问题
发现项目中使用@Transactional注解事务,抛了异常却不回滚,分析下原因。一、声明式事务特性先来了解一下@Transactional注解事务的特性,以便于更好排查问题1、service类(一般不建议在接口上)上添加@Transactional,可以将整个类纳入spring事务管理,在每个业务方法执行时都会开启一个事务,这些事务采用相同的管理方式。2、@Transactional 注解只能应用到 public 的方法上。 如果应用在protected、private或者 package原创 2021-07-14 20:47:00 · 534 阅读 · 0 评论 -
给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
思路一:可以估计每个文件的大小为5G*64=300G,远大于4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 遍历文件a,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为a0,a1,...a999)当中。这样每个小文件的大小约为300M。遍历文件b,采取和a相同的方法将url分别存储到1000个小文件(b0,b1....b999)中。这样处理后,所有可能相同的url都在对应的小文件(a0 vs b0, a1 vs b1....a999原创 2020-12-22 11:48:43 · 705 阅读 · 0 评论 -
java程序服务器CPU占用过高问题排查步骤及问题解决
1、cpu过高是那个程序造成的?使用top命令2、更具PID来查看具体是那个进程下对应的线程造成,及通过进程来确定cpu过高的线程tid。命令:Ps -mp pid -o THREAD,tid,time3、因为线程的id都是16进制的需要将10进制转换成16进制,方法:1、直接使用计算器方法:2、使用命令得到结果:得到这三个数的16进制为别为3ec4,3ec5,3ec74、jstack查看进程信息然后利用grep来过滤对应的线程id信息。通过jst..原创 2020-05-27 08:39:17 · 598 阅读 · 0 评论 -
i++和++i是否为原子操作?怎么确保原子性
一.i++i++的操作分三步:(1)栈中取出i(2)i自增1(3)将i存到栈所以i++不是原子操作,上面的三个步骤中任何一个步骤同时操作,都可能导致i的值不正确自增二.++i在多核的机器上,cpu在读取内存i时也会可能发生同时读取到同一值,这就导致两次自增,实际只增加了一次。综上,我认为i++和++i都不是原子操作。三、确保原子性1、加锁2、为了保证其原子性,可以使用AtomicInteger类的getAndIncrement()方法实...原创 2020-05-25 02:26:08 · 3132 阅读 · 0 评论 -
高并发情况下如何保证数据的一致性,从哪些放方面下手.
1.业务层面乐观锁CAS业务层面乐观锁CAS,使用版本号解决ABA问题,实际使用中使用时间戳,更新的时候把查出来的时间戳带上,如果更新失败可以自旋,获取最近值和时间戳,直到更新成功。2.DB层面开启一个事务DB层面开启一个事务,然后select一行for update给这一行加上排它锁,再去更新行,然后提交,其他事务就会阻塞在select for update。3.分布式锁...原创 2020-05-01 16:49:15 · 753 阅读 · 0 评论 -
为什么需要重写equals方法
默认equals在比较两个对象时,是看他们是否指向同一个地址的。但有时,希望两个对象只要是某些属性相同就认为他们的quals为true。比如:Student s1 = new Student(1,"name");Student s2 = new Student(1,"name");如果不重写equals的话,他们是不相同的,因为引用s1和s2指向的堆内存地址显然不一样,所以我们要重些eq...原创 2020-04-22 14:45:34 · 732 阅读 · 0 评论 -
线程池参数及拒绝策略
java多线程开发时,常常用到线程池技术,这篇文章是对创建java线程池时的七个参数的详细解释。当需要加入进程时:(1)当前线程数小于核心线程数,当前线程直接运行。(2)当前线程数大于核心线程数,当前线程会加入到阻塞队列中,(3)此时阻塞队列未满,直接加入,等待机会运行。(4) 此时阻塞队列已满,但此时线程数小于最大线程数,则直接创建线程运行。(5)此时线程数大于等于...原创 2020-04-05 20:43:09 · 523 阅读 · 0 评论 -
CAS的ABA问题详解及解决办法
CAS的ABA问题详解ABA问题在多线程场景下CAS会出现ABA问题,关于ABA问题这里简单科普下,例如有2个线程同时对同一个值(初始值为A)进行CAS操作,这三个线程如下 1.线程1,期望值为A,欲更新的值为B 2.线程2,期望值为A,欲更新的值为B 线程1抢先获得CPU时间片,而线程2因为其他原因阻塞了,线程1取值与期望的A值比较,发现相等然后将值更新为B,然后这个时候出现...原创 2020-04-01 11:12:56 · 385 阅读 · 0 评论 -
hashMap原理
hashMap是本人面试多家公司后面试官常会问道一道题原创 2017-10-23 09:53:38 · 161 阅读 · 0 评论