当前位置: 首页 > news >正文

java面试中高频问题----1

一、乐观锁和悲观锁定义、场景怎么判断用什么?

1.乐观锁:
    定义:乐观锁假设大多数情况下,资源不会发生冲突。因此,允许多个线程同时访问资源。
    场景:读操作多,写操作少,数据冲突概率低的场景。多用于查询操作。
2.悲观锁:
    定义:悲观锁假设资源会发生冲突,在对资源操作时,会将资源锁定,其他线程无法访问,直到当前线程完成操作释放锁。
    场景:写操作多,读操作少,数据冲突概率高的场景。
3.采用何种锁机制?
****数据访问模式:分析应用程序的数据访问模式,包括读写操作的频率,读写比例;读多于写,冲突概率低用乐观锁;写多于读,冲突概率高用悲观锁。
****系统负载
****数据一致性要求:对数据一致性要求较高,不能容忍数据冲突或者并发更新导致的数据不一致,选悲观锁;对数据一致性要求低,可容忍一定程度的数据冲突或者延迟,选乐观锁。
****开发成本和复杂度:悲观锁,通常会引入锁定机制,可能会导致系统复杂度增加,同时也会增加开发和维护成本;乐观锁通常不需要引入锁定机制,因此开发成本和复杂度低。

二、ArrayList和LinkedList的区别?

********************************************************
ArrayList适合于需要频繁访问元素的场景,而LinkedList适合于需要频繁插入和删除元素的场景。
ArrayList的内存空间是连续的,支持快速随机访问,但插入和删除元素时需要移动后续元素,效率较低。
LinkedList的内存空间不是连续的,不支持快速随机访问,但插入和删除元素时效率较高,只需修改相邻节点的引用即可。

三、IOC原理

IOC,控制反转,以前创建对象的主动权和时机由自己把握,而现在这种权力转移到spring容器中,并由容器根据配置文件创建和管理实例之间的依赖关系,松散耦合,也有利于功能的复用。IOC的具体实现方式之一是依赖注入,通过依赖注入,容器负责在创建对象的同时,将对象所需的依赖关系注入到对象中。IOC的注入方式有三种:构造器注入,setter方法注入,根据注解注入。

四、双亲委派模型解决了什么问题?

双亲委派的基本原理:当一个类加载器收到加载类的请求时,它首先将该请求委派给父类加载器来完成加载。如果父类加载器无法完成加载,则该类加载器才尝试自己加载。这样一层一层的委派下去,直到达到最顶层的启动类加载器。如果所有父类加载器都无法完成加载,则抛出类找不到异常。

五、AOP原理

AOP,面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被称为“切面”。AOP通过代理模式和动态代理技术来实现,可以在方法执行前、执行后或者抛出异常时执行相应的切面逻辑。AOP的动态代理有两种方式:JDK动态代理和CGLIB动态代理。

相关文章:

  • 妙味web前端开发全套视频教程:深度解析与精彩呈现
  • kubernetes-PV与PVC
  • 【axios】的浅度分析
  • 【CSS】计算属性 calc 函数
  • leetcode-设计LRU缓存结构-112
  • Matlab|基于PMU相量测量单元进行电力系统电压幅值和相角状态估计
  • 2024最新 Jenkins + Docker实战教程(七)- Jenkins实现远程传输和自动部署
  • MS Excel: 高亮当前行列 - 保持原有格式不被改变
  • 代码随想录-算法训练营day47【动态规划09:打家劫舍、打家劫舍II、打家劫舍III】
  • 基于python实现生命游戏
  • 【C++】---二叉搜索树
  • 小型海外仓如何选择第三方海外仓系统:多看多对比,性价比优先
  • 数据集的读取和处理
  • 【微机原理及接口技术】可编程计数器/定时器8253
  • C++标准模板(STL)- C 内存管理库 - 分配并清零内存 (std::calloc)
  • SegmentFault for Android 3.0 发布
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 2017年终总结、随想
  • canvas绘制圆角头像
  • CSS魔法堂:Absolute Positioning就这个样
  • Laravel 中的一个后期静态绑定
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Python连接Oracle
  • rc-form之最单纯情况
  • React 快速上手 - 07 前端路由 react-router
  • SpringBoot几种定时任务的实现方式
  • supervisor 永不挂掉的进程 安装以及使用
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 对超线程几个不同角度的解释
  • 蓝海存储开关机注意事项总结
  • 码农张的Bug人生 - 见面之礼
  • 设计模式走一遍---观察者模式
  • 小程序开发中的那些坑
  • 优秀架构师必须掌握的架构思维
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​比特币大跌的 2 个原因
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ######## golang各章节终篇索引 ########
  • #pragma pack(1)
  • #职场发展#其他
  • (30)数组元素和与数字和的绝对差
  • (6)添加vue-cookie
  • (javascript)再说document.body.scrollTop的使用问题
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (二)c52学习之旅-简单了解单片机
  • (六)c52学习之旅-独立按键
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net CHARTING图表控件下载地址
  • .py文件应该怎样打开?
  • //解决validator验证插件多个name相同只验证第一的问题
  • @AutoConfigurationPackage的使用