- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Java技术高频面试题及答案(企业实战版)
一、Java基础核心
问:int和Integer有什么区别?实际开发中什么时候会踩坑?
答:int是基本类型,占4字节,默认值0;Integer是包装类,本质是对象,默认值null。
踩坑点:一是自动装箱拆箱的NPE问题,比如Integera=null;intb=a;会抛空指针;二是缓存池问题,Integerx=127;Integery=127;x==y为true(缓存-128~127),但128时为false,项目里比较值建议用equals()。
问:Override和Overload的区别?重写时要注意什么?
答:Override是子类重写父类方法,方法名、参数列表、返回值完全一致(子类返回值可窄化),访问权限不能更严格;Overload是同一类中方法名相同、参数列表不同(个数/类型/顺序),返回值无关。
重写注意:必须加@Override注解(避免拼写错),父类方法不能是private(否则子类是新方法不是重写),异常声明不能扩大(比如父类抛IOException,子类不能抛Exception)。
二、集合框架
问:HashMap和ConcurrentHashMap的区别?JDK1.8里ConcurrentHashMap做了哪些优化?
答:HashMap线程不安全,多线程put可能导致死循环(JDK1.7链表扩容时)或数据覆盖;ConcurrentHashMap是线程安全的。
JDK1.8优化:①放弃分段锁(Segment),改用CAS+synchronized(只锁链表头/红黑树根节点),并发度更高;②底层结构和HashMap一致(数组+链表+红黑树),链表转红黑树阈值8,退化为链表6;③支持原子操作如putIfAbsent(),避免手动加锁。
问:ArrayList和LinkedList怎么选?实际项目中用哪个多?
答:ArrayList底层数组,查改快(索引访问O(1))、增删慢(需复制数组);LinkedList底层双向链表,增删快(改指针O(1))、查改慢(遍历O(n))。
项目里ArrayList用得更多:一是大部分场景是查改操作,二是LinkedList遍历效率低(即使遍历也建议用迭代器,别用get(i)),除非明确是频繁在首尾增删(比如实现队列)。
三、JVM与性能优化
问:项目里怎么排查内存泄漏?举个实际案例
答:常用工具:JDK自带jmap(dump内存快照)、jhat(分析快照),或Arthas(线上实时查看)。
案例:之前做电商项目,订单列表查询后用staticArrayList存历史数据,没及时清理,导致老年代内存持续上涨。排查步骤:①用jstat-gc看老年代使用率,发现持续100%;②jmap-dump:format=b,file=heap.hprof进程号导出快照;③用jhat分析,发现ArrayList对象占用60%内存,引用链指向static变量;④改成本地缓存(如Caffeine)并设置过期时间,问题解决。
问:GC垃圾收集器你项目里用的哪个?怎么配置参数的?
答:后端服务用G1收集器(JDK1.8默认是Parallel,但G1适合大内存低延迟)。
核心配置:-Xms4g-Xmx4g(堆大小固定,避免频繁扩容)、-XX:+UseG1GC(启用G1)、-XX:MaxGCPauseMillis=200(目标停顿时间200ms)、-XX:InitiatingHeapOccupancyPercent=45(堆占用45%触发混合收集)。
为什么这么配?因为服务是金融交易系统,要求低延迟,G1的Region分块回收能更好控制停顿时间,之前用Parallel时偶尔会有1秒以上GC停顿,改G1后稳定在200ms内。
四、Spring框架
问:SpringBean的生命周期?实际项目中怎么自定义初始化逻辑?
答:生命周期核心流程:实例化(new对象)→属性注入(setter/构造器)→初始化前(BeanPostProcessor.postProcessBeforeInitialization)→初始化(init-method/@PostConstruct)→初始化后(BeanPostProcessor.postProcessAfterInitialization)→就绪→销毁(destroy-method/@PreDestroy)。
自定义初始化:常用
您可能关注的文档
最近下载
- 统编版初中历史七年级上册第4课 夏商西周王朝的更替 课件.pptx
- 小学语文教师的素养与素养.docx VIP
- 现代综合评价方法与案例精选-课件配套教材.ppt VIP
- 2025秋冀人版(2024)科学二年级上册第一单元《寻找宝物》教学设计.docx VIP
- 造价咨询项目专业技术力量及配备计划.docx VIP
- 1.2 寻找宝物(教学设计)科学冀人版二年级上册(新教材).docx VIP
- 教科版小学科学二年级上册教学课件全册(2025新教材).pptx
- 1.2 寻找宝物(教学设计)科学冀人版二年级上册(新教材).pdf VIP
- 驾照考试科目一试题1000题(含标准答案).pdf VIP
- 肝硬化失代偿期患者的护理.docx VIP
文档评论(0)