- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
后端开发面试题及参考答案(无AI味·侧重实战)
一、Java基础(10题)
问:HashMap和ConcurrentHashMap的核心区别?实际开发中什么时候用后者?
答:HashMap线程不安全,扩容时会出现死循环(JDK1.7)或数据覆盖(JDK1.8);ConcurrentHashMap在JDK1.7用分段锁,1.8改用CAS+synchronized,支持高并发。实际开发中,只要有多个线程操作集合(比如接口并发查询缓存、多线程写入统计数据),就必须用ConcurrentHashMap,避免ConcurrentModificationException或数据错乱。
问:ArrayList和LinkedList的查询、插入删除效率对比?举个实际业务场景选择例子。
答:ArrayList基于数组,查询(get(index))O(1),插入删除(中间位置)O(n)(需复制数组);LinkedList基于双向链表,查询O(n),插入删除O(1)(只需改指针)。场景:做商品列表分页查询(频繁get)用ArrayList;做消息队列(频繁添加/删除头部元素)用LinkedList。
问:Java的线程池参数有哪些?核心线程数和最大线程数怎么设置?
答:核心参数:核心线程数、最大线程数、队列容量、空闲线程存活时间、拒绝策略。设置原则:CPU密集型任务(比如计算)核心线程数=CPU核心数+1;IO密集型任务(比如数据库查询、接口调用)核心线程数=CPU核心数*2,最大线程数根据并发峰值调整,队列容量避免过大导致内存溢出。
问:synchronized和Lock的区别?项目中怎么选?
答:synchronized是JVM层面锁,自动释放,不可中断,非公平锁;Lock是API层面,需手动lock/unlock,可中断,支持公平锁/非公平锁。项目中:简单场景(比如单例模式)用synchronized,代码简洁;复杂场景(比如需要超时获取锁、条件等待)用Lock(ReentrantLock),比如秒杀场景中控制并发抢单。
问:什么是Java内存模型(JMM)?volatile关键字有什么用?
答:JMM定义了线程和主内存之间的抽象关系,解决多线程可见性、原子性、有序性问题。volatile保证可见性(线程修改后立即刷回主内存,其他线程可见)和有序性(禁止指令重排),但不保证原子性(比如i++)。实际用例:单例模式的双重检查锁(防止指令重排导致的空指针)、状态标记位(比如线程停止标记)。
问:HashMap的扩容机制?JDK1.7和1.8有什么不同?
答:JDK1.7:数组容量达到阈值(负载因子0.75)时扩容为2倍,采用头插法,多线程下会形成循环链表;JDK1.8:扩容时用尾插法避免循环,且扩容时元素迁移更高效(通过位运算判断元素位置),同时当链表长度超过8会转为红黑树,提升查询效率。
问:Java的垃圾回收机制?常用的GC算法有哪些?
答:GC是回收堆中不再使用的对象,释放内存。常用算法:标记-清除(效率低,有碎片)、复制算法(无碎片,浪费空间,用于新生代)、标记-整理(无碎片,效率中等,用于老年代)、分代收集(新生代用复制,老年代用标记-整理)。实际项目中,通过JVM参数(-Xms/-Xmx)设置堆大小,避免频繁GC影响性能。
问:什么是线程死锁?怎么避免?
答:死锁是两个或多个线程互相持有对方需要的锁,导致无限等待。必要条件:资源互斥、持有并等待、不可剥夺、循环等待。避免方式:按固定顺序获取锁(比如先获取A锁再获取B锁)、设置锁超时(tryLock(time))、减少锁持有时间(锁内不做耗时操作)。
问:接口和抽象类的区别?Java8中接口有什么新特性?
答:接口是抽象方法的集合,只能有publicstaticfinal变量,类可实现多个接口;抽象类可有抽象方法和普通方法,变量可非静态,类只能继承一个抽象类。Java8接口新增默认方法(default关键字)和静态方法,允许接口有具体实现,比如Collection接口的stream()方法。
问:String、StringBuffer、StringBuilder的区别?
答:String不可变(每次修改创建新对象),效率低;StringBuffer线程安全(方法加synchronized),效率中等;StringBuilder线程不安全,效率最高。场景:字符串拼接少用String;多线程环境(比如日志拼接)用StringBuffer;单线程环境(比如业务逻辑字符串处理
您可能关注的文档
最近下载
- TCESA 1249.2-2023 服务器及存储设备用液冷装置技术规范 第2 部分:连接系统.pdf VIP
- 心房扑动学习课件.pptx VIP
- 超全汇总!建设工程材料见证取样手册,覆盖钢结构、幕墙、消防、市政工程材料....docx VIP
- EPC工程总承包联合体协议(示范文本).docx VIP
- 2025年房地产经纪人商业地产供需变化专题试卷及解析.pdf VIP
- 四川青白江区国有资产投资经营有限公司招聘笔试题库2025.pdf
- 基于多传感器融合的跑步姿态人体动作捕捉与力学分析算法研究.pdf VIP
- 《机械制造工艺(同济版)》章节练习题及答案.docx VIP
- 雨课堂东南大学领导力素养课后习题及单元测试答1.docx VIP
- 环形天线和倒T型天线的发射接收原理.pdf VIP
原创力文档


文档评论(0)