2026-10-18 05:23:14
三七互娱2019秋招提前批Java服务端面经核心内容总结如下:
面试整体体验面试氛围轻松,面试官友好,全程以交流形式展开,多次出现互动笑声。面试前公司会提前通知安排,体验较好。
技术问题覆盖范围及回答要点
秒杀系统与SQL优化
优化SQL执行顺序的常见方法:调整查询条件顺序、减少全表扫描、合理使用索引(如覆盖索引)、避免索引失效(如避免在索引列上使用函数或运算)。
优化目的:减少数据库资源消耗(CPU、IO)、提升查询效率、降低响应时间,尤其在秒杀场景下需应对高并发请求。
多线程与线程池
线程创建的三种方式:继承Thread类、实现Runnable接口、通过Callable+FutureTask(可获取返回值)。
创建可取消线程的方法:通过标志位(如volatile变量)控制线程执行逻辑,或使用Future.cancel(true)中断线程。
线程池核心线程数确定原则:
CPU密集型任务:核心线程数 = CPU核心数 + 1(减少线程切换开销)。
IO密集型任务:核心线程数 = CPU核心数 × 2(利用线程等待IO的时间处理其他任务)。
线程死锁原因:互斥条件、持有并等待、不可抢占、循环等待同时满足。
字符串处理类
StringBuilder与StringBuffer区别:
StringBuffer线程安全(方法加synchronized),性能较低;StringBuilder非线程安全,性能更高。
使用场景:单线程高频操作字符串用StringBuilder,多线程环境用StringBuffer。
垃圾回收算法
常见算法:复制算法、标记-清除、标记-整理。
新生代垃圾回收算法:清除-复制(原因:新生代对象存活率低,复制算法效率高,且可避免内存碎片)。
MySQL事务与隔离机制
事务特性:ACID(原子性、一致性、隔离性、持久性)。
隔离级别:读未提交、读已提交、可重复读、串行化(需说明不同级别下的问题,如脏读、不可重复读、幻读)。
Python爬虫相关(根据简历提问)
URL去重方案:
小规模数据:使用Set集合。
亿级数据:布隆过滤器(允许小概率误判,节省内存)。
反爬策略:代理IP池、验证码识别(如极验)、请求头模拟、控制爬取频率。
面试技巧与建议
沟通技巧:面试是双向交流,需理解面试官问题意图,避免答非所问。例如,回答URL去重时,需根据数据规模动态调整方案(从Set到布隆过滤器)。
心态调整:将每次面试视为复习机会,保持轻松状态,即使遇到不熟悉的问题也可坦诚交流。
知识延伸:部分问题需结合实际场景(如秒杀系统优化),需体现对技术原理的深入理解,而非单纯背诵概念。
其他细节
面试官未提问Redis相关内容,作者略感遗憾,但整体面试体验积极。
强调对技术社区资源(如牛客网、左神课程)的感谢,体现持续学习意识。