- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
2025年高频java计算机面试试题及答案
Q:Java中String、StringBuilder、StringBuffer的核心区别是什么?实际开发中如何选择?
A:String是不可变类,内部通过final修饰的char数组存储字符(JDK9后改为byte数组),任何修改操作都会提供新的String对象。StringBuilder和StringBuffer继承自AbstractStringBuilder,内部使用可变的char数组(非final),支持动态扩容。两者的主要区别在于线程安全:StringBuffer的方法使用synchronized修饰,保证线程安全;StringBuilder未做同步,性能更高但非线程安全。
实际开发中,若字符串无需修改(如常量、参数),优先用String;单线程下频繁拼接字符串(如循环内),用StringBuilder;多线程环境(如共享字符串构建),用StringBuffer。需注意String的“+”操作在编译时会优化为StringBuilder,但在循环中可能因重复创建对象导致性能问题,此时应显式使用StringBuilder。
Q:Java中自动装箱与拆箱的底层实现机制是什么?可能引发哪些问题?
A:自动装箱是将基本类型转换为对应包装类的过程,由编译器调用valueOf()方法实现(如Integer.valueOf(int));拆箱是将包装类转换为基本类型,调用xxxValue()方法(如Integer.intValue())。例如,Integeri=10(装箱)等价于Integeri=Integer.valueOf(10);intj=i(拆箱)等价于intj=i.intValue()。
常见问题包括:①包装类的缓存范围(如Integer缓存-128~127),超出范围时valueOf()会新建对象,导致“==”比较结果不符合预期(如newInteger(127)==Integer.valueOf(127)为false);②空指针异常,若包装类对象为null时拆箱会抛出NPE(如Integeri=null;intj=i);③性能损耗,频繁装箱拆箱会增加内存占用和GC压力,尤其在循环或高频方法中。
Q:HashMap在JDK1.7与1.8中的实现有哪些核心差异?为什么引入红黑树?
A:核心差异包括:①底层结构:1.7使用数组+链表,1.8改为数组+链表+红黑树(当链表长度≥8且数组长度≥64时,链表转换为红黑树;长度≤6时回退为链表);②扩容机制:1.7采用头插法(新节点插入链表头部),多线程下可能导致循环链表;1.8改用尾插法,避免此问题;③哈希计算:1.7通过9次扰动(4次位运算+5次异或),1.8简化为2次(hash=key.hashCode()^(hash16)),减少计算开销;④扩容条件:1.7在插入前检查是否需扩容,1.8在插入后检查。
引入红黑树是为了优化链表过长时的查询效率。链表的时间复杂度为O(n),当n较大时(如链表长度8),查询性能下降;红黑树的时间复杂度为O(logn),能有效降低查找、插入、删除的时间。选择红黑树而非平衡二叉树(如AVL树)是因红黑树的旋转、翻转操作更少,整体性能更优。
Q:ConcurrentHashMap如何实现线程安全?JDK1.8相比1.7有哪些改进?
A:1.7中,ConcurrentHashMap采用分段锁(Segment)机制,继承ReentrantLock,默认16个Segment,每个Segment管理一个链表数组。锁的粒度是Segment,不同Segment可并行操作,并发度为Segment数量。
1.8中,ConcurrentHashMap摒弃分段锁,改用CAS+synchronized实现线程安全:①数组节点(Node)用volatile修饰,保证可见性;②插入元素时,若数组为空则CAS初始化;若节点为空则CAS插入;若节点不为空则用synchronized锁住该节点(链表头或红黑树根),避免锁住整个数组;③扩容时采用“协助扩容”机制,多线程可共同迁移数据,提升扩容效率。
改进点包括:①锁粒度更细(从Segment到单个节点),并发度更高;②移除ReentrantLock,使用synchronized(JVM对synchronized优化后性能接近Lock),减少内存开销;③红黑树结构提升冲突时的操作效率;④扩容支持多线程协作,降低单线程扩容的耗时。
Q:Java线程的生命周期有哪些状态?各状态间如何转换?
A:Java线程状态由Thread.State枚举定义,共6种:
1.NEW:线
您可能关注的文档
- (2025年)巴音郭楞蒙古自治州和硕县辅警招聘公安基础知识考试题库及答案.docx
- (2025年)澄城县直机关公开遴选公务员笔试题及答案解析.docx
- (2025年)德州市德城区社区网格员招录考试真题库及完整答案.docx
- (2025年)定西市检察院书记员考试试题及答案.docx
- (2025年)甘南藏族自治州辅警招聘考试题库 (答案+解析).docx
- (2025年)工程测量员中级考试模拟题含答案.docx
- (2025年)广东省惠州市教师职称考试(理论知识)在线模拟题库及答案.docx
- (2025年)桂林市秀峰区辅警招聘考试试题库带答案.docx
- (2025年)过敏性休克试题(+答案).docx
- (2025年)黑山县人大机关遴选试题及答案.docx
- 主题课程整理大班上.doc
- 2026人教版小学语文三年级上册期末综合试卷3套(打印版含答案解析).docx
- 2026人教版小学语文四年级下册期末综合试卷3套(打印版含答案解析).docx
- 2026人教版小学二年级上册数学期末综合试卷精选3套(含答案解析).docx
- 2026人教版小学语文四年级上册期末综合试卷3套(含答案解析).docx
- 2026人教版小学二年级下册数学期末综合试卷3套(打印版含答案解析).docx
- 2026年地理信息行业年终总结汇报PPT.pptx
- 板块四第二十一单元封建时代的欧洲和亚洲 中考历史一轮复习.pptx
- 中考历史一轮复习:板块四第二十单元古代亚、非、欧文明+课件.pptx
- 第二次工业革命和近代科学文化中考历史一轮复习.pptx
原创力文档


文档评论(0)