字节生活服务三面(已oc)
### **一、项目深挖**
1. **项目技术亮点**
- **校园美食会项目**:基于Redis实现分布式锁解决超卖问题,使用乐观锁处理一人多单场景,通过双拦截器优化Token刷新逻辑。
- **动态线程池组件**:基于Redis发布订阅机制实现线程池参数动态调整,结合定时任务上报核心参数。
2. **短信登录流程**
- 用户输入手机号→后端生成验证码并存储Redis(Key为手机号,Value为验证码)→调用阿里云短信服务发送→用户提交验证码后校验→未注册用户自动创建账号。
3. **Token刷新逻辑**
- 拦截器拦截所有请求,校验Token有效性后刷新Redis中Token的过期时间,保障用户持续活跃状态。
4. **分布式锁优化**
- 单机环境使用`synchronized`锁用户ID;分布式场景改用Redis实现可重入锁,通过Hash结构记录线程标识和重入次数。
---
### **二、基础技术问题**
1. **HTTP vs HTTPS**
- **HTTP问题**:明文传输存在安全风险(窃听、篡改)。
- **HTTPS优化**:通过SSL/TLS协议加密,结合非对称加密(证书验证)和对称加密(数据传输)提升安全性。
2. **跨域问题(CORS)**
- 跨域触发条件:协议、域名、端口不一致。解决方案未深入讨论,面试官提示需补充JSONP、CORS或反向代理等方案。
3. **ThreadLocal应用**
- 用于拦截器中用户信息传递,通过线程隔离的ThreadLocalMap存储数据,避免多线程竞争。
---
### **三、Redis相关**
1. **数据结构选择**
- Token存储使用String类型(Key为Token,Value为用户信息),设置过期时间实现自动清理。
2. **分布式锁实现**
- 通过Redis的SETNX命令和Lua脚本保证原子性,记录线程标识和重入次数支持可重入性。
---
### **四、MySQL与索引**
1. **联合索引最左匹配原则**
- **场景1**:`WHERE b=1 AND a=2`(联合索引(a,b,c))→ **命中索引**(优化器自动调整顺序)。
- **场景2**:`WHERE a>1 AND b=2` → **索引失效**(a范围查询后b无序)。
- **场景3**:`WHERE a=1 AND b>2` → **命中a、b索引**(a等值查询后b有序)。
2. **SQL执行顺序**
- 优先级:`FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT`。
---
### **五、网络与协议**
1. **WebSocket应用**
- 用于商家接单实时通知,对比HTTP轮询优势:长连接、低延迟、服务端主动推送。
这个地方被拷打了websocket底层实现以及如果用http来实现要websocket相同的功能要怎么实现?还问了服务端能向客户端发http请求吗?
---
### **六、反问环节**
- 候选人提问字节技术氛围,面试官简要介绍业务方向(未详细记录)。
---
### **评价与建议**
- **优势**:项目设计合理,对分布式锁、Token机制等场景理解较深。
- **待提升**:跨域解决方案、服务端主动通知实现(如WebSocket底层机制)、索引失效场景判断需更严谨。
- **面试难度**:中等偏上,侧重项目落地能力和底层原理。
1. **项目技术亮点**
- **校园美食会项目**:基于Redis实现分布式锁解决超卖问题,使用乐观锁处理一人多单场景,通过双拦截器优化Token刷新逻辑。
- **动态线程池组件**:基于Redis发布订阅机制实现线程池参数动态调整,结合定时任务上报核心参数。
2. **短信登录流程**
- 用户输入手机号→后端生成验证码并存储Redis(Key为手机号,Value为验证码)→调用阿里云短信服务发送→用户提交验证码后校验→未注册用户自动创建账号。
3. **Token刷新逻辑**
- 拦截器拦截所有请求,校验Token有效性后刷新Redis中Token的过期时间,保障用户持续活跃状态。
4. **分布式锁优化**
- 单机环境使用`synchronized`锁用户ID;分布式场景改用Redis实现可重入锁,通过Hash结构记录线程标识和重入次数。
---
### **二、基础技术问题**
1. **HTTP vs HTTPS**
- **HTTP问题**:明文传输存在安全风险(窃听、篡改)。
- **HTTPS优化**:通过SSL/TLS协议加密,结合非对称加密(证书验证)和对称加密(数据传输)提升安全性。
2. **跨域问题(CORS)**
- 跨域触发条件:协议、域名、端口不一致。解决方案未深入讨论,面试官提示需补充JSONP、CORS或反向代理等方案。
3. **ThreadLocal应用**
- 用于拦截器中用户信息传递,通过线程隔离的ThreadLocalMap存储数据,避免多线程竞争。
---
### **三、Redis相关**
1. **数据结构选择**
- Token存储使用String类型(Key为Token,Value为用户信息),设置过期时间实现自动清理。
2. **分布式锁实现**
- 通过Redis的SETNX命令和Lua脚本保证原子性,记录线程标识和重入次数支持可重入性。
---
### **四、MySQL与索引**
1. **联合索引最左匹配原则**
- **场景1**:`WHERE b=1 AND a=2`(联合索引(a,b,c))→ **命中索引**(优化器自动调整顺序)。
- **场景2**:`WHERE a>1 AND b=2` → **索引失效**(a范围查询后b无序)。
- **场景3**:`WHERE a=1 AND b>2` → **命中a、b索引**(a等值查询后b有序)。
2. **SQL执行顺序**
- 优先级:`FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT`。
---
### **五、网络与协议**
1. **WebSocket应用**
- 用于商家接单实时通知,对比HTTP轮询优势:长连接、低延迟、服务端主动推送。
这个地方被拷打了websocket底层实现以及如果用http来实现要websocket相同的功能要怎么实现?还问了服务端能向客户端发http请求吗?
---
### **六、反问环节**
- 候选人提问字节技术氛围,面试官简要介绍业务方向(未详细记录)。
---
### **评价与建议**
- **优势**:项目设计合理,对分布式锁、Token机制等场景理解较深。
- **待提升**:跨域解决方案、服务端主动通知实现(如WebSocket底层机制)、索引失效场景判断需更严谨。
- **面试难度**:中等偏上,侧重项目落地能力和底层原理。
全部评论

这是咋生成的,录音?
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享