摘要:
Java中的四种引用 Java中有四种引用类型:强引用、软引用、弱引用、虚引用。 Java为什么要设计这四种引用 Java的内存分配和内存回收,都不需要程序员负责,都是由伟大的JVM去负责,一个对象是否可以被回收,主要看是否有引用指向此对象,说的专业点,叫可达性分析。 Java设计这四种引用的主要目 阅读全文
摘要:
前言 面试官:来说说,一千万的数据,你是怎么查询的? B哥:直接分页查询,使用limit分页。 面试官:有实操过吗? B哥:肯定有呀 此刻献上一首《凉凉》 也许有些人没遇过上千万数据量的表,也不清楚查询上千万数据量的时候会发生什么。 今天就来带大家实操一下,这次是基于MySQL 5.7.26做测试 阅读全文
摘要:
今天主要通过多读单写的例子来说下读写锁的原理概念多读单写,简单说,就是对资源的访问分为两种状态,一种是读操作,另一种是写操作。由应用程序提示锁应该做哪种操作。当为读模式时,所有的写动作被悬挂,而读请求被允许通过,而写动作时,所有操作被悬挂。并且,读写切换时,有足够的状态等待,直到真正安全时,才会切换 阅读全文
摘要:
由来和具体概念从JDK5开始,JSR-133使用 happens-before 来实现变量的内存可见性问题。在JMM中,如果一个操作执行的结果需要对另外一个操作可见,那么二者必定要存在 happens-before 关系。与开发人员密切相关的 happens-before 规则1、程序顺序规则:一个 阅读全文
摘要:
今天无意中搜了一下Collections.reverse这个方法,结果发现有些人对它的误解蛮深的。下面是一个有百万访问量博主写的,reverse可以对指定列表进行降序排序,可是自己输出的结果都不是降序。这里写图片描述确实,使用Collections.reverse结合一定方法可以实现对list集合降 阅读全文
摘要:
list与set方法的区别有:list可以允许重复对象和插入多个null值,而set不允许;list容器是有序的,而set容器是无序的等等 阅读全文
摘要:
在工作中,经常会碰到CPU占用100%的情况,那如何找到是那个线程占用了cpu呢? 1. top命令,找到cpu占用最高的进程 2. 查看该进程的线程, top -p <pid> 3. ctrl+H 切换到线程模式,找到占用cpu最高的线程。并把线程号转化为十六进制,printf "%x\n" <线 阅读全文
摘要:
1 static void test9() throws InterruptedException{ 2 Thread thread1=new Thread(()->{ 3 try { 4 System.out.println("111"); 5 Thread.sleep(1000); 6 }cat 阅读全文
摘要:
顺序死锁:过度加锁,导致由于执行顺序的原因,互相持有对方正在等待的锁 资源死锁:多个线程在相同的资源上发生等待 由于调用顺序而产生的死锁 public class Test { Object leftLock = new Object(); Object rightLock = new Object 阅读全文
摘要:
工欲善其事,必先利其器 简介 本篇整理两个排查问题的简单技巧,一个是java死锁排查,这个一般在面试的时会问到,如果没有写多线程的话,实际中遇到的机会不多;第二个是java cpu 100%排查,这个实际的开发中,线的应用出现这个问题可能性比较大,所以这里简单总结介绍一下,对自己学习知识的一个整理, 阅读全文