中级Java工程师面试题及答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

中级Java工程师面试题及答案

一、JVM相关

问题:JDK1.8后JVM内存区域划分有哪些?元空间和永久代的核心区别是什么?

答案:内存区域分线程共享区(堆:新生代Eden/Survivor、老年代;元空间)和线程私有区(程序计数器、虚拟机栈、本地方法栈)。

元空间和永久代区别:①位置:元空间在本地内存,永久代在JVM堆;②内存限制:元空间默认无上限(可配置),永久代有固定大小易OOM;③存储内容:元空间存类元信息,永久代还存常量池(1.7后常量池移到堆)。

问题:实际项目中如何选择GC收集器?比如CMS和G1的适用场景有哪些?

答案:选GC需结合业务(响应时间/吞吐量)和硬件:

CMS:优先保证响应时间,适合Web服务(如电商接口),通过“标记-清除”减少STW,但会产生内存碎片,内存碎片多后需FullGC;

G1:适合大堆(4G以上)、追求低延迟且均衡吞吐量的场景(如金融交易系统),基于“区域划分”实现增量回收,可预测STW时间,内存碎片少。

二、Java集合

问题:JDK1.8的HashMap为什么线程不安全?ConcurrentHashMap是如何解决线程安全问题的?

答案:HashMap线程不安全体现在:①扩容时链表反转导致死循环(1.7);②多线程put时可能覆盖数据(1.8仍存在)。

ConcurrentHashMap(1.8)解决方式:①摒弃1.7的分段锁,用“CAS+synchronized”实现细粒度锁;②数组元素为Node时用CAS更新,为TreeNode时用synchronized锁节点,减少锁竞争;③volatile修饰节点值,保证可见性。

问题:ArrayList和LinkedList的插入、查询性能差异,实际开发中怎么选?

答案:①查询:ArrayList基于数组,随机访问(get(i))O(1),LinkedList基于双向链表,查询需遍历O(n),查多场景选ArrayList;②插入:ArrayList尾部插入O(1),中间插入需移动元素O(n);LinkedList任意位置插入O(1)(需先找到节点O(n),除非已知前驱节点),频繁中间插入且查询少选LinkedList(如实现队列/栈)。

三、并发编程

问题:线程池核心参数有哪些?实际项目中如何配置核心线程数(比如CPU密集型和IO密集型任务)?

答案:核心参数:核心线程数、最大线程数、空闲线程存活时间、工作队列、拒绝策略。

配置原则:①CPU密集型(如计算任务):核心线程数=CPU核心数+1(减少线程切换);②IO密集型(如DB/HTTP请求):核心线程数=CPU核心数×2(利用CPU空闲时间,如等待IO时线程可处理其他任务)。

问题:volatile关键字能保证原子性吗?举个例子说明,它和synchronized的核心区别是什么?

答案:volatile不能保证原子性,比如inti=0;i++(分读取、加1、写入三步,多线程下会出现计数不准)。

与synchronized区别:①原子性:synchronized能保证,volatile不能;②可见性:两者都能保证;③有序性:volatile禁止指令重排序,synchronized通过排他锁保证;④性能:volatile轻量级(无锁),synchronized是重量级锁(1.6后优化为偏向锁/轻量级锁)。

四、Spring框架

问题:SpringBean的生命周期中,初始化和销毁阶段有哪些扩展方式?BeanPostProcessor的作用是什么?

答案:初始化扩展:①实现InitializingBean接口(afterPropertiesSet方法);②配置init-method属性;③@PostConstruct注解。

销毁扩展:①实现DisposableBean接口(destroy方法);②配置destroy-method属性;③@PreDestroy注解。

BeanPostProcessor作用:Bean实例化、属性注入后,初始化前后的“增强处理器”,比如AOP动态代理就是通过BeanPostProcessor(AnnotationAwareAspectJAutoProxyCreator)在初始化前生成代理对象。

问题:Spring事务传播机制中,REQUIRED和REQUIRES_NEW的区别?举个实际业务场景说明。

答案:①REQUIRED:如果当前有事务则加入,无则新建(默认);②REQUIR

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档