Deep In Java
文章平均质量分 77
坚持原创,深入挖掘JDK源码。
抓不到鱼的猫
坚持原创,独立思考,深入挖掘,理解原理。
展开
-
Java面试知识点集合
一Java 集合1. HashMap数据结构:Java7以前是Entry数组+链表的结构,Java8以后是Node数组+链表+红黑树的结构put:通过key计算出hash值,然后计算index = hash & (length-1)得到key在数组的下标,如果数组原本没有元素,则直接存在数组上。如果数组有元素,则出现了hash冲突,如果key相同,则修改value,否则新建节点,插入到对应的链表中。Java7以前,是头插法,Java8以后是尾插法。如果链表长度大于8且数组长度大于64则转原创 2021-03-16 17:54:32 · 104 阅读 · 0 评论 -
(二)多线程与并发之synchronized和Lock
一 Java对象内存与Synchronized(1)对象组成(2)对象头组成(3)锁升级(4)synchronized使用场景(5)synchronized底层原理①同步代码块同步代码块使用的是monitorenter和monitorexit指令,进入代码块时,执行monitor enter指令,就会获取当前对象的所有权,获取成功计数器+1,重入则把计数器+1,执行完后执行monitor exit,计数器-1,直到计数器为0,才可以被其他线程持有。②同步方法.原创 2021-02-25 11:14:35 · 153 阅读 · 0 评论 -
(一)多线程与并发之基础知识
一 可见性假设主存中有共享变量i=0,线程AB都要将i的值+1首先,线程A先从L1 cache和L2 cache读取i,发现没有命中缓存,所以去主存中读取i的值。将i的值修改为1,再将i的值分别刷新到两级缓存和主存中。接着,线程B从主存中读取i的值,然后修改i的值为2,刷新到两级缓存和主存中。最后,线程A获取i的值,在缓存中命中i,缓存中i=1,修改i的值为2,刷新到主存。但是主存中i=2,而线程A的工作内存中i=1,线程A第二次修改i的值应为3,而不是2。因此出现了共享变量内存不可原创 2021-02-24 17:08:25 · 104 阅读 · 0 评论 -
中间件redis之基础知识
一 redis有哪些数据结构?(1)stringredis string内部实现是通过SDS(Simple Dynamic String 简单动态字符串)来存储的,不同长度的字符串使用不同的结构体表示。应用场景:①缓存数据库数据,降低数据库压力②计数器③用户session管理(2)hash类似于一种map结构(3)list有序列表应用场景:①消息队列:数据生产者通过Lpush从左插入数据,多个数据消费者可以使用BRpop命令阻塞的消费列表尾部数据。②分页查询(4)set原创 2021-01-06 13:52:25 · 217 阅读 · 0 评论 -
Spring全家桶之spring基础
来源于:15个经典的Spring面试常见问题Spring模块? 谈谈自己对于 Spring IoC 和 AOP 的理解 Spring AOP 和 AspectJ AOP 有什么区别? Spring 中的 bean 的作用域有哪些? Spring 中的单例 bean 的线程安全问题了解吗? Spring 中的 bean 生命周期? 说说自己对于 Spring MVC 了解? SpringMVC 工作原理了解吗? Spring 框架转载 2021-01-05 17:52:13 · 89 阅读 · 0 评论 -
Java集合之ConcurrentHashMap
一 在Java集合之HashMap中,谈到HashMap是线程不安全的,那么有什么办法解决线程不安全的问题?在多线程的场景下,有如下几种代替方式: 使用Collections.synchronizedMap(Map)创建线程安全的map集合; Hashtable ConcurrentHashMap synchronizedMap有两个构造函数,如果传参了mutex,则将对象的排斥锁赋值为传入的值,创建出synchronizedMap后,操作map时就会对方法上锁。原创 2021-01-05 16:43:02 · 473 阅读 · 3 评论 -
多线程与并发之CAS
一 什么叫CAS?CAS是乐观锁的一种实现,是一种轻量级锁,CAS操作流程如下:线程在读取数据时不加锁,在准备写回数据时,比较原值是否被修改,若未被修改则写回,否则重新执行读取流程。二 CAS可能会遇到ABA问题?ABA是指,前面数据由别的线程,从A修改为B,再由B修改为A,这时候CAS判断原值时,依然判断通过,但是并不能感知到数据被修改的过程。三 如何解决ABA问题?方法一:给数据设定版本号,比较原值时还需比较版本号。方法二:给数据设定时间戳,比较原值时还需比较时间戳。...原创 2021-01-05 16:34:26 · 77 阅读 · 0 评论 -
多线程与并发之安全失败和快速失败
一 快速失败(fail-fast)快速失败是Java集合中的一种机制,在用迭代器遍历一个集合对象时,如果遍历过程中集合对象的内容进行修改(增加,删除,修改),则会抛出ConcurrentModificationException原因:在迭代器遍历集合的过程中,每当迭代器遍历下一个元素之前,都会检测modCount != expectedModCount。如果检测不通过,就会抛出ConcurrentModificationException,而修改集合的操作都会触发modCount++,Java.原创 2021-01-05 15:29:01 · 530 阅读 · 0 评论 -
Java集合之HashMap
一HashMap底层数据结构是什么?Java7中是:数组+链表Java8中是:数组+链表+红黑树二HashMap是如何进行存取的? /** * JDK 1.8 * Implements Map.put and related methods. * * @param hash hash for key * @param key the key * @param value the value to put * @..原创 2021-01-05 13:31:13 · 87 阅读 · 0 评论 -
Java集合之ArrayList
一 ArrayList底层数据结构是什么?其底层数据结构是数组二 ArrayList有什么特点?查找效率高,但是增删效率低,线程不安全。三 为什么说ArrayList线程不安全?(1)可能造成数组越界假如初始状态arraylist容量为1,线程A要插入a,读取到数组容量为1,线程B要插入b,读取到数组容量为1,都不需要扩容。若此时B线程在设置值操作时挂起,A线程设值完成,B线程唤醒接着执行设置操作,此时列表容量不够,则不会出现数组越界异常。(2)可能出现值覆盖假设..原创 2021-01-05 10:59:45 · 80 阅读 · 0 评论 -
多线程与并发之ThreadLocal
一 什么是ThreadLocal?源码注释:/** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread that accesses one (via its * {@code get} or {@code set} method) has its own, independently initiali原创 2021-01-04 20:58:26 · 154 阅读 · 0 评论 -
多线程与并发之Volatile
在开始了解volatile之前,先来看两段代码: 第二段代码比第一段代码仅仅多出了一个volatile关键字,却产生了不一样的执行结果,为什么会这样,volatile做了什么?带着种种疑问,进行底层深挖!一 计算机内存模型以及Java内存模型(JMM)(1)计算机组成结构根据上面的现象表明,问题的关键点在flag变量,flag是现象产生的自变量,而hello world是现象产生的因变量。而flag变量,保存在内存中,供程序进行读写操作,那么首先来了解计算机内存模型。...原创 2021-01-04 15:55:11 · 190 阅读 · 0 评论 -
(一)Deep In Java之反射初探
cvcxv原创 2020-10-27 09:28:07 · 114 阅读 · 1 评论