自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 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 98

原创 (二)多线程与并发之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 140

原创 (一)多线程与并发之基础知识

一 可见性 假设主存中有共享变量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 95

原创 中间件redis之基础知识

一 redis有哪些数据结构? (1)string redis string内部实现是通过SDS(Simple Dynamic String 简单动态字符串)来存储的,不同长度的字符串使用不同的结构体表示。 应用场景:①缓存数据库数据,降低数据库压力②计数器③用户session管理 (2)hash 类似于一种map结构 (3)list 有序列表 应用场景:①消息队列:数据生产者通过Lpush从左插入数据,多个数据消费者可以使用BRpop命令阻塞的消费列表尾部数据。②分页查询 (4)set

2021-01-06 13:52:25 206

转载 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 84

原创 Java集合之ConcurrentHashMap

一 在Java集合之HashMap中,谈到HashMap是线程不安全的,那么有什么办法解决线程不安全的问题? 在多线程的场景下,有如下几种代替方式: 使用Collections.synchronizedMap(Map)创建线程安全的map集合; Hashtable ConcurrentHashMap synchronizedMap有两个构造函数,如果传参了mutex,则将对象的排斥锁赋值为传入的值,创建出synchronizedMap后,操作map时就会对方法上锁。

2021-01-05 16:43:02 451 3

原创 多线程与并发之CAS

一 什么叫CAS? CAS是乐观锁的一种实现,是一种轻量级锁,CAS操作流程如下:线程在读取数据时不加锁,在准备写回数据时,比较原值是否被修改,若未被修改则写回,否则重新执行读取流程。 二 CAS可能会遇到ABA问题? ABA是指,前面数据由别的线程,从A修改为B,再由B修改为A,这时候CAS判断原值时,依然判断通过,但是并不能感知到数据被修改的过程。 三 如何解决ABA问题? 方法一:给数据设定版本号,比较原值时还需比较版本号。 方法二:给数据设定时间戳,比较原值时还需比较时间戳。 ...

2021-01-05 16:34:26 72

原创 多线程与并发之安全失败和快速失败

一 快速失败(fail-fast) 快速失败是Java集合中的一种机制,在用迭代器遍历一个集合对象时,如果遍历过程中集合对象的内容进行修改(增加,删除,修改),则会抛出ConcurrentModificationException 原因:在迭代器遍历集合的过程中,每当迭代器遍历下一个元素之前,都会检测modCount != expectedModCount。如果检测不通过,就会抛出ConcurrentModificationException,而修改集合的操作都会触发modCount++,Java.

2021-01-05 15:29:01 499

原创 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 79

原创 Java集合之ArrayList

一 ArrayList底层数据结构是什么? 其底层数据结构是数组 二 ArrayList有什么特点? 查找效率高,但是增删效率低,线程不安全。 三 为什么说ArrayList线程不安全? (1)可能造成数组越界 假如初始状态arraylist容量为1,线程A要插入a,读取到数组容量为1,线程B要插入b,读取到数组容量为1,都不需要扩容。若此时B线程在设置值操作时挂起,A线程设值完成,B线程唤醒接着执行设置操作,此时列表容量不够,则不会出现数组越界异常。 (2)可能出现值覆盖 假设..

2021-01-05 10:59:45 74

原创 多线程与并发之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 139

原创 多线程与并发之Volatile

在开始了解volatile之前,先来看两段代码: 第二段代码比第一段代码仅仅多出了一个volatile关键字,却产生了不一样的执行结果,为什么会这样,volatile做了什么?带着种种疑问,进行底层深挖! 一 计算机内存模型以及Java内存模型(JMM) (1)计算机组成结构 根据上面的现象表明,问题的关键点在flag变量,flag是现象产生的自变量,而hello world是现象产生的因变量。而flag变量,保存在内存中,供程序进行读写操作,那么首先来了解计算机内存模型。...

2021-01-04 15:55:11 181

原创 (四)设计模式之建造者模式

一 建造者模式 参考文献:菜鸟教程建造者模式 1.1 今日故事会 本故事纯属瞎扯,不涉及任何宗教,政治,种族,文化等,如有冒犯,请联系作者删除! 故事背景:上帝考虑到人种多样性可能会促进人类社会发展,因此来到九重天找女娲,于是展开如下对话: 上帝:女神,近来可好? 女娲:放,别套近乎! 上帝:害,能帮我造几种不同的人类吗? 女娲:五毛特效和百元特效,你要哪种? 上帝:先来三种五毛特效的吧,我要黄种人,白种人和黑种人。黄种人要是黄皮肤,黑头发,国字脸,白种人要白皮肤,黄头发和锥子脸,还有黑种

2020-12-14 16:57:19 72

原创 (三)设计模式之模板方法模式

一 模板方法理解 现在某电脑公司需要设计两个电脑模型给富士康代工量产,模型都能够开机,显示启动界面,进入桌面,关机操作,只是模型功能的具体实现不一样。 1.1 抽象电脑模型模板类 public abstract class AbstractComputerModel { //启动 protected abstract void start(); //进入启动界面 protected abstract void show(); //

2020-11-09 11:20:37 111

原创 (二)设计模式之抽象工厂模式

现在 富士康电脑生产线需生产三种不同型号的戴尔电脑,基本信息如下: 型号 CPU 内存 操作系统 A型号 酷睿i3 4GB windows10 B型号 酷睿i5 8GB windows10 C型号 酷睿i7 16GB windows10 1.1 抽象电脑产品类 ...

2020-11-09 10:35:00 115

原创 (一)设计模式之单例模式+volatile

一 为什么需要使用单例模式?什么情况下使用单例模式? 一般我们习惯使用new关键字创建对象,但是每new一个对象都需要消耗内存资源,特别是一个对象需要频繁地创建,销毁。如果将该对象得实例只在内存中存放一个实例,将会减少内存开销,避免频繁创建和销毁带来得性能开销。 ...

2020-11-05 21:07:17 200

原创 (一)Deep In Java之反射初探

cvcxv

2020-10-27 09:28:07 107 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除