版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java+Oracle高频面试题及详细答案(实战版)一、Java核心面试题(基础+进阶+实操)1.说说JDK、JRE、JVM的区别与联系?参考答案:三者是层层包含的关系,范围从大到小依次是JDK>JRE>JVM。JVM是Java虚拟机,是Java程序运行的核心环境,负责加载字节码文件、执行程序、内存管理、垃圾回收,是实现Java跨平台的核心,只负责运行程序,不包含编译工具。JRE是Java运行环境,包含JVM和Java核心类库,比如集合、IO、字符串等基础类。安装JRE就可以运行已经编译好的Java程序,但无法编写和编译代码。JDK是Java开发工具包,包含JRE+开发编译工具,比如javac编译器、java运行命令、jar打包工具、调试工具等。开发Java项目必须安装JDK,生产环境部署项目只需要JRE即可。2.==和equals()的区别?参考答案:==是运算符,equals是Object类的方法,核心区别是比较的内容不同。对于基本数据类型,==比较的是变量的实际数值;基本类型没有equals方法。对于引用数据类型,==比较的是对象的内存地址,也就是判断两个变量是否指向同一个对象。equals方法默认也是比较对象内存地址,但String、Integer等包装类重写了该方法,重写后会比较对象的内容值,不再比较地址。日常开发中,比较字符串、包装类数值是否相等,一律使用equals,避免==带来的地址比较问题。同时使用equals要注意空指针问题,尽量把常量放前面,比如"abc".equals(str)。3.String、StringBuilder、StringBuffer的区别?参考答案:核心区别在于可变性、线程安全、性能三个维度。String是不可变字符串,底层是被final修饰的字符数组,每次字符串拼接、修改都会生成新的String对象,频繁操作会产生大量垃圾对象,性能最差。适合少量字符串定义、固定文本场景。StringBuffer和StringBuilder是可变字符串,底层数组可动态扩容,修改不会生成新对象,拼接性能远高于String。StringBuffer是线程安全的,所有方法都加了synchronized锁,多线程环境下不会出现并发问题,但锁会带来性能损耗。StringBuilder是非线程安全的,没有锁机制,性能最高,单线程场景首选。开发规范:少量字符串操作用String;单线程大量拼接用StringBuilder;多线程大量拼接用StringBuffer。4.重写和重载的区别?参考答案:重载和重写都是方法的多态体现,重载是编译期多态,重写是运行期多态。重载(Overload):发生在同一个类中,多个方法方法名相同,参数列表不同(参数个数、类型、顺序不同),返回值、访问修饰符不做限制。主要用于统一方法名,适配不同参数场景,比如System.out.println()多个重载方法。重写(Override):发生在子类和父类之间,子类重写父类的非私有、非final、非静态方法。要求方法名、参数列表、返回值完全一致(协变返回除外),访问权限不能比父类更严格,重写后运行时会执行子类方法。主要用于子类拓展父类逻辑。5.Java集合ArrayList和LinkedList的区别?参考答案:底层结构和适用场景是核心区别。ArrayList底层是动态扩容的数组,查询、遍历效率极高,支持随机访问(通过下标直接获取元素);但增删元素时需要移动数组元素,尤其是中间位置增删,效率很低。默认初始容量10,扩容每次扩容1.5倍。LinkedList底层是双向链表,没有下标,不支持随机访问;增删元素只需要修改节点指针,无需移动数据,首尾增删效率极高;但查询、遍历需要从头节点依次查找,效率极低。业务选型:查询多、增删少用ArrayList;频繁首尾增删、极少查询用LinkedList;日常开发90%场景优先ArrayList。6.HashMap的底层原理?JDK1.7和JDK1.8的区别?参考答案:HashMap是基于哈希表实现的键值对集合,无序、允许key和value为空、线程不安全,核心是数组+链表/红黑树结构,通过hash算法定位元素存储位置。JDK1.7底层结构:数组+单向链表,采用头插法插入元素。哈希冲突时,新元素插入链表头部。缺点是链表过长查询效率低,高并发下容易出现循环链表、数据丢失问题。JDK1.8优化:1.底层改为数组+单向链表+红黑树,当链表长度大于8且数组容量大于64时,链表转为红黑树,大幅提升查询效率;链表长度小于6时退回链表。2.插入方式改为尾插法,避免高并发循环链表问题。3.优化hash算法,减少哈希冲突概率。4.扩容时机、阈值计算逻辑优化,性能更稳定。默认初始容量16,负载因子0.75,达到容量*负载因子时触发扩容,扩容为原容量2倍。7.Java线程的生命周期有哪些状态?参考答案:Java线程一共5种核心状态:1.新建(NEW):创建线程对象后、未调用start()方法前,仅初始化对象,无线程执行资源。2.就绪(RUNNABLE):调用start()方法后,线程获取资源,等待CPU调度,随时可以执行。3.运行(RUNNING):CPU调度该线程,执行run()方法逻辑。5.终止(TERMINATED):线程代码执行完毕或异常终止,线程生命周期结束,无法再次启动。8.说说SpringIOC和AOP的核心原理?参考答案:IOC(控制反转):核心是把对象的创建、管理、依赖注入权限交给Spring容器,不再由开发者手动new对象。传统开发是开发者主动创建对象,IOC是容器主动注入依赖,实现组件解耦。核心实现是Bean工厂、配置解析、反射机制,Bean默认单例,容器启动时初始化。AOP(面向切面编程):基于动态代理机制,在不修改原有业务代码的前提下,对方法进行增强,实现日志记录、事务控制、权限校验、性能监控等通用功能。核心思想是横向拓展,抽取公共切面逻辑,复用代码。SpringAOP默认用JDK动态代理(接口代理),目标类无接口时使用CGLIB字节码代理。9.Spring事务的传播机制和隔离级别?参考答案:事务传播机制(7种,常用5种):用于解决多个事务方法嵌套调用的事务传递问题。1.REQUIRED(默认):当前有事务就加入,没有就新建事务;2.SUPPORTS:有事务就加入,无事务就非事务运行;3.MANDATORY:必须在事务内运行,无事务直接报错;4.REQUIRES_NEW:新建独立事务,暂停原有事务;5.NOT_SUPPORTED:始终非事务运行,挂起原有事务。事务隔离级别(4种):解决并发事务的脏读、不可重复读、幻读问题。1.READ_UNCOMMITTED:读未提交,存在三大问题,基本不用;2.READ_COMMITTED:读已提交,解决脏读,Oracle默认隔离级别;3.REPEATABLE_READ:可重复读,解决脏读、不可重复读,MySQL默认级别;4.SERIALIZABLE:串行化,解决所有问题,性能最低。二、Oracle数据库面试题(基础+SQL+优化+事务)1.Oracle和MySQL的核心区别?参考答案:1.授权与开源:Oracle商用闭源,收费,适合大型企业核心系统;MySQL开源免费,中小型项目、互联网项目首选。2.事务隔离:Oracle仅支持READ_COMMITTED、SERIALIZABLE两种隔离级别,默认读已提交;MySQL支持四种隔离级别,默认可重复读。3.锁机制:Oracle行级锁粒度更细,并发性能更强,无表锁升级问题;MySQLInnoDB可能出现行锁升级为表锁,并发弱于Oracle。4.数据结构:Oracle有表空间、用户、角色体系,权限管控更严谨;MySQL是库、表层级,结构简单。5.函数语法:Oracle序列自增、分页、字符串函数语法和MySQL不同,无limit分页,使用rownum分页。6.稳定性:Oracle高可用、高并发、数据一致性更强,适合金融、政务、大型国企核心业务。2.Oracle事务的四大特性及事务控制语句?参考答案:四大特性ACID:原子性:事务是最小执行单元,要么全部执行成功,要么全部回滚;一致性:事务执行前后,数据库数据状态保持合法一致,约束不被破坏;隔离性:多个并发事务相互隔离,互不干扰;持久性:事务提交后,数据永久落地,断电、重启不丢失。Oracle事务控制语句:1.COMMIT:提交事务,数据永久保存,释放锁资源;2.ROLLBACK:回滚事务,撤销所有未提交的修改;3.SAVEPOINT:设置保存点,支持局部回滚;4.SETTRANSACTION:设置事务属性、隔离级别。Oracle事务默认手动提交,执行DML语句(增删改)后需要手动commit,关闭会话、执行DDL语句会自动提交事务。3.Oracle常用函数有哪些?(字符串、日期、聚合)参考答案:字符串函数:1.SUBSTR(str,start,len):字符串截取,下标从1开始;2.INSTR(str,sub):查找子串位置;3.UPPER/LOWER:大小写转换;4.TRIM:去除首尾空格;5.CONCAT:字符串拼接。日期函数:1.SYSDATE:获取当前系统时间;2.TO_CHAR(date,format):日期转字符串;3.TO_DATE(str,format):字符串转日期;4.ADD_MONTHS:月份加减;5.MONTHS_BETWEEN:计算两个日期月份差。聚合函数:SUM、AVG、MAX、MIN、COUNT,聚合函数会自动忽略null值,COUNT(*)统计所有行数,包含null。4.Oraclerownum分页原理及正确分页写法?参考答案:Oracle没有limit关键字,分页依靠rownum伪列实现,rownum是查询结果生成后,动态分配的行号,从1开始递增。核心注意点:rownum只能用于<、<=、!=判断,直接使用>、>=无法查询出数据,因为行号是动态生成的,不满足条件的行会被剔除,行号重新排序。标准分页写法(查第N页,每页M条):SELECT*FROM(SELECTt.*,ROWNUMrnFROM表名tWHEREROWNUM<=结束行号)WHERErn>起始行号;示例:每页10条,查询第3页(21-30条)SELECT*FROM(SELECTt.*,ROWNUMrnFROMuser_infotWHEREROWNUM<=30)WHERErn>20;5.什么是索引?Oracle索引分类及失效场景?参考答案:索引是数据库优化查询的结构,类似书籍目录,能大幅降低查询IO,提升查询效率,会占用存储空间,降低增删改效率。Oracle常用索引分类:1.B树索引(默认):最常用,适合等值、范围查询;2.唯一索引:字段值唯一,禁止重复;3.复合索引:多个字段联合索引,遵循最左前缀原则;4.位图索引:适合低基数字段(性别、状态),读多写少场景;5.函数索引:基于函数计算结果建立索引,比如upper(name)。索引常见失效场景:1.索引列使用函数、运算(like'%xxx'、+、-、upper);2.隐式类型转换,字段类型和查询参数类型不匹配;3.使用isnull/isnotnull(部分场景失效);4.or连接无索引字段;5.复合索引不满足最左前缀原则;6.数据量极少、全表扫描比索引查询更快,数据库自动放弃索引。6.Oracle锁的分类?行锁和表锁的区别?参考答案:Oracle锁主要分为行级锁和表级锁,是保证并发数据一致性的核心。行级锁:DML操作(增删改)默认加行锁,只锁定操作的单条或多条数据,不影响其他行数据读写,并发性能高。事务提交或回滚后自动释放行锁。表级锁:锁定整张数据表,并发性能差,一般手动添加。常见场景:DDL语句自动加表锁、手动locktable、并发批量操作未走索引导致行锁升级表锁。核心区别:行锁粒度小、并发高、只锁当前操作数据;表锁粒度大、并发低、锁整表数据,其他所有操作阻塞。开发中必须避免无索引批量更新,防止行锁升级表锁导致系统卡顿。7.说说SQL优化的常用思路?参考答案:1.索引优化:高频查询字段建立索引,避免索引失效,遵循最左前缀原则,杜绝索引列运算、模糊前置匹配;2.SQL语句优化:避免select*,只查询需要字段;优先使用exists代替in,大表in效率极低;避免多余排序、去重;3.分页与批量优化:大数据量必须分页查询,禁止一次性查询全表数据;批量增删改使用批量操作,减少数据库交互次数;4.关联查询优化:多表关联小表驱动大表,关联字段建立索引,减少笛卡尔积;5.事务优化:缩短事务执行时间,避免长事务占用锁资源,减少并发阻塞;6.避免全表扫描:通过执行计划查看SQL执行方式,对全表扫描的SQL针对性加索引、优化条件。8.Oracle视图、序列、同义词的作用?参考答案:视图(View):是虚拟表,基于查询语句生成,不存储真实数据,数据来源于原表。作用:简化复杂多表查询、控制字段权限(隐藏敏感字段)、统一查询口径。序列(Sequence):Oracle自增主键生成器,独立于表存在,用于生成唯一连续数字,替代自增主键,适合批量生成主键ID,性能稳定。同义词(Synonym):表、视图、序列的别名,作用是简化长表名访问、跨用户跨库访问对象、隐藏真实表名,提升代码可读性和安全性。三、Java+Oracle联合实操面试题1.Java操作Oracle数据库的流程?MyBatis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年鞍山市铁西区社区网格员招录考试真题库及完整答案
- 2026年安宁疗护标准病房创建工作汇报
- 高三地理一轮复习教学设计:中亚区域地理整合与核心素养培育
- 七年级生物教案-2.1生物的基本单位 第3课时
- 2027年高三数学一轮复习教学设计:翻折模型中的探索与最值范围问题
- 高三英语一轮复习必修二Unit 1 Cultural Heritage语基默写教学设计
- 小学三年级英语Unit1-2整合教学设计
- 初中美术七年级上册 第六单元 传统纹样 第14课 传统纹饰的魅力 教学设计
- 小学五年级班队活动《开学第一课:心怀家国 笃行致远》教学设计
- 小学五年级英语《Great Inventions》教学设计
- 2026年国企竞聘案例分析题解题思路含答案
- 矿山地质课件
- 感染性疾病科医生进修汇报
- 泥浆清运合同(2025版)
- 睿达杯二试试题和答案
- 再别康桥混声四部合唱谱
- 内部工作流程优化调研表
- 《四川省汉源县岩窝沟铅锌、磷矿勘探实施方案》评审意见书
- 高中技术苏教必修1课件51方案的构思方法――手机支架的设计和制作共18张
- 2024年第六届全国农业行业职业技能大赛动物疫病防治员技能竞赛理论考试题库(含答案)
- 泥炭藓在土壤改良中的作用
评论
0/150
提交评论