20230913java面经整理

1.hashmap为什么重写hashcode必须重写equals?不重写hashcode?

hashcode判断对象存放的索引值,equals判断相同索引下对象是否相同,不同则存放(链表)
hashcode提升查询效率,通过哈希计算,equals相等hashcode一定 相等
因为业务判断equals不一定严格对象相等,所以要重写equals
规定:equals的对象必须有相同的hashcode
不重写的话导致hashmap不可以正常运作

2.concurrenthashmap数据结构,怎么实现线程安全?

hashmap在多线程put的时候,hash碰撞时通过链表方式存,没有同步的话可能会覆盖造成数据丢失
在这里插入图片描述
volatile:改动val和next对于其他线程都可见
cas:put的时候,根据key的hashcode定位,定位完之后时null需要使用cas进行插入,compareAndSwap
synchronized:头节点不是null,synchronized加锁头节点
在这里插入图片描述

3.reentranlock介绍一下,怎么实现

基于AQS实现:同步队列和条件队列的抽象类
同步双向链表,条件单项链表,存的等待状态的线程,aqs管理线程之间的等待状态-唤醒的工作
同步队列有独占模式和共享模式,区别在于是不是传递唤醒
定义锁:继承aqs后重写获取锁、释放锁以及管理state
reentranlock:通过重写tryAcquire和tryRelease实现lock和unlock
在这里插入图片描述
独占锁、悲观锁,默认非公平锁
lock通过cas设置state
公平锁按照同步队列中的先到先得的顺序,后来的不能抢先获得锁;非公平的如果看到state是0直接抢占
tryRelease看是否有重入,知道释放完state=0再唤醒后继节点
tryLock在规定时间内进行循环获取锁
等待-通知机制:synchronized + object或wait+notify(notifyAll)
ReentranLock + Condition使用条件队列实现wait、notify、notifyall语义
await将同步队列转移条件队列,signal将条件队列转移同步队列,只有同步队列才可以获得锁
reentrantlock是aqs实现,synchronized是jvm实现通过monitor对象/对象头实现
在这里插入图片描述

4.synchronize怎么实现

jvm通过进入和退出monitor对象实现代码块同步,使用monitorenter和monitorexit指令实现,方法同步通过access flags后边的synchronized标识,如果有标识则持有monitor
锁优化:无锁-》偏向锁-〉轻量级锁-》重量级锁
偏向锁:只有一个线程执行
轻量级锁:多个线程交替执行未发生竞争,将对象的mark word复制到当前线程的lock record中
在这里插入图片描述

5.cas介绍一下

CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包含三个操作数 – 内存位置、预期数值和新值。CAS 的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不做任何操作。

aba问题:对每一次cas设置版本号,atomicStampedReference可以解决aba问题
循环时间开销大:如果jvm可以支持pause可提高效率,可延迟操作
只可保证一个共享变量的原子

6.volatile原理,使用场景

使用volatile来解决共享变量可见性
1.当一个线程写一个volatile变量时,JMM会把该线程对应的本地内存中的变量值强制刷新到主内存中去;
2.这个写会操作会导致其他线程中的这个共享变量的缓存失效,要使用这个变量的话必须重新去主内存中取值。3.禁止指令重排序优化,因为在多线程不一定会正确
4.为了实现volatile的内存语义,编译器在生成字节码时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序。同时内存屏障还能保证内存的可见性
使用场景:
1.用于状态标志,指示一个重要的一次性时间
2.一次性发布,可能遇到某个对象的更新值和该对象状态的旧值同时存在,例如双重检测单例,不用volatile的话jvm进行指令重排会返回未初始化的对象
在这里插入图片描述

7.事务隔离级别

脏读:脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚
可重复读:在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据都是一致的
不可重复读:在同一事务内,不同的时刻读到的同一批数据可能是不一样的,可能会受到其他事务的影响
幻读:针对数据插入(INSERT)操作来说的


