广州华软科技 Java开发一面面经
《面试题目》
- 自我介绍
- 项目经验:是否为教程项目,是否有落地经验,负责的具体模块及实现细节
- 前端技术:Vue2与Vue3的区别
- 个人意向:对实习的期望
- 网络协议:协议的基本概念
- 缓存技术:缓存穿透的解决方案、布隆过滤器的原理、哈希的概念及应用场景
- 基础能力:校内课程学习情况
- 行业看法:AI对程序员的冲击与理解
- 数据库:MySQL存储引擎、聚簇索引定义、主键生成策略(自增的优缺点)、项目中的ID设计
- 数据结构:左旋的概念及其用途
- 场景题:淘宝双十一秒杀与12306抢票的难度对比及原因
- 反问环节:业务性质及对AI的态度
《参考解析》
- 缓存穿透与布隆过滤器:缓存穿透指查询不存在的数据导致请求压垮DB。解决方案包括缓存空对象或使用布隆过滤器。布隆过滤器利用位数组和多个哈希函数快速判断元素是否存在,具有空间高效但存在误判(非删除)的特点。
- MySQL聚簇索引:聚簇索引将数据行存放在索引树的叶子节点中,一张表只能有一个,通常是主键。其优势是范围查询和主键查找速度极快,但也带来了插入性能开销(若主键非递增会导致页分裂)。
- 主键生成策略:自增主键易于存储但由于存在全局锁可能成为瓶颈,且在分库分表时易冲突。替代方案包括UUID(占用空间大、无序)、雪花算法(分布式生成、趋势递增)等。
- 左旋(AVL/红黑树):左旋是二叉搜索树进行平衡操作的一种方式,通过将节点右子节点提升为父节点,降低右子树高度,用于维持树的平衡,确保查找复杂度为O(log n)。
- 高并发场景对比:12306难度更高。核心在于库存强一致性(不能超卖)以及极端的不均匀流量(固定时刻秒杀 vs 12306复杂的余票查询与复杂的车次/座席组合逻辑)。