![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
面试宝典
文章平均质量分 90
面试题
The-Venus
这个作者很懒,什么都没留下…
展开
-
【JAVA面试题】探索多线程同步:ReentrantLock与synchronized的对比解析
是 Java 中用于实现锁的一个类,它提供了与关键字类似的功能,但更加灵活和强大。与相比,提供了更多的操作和控制选项。是 Java 中用于实现线程同步的关键字,可以用来确保多个线程不会同时访问共享资源,从而避免数据竞争和不确定的结果。在多线程编程中,选择合适的线程同步机制对于程序的性能和正确性至关重要。和都是有效的线程同步机制,每种机制都有其优势和适用场景。在实际开发中,我们应该根据具体的需求和场景来选择合适的机制,并且在编写多线程代码时,始终注意避免死锁和性能瓶颈等问题,以确保程序的正确性和高效性。原创 2024-04-22 08:00:00 · 30708 阅读 · 119 评论 -
【面试宝典】深入了解Spring的循环依赖解决策略
在Spring框架中,循环依赖问题指的是在依赖注入时,由于Bean之间相互引用而导致的初始化问题。这种情况下,Spring容器在创建Bean的过程中,发现Bean A依赖于Bean B,而Bean B又依赖于Bean A,形成了循环依赖关系。在Spring框架中,三级缓存是用来解决循环依赖问题的一种机制。它由Spring容器中的三个缓存组成,用于临时存储正在创建的Bean实例。原创 2024-04-12 07:00:00 · 8066 阅读 · 113 评论 -
简单说明String类为什么是final的
声明为final类的目的主要目的就是保证String是不可变(immutable)。不可变就是第二次给一个String 变量赋值的时候,不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。下面看String类源码如何保证是不可变的:public final class String implements java.io.Serializable, Comparable<String>, CharSequence{ /** The value is used for原创 2020-07-28 10:14:45 · 20712 阅读 · 0 评论 -
Redis与MySQL双写一致性如何保证
指的是当我们更新了数据库的数据之后redis中的数据 也要同步去更新。使用redis读取数据的流程,当用户访问数据的时候,会先从缓存中读取数据,如果命中缓存的话,那么直接把缓存中的数据返回给用户,如果缓存中没有数据的话,先查询数据库把查询到的数据保存到缓存中,然后返回给用户。原创 2023-09-11 11:32:56 · 44761 阅读 · 7 评论 -
如何定位和优化mysql慢查询
如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达!原创 2023-08-28 10:00:00 · 36674 阅读 · 2 评论 -
MySQL自增ID用完的几种解决方案
MySQL的自增ID(AUTO_INCREMENT)用完之后,会出现重复ID的问题,那么如何解决这个问题呢?主要有以下几种解决方案:1.更改表结构,扩展ID字段类型将ID字段类型从int扩展到bigint,这样可以支持到9.2 x 10的18次方,基本不会出现用完的情况。例如:2.修改AUTO_INCREMENT的起始值和步长我们可以在初始化数据库表的时候指定AUTO_INCREMENT的起始值和步长,来避免ID用完的情况。例如:这会让id从100开始,每次增加2。3.产生随机ID我们可以放弃AUTO_原创 2023-05-19 10:40:31 · 81672 阅读 · 0 评论 -
深入解析ThreadLocal源码
概念ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问。当使用ThreadLocal维护变量的时候 为每一个使用该变量的线程提供一个独立的变量副本,即每个线程内部都会有一个该变量,这样同时多个线程访问该变量并不会彼此相互影响,因此他们使用的都是自己从内存中拷贝过来的变量的副本, 这样就不存在线程安全问题,也不会影响程序的执行性能。threadlocal,ThreadLocalMap,thread 三者关系图ThreadLocal的数据结构Thread类原创 2020-05-29 09:37:24 · 48107 阅读 · 1 评论 -
设计模式(三):传统模式VS简单原型模式及其优缺点
概念原型模式是一个创建型的模式。用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效。原型模式是用于创建重复的对象,同时又能保证性能。,原型模式提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。工作原理通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实现创建,原创 2020-05-22 23:11:19 · 52918 阅读 · 1 评论 -
synchronized底层原理以及锁升级过程
概念:synchronized是Java提供的一个并发控制的关键字,作用于对象上。主要有两种用法,分别是同步方法(访问对象和clss对象)和同步代码块(需要加入对象),保证了代码的原子性和可见性以及有序性,但是不会处理重排序以及代码优化的过程,但是在一个线程中执行肯定是有序的,因此是有序的。synchronized 的特性1 原子性所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行被synchronized修饰的类或对象的所有操作都是原子的,因为在执原创 2020-05-17 22:01:52 · 59453 阅读 · 1 评论 -
java对象结构以及对象大小计算示例(通俗易懂)
概念在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。具体如下图java 普通对象结构java 数组对象结构对象结构组成对象头HotSpot虚拟机的对象头包括两部分信息:Mark Word第一部分Mark Word,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚原创 2020-05-17 10:34:51 · 57264 阅读 · 1 评论 -
深入解析HashMap和currentHashMap源码以及实现原理
深入解析HashMap和ConcurrentHashMapy源码以及底层原理前言HashMap 和ConcurrentHashMap,这两个相信大家都不陌生,在面试中基本上是必问的,以及在实际开发过程中也是比用的,那么看了这篇文章,无论在面试还是在实际开发中都可以顺手拈来,得心应手了。HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null 值, 因为key不允许重复,因此只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并原创 2020-05-10 00:16:10 · 104973 阅读 · 1 评论 -
设计模式(一):单例模式详解以及几种实现方式及其优缺点
概念单例:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是一种常用的软件设计模式之一,其目的是保证整个应用中只存在类的唯一个实例。比如我们在系统启动时,需要加载一些公共的配置信息,对整个应用程序的整个生命周期中都可见且唯一,这时需要设计成单例模式。如:spring容器,session工厂,缓存,数据库连接池等等。如图特点1)单例模式只能有一个实例。2)单例类必须创建...原创 2020-05-08 10:16:52 · 92603 阅读 · 1 评论 -
Get和Post的区别以及注意点
概念GET和POST是什么?HTTP协议中的两种发送请求的方法。HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,都是TCP链接。GET和POST能做的事情是一样一样的。如果给GET加上request body,活着给POST带上url参数,技术上是完全行的通的。区别1.Get是...原创 2020-05-05 12:10:07 · 47956 阅读 · 1 评论 -
浅谈java集合类以及示例
聊一聊java 的集合类概述Java中集合分为两种类型第一种:以单个元素存储。其超级父接口是:java.util.Collection;第二种:以键值对存储。(类似于python的集合)其超级父接口是:java.util.Map;前者每个位置只能保存一个元素,后者可以保存两个元素。分类Collection又可分为List、Set、QueueList下常用的有ArrayList、Li...原创 2020-05-04 14:28:56 · 48722 阅读 · 1 评论 -
Arrays.asList详解和示例
注意(1)该方法适用于对象型数据的数组(String、Integer…)(2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)(3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新(4)不支持add()、remove()、clear()等方法(5)此方法得到的List长度是不可变的(6)asLis...原创 2020-05-03 17:45:36 · 55211 阅读 · 1 评论 -
深入解析HotSpot
概念Java HotSpot虚拟机是Sun用于Java平台的VM。 它使用许多先进技术为Java应用程序提供最佳性能,包括最先进的内存模型,垃圾收集器和自适应优化器。在SUN/Orace JDK中包括两种风格的VMclient modeserver mode默认以client mode启动。启动命令加- server,以server mode启动。在CMD里面输入 java -v...原创 2020-05-02 22:48:51 · 44045 阅读 · 0 评论 -
BigDecimal详细解析
简介 BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。因此,BigDecimal表示的数值是(unscaledValue × 10-scale)。先运行一套代码public static void main(String[] args) ...原创 2020-05-01 22:29:07 · 45474 阅读 · 1 评论 -
基础面试题:深拷贝和浅拷贝详解以及实例
深拷贝 vs 浅拷贝浅拷贝概念复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针,不复制堆内存中的对象。如图: 特点 1.对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个。2.对于引用类型,比如数组或者类对象,因为引用类型是引用传递,所以浅拷贝...原创 2020-04-30 13:04:02 · 44595 阅读 · 1 评论 -
基础面试题:Arrays 工具类详解(超详细)
Aarry的几个常用函数:排序 : sort()查找 : binarySearch()比较: equals()填充 : fill()转列表: asList()转字符串 : toString()复制: copyOf()排序 : sort()1 void sort(Object[] o):对数组从小到大的排序(String类型的数组不宜使用)2.void sort(int[] ...原创 2020-04-29 21:14:25 · 44117 阅读 · 1 评论 -
基础面试题:Collections 工具类详解
对集合本体的操作线程同步集合的包装特征方法名为synchronizedXxx适用范围ListCollectionSetMap缺点每次读写都要加锁,锁的层级为对象,不利于多线程的同时操作在使用Iterator的遍历时修改元素ConcurrentModificationException建议使用java.util.concurrent的集合线程同步类返回...原创 2020-04-28 09:11:08 · 43976 阅读 · 1 评论 -
基础面试题: final,static,this,super详解
final 关键字final关键字主要用在三个地方:变量、方法、类。对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。使用final方法的原因有两个。第一个原因是把方法锁定,...原创 2020-04-27 08:38:43 · 43954 阅读 · 1 评论 -
Java创建多线程的四种方式以及优缺点
java有以下四种创建多线程的方式:1:继承Thread类创建线程2:实现Runnable接口创建线程3:使用Callable和FutureTask创建线程4:使用线程池,例如用Executor框架创建线程DEMO代码:package thread; import java.util.concurrent.*; public class ThreadTes...原创 2020-04-22 23:09:52 · 52554 阅读 · 2 评论 -
基础面试题:java内存区域
JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁(在 Hotspot VM 内, 每个线程都与操作系统的本地线程直接映射, 因此这部分内存区域的存/否跟随本地线程的生/死对应)。13/04/2018 Page 22 of 283线程共享区域随虚拟...原创 2020-04-11 21:41:10 · 43865 阅读 · 1 评论 -
基础面试题: JDK 和 JRE
1.定义JDK 是 Java Development Kit,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不...原创 2020-04-09 23:03:03 · 44114 阅读 · 1 评论 -
abstract 和Interface的共同点和区别以及应用场景
共同点A.两者都是抽象类,都不能实例化B.Interface实现类和abstract继承类都必须实现抽象方法不同点A.Interface需要实现,用implements;Abstract 需要继承,用exendsB.一个类可以实现多个Interface ;一个类只能继承一个AbstractC.Interface强调功能的实现;Abstract强调从属关系D.Interf...原创 2020-03-25 00:43:59 · 45075 阅读 · 1 评论