2026-04-28 00:53:48
美团点评Java、数据开发、前端工程师岗位最新面试题总结如下:
一、数据开发工程师(校招)预防:破坏死锁产生的四个必要条件(互斥、占有并等待、非抢占、循环等待)。
避免:通过银行家算法等资源分配策略动态检测并避免死锁。
检测与解除:使用资源分配图检测死锁,通过终止进程或强制回收资源解除。
表:实际存储数据,占用物理空间,支持增删改查操作。
视图:虚拟表,基于SQL查询定义,不存储数据,仅保存查询逻辑,数据随基表变化而更新。
哈希表法:遍历数组,将元素存入哈希表,若发现重复则返回true。
排序法:先排序数组,再检查相邻元素是否相同。
多路复用:HTTP/2通过二进制分帧层实现多请求并行传输,避免队头阻塞。
头部压缩:使用HPACK算法压缩头部字段,减少传输量。
服务器推送:允许服务器主动推送资源,减少客户端请求次数。
强缓存:通过Expires或Cache-Control字段控制,直接使用本地缓存。
协商缓存:通过Last-Modified/If-Modified-Since或ETag/If-None-Match字段验证资源是否更新。
挂载阶段:constructor → getDerivedStateFromProps → render → componentDidMount。
更新阶段:getDerivedStateFromProps → shouldComponentUpdate → render → getSnapshotBeforeUpdate → componentDidUpdate。
卸载阶段:componentWillUnmount。
Promise:处理异步操作,支持链式调用(.then()、.catch())。
Promise.all():接收Promise数组,所有Promise成功时返回结果数组,任一失败则立即返回错误。
rem布局:通过设置根元素字体大小,结合媒体查询实现响应式适配。
视口单位:使用vw/vh直接基于视口尺寸计算元素大小。
二叉树深度:递归计算左右子树深度并取最大值;非递归使用层序遍历(队列辅助)。
子数组前置和与后置和相等:遍历数组,计算前置和与后置和,使用哈希表统计相同和的子数组数量。
架构:Flutter使用Dart语言和Skia引擎,自绘UI;React Native依赖原生组件,通过桥接通信。
性能:Flutter更接近原生性能,React Native可能因桥接产生性能瓶颈。
Props:父子组件间传递数据。
Context:跨层级组件共享数据。
事件总线/Redux:全局状态管理。
修改原数组:push()、pop()、shift()、unshift()、splice()、sort()、reverse()。
不修改原数组:concat()、slice()、map()、filter()。
Array.isArray(obj)。
obj instanceof Array。
Object.prototype.toString.call(obj) === '[object Array]'。
CORS:服务器设置Access-Control-Allow-Origin响应头。
JSONP:利用<script>标签的跨域特性获取数据。
代理服务器:开发环境配置代理,生产环境使用Nginx反向代理。
变量与嵌套:SASS支持变量定义和嵌套语法,CSS需手动重复选择器。
混合与继承:SASS提供@mixin和@extend实现代码复用。
进程间通信:管道、消息队列、共享内存、信号量、Socket。
虚拟内存:通过分页或分段机制将物理内存抽象为逻辑地址空间,实现内存隔离与高效利用。
OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP与UDP:TCP可靠、面向连接;UDP不可靠、无连接。
TCP三次握手:建立连接时,客户端发送SYN,服务器回复SYN+ACK,客户端再发送ACK。
MySQL引擎:InnoDB(支持事务、行级锁)、MyISAM(不支持事务、表级锁)。
索引结构:B+树(InnoDB)、哈希索引(Memory引擎)。
Redis持久化:RDB(快照)、AOF(日志追加)。
Linux内核:CFS调度算法、TLB(转换后备缓冲器)加速地址转换。
多线程:线程数量确定(根据CPU核心数、任务类型调整,可通过压测优化)。
面向对象:封装、继承、多态的优势,Python中通过class和self实现。
物理层:传输原始比特流。
数据链路层:封装成帧,提供错误检测。
网络层:IP寻址与路由。
传输层:端到端通信(TCP/UDP)。
会话层:建立、管理会话。
表示层:数据加密、压缩、格式转换。
应用层:提供网络服务接口(如HTTP、FTP)。