美团AI面试题,这篇文章整理全了!

本文整理了网友分享的美团AI面试题,仅供参考。

模块面试问题标记
网络 & 操作系统TCP 粘包拆包原理及解决方案
网络 & 操作系统TCP 三次握手/四次挥手流程及原因高频
网络 & 操作系统TCP 拥塞控制机制及算法高频
网络 & 操作系统TCP 超时重传机制的重要性
网络 & 操作系统TCP keepalive 是什么,有什么用高频
网络 & 操作系统UDP 与 TCP 的区别
网络 & 操作系统HTTP 与 HTTPS 的区别
网络 & 操作系统HTTP 状态码 301 与 302 的区别
网络 & 操作系统Linux 如何查看磁盘空间
网络 & 操作系统Linux 如何查看/管理进程内存使用
网络 & 操作系统Linux 虚拟内存与物理内存的区别
网络 & 操作系统Linux 权限系统与修改方法易错
网络 & 操作系统Linux 文件复制如何保持权限一致易错
网络 & 操作系统Linux 管道机制和使用示例
网络 & 操作系统find 命令的用法
Java 基础与进阶ThreadLocal 的作用和应用场景高频、易错
Java 基础与进阶Java 多态的理解与实现方式高频、易错
Java 基础与进阶Java 中封装的意义
Java 基础与进阶String 是否可继承,为什么
Java 基础与进阶final 与 static 的区别和使用
Java 基础与进阶finally 中 return 会发生什么高频、易错
Java 基础与进阶自动装箱与拆箱的原理及示例高频、易错
Java 基础与进阶Java 中的内部类解释
Java 基础与进阶equals 和 hashCode 的区别及应用易错
Java 基础与进阶接口与抽象类的区别
Java 基础与进阶方法重写与重载的区别
Java 基础与进阶Spring Boot 自动装配原理
Java 基础与进阶Spring 注解、事务、循环依赖等常见问题
Java 基础与进阶Java 中线程的创建与使用
数据库 & 缓存数据库索引的建立及好坏判断高频
数据库 & 缓存SQL explain 的作用和优化 SQL
数据库 & 缓存数据库死锁的定义与避免方法高频、易错
数据库 & 缓存乐观锁与悲观锁区别
数据库 & 缓存缓存与数据库一致性问题高频、易错
数据库 & 缓存缓存穿透、击穿、雪崩的处理策略高频
数据库 & 缓存Redis 内存淘汰策略
数据库 & 缓存Mysql 索引何时生效高频
系统设计设计一个排行榜系统,保证公平与高并发一致性高频、易错
系统设计设计微博热搜系统(带时间因素)
系统设计设计点赞防刷系统(基于 Redis + Sentinel)
系统设计设计聊天系统(超时重发、一致性)高频、易错
系统设计直播平台实时显示前十主播设计(zset/堆)
系统设计扫码登录功能的设计与安全考虑
系统设计网站搜索系统设计及内容权重评估
系统设计如何实现一个服务的高并发高可用设计
系统设计设计内容热度系统(浏览/评论/分享)
通用能力 & 行为题学习新语言或框架的方式
通用能力 & 行为题学习框架时遇到的经典问题(如 Spring 循环依赖)
通用能力 & 行为题解决过的典型项目困难(如人脸识别准确率)
通用能力 & 行为题如何评估/提升人脸识别准确率,有无科学依据
通用能力 & 行为题你是如何做 code review 的
通用能力 & 行为题你大学期间是怎么学习技术知识的
通用能力 & 行为题如何持续学习、保持动力
通用能力 & 行为题哪些工具对你帮助很大?
通用能力 & 行为题项目中持续优化某个问题的经历
通用能力 & 行为题团队合作中如何高效分工
通用能力 & 行为题未来三年职业规划
通用能力 & 行为题遇到陌生领域问题如何处理
通用能力 & 行为题你在项目中如何处理压力大的情况?
通用能力 & 行为题你最近一次复盘学习效果的方法是什么?
通用能力 & 行为题数据库中 explain 输出的字段都表示什么,如何解读
通用能力 & 行为题缓存失效策略有哪些,如何选择合适的策略高频
数据库 & 缓存你是如何在项目中发现并解决性能瓶颈的?
数据库 & 缓存当你在团队中遇到分歧时是怎么处理的?
通用能力 & 行为题描述一次你从零搭建系统或组件的经历,包括遇到的挑战和解决办法
通用能力 & 行为题你是如何评估和选择使用的技术栈的?是否有踩过坑

