2026-10-23 15:47:52
飞猪Java一面面经总结如下:
一、基础背景与项目引入自我介绍
需简洁清晰,涵盖教育背景、技术栈、项目经历及个人优势,非科班需强调自学能力与项目实践。
数据结构课程学习情况
非科班需说明自学路径(如书籍、在线课程),重点提及掌握的核心数据结构(如链表、树、图)及算法(如排序、搜索)。
项目整体介绍
需从业务背景、技术选型、架构设计、核心功能模块等维度展开,突出个人贡献与解决的问题。
MySQL主从复制
原理:主库记录二进制日志(binlog),从库通过I/O线程拉取日志并重放(SQL线程),实现数据同步。
作用:读写分离、数据备份、负载均衡。
配置要点:主库开启binlog,从库配置CHANGE MASTER TO指定主库地址与日志位置。
主从表配置细节
需说明项目中如何设计主表(如用户表)与从表(如订单表)的关联关系,包括外键约束、索引优化及分库分表策略(如按用户ID哈希分片)。
多环境配置管理
场景:生产环境与测试环境需隔离配置(如数据库连接、API地址)。
实现方式:通过配置文件(如application.properties或application.yml)区分环境,或使用Spring Profile动态切换配置。
项目难点功能实现
ES+MQ缓存方案:
ES作用:存储结构化数据(如商品信息),支持快速检索。
MQ作用:异步解耦(如订单创建后通过MQ通知库存服务),提升系统吞吐量。
缓存策略:热点数据缓存至Redis,全文检索依赖ES,MQ处理异步任务。
ES索引管理
索引类型:单字段索引、复合索引、全文索引。
添加方式:通过API(如Put Index API)或映射文件(Mapping)定义索引结构,动态映射可自动识别字段类型。
MQ异常处理机制
常见问题:消息堆积、重复消费、消息丢失。
解决方案:
消息堆积:增加消费者数量、优化消费逻辑(如批量处理)。
重复消费:通过唯一ID去重或幂等设计(如数据库唯一约束)。
消息丢失:启用持久化(如RabbitMQ的durable队列)或事务机制。
Redis缓存应用场景
缓存类型:热点数据缓存(如用户会话)、分布式锁、计数器。
淘汰策略:LRU、LFU、TTL过期淘汰。
Redis部署模式
单机模式:适用于开发测试环境。
集群模式:主从复制+哨兵(高可用)或Cluster分片(扩展性),需说明分片规则(如哈希槽)。
ES与Redis缓存选型依据
ES:适合全文检索、复杂查询(如多条件组合)。
Redis:适合简单键值查询、高并发读写(如缓存击穿防护)。
NIO与BIO对比
BIO:同步阻塞,每个连接需独立线程,适合连接数少的场景。
NIO:同步非阻塞,通过Channel+Buffer+Selector实现多路复用,适合高并发(如Netty框架)。
Java集合框架
List:ArrayList(动态数组)、LinkedList(链表)。
Set:HashSet(哈希表)、TreeSet(红黑树)。
Map:HashMap(哈希表)、TreeMap(红黑树)、ConcurrentHashMap(分段锁)。
线程安全集合
Vector、Hashtable(方法级同步,性能低)。
ConcurrentHashMap(分段锁/CAS+synchronized)、CopyOnWriteArrayList(写时复制)。
线程池与阻塞队列
线程池参数:核心线程数、最大线程数、队列容量、拒绝策略(如AbortPolicy)。
阻塞队列类型:ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、PriorityBlockingQueue(优先级)。
阻塞队列过长的影响
内存溢出:队列无限增长导致OOM。
响应延迟:任务排队时间增加,降低系统吞吐量。
解决方案:设置队列上限、动态扩容、优化任务处理逻辑。
未来规划
短期:深耕Java后端开发,熟悉分布式系统设计。
长期:向全栈或架构师方向发展,关注云原生、AI工程化等前沿领域。
学习目标
技术深度:掌握JVM调优、高并发编程、微服务治理。
技术广度:学习Go/Python等语言,了解大数据、DevOps工具链。
面试围绕项目实战与Java核心知识展开,需重点准备分布式系统设计(如缓存、消息队列、数据库)、Java并发编程(线程池、集合)及问题排查能力(如MQ异常处理)。非科班需通过项目证明技术能力,科班生需突出底层原理理解。