读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。
读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。
可重复读,就是在开始读取数据(事务开启)时,不再允许修改操作
串行化,后一个事务的执行必须等待前一个事务结束


使用mvvc多版本并发控制实现可重复读,生成快照
可重复读是在事务开始的时候生成一个当前事务全局性的快照,而读提交则是每次执行语句的时候都重新生成一次快照。

8.可重复读如何阻止幻读

解决幻读用的也是锁,叫做间隙锁,MySQL 把行锁和间隙锁合并在一起,解决了并发写和幻读的问题,这个锁叫做 Next-Key锁。
next-key lock = 行锁 + 间隙锁
间隙锁是多个行组成的区间,行锁是一行
有索引的话,未插入的行以及记录两边的区间加入间隙锁
没有索引的话,为整个表加入间隙锁

9.bean的生命周期

实例化 Instantiation
属性赋值 Populate
初始化 Initialization
销毁 Destruction
在这里插入图片描述

在这里插入图片描述

10.bean如何注入值

构造函数注入、set方法注入
xml配置文件注入,注解方式@value注入
xml配置中的constructor-arg可以根据name或者index注入
xml配置中的set注入直接根据name注入
p命名空间简化set注入,普通属性or引用
c明明空间简化构造器注入,普通属性or引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/131576.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能测试 —— Jmeter定时器

固定定时器 如果你需要让每个线程在请求之前按相同的指定时间停顿,那么可以使用这个定时器;需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间 1、使用固定定时器位置在http请求中&#xf…

idea中的debug界面上没有进入方法的红色按钮

问题描述: 这里缺少进入系统方法的红色按钮。 问题解决方法: 在上面图片红框范围内右键点击进入。 点击号 搜索 ‘force’ 添加即可完成 上下拖动即可调整界面按钮顺序

Azure + React + ASP.NET Core 项目笔记一:项目环境搭建(一)

不重要的目录标题 前提条件第一步:新建文件夹第二步:使用VS/ VS code/cmd 打开该文件夹第三步:安装依赖第四步:试运行react第五步:整理项目结构 前提条件 安装dotnet core sdk 安装Node.js npm 第一步:新…

Linux下的系统编程——进程间的通信(九)

前言: 前面我们已经对进程已经有了一个简单的了解与认识,那么进程间的通信是什么样的呢,什么是父子进程,什么是兄弟进程,没有血缘关系间的进程是如何实现进程通信的,下面让我们一起学习一下什么是进程间的…

C语言双向链表

文章目录 前言双向链表链表头结点的创建节点尾插与尾删节点头插与头删特定位置插入或删除节点链表节点查找双向链表的销毁 链表的打印 前言 假期时间因为为学校开学考试做准备所以一直没更新博客,今天开始博客会陆续更新。 双向链表 之前我们说过了顺序表和单链表…

Kafka3.0.0版本——消费者(offset的默认维护位置)

目录 一、offset的默认维护位置1.1、offset的默认维护位置概述1.2、offset的默认维护位置图解 二、消费者offset的案例 一、offset的默认维护位置 1.1、offset的默认维护位置概述 Kafka0.9版本之前,consumer默认将offset保存在Zookeeper中。从Kafka0.9版本开始&am…

文件上传漏洞第十六关十七关

第十六关 第十七关 第十六关 直接上传php文件判断限制方式: 同第十五关白名单限制 第十六关源码: 代码逻辑判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染 二次渲染图片马&…

熵 | 无线通信知识

文章目录 一、信息论(熵、联合熵、条件熵)二、Bernoulli熵三、联合熵和条件熵四、互信息五、相对熵(KL距离)六、微分熵七、最大熵分布常需要的不等式公式 一、信息论(熵、联合熵、条件熵) 熵定义: H ( X ) E [ − l …

开课吧(三)机器人系统(ros详解)

目录 常用快捷键: 常用命令: Catkin编译系统: 简析.XML文件(说明书) name指package名字 version指版本 description指描述 maintainer指拥有者 license指授权 buildtool_depend 依赖catkin编译 build_depend指依…

【Java Web】HTML 标签 总结

目录 1.HTML 2.标签 1. head 标签 1.图标 2.样式居中 2. body 标签 1.注释 : 2.加载图片 3.加载视频 效果 4.区域 效果 5.上下跳转,页面跳转 效果 6.表格 效果 7.有序列表,无序列表 效果 8.登录 效果 9.按钮 10.多选框…

vue2.X 中使用 echarts5.4.0实现项目进度甘特图

vue2.X 中使用 echarts5.4.0实现项目进度甘特图 效果图&#xff1a; 左侧都是名称&#xff0c;上面是时间&#xff0c;当中的内容是日志内容 组件&#xff1a; gantt.vue <template><div id"main" style"width: 100%; height: 100%"></…

算法-27.移除元素-⭐

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

数分面试题2-牛客

1、面对大方差如何解决 1&#xff0c;AB实验场景下&#xff0c;如果一个指标的方差较大表示它的波动较大&#xff0c;那么实验组和对照组的显著差异可能是因为方差较大即随机波动较大。解决方法有&#xff1a;PSM方法、CUPED(方差缩减) PSM代表"Propensity Score Matchin…

【UE】刀光粒子效果——part2 材质函数部分

效果 步骤 1. 新建一个材质函数&#xff0c;这里命名为“MF_TextureCommon” 2. 新建一个材质&#xff0c;这里命名为“Mat_GuangBan1”&#xff0c;添加如下节点 3. 接下来将该材质的逻辑添加到材质函数上&#xff0c;复制材质“Mat_GuangBan1”中的如下节点&#xff0c;粘贴…

每日一博 - 导航Linux文件系统:根目录的子目录层次结构

文章目录 概述Pic小结 概述 Linux操作系统的根目录&#xff08;/&#xff09;是整个文件系统的起点&#xff0c;它包含了许多重要的子目录&#xff0c;每个子目录都有特定的作用和用途。以下是主要的根目录子目录及其作用&#xff1a; /bin&#xff08;二进制文件&#xff09;…

Python第一次作业练习

题目分析&#xff1a; """ 参考学校的相关规定。 对于四分制&#xff0c;百分制中的90分及以上可视为绩点中的4分&#xff0c;80 分及以上为3分&#xff0c;70 分以上为2分&#xff0c;60 分以上为1分; 五分制中的5分为四分制中的4分&#xff0c;4分为3分&#…

Linux内核分析与应用7-内核同步

本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好&#xff0c;推荐观看 留此记录&#xff0c;蜻蜓点水,可作抛砖引玉 7.1 Linux同步概述 竞态条件,也称竞争条件,race condition 临界区 原子操作,Linux专门有一个atomic_t结构体 问题: 在多核系统中遇…

嵌入式这个领域会变得过于内卷吗?

今日话题&#xff0c;嵌入式这个领域会变得过于内卷吗&#xff1f;嵌入式开发主要服务于第二产业&#xff0c;尤其是制造业&#xff0c;包括电器、电气、机械、汽车、装备、航空航天等行业的“智能制造”部门&#xff0c;稳定性较强&#xff0c;不像互联网行业那样波动大。因此…

Linux CentOS7修改命令行提示符

在CentOS操作系统中&#xff0c;命令和文件是我们与计算机进行交互的重要方式之一。有时候我们可能需要对某些命令、变量或文件进行修改&#xff0c;以满足特定的需求或提高工作效率。 本人在文章《Linux CentOS7命令及命令行》中对命令行提示符的修改作了初步介绍&#xff0c…

无涯教程-JavaScript - XNPV函数

描述 XNPV函数返回的现金Stream量表的净现值不一定是周期性的。要计算一系列定期现金Stream量的净现值,请使用NPV函数。 语法 XNPV (rate, values, dates)争论 Argument描述Required/OptionalRateThe discount rate to apply to the cash flows.RequiredValues 与日期付款时…