网络 & 操作系统

1. TCP 粘包拆包原理及解决方案

问题描述: TCP 是面向字节流的协议,数据之间没有边界。当多个小数据包发送得非常快或一个大数据包被拆分时,接收方可能一次性收到多个数据包(粘包)或不完整的数据(拆包)。

解决方案:

  • 固定消息长度:适合消息体长度固定的情况,简单但不够灵活。
  • 使用特殊分隔符:如 \n,但要避免消息体中出现该分隔符。
  • 添加长度字段:头部指定消息长度,最常见的方式。
  • 使用协议封装:如 Protobuf、Netty 已自带编解码器,简化处理。
2. TCP 三次握手/四次挥手流程及原因

三次握手目的:

  • 建立可靠连接,双方确认收发能力。
  • 防止历史连接混入。

过程:

  1. 客户端 SYN;2. 服务器 SYN-ACK;3. 客户端 ACK。

四次挥手目的:

  • TCP 是双向通信,需双方各自关闭连接。

过程:

  1. 客户端 FIN;2. 服务器 ACK;3. 服务器 FIN;4. 客户端 ACK。
3. TCP 拥塞控制机制及算法

目标: 控制数据注入速度,防止网络拥塞。

阶段:

  • 慢开始:初始窗口小,每收到 ACK 加倍增长。
  • 拥塞避免:达到阈值后线性增长。
  • 快速重传:收到 3 次重复 ACK,快速重发丢失段。
  • 快速恢复:快速重传后不进入慢开始,直接恢复。
4. TCP 超时重传机制的重要性

意义: 提高可靠性,确保数据不丢失。

原理:

  • 每发一个段就启动计时器,未收到 ACK 则重传。
  • RTO = SRTT + 4 * RTTVAR,动态变化。

优势: 配合拥塞控制机制使用,能快速适应网络波动。

5. TCP keepalive 是什么,有什么用

定义: 长连接探测机制,用于判断连接是否存活。

工作机制:

  • 空闲一段时间后发探测包(默认 2 小时)。
  • 若连续 N 次无响应,关闭连接。

作用: 释放死连接,保持连接有效性。

6. UDP 与 TCP 的区别

UDP 无连接、快速、无保障,适合实时传输; TCP 面向连接、可靠、顺序传输,适合文件、事务处理等。

TCP 实现复杂,提供确认、重传、拥塞控制等;UDP 简洁高效,无需建立连接。

7. HTTP 与 HTTPS 的区别
  • HTTPS = HTTP + SSL/TLS,加密+身份验证。
  • 使用证书(由 CA 签发)保证通信双方身份。
  • 更安全但连接建立成本高。
  • 一般用于支付、登录等敏感场景。
8. HTTP 状态码 301 与 302 的区别
  • 301:永久跳转,客户端/搜索引擎应更新资源地址。
  • 302:临时跳转,客户端不应记住新地址。

SEO 优化推荐使用 301,避免权重分散。

9. Linux 如何查看磁盘空间

使用 df -h 查看各挂载点磁盘使用情况,单位友好(如 GB)。

10. Linux 如何查看/管理进程内存使用
  • tophtop 实时查看内存情况。
  • ps查看系统的进程
  • ps aux --sort=-%mem 按内存占用排序。
  • 使用 smem 可细化内存分布。
11. 虚拟内存与物理内存的区别
  • 物理内存:真实存在的 RAM。
  • 虚拟内存:每个进程的独立地址空间,OS 映射到物理内存或磁盘 Swap。
