- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Java后端面试题及答案
问:Java中的==和equals有什么区别?
答:==对于基本数据类型来说,比较的是值;对于引用数据类型,比较的是对象的内存地址。equals本质上就是==,但很多类重写了equals方法,比如String类,重写后比较的是对象的值。比如abc==newString(abc)结果是false,因为内存地址不同,而abc.equals(newString(abc))结果是true,因为比较的是值。
问:ArrayList和LinkedList有哪些主要区别?
答:ArrayList底层是动态数组,LinkedList底层是双向链表。从查询效率看,ArrayList通过索引访问,时间复杂度是O(1),比LinkedList的O(n)快。从增删效率看,LinkedList在中间插入或删除元素时,只需修改前后节点的引用,效率比ArrayList高,因为ArrayList可能需要移动大量元素。另外,ArrayList的内存占用主要是数组本身,LinkedList每个节点还要存储前后节点的引用,内存开销更大些。
问:什么是线程安全?Java中哪些集合是线程安全的?
答:线程安全就是多个线程同时操作一个对象时,不会出现数据不一致或其他异常情况。Java中线程安全的集合有Vector、Hashtable,还有Collections工具类包装后的集合,比如Collections.synchronizedList(List)得到的集合。另外,ConcurrentHashMap、CopyOnWriteArrayList这些并发集合也是线程安全的,它们在高并发场景下性能比传统的线程安全集合好。
问:HashMap的工作原理是什么?JDK1.8之后有哪些改进?
答:HashMap底层是数组加链表(JDK1.8后加了红黑树)实现的。它通过key的hashCode计算哈希值,再通过扰动函数和取模运算确定元素在数组中的位置。如果发生哈希冲突,就把元素放到链表中。当链表长度超过8,且数组长度大于等于64时,链表会转为红黑树,以提高查询效率。JDK1.8的改进主要有:哈希冲突解决方式从先链表后红黑树变为当链表长度达标后转红黑树;扩容时元素的迁移方式优化,不需要重新计算哈希值;扰动函数的次数减少,提高了效率。
问:SpringIoC是什么?它有什么作用?
答:SpringIoC就是控制反转,是一种设计思想。传统开发中,对象的创建和依赖关系的管理由开发者自己控制,而IoC把这些工作交给了Spring容器。比如原来需要自己new一个对象,现在由Spring容器来创建并管理。它的作用很明显,降低了对象之间的耦合度,让代码更灵活,便于测试和维护,开发者可以更专注于业务逻辑的实现。
问:SpringAOP的理解,以及它的主要应用场景?
答:AOP是面向切面编程,它能在不修改原有代码的情况下,给程序动态添加功能。它把那些与业务无关,但多个业务模块都需要的功能,比如日志、事务、权限校验等,抽离出来形成切面,然后在需要的地方切入。主要应用场景有:日志记录,在方法执行前后记录日志;事务管理,保证方法执行的事务一致性;权限控制,在方法执行前检查权限;异常处理,统一处理方法抛出的异常等。
问:MySQL中索引的作用是什么?哪些情况下索引会失效?
答:索引就像书的目录,能加快查询速度,通过索引可以快速定位到数据所在的位置,减少磁盘I/O操作。但索引也不是万能的,有些情况会失效。比如使用了函数或表达式操作索引列,像whereSUBSTR(name,1,3)=abc;使用不等于(!=、)、notin、isnotnull等操作符;模糊查询以%开头,比如wherenamelike%abc;索引列参与了运算,比如whereid+1=10;还有当MySQL判断全表扫描比使用索引快时,也会放弃索引。
问:Java中的垃圾回收机制是什么?常见的垃圾收集算法有哪些?
答:垃圾回收机制是JVM自动管理内存的一种机制,它会识别并回收不再被使用的对象所占用的内存。常见的垃圾收集算法有:标记-清除算法,先标记需要回收的对象,然后清除它们,会产生内存碎片;复制算法,将内存分为两块,只使用其中一块,回收时把存活对象复制到另一块,避免碎片,但内存利用率低;标记-整理算法,标记后将存活对象移到一端,然后清除端外内存,适合老年代;分代收集算法,根据对象存活周期不同分代,新生代用复制算法,老年代用标记-整理或标记-清除算法。
问:什么是事务?事务的ACID特性指什么?
答
文档评论(0)