八股基础-MySQL
基础慢查询
聚合查询 - 新增临时表
多表查询 - 优化 sql 语句
表数据量过大查询 - 添加索引
深度分页查询 - 覆盖查询 + 子查询
如何定位?
工具: Arthas Skywalking
MySQL 慢日志:/var/lib/mysql/localhost-slow.log
语句执行分析explain select / desc
possible_key 可能用到的索引
key 实际命中的索引 => 是否命中索引
key_len 索引占用大小
extra 额外优化建议:
Using where; Using index;
Using index condition 回表查询
type 展示性能(由好到差)
NULL / system
const 根据主键查询
eq_ref 主键索引查询或唯一索引查询
ref 索引查询
range 范围查询
index 索引树扫描 - 需要优化
all 全盘扫描 - 需要优化
面试经验-京东一面
前言体现系统思维和软工底蕴的一集。
内容自我介绍介绍一下项目主要是做什么的那我们就根据你的简历一步一步来
Session 怎么设计的Redis 数据结构怎么使用的ZSet 底层数据结构缓存击穿和缓存穿透RocketMQ 主要起什么作用RocketMQ 事务死信队列使用场景DDD 怎么做的JAVA 八股concurrentHashMapJVM 内存上升,怎么排查可重入锁索引下推怎么学习的学习之余喜欢做些什么RocketMQ 的异步消息和观察者模式有什么区别反问业务看重应届生什么能力适应与理解
八股基础-开发框架
内容Spring IOC
谈谈你对 Spring IOC(控制反转)和 DI(依赖注入)的理解。
IOC(控制反转): 是一种设计思想,实际上就是将程序主动创建、管理对象的控制权交给 Spring 容器统一管理。这样一来就不用关注对象创建管理流程,实现了对象之间的解耦。
DI(依赖注入): 是实现 IOC 的一种方式。它是由容器在运行时动态地将依赖关系注入到组件之中。Spring 主要通过构建函数注入、Setter 方法注入和字段注入方式实现。
Spring 的 IOC 容器是如何工作的?
IOC 容器工作流程/Bean 对象生命周期:
资源定位(BeanDefinition 定位): 容器找到配置文件(application.xml)或注解(@Configration),准备进行解析;
加载解析(BeanDefinition 载入和解析): 将配置信息解析成 BeanDefinition 对象,这个对象定义了 Bean 的所有元数据 (类名、作用域、属性值、初始化方法等)。BeanDefinition是 IOC 容器管理对象的基础。
注册(BeanDefinition 的注 ...
八股基础-JAVA
前言感觉八股背诵的针对性不强,来对简历里面已写的进行一个排查。
专业技能描述掌握 Java 语法,熟悉集合、反射、IO,了解 JUC 并发编程,熟悉 JVM 垃圾回收、内存模型,熟悉线程池原理,掌握常⻅的设计模式。
内容集合
HashMap 的底层实现原理是什么?JDK 1.8 做了哪些重要优化?HashMap 是线程安全的吗?如果不安全,有哪些替代方案?
原理:数组 + 链表/红黑树。通过 key 的 hashCode() 计算哈希值,再通过扰动函数(高 16 位异或低 16 位)和 (n-1) & hash 确定数组下标。哈希冲突时,JDK 1.7采用头插法形成链表,JDK 1.8 采用尾插法。当链表长度超过阈值(默认 8)且数组长度 >= 64 时,链表转化为红黑树(提升查找效率);当红黑树节点数小于阈值(默认 6)时,退化为链表。
JDK 1.8 优化:
数据结构: 引入红黑树,解决长链表查询效率低的问题(O(n) -> O(log n))。
插入方式: 链表由头插法改为尾插法(避免多线程扩容时可能的死循环问题,虽然 HashMap 本身线程不安全) ...
面试经验-拼多多一面
前言比较体现自身能力的一次面试,项目问的比较多,对答如流,但八股问的比较少而且我都不会。
内容自我介绍
学校背景
有较长时间实习经历
通过读文档、源码很快适应工作
合作完成中期交付并上线
工作之余我还参加了一些比赛,考了一些证件
介绍一下项目主要是做什么的
核心目标
主要功能
使用的技术
看到你们有用到 Redis,是怎么集成进去的,用的什么缓存策略
旁路缓存
主要存了一些,没必要持久化的状态变量
功能背景
使用了 String 存了点赞数、Hash 存了直播间状态变量、ZSet 存了直播消息、弹幕、举手等用 timestamp 作为 score
举例子
我看到你说使用了 Session,主要存放的是什么,知道 JWT 吗
因为 JWT 是携带 token,每次访问 API 都要从数据库中拿用户数据,如果分表了就时间比较长,对用户不友好
Session 存放的是用户登录数据,因为我们有个泛在化学习空间
功能背景
需要存放一些要同步的数据
文档光标协同这个是怎么做的
从直播间 Hash 中有一个文档 ID,然后去 Redis 中重新找一下 ZSet
每个用户每输入一次就需要更改 ...
面试模拟-基础知识
面试官: 最后问几个基础原理问题,确认一下你的底层知识:
JUC 并发Q1. ConcurrentHashMap 在 Java 8 中是如何保证线程安全的?
Q2. 它与 synchronized 锁整个 Map 相比优势在哪里?
Q3. putVal 方法大致流程?
JVM 内存Q1. 老年代发生 Full GC 的触发条件可能有哪些?
A1. 年代空间不足(Promotion Failed)或 Metaspace 溢出。
Q2. 如何从 JVM 参数和代码层面尽量避免频繁 Full GC?
Redis 持久化Q1. RDB 和 AOF 持久化方式的主要区别是什么?各自的优缺点?
Q2. 如果同时开启,Redis 重启时如何加载数据?
RocketMQ 存储Q1. RocketMQ 是如何保证消息持久化且能高效读写的?(CommitLog, ConsumeQueue 的设计思想)
MySQL 索引Q1. 有一个查询 SELECT * FROM orders WHERE user_id = 100 AND status = ‘SHIPPED’ ORDER BY create_time ...
面试模拟-架构演进与DDD实践
内容面试官: 你提到主导了直播与互动教室核心服务的架构演进,引入了 DDD 和基于 Docker 的水平伸缩。
DDD 实践与限界上下文划分依据你提到用 DDD 解耦了信令、媒体流、状态同步服务。假设在“举手提问”场景中:
Q1. 信令服务(处理举手请求)、媒体流服务(调整视频流焦点)、状态同步服务(广播举手状态)之间的数据流如何设计?
Q2. 这三个服务的领域模型(实体/值对象)具体包含哪些属性?它们之间的上下文映射(如防腐层)如何实现?
微服务拆分权衡Q1. 媒体流服务若进一步拆分为“视频编解码”和“传输控制”两个微服务,你认为是否合理?请从 CAP 理论(一致性 vs 可用性)和部署成本(资源占用、运维复杂度)角度分析利弊。
水平伸缩与状态管理Q1. 媒体流服务单节点承载用户量提升 5-40 倍,这个提升是如何实现的?主要是 Docker/K8s 带来的,还是架构优化(比如连接复用、协议优化)带来的,或者是两者结合?
Q2. 进行水平伸缩时,如何解决有状态服务(比如 WebSocket 连接、媒体会话状态)的问题?用了什么方案?(如将状态外置到 Redis/数据库?使用 Stic ...
面试模拟-Redis
前言感觉自己实习期间的工作没有很好地和现在大厂的技术栈结合起来
所以让 DeepSeek 融合了一个黑马点评进去
针对这份简历,同时让它问了几个面试问题,比较有深度,记录下来
内容面试官: 很好,你提到项目中大量使用了 Redis 进行优化。我们深入聊聊 Redis 这块:
Session 管理优化Q1.你具体是如何设计 Redis 存储 Session 的? 为什么选择这种数据结构(比如 String vs Hash)?
A1. 我在项目中主要是使用的 Hash 结构,如: (userId, userName, role, createdTime, lastAccessedTime, currentDecice...)
因为我们的项目中有需要频繁增删这种无需持久化的数据。对于我们的 SessionKey 命名,是 session:{sessionId},这里的 sessionId 是用 UUid 生成的随机 32 位 ID。对于过期时间,我们设置的是 3600 秒,也就是 1 小时;每次更新我们首先会去更新 lastAccessedTime,然后重新 Expire 一下,也是 36 ...
面试模拟-RocketMQ
内容面试官: 你项目中用 RocketMQ 解决协同编辑冲突和保证最终一致性的设计非常关键。
消息模型选择Q1. 你说采用了集群/广播模式适配不同场景。能分别举个具体场景的例子说明为什么选集群模式,为什么选广播模式吗?
A1. 先说一下广播消费场景
广播消费不支持顺序消息,不支持重置消费位点,消费进度由客户端维护。那么我们的场景就限定在了容忍无顺序消费,且所有客户端都需要该消息的情况。
根据已有业务,我们在媒体流同步方面使用了广播消费模式,因为用户连接到的服务器实例是不可预知的,所以对于每一个实例,我们都需要同步直播间所有媒体流信息。而且媒体流信息和顺序无关,只需最终一致性即可。
集群消费支持顺序消息,支持重置消费位点,消费进度由服务端维护。那么我们的场景就限定在了需要顺序消费,且消息只需被一个消费者消费,适用于服务解耦的情况。
根据已有业务,我们在录播与知识图谱关联业务上使用了集群消费模式,录播服务所在服务器接收媒体流服务器录播回调后,保存录播信息到本地。
服务器实例发送录播上传完成的事务半消息,本地使用 TUS 协议进行录播大文件分片上传与断点续传,完成后半消息成为普通消息放入 ...
面试经验-小鹏技术面二面-凉经
前言面的一坨屎,自己项目之外的一问一个不知道,手撕快速幂也忘了。
内容自我介绍
Q. 介绍一下自己
A. 学校背景,实习经历,能力提升
业务内容提问
Q. 项目是什么,你做了什么
Q. 架构演进?
Q. socket.io?
Q. RocketMQ 能做事务吗?
A. 半消息
都没有往深了问,看来是主管之类的。因为完全没有反馈,所以根本看不出来是什么态度。
八股从这里开始崩盘
Q. Mysql 索引使用的什么数据结构
A. B+ 树是一个 n 叉树,数据节点都存在叶子节点中,叶子节点是一个双向循环链表,所以查询范围数据很快
Q. B 树能做吗?
A. 没考虑过。当然是能做的,因为
Q. 那如果我设置了多个 index,只用一个 index 或者几个 index 能查询到数据吗?
A. 可以
Q. 有没有查不到的情况
A. 不知道
流程思想
Q. 微信扫码登录怎么做的?
A. 直接懵了,说的前言不搭后语,提了 JWT 和 Session,乱说一通
Q. 操作流程提示了下
A. 我不太清楚,但是我的项目中有类似的:Session 中存储手机和电脑登陆状态,因为手机已经登陆, ...