12. Linux 权限系统与修改方法

每个文件有所有者、所属组、其他用户三类权限(rwx)。使用 chmod 修改权限,chown 修改所有者,umask 设置默认权限。

13. Linux 文件复制如何保持权限一致

使用 cp -prsync -a 复制文件时保留权限、时间等元信息。

14. Linux 管道机制和使用示例

管道 | 用于把一个命令的输出传递给另一个命令,例如:ps aux | grep java

15. find 命令的用法

find /path -name '*.log' 查找指定路径下所有 .log 文件;配合 -mtime/-size/-exec 进行高级查找操作。


Java 基础与进阶

16. ThreadLocal 的作用和应用场景

为每个线程提供独立变量副本,适合数据库连接、用户上下文等线程隔离场景。

17. Java 多态的理解与实现方式

父类引用指向子类对象,调用方法根据实际对象类型决定,依赖重写(Override)实现。

18. Java 中封装的意义

将实现细节隐藏,通过方法暴露接口,提高安全性、复用性与维护性。

19. String 是否可继承,为什么

不可继承,String 被 final 修饰,确保不可变性和安全。

20. final 与 static 的区别和使用
  • final 修饰常量、类、方法,表示不可变或不可重写。
  • static 表示静态成员,属于类而非对象。
21. finally 中 return 会发生什么

finally 中的 return 会覆盖 try/catch 中的 return,应谨慎使用。

22. 自动装箱与拆箱的原理及示例

编译器在基本类型与包装类型之间自动转换,如 Integer a = 1; 是自动装箱。

23. Java 中的内部类解释

分为成员内部类、静态内部类、局部内部类、匿名内部类,常用于事件回调、封装逻辑等场景。

24. equals 和 hashCode 的区别及应用
  • equals 判断对象内容是否相等。
  • hashCode 用于哈希结构定位元素位置。二者需保持一致性。
25. 接口与抽象类的区别

接口用于规范功能,抽象类用于共享逻辑。接口支持多继承,抽象类只能单继承。

26. 方法重写与重载的区别
  • 重写是子类重写父类方法(签名相同)。
  • 重载是方法同名但参数不同,编译期决定。
27. Spring Boot 自动装配原理

基于 @EnableAutoConfigurationspring.factories 实现条件 Bean 加载(Conditional 系列注解)。

28. Spring 注解、事务、循环依赖等常见问题
  • 注解如 @Component@Autowired
  • 事务失效常见于内部调用。
  • 单例构造注入易引发循环依赖,Spring 用三级缓存解决。
29. Java 中线程的创建与使用

使用 Thread 类、Runnable 接口、Callable+Future,推荐使用线程池 Executors 管理线程。


数据库 & 缓存

30. 数据库索引的建立及好坏判断

合理建索引可大幅提升查询性能。使用 EXPLAIN 判断是否使用索引、索引选择度等。

31. SQL explain 的作用和优化 SQL

分析 SQL 执行计划,发现全表扫描、索引失效等问题,优化方式包括改写 SQL、增加索引等。

32. 数据库死锁的定义与避免方法

多个事务持有资源并请求对方资源形成等待环。避免方法:统一加锁顺序、使用超时机制、细粒度锁等。

33. 乐观锁与悲观锁区别
  • 乐观锁:基于版本号,适用于冲突少场景。
  • 悲观锁:直接加锁防止并发冲突,适用于写冲突频繁场景。
34. 缓存与数据库一致性问题

常用方案:先更新数据库,再删缓存(或延迟双删);或使用异步消息队列同步。

35. 缓存穿透、击穿、雪崩的处理策略
  • 穿透:布隆过滤器、防空缓存。
  • 击穿:热点加锁、互斥访问。
  • 雪崩:设置过期时间随机化、预热机制、限流降级。
36. Redis 内存淘汰策略

如 LRU、LFU、TTL、随机淘汰等,通过 maxmemory-policy 配置。

37. Mysql 索引何时生效
  • WHERE 条件中包含索引列,且无函数、计算、隐式类型转换。
  • 避免 %like 模式和 OR 条件导致索引失效。

系统设计

38. 设计一个排行榜系统

使用 Redis ZSet 实现排序与打分;定期异步同步数据库;防止作弊可加限流与验证。

39. 微博热搜系统设计

热度可加时间衰减因子;使用滑动窗口 + ZSet 实现时间加权排序。

40. 点赞防刷系统

用户操作计入缓存,限速 + 黑名单;Redis 记录点赞日志,结合 Sentinel 做限流。

41. 聊天系统设计

基于长连接、WebSocket 实现,可靠性通过 ACK 机制、MQ 存储未读消息、超时重发保证。

42. 实时显示前十主播

使用 Redis ZSet 或小顶堆维护主播热度榜单,定期更新 UI 页面。

43. 扫码登录设计

用户扫码绑定临时 token,通过轮询或 WebSocket 通知前端确认登录,注意 token 超时与一次性使用。

44. 搜索系统设计

构建倒排索引,分词 + 权重(点击率、相关性)计算排序得分,Lucene/Elasticsearch 常用。

45. 服务高并发高可用设计

使用负载均衡、服务注册中心、异步解耦、降级限流、缓存 + MQ,保障性能和可用性。

46. 内容热度系统

综合浏览、点赞、评论等行为,按权重计入 Redis 统计,结合时间衰减和去重机制。


通用能力 & 行为题

47. 学习新语言或框架的方式

阅读官方文档 + 实践 Demo + 看源码 + 写博客总结。

48. 学习框架时遇到的经典问题

Spring 循环依赖、事务失效、注入顺序等;通过日志排查 + Debug 定位。

49. 项目中的典型困难

如模型精度低,通过数据清洗、特征工程、调参、集成等手段优化。

50. 如何评估/提升人脸识别准确率

评估指标如 Precision/Recall/F1;提升方法包括数据增强、模型融合等。

51. 如何做 code review

关注命名规范、逻辑是否清晰、异常处理、性能问题、测试覆盖率。

52. 大学期间如何学习技术

以竞赛/项目为驱动,主动参与开源/博客写作,注重动手能力。

53. 如何持续学习、保持动力

设定目标、阶段复盘、输出内容(博客/演讲)激励自己成长。

54. 对你帮助大的工具

IDEA、VSCode、Postman、Fiddler、Docker、Jupyter、Typora、Git。

55. 项目中持续优化问题

如接口性能慢,优化缓存 + 并发控制 + 减少外部依赖。

56. 团队合作中如何高效分工

角色清晰、接口明确、协作工具辅助(飞书、Git Flow、看板)。

57. 未来三年职业规划

前期深耕技术、提升架构思维,逐步承担更多产品/团队责任。

58. 陌生领域问题如何处理

查阅资料、请教同行、阅读源码、写 Demo,快速验证思路。

59. 项目中如何处理压力大

合理拆解任务、优先级排序、与团队沟通分担、阶段性休息。

60. 最近一次复盘学习的方法

定期回顾项目总结、输出文章、梳理知识点和错题集。

61. explain 输出字段含义
  • type 表示访问类型(如 index, full scan)
  • rows 预估读取行数
  • key 使用的索引
  • Extra 提示是否使用文件排序等
62. 缓存失效策略有哪些
  • 定期清理(定时或惰性)
  • 设置过期时间 TTL
  • 内存淘汰(LRU、LFU) 选择策略视业务特性和缓存类型决定。
63. 如何发现并解决性能瓶颈

使用 profiler、日志、慢 SQL 分析工具定位,再通过缓存、异步、限流等优化。

64. 团队中遇到分歧如何处理

理性讨论,用数据和实验验证方案,必要时引入第三方意见。

65. 从零搭建系统的经历

按模块设计、接口规范、逐步迭代上线,重视日志监控、测试用例和文档。

66. 如何评估和选择技术栈,是否踩过坑

从社区活跃度、文档完整性、团队熟悉度评估,踩坑需记录总结,写规范避免重复犯错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值