
面试
文章平均质量分 65
@逾越
记录日常学习实验
展开
-
CompletableFuture学习
我理解就是同时执行多个任务,加快响应速度。并且多线程能更好的发挥CPU的能力。并发:如果CPU是单核单线程,通过时间片轮询交替运行多个任务,像这种逻辑上多线程运行,实际上是一个线程在运行叫做并发;并行:如果CPU是双核双线程,那两个CPU同时执行任务,那就叫做并行;线程池对于新手来说,有现成的api那么我们介绍一下ThreadPoolExecutor看源码:我们工作实际开发中经常用到CompletableFuture。那么他的作用是什么呢?作用:Api:三个一组三个一组三个一组三个一组一般项目中这样使原创 2022-06-14 17:31:13 · 12876 阅读 · 1 评论 -
HashMap扩容死循环问题
HashMap扩容死循环问题源码分析问题(jdk1.7)一、首先hashmap单线程正常扩容遍历每个数组,依次遍历每个数组的链表,根据头插法由原来的1,2,3变为了3,2,1二、hashmap多线程扩容死循环问题两个线程 e1 ,e2此时 线程一先执行,但线程二的指向发生改变,改为线程变换后的具体存储;初始的e2指向0号位的1,但经过线程一的变换指向了2号位的1了,next也发生改变线程二开始在线程一的基础存储,当next2指向空时 。e.next=newTable[i],也就原创 2022-05-16 19:18:50 · 13944 阅读 · 1 评论 -
Redis分布式锁实现
Redis不仅仅可以用来做缓存,还可以用来做分布式锁;Rrdis分布式锁实现使用setnxredLockredissonsetnxsetnx 这个方法是在插入前判断这个键是否已经存在,存在返回 0,不存在返回 1 。换言之,如果key存在就不加锁,不存在就加锁;key不存在时才能set成功;但是,单纯的使用senx,是会出现问题的;进程,锁没等释放,崩了,直接原地把锁带走了,导致系统中谁也拿不到锁。解决办法:设置一个过期时间持有锁的时间有一定限制,操作锁内资源超过设置的超时时原创 2022-03-18 16:13:05 · 13037 阅读 · 1 评论 -
3.11面试复盘
Spring事务异常一定会回滚吗?什么情况事务会失效?1、事务失效的7种情况1.1、未启用spring事务管理功能1.2、方法不是public类型的@Transaction 可以用在类上、接口上、public方法上,如果将@Trasaction用在了非public方法上,事务将无效。1.3、数据源未配置事务管理器spring是通过事务管理器了来管理事务的,一定不要忘记配置事务管理器了,要注意为每个数据源配置一个事务管理器:1.4、自身调用问题spring是通过aop的方式,对需要spring原创 2022-03-13 10:43:49 · 13775 阅读 · 0 评论 -
Java基础回顾(面试)
八种基本类型long 8字节 int 4字节 short 2 字节 byte 1 字节boolean 4字节 double 8字节 float 4字节char (根据编码 ASCII 码 1字节 Unicode 2字节 )根据八种基本类型引出 float和int 的精度问题越近0精度越高(大于int) 离0越远精度低 (低与int)根据int引出128陷阱-127 ------ 128 如数字没超过这个范围存在同一个对象中,超过那么就要重新创建一个对象(新开辟一个空间).原创 2022-02-13 14:30:11 · 11473 阅读 · 0 评论 -
JVM回顾总结(面试)
讲述JVM模型首先,java文件jdk的编译,编译成class文件,通过类加载器进入jvm中,jvm分为,程序计数器,本地方法栈,虚拟机栈,方法区,堆;程序计数器:我理解的就是控制线程跳转的虚拟机栈:具有栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表、操作数栈等等。例如定义的局部变量存栈(存在栈帧中的局部变量表中),全局变量存堆;本地方法栈:和虚拟机栈一样,只不过是操作的是本地方法;方法区:是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态.原创 2022-02-16 09:58:46 · 7215 阅读 · 0 评论 -
JVM常见面试题
1.什么情况下会发生栈内存溢出。描述栈定义,再描述为什么会溢出,再说明一下相关配置参数,OK的话可以给面试官手写是一个栈溢出的demo。java栈:Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表、操作数栈等等。当线程执行一个方法时,就会随之创建一个对应的栈帧,并将建立的栈帧压栈。当方法执行完毕之后,便会将栈帧出栈。使用-Xss参数减少栈内存容量。定义了大量的本地变量,增大此方法帧中本地变量表的长度。2.详解JVM内存模型思路: 给面试官画一下JVM内存原创 2022-02-09 10:00:45 · 7109 阅读 · 0 评论 -
JVM 三色标记 增量更新 原始快照 基本概念
JVM 三色标记要找出存活对象,根据可达性分析,从GC Roots开始进行遍历访问,可达的则为存活对象我们把遍历对象图过程中遇到的对象,按“是否访问过”这个条件标记成以下三种颜色:白色:尚未访问过。黑色:本对象已访问过,而且本对象 引用到 的其他对象 也全部访问过了。灰色:本对象已访问过,但是本对象 引用到 的其他对象 尚未全部访问完。全部访问后,会转换为黑色。过程:初始时,所有对象都在 【白色集合】中;将GC Roots 直接引用到的对象 挪到 【灰色集合】中;从灰色集合中获取对象原创 2022-01-20 15:43:26 · 5653 阅读 · 0 评论 -
Redis回顾(面试)
1. 简单介绍一下 Redis 呗!简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。2. 说一下 Redis 和 Memcached 的区别和共同点现原创 2022-02-16 15:34:49 · 11287 阅读 · 0 评论 -
Redis持久化和一主二从三哨兵
文章目录1.Redis有哪些优缺点2.持久化1.什么是Redis持久化?2.Redis 的持久化机制是什么?各自的优缺点?1.RDB:是Redis DataBase缩写快照2.AOF:持久化3.优缺点是什么?3.哨兵模式(一主二从三哨兵)1.一主二从2.哨兵模式1.Redis有哪些优缺点优点读写性能优异。 支持数据持久化,支持AOF和RDB两种持久化方式。支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。数据结构丰富,除了支持string类型的valu原创 2022-01-06 15:31:36 · 4094 阅读 · 0 评论 -
Redis缓存异常(缓存雪崩,缓存穿透,缓存击穿,缓存降级)
缓存雪崩缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方案缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。缓存穿透缓存穿透是指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方案接口层增加校验,如用户鉴权校原创 2022-01-26 10:13:10 · 5254 阅读 · 0 评论 -
MySQL回顾(面试)
什么是MySQL?MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。MySQL的默认端口号是3306。MyISAM和InnoDB区别两者的对比:是否支持行级锁 : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,但是原创 2022-02-16 11:06:20 · 11280 阅读 · 0 评论 -
Mybatis面试常问
MyBatis是什么?MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射,需要手动编写sql)框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。ORM是什么ORM(Object Relational Mapping),对象关系映射,是一种为了解决关系型原创 2022-01-23 16:16:24 · 5173 阅读 · 0 评论 -
Spring面试常问
什么是spring? 及有什么特点Spring是一个轻量级Java开发框架,一站式轻量级应用开发平台.Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。两大核心特性:IOC容器(控制反转)和AOP(面向切面编程)模块。通过IOC容器管理POJO对象以及他们之间的耦合关系;通过AOP以动态非侵入的方式增强服务。其中IOC是一种设计思想,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。(不用再去new对象了) IOC很好的体现了面向对象设计法则之一原创 2022-01-22 11:27:57 · 5167 阅读 · 0 评论 -
Spring bean的生命周期和Spring是如何解决循环依赖的?
问:Spring对Bean的生命周期管理?答:普通Java对象和Spring所管理的Bean实例化的过程是有些区别的在普通Java环境下创建对象简要的步骤可以分为:java源码被编译为被编译为class文件等到类需要被初始化时(比如说new、反射等)class文件被虚拟机通过类加载器加载到JVM初始化对象供我们使用而是Spring管理的Bean不同,除了Class对象外,还会使用BeanDefinition的实例来描述对象;可以理解为:Class只描述了类的信息,而BeanDefiniti原创 2022-02-19 11:38:48 · 12838 阅读 · 0 评论 -
Spring如何处理线程的并发问题?
1、可以将成员变量声明在方法内。2、将成员变量放在ThreadLocal之中。(ThreadLocal userName = new ThreadLocal<>();)成员变量放在ThreadLocal之中,传进来的参数是跟随线程的,所以也是线程安全的。ThreadLocal 则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。Thr原创 2022-02-18 21:30:56 · 13377 阅读 · 0 评论 -
Spring MVC面试常问
Spring MVC概述Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,简化开发,减少出错,方便配合并且是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。优点:可以支持各种视图技术,而不仅仅局限于JSP;Spring框架集成支持各种请求资源的映射策略。mvc是一种设计模式(设计模式就是日常开发中编写代码的一种好的方法和经验的总结)。模型(model)-视图原创 2022-01-23 16:44:52 · 5274 阅读 · 0 评论 -
SpringBoot面试常问
什么是 Spring Boot?有什么优点?Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。优点:为所有Spring开发者更快的入门开箱即用,提供各种默认配置来简化项目配置内嵌式容器简化Web项目没有冗余代码生成和XML配置的要求Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?启动类上面的注解是@SpringBootAppl原创 2022-01-24 16:48:09 · 5333 阅读 · 0 评论 -
浅析Dubbo分布式架构
什么是 Dubbo?Apache Dubbo 是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。简单来说 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。**Dubbo 的诞生和 SOA 分布式架构的流行有着莫大的关系。**SOA 面向服务的架构(Service Oriented Architecture),也就是把工程按照业务逻辑拆分成服务层、表现层两个原创 2022-02-22 22:20:08 · 12426 阅读 · 0 评论 -
MQ消息队列
什么是消息队列我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。消息队列是分布式系统中重要的组件之一。使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。通过异步处理提高系统性能(减少响应所需时间)因为用户请求数据写入消息队列之后就立即返回给用户了,但是请求数据在后续的业务校验、写数据库等操作中可能失败。因此使用消息队列进行异步处理之后,需要适当修改业务流程进行配合,比如用户在提交订单之后,订单数据写入消息队列,不能立即返回原创 2022-02-26 12:45:12 · 18638 阅读 · 0 评论 -
并发(面试)
并发三要素:原子性:指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部不执行。原子性是数据一致性的保障。可见性:指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。(线程间的通信实现)有序性:程序的执行顺序按照代码的先后顺序来执行。单线程简单的事,多线程并发就进程线程区别进程是操作系统分配资源的单位线程是调度的基本单位,线程之间共享进程资源,线程是程序执行的最小单位一个进程由一个或多个线程组成,线程是一个原创 2022-03-05 11:08:21 · 12762 阅读 · 0 评论 -
Java线程池(面试)
线程池的优点线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。Executor 框架通过原创 2022-03-04 20:14:55 · 13000 阅读 · 1 评论 -
Java线程的状态
Java中线程的状态分为6种。初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。阻塞(BLOCKED):表示线程阻塞于原创 2022-02-25 21:49:02 · 12617 阅读 · 0 评论 -
线程与进程的区别?
进程和线程的区别是什么?进程是操作系统分配资源的单位线程是调度的基本单位,线程之间共享进程资源,线程是程序执行的最小单位一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线调度和切换:线程上下文切换比进程上下文切换要快得多进程定义:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是原创 2022-02-09 21:16:35 · 7352 阅读 · 0 评论 -
常见Linux命令
Linux 脚本指令cd / 打开根目录ls 查看目录ll 查看详情蓝色 文件夹浅蓝色 目录红色 压缩包绿色 可执行文件彩色 多媒体文件mkdir 创建文件夹rz 上传文件ctrl +c 中断恢复rm -rf 文件名 彻底删除文件unzip +包名 解压包Tap键 根据某个字母检索联想sh 运行某个可执行文件cd …返回上一级vi 文件 进入某一文件mv 修改文件名pwd 显示当前绝对路径top 检查所有进程ps -ef 查看所有进程详细目录原创 2022-03-04 19:51:56 · 12868 阅读 · 0 评论 -
Elasticsearch学习心得及常见问题
目录1.Elasticsearch和elasticsearch-headr跨域问题2.Elasticsearch的插件ik分词器3.ElasticSearch的核心概念1.分片2.倒排索引(重点,数据库可能会问)3.基本Rest命令说明4.Spring boot集成ElasticSearch1.Elasticsearch和elasticsearch-headr跨域问题首先保证两者启动成功然后需要在elasticsearch的config中找到elasticsearch的配置文件添加两原创 2022-01-12 15:00:08 · 5459 阅读 · 0 评论 -
HashMap底层探究(一)
1.HashMap 实现原理HashMap 基于 Hash 算法实现的当我们往Hashmap中put元素时,利用key的hashCode重新hash计算出当前对象的元素在数组中的下标存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。理解了以上过程就不难明白HashMap是如何解决hash冲突的问题,核心原创 2022-01-18 16:19:02 · 5108 阅读 · 0 评论 -
HashMap底层探究(二)
HashMap的put方法的具体流程?当我们put的时候 首先计算 key的hash值,这里调用了 hash方法,hash方法实际是让key.hashCode()与key.hashCode()>>>16进行异或操作,高16bit补0,一个数和0异或不变,所以 hash 函数大概的作用就是:高16bit不变,低16bit和高16bit做了一个异或,目的是减少碰撞。因为bucket数组大小是2的幂,计算下标index = (table.length - 1) & hash,如果不做原创 2022-01-18 16:31:16 · 4953 阅读 · 0 评论 -
HashMap和ConcurrentHashMap和Hashtable的区别
HashMap和Hashtable的区别1.线程安全不同HashMap是非线程安全的,只是用于单线程环境下;ConcurrentHashMap是线程安全的,多线程环境下可用;Hashtable是线程安全的,能用于多线程环境中;2.继承的父类不同HashMap继承自AbstractMap类。但二者都实现了Map接口。Hashtable继承自Dictionary类,Dictionary类是一个已经被废弃的类(见其源码中的注释)。父类都被废弃,自然而然也没人用它的子类Hashtable了。原创 2022-02-13 08:52:44 · 15994 阅读 · 0 评论 -
Condition和 AQS 原理
Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来看Object的wait和notify/notify是与对象监视器配合完成线程间的等待/通知机制,而Condition原创 2022-02-12 22:40:58 · 7681 阅读 · 0 评论 -
基于Condition实现阻塞队列
public class BoundedQueue { private Object[] items; // 添加的下标,删除的下标和数组当前数量 private int addIndex, removeIndex, count; private Lock lock = new ReentrantLock(); private Condition notEmpty = lock.newCondition(); private Condition notFull = lock.newCondition();原创 2022-02-11 10:16:07 · 7147 阅读 · 0 评论 -
Volatile和Synchronized和Lock
java内存模型线程之间的通信机制有两种:共享内存和消息传递Java的并发采用的是共享内存模型线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存(不是真实存在的)JMM通过控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性保证volatile对线程的内存可见性 是指必须刷新到主内存中,并声明本地内存中的无效1)每个线程都有自己的本地内存空间(java栈中的帧)。线程执行时,先把变量从内存读到线程自己的本地内存空间,然后对变量进行操作。(2)对该变量操原创 2022-02-11 23:32:46 · 7838 阅读 · 0 评论 -
双重检查锁定及单例模式
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance;原创 2022-02-11 23:03:30 · 8443 阅读 · 0 评论 -
并发——锁升级(偏向锁,轻量级锁,重量级锁,及常见锁)
锁升级原因:为了减少获得锁和释放锁带来的性能消耗,所以有了升级锁流程:无锁状态—偏向锁(jvm配置是否开启)----轻量级锁----重量级锁(不可逆,只要成为重量级,释放锁就一直是重量级)常见锁偏向锁:首先进入的线程,就被标记为偏向锁。如果有其他线程竞争。偏向锁就会升级为轻量级锁轻量级锁:等待的进程不进入阻塞队列,自旋状态(消耗cpu,实现就是CAS),一直在查看是否有空位。当线程激烈(自旋线程多)就会升级为重量级锁 速度快,但消耗大重量级锁:等待的进程进入阻塞队列,通知有空位,出阻塞队列争原创 2022-02-09 21:28:03 · 7348 阅读 · 0 评论 -
HTTP是不保存状态的协议,如何保存用户状态?
HTTP是不保存状态的协议,如何保存用户状态?HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?Session 机制的存在就是为了解决这个问题,**Session 的主要作用就是通过服务端记录用户的状态。**典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了原创 2022-02-22 21:14:14 · 13320 阅读 · 0 评论 -
TCP 协议如何保证可靠传输?
应用数据被分割成 TCP 认为最适合发送的数据块。TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。TCP 的接收端会丢弃重复的数据。流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方.原创 2022-02-22 21:02:43 · 15800 阅读 · 0 评论 -
序列化和反序列化
Java序列化,反序列化Java序列化指将Java对象转换为字节序列的过程,反序列化指将字节序列转换为目标对象的过程;什么情况下需要序列化(序列化的时间)当Java对象需要网络传输或者持久化到磁盘上时;序列化的实现?让类实现Serializable接口,标注该类对象可以被序列化;...原创 2022-02-22 20:16:21 · 12369 阅读 · 0 评论 -
计算机网络—— OSI与TCP/IP各层的结构与功能及协议
OSI与TCP/IP各层的结构与功能,都有哪些协议?应用层:任务是通过应用进程间的交互来完成特定网络应用域名系统DNS,HTTP协议,电子邮件的 SMTP协议运输层:任务就是负责向两台主机进程之间的通信提供通用的数据传输服务运输层主要使用以下两种协议:传输控制协议 TCP(Transmission Control Protocol)–提供面向连接的,可靠的数据传输服务。用户数据协议 UDP(User Datagram Protocol)–提供无连接的,尽最大努力的数据传输服务(不保证原创 2022-02-22 20:30:52 · 14604 阅读 · 0 评论 -
面试——讲讲什么是happens-before?
happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一 个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任意后续操作监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读·传递性:如果A happens原创 2022-02-18 22:06:32 · 11422 阅读 · 0 评论 -
面试——Maven中jar包冲突如何解决?
Maven中jar包冲突如何解决?产生:一般产生冲突都是jar的版本问题;解决方案1、 Maven默认处理策略最短路径优先(一般选取依赖关系短的)最先声明优先(如果长度相同,选取依赖关系先声明的)2、移除依赖:用于排除某项依赖的依赖jar包我们可以借助Maven Helper插件中的Dependency Analyzer分析冲突的jar包,然后在对应标红版本的jar包上面点击execlude,就可以将该jar包排除出去。手动排除 pom.xml中使用标签去排除冲突的jar包3、版原创 2022-02-18 20:53:26 · 11681 阅读 · 0 评论