当前位置: 首页 > news >正文

前端八股文面经大全:美团前端暑期实习一面(2026-06-08)·面经深度解析

前言

大家好,我是木斯佳。

相信很多人都感受到了,在AI浪潮的席卷之下,前端领域的门槛在变高,纯粹的“增删改查”岗位正在肉眼可见地减少。曾经热闹非凡的面经分享,如今也沉寂了许多。但我们都知道,市场的潮水退去,留下的才是真正在踏实准备、努力沉淀的人。学习的需求,从未消失,只是变得更加务实和深入。

这个专栏的初衷很简单:拒绝过时的、流水线式的PDF引流贴,专注于收集和整理当下最新、最真实的前端面试资料。我会在每一份面经和八股文的基础上,尝试从面试官的角度去拆解问题背后的逻辑,而不仅仅是提供一份静态的背诵答案。无论你是校招还是社招,目标是中大厂还是新兴团队,只要是真实发生、有价值的面试经历,我都会在这个专栏里为你沉淀下来。专栏快速地址

温馨提示:市面上的面经鱼龙混杂,甄别真伪、把握时效,是我们对抗内卷最有效的武器。

面经原文内容

📍面试公司:美团
🕐面试时间:近期
💻面试岗位:前端暑期实习一面

❓面试问题:

  1. useEffect和useLayoutEffect的区别是什么
  2. useEffect依赖数组是什么作用
  3. 依赖数组多个变量,其中一个变化是否会执行副作用
  4. useEffect清理函数的作用是什么,为何会产生内存泄漏
  5. React组件间通信有哪几种方式
  6. useState是同步还是异步执行
  7. 对象函数与箭头函数this指向相关代码分别输出什么
  8. 前端缓存相关:区分协商缓存和强缓存、如何在浏览器查看资源是否命中缓存、什么缓存返回304、强缓存与协商缓存分别需要配置哪些HTTP字段
  9. 从浏览器输入域名到页面渲染完整流程是什么
  10. HTML解析中遇到JS、CSS资源加载是否阻塞解析
  11. 前端页面性能指标有哪些,FCP如何计算、如何采集统计FCP数据、全页面渲染结束时间如何监听
  12. Promise.all、Promise.race、Promise.allSettled、Promise.any的区别与适用场景
  13. 异步代码执行顺序相关代码输出结果
  14. 仿微信聊天列表卡片布局如何实现
  15. CSS position有哪些取值及各自含义
  16. rem、em、vw单位含义
  17. 编写函数查找字符串第一个不重复字符下标,无则返回-1

来源:牛客网 不想打工的加菲猫很慵懒

💡木木有话说(刷前先看)

美团这场面试,是一份“React原理+网络缓存+性能指标+CSS布局”全面覆盖的经典面经。,非常适合暑期实习面试前系统自查


📝 美团前端暑期实习一面·深度解析

🎯面试整体画像

维度特征
面试风格基础全面型 + 原理追问型 + 实战代码型
难度评级⭐⭐⭐⭐(四星,覆盖面广,原理细节多)
考察重心React Hooks原理、组件通信、前端缓存、浏览器渲染、性能指标、Promise并发、CSS布局
特殊之处无项目深挖,纯技术基础考察,适合检验知识体系完整性

🔍逐题深度解析

一、useEffect和useLayoutEffect的区别

维度useEffectuseLayoutEffect
执行时机浏览器绘制后(异步)浏览器绘制前(同步)
阻塞渲染
使用场景多数副作用(数据获取、订阅、日志)需要测量DOM、同步修改样式(防止闪烁)
SSR支持完全支持有警告(需跳过)
// useLayoutEffect典型场景:测量DOM尺寸useLayoutEffect(()=>{constheight=divRef.current.offsetHeightsetHeight(height)// 绘制前更新,避免闪烁},[])

二、useEffect依赖数组的作用

作用:控制副作用函数的执行时机。

依赖数组执行时机
无(不传)每次渲染后都执行
[](空数组)仅组件挂载时执行一次
[a, b]首次挂载 + a或b变化时执行

三、依赖数组多个变量,其中一个变化是否会执行副作用

答案。只要依赖数组中任意一个变量的值发生变化(浅比较),副作用函数就会重新执行。

useEffect(()=>{console.log('count或name变化了')},[count,name])// count变化 → 执行;name变化 → 执行

四、useEffect清理函数的作用及内存泄漏

作用:在组件卸载或下次执行副作用前清理上一次的副作用。

常见清理场景

  • 清除定时器(clearInterval/clearTimeout
  • 取消订阅(eventBus.off
  • 取消请求(AbortController.abort()

内存泄漏原因:未清理的定时器、订阅、DOM事件监听器在组件卸载后仍然存在,导致无法被垃圾回收。

useEffect(()=>{consttimer=setInterval(()=>{},1000)return()=>clearInterval(timer)// 清理函数},[])

五、React组件间通信方式

方式适用场景
props/emit父子组件直接通信
Context跨多级组件(祖先→后代)
状态管理(Redux/Zustand/Pinia)全局共享状态
eventBus任意组件通信(不推荐大型项目)
ref父组件调用子组件方法
props.children/ 插槽内容分发

六、useState是同步还是异步执行

答案异步执行(批量更新)。

原理:React会将多个setState合并到一个更新批次中,在事件循环末尾统一执行,以优化性能。

const[count,setCount]=useState(0)setCount(1)console.log(count)// 输出0,不是1

获取最新值的方法:使用函数式更新或useEffect监听变化。


七、对象函数与箭头函数this指向

箭头函数this静态绑定,定义时继承外层作用域。

普通函数this动态绑定,调用时决定。

constobj={name:'Tom',normal:function(){console.log(this.name)},arrow:()=>{console.log(this.name)}}obj.normal()// 'Tom'(this指向obj)obj.arrow()// undefined(this指向外层,通常是window)

八、前端缓存机制

强缓存

  • 缓存有效期内直接使用本地缓存,不发请求
  • 状态码:200 (from disk cache)/200 (from memory cache)
  • 字段:Cache-Control: max-age=3600(优先级高)、Expires

协商缓存

  • 缓存过期后向服务端验证,返回304则使用缓存
  • 状态码:304 Not Modified
  • 字段:请求头If-None-Match(对应ETag)、If-Modified-Since(对应Last-Modified

浏览器查看:Chrome DevTools → Network → 查看Size列((disk cache)/(memory cache))和Status(304)


九、浏览器输入域名到页面渲染的完整流程

  1. DNS解析(域名→IP)
  2. TCP三次握手
  3. TLS握手(HTTPS)
  4. 发送HTTP请求
  5. 服务端处理并返回响应
  6. 浏览器解析HTML → DOM树
  7. 解析CSS → CSSOM树
  8. 合成渲染树
  9. 布局(Layout/Reflow)
  10. 分层(Layer)
  11. 绘制(Paint)
  12. 分块(Tiling)
  13. 光栅化(Rasterize)
  14. 合成(Composite)
  15. 页面显示

十、HTML解析中JS、CSS资源加载是否阻塞解析

资源阻塞情况
CSS不阻塞HTML解析,但阻塞后续JS执行和渲染
同步JS阻塞HTML解析(下载+执行)
asyncJS异步下载,不阻塞解析,下载完立即执行
deferJS异步下载,不阻塞解析,DOMContentLoaded前执行

十一、前端页面性能指标与FCP采集

核心指标

  • FCP(First Contentful Paint):首次内容绘制,≤1.8s
  • LCP(Largest Contentful Paint):最大内容绘制,≤2.5s
  • INP(Interaction to Next Paint):交互延迟,≤200ms
  • CLS(Cumulative Layout Shift):累积布局偏移,≤0.1
  • TTFB(Time To First Byte):首字节时间,≤800ms

FCP计算:从开始加载到任意文本/图片/Canvas绘制完成的时间。

采集方法

newPerformanceObserver((list)=>{for(constentryoflist.getEntries()){if(entry.name==='first-contentful-paint'){console.log('FCP:',entry.startTime)}}}).observe({entryTypes:['paint']})

全页面渲染结束时间load事件(window.onload)或LCP


十二、Promise并发方法区别

方法返回时机适用场景
Promise.all全部成功或任一失败所有请求都必要
Promise.allSettled全部完成(无论成功/失败)需要知道每个结果
Promise.race第一个完成超时控制
Promise.any第一个成功多个备用服务
Promise.all([p1,p2])// 全成功则成功,一失败则失败Promise.allSettled([p1,p2])// 全部完成,返回状态数组Promise.race([p1,p2])// 第一个完成的Promise.any([p1,p2])// 第一个成功的

十三、异步代码执行顺序

console.log('1')setTimeout(()=>console.log('2'),0)Promise.resolve().then(()=>console.log('3'))console.log('4')// 输出:1,4,3,2

十四、仿微信聊天列表卡片布局

Flex实现

.chat-item{display:flex;align-items:center;padding:12px;gap:12px;}.avatar{width:48px;height:48px;border-radius:50%;flex-shrink:0;}.content{flex:1;min-width:0;}.name{font-weight:bold;}.message{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.time{flex-shrink:0;font-size:12px;color:#999;}

十五、CSS position取值

取值含义
static默认,文档流
relative相对自身偏移,占位保留
absolute绝对定位,相对最近的非static祖先
fixed相对视口固定
sticky粘性定位,滚动到阈值时固定

十六、rem、em、vw单位

单位参照物
rem根元素(html)字体大小
em当前元素字体大小
vw视口宽度的1%
html{font-size:16px;}.box{width:10rem;}/* 160px */.child{font-size:1.2em;}/* 1.2倍父元素字体 */.container{width:50vw;}/* 视口宽度的50% */

十七、查找字符串第一个不重复字符下标

functionfirstUniqChar(s){constmap=newMap()for(leti=0;i<s.length;i++){map.set(s[i],(map.get(s[i])||0)+1)}for(leti=0;i<s.length;i++){if(map.get(s[i])===1)returni}return-1}

📚知识点速查表

知识点核心要点
useEffect vs useLayoutEffect绘制后/前,测量DOM用LayoutEffect
依赖数组控制执行时机,空数组仅挂载执行
清理函数清除定时器/订阅,防止内存泄漏
组件通信props、Context、状态管理、eventBus、ref
useState异步批量更新,函数式更新获取最新值
箭头函数this静态绑定,定义时继承外层
缓存强缓存(Cache-Control)、协商缓存(ETag)、304
浏览器渲染DNS→TCP→请求→解析→布局→绘制→合成
性能指标FCP/LCP/INP/CLS,PerformanceObserver采集
Promise并发all/allSettled/race/any区别
CSS布局Flex聊天卡片、position取值、rem/em/vw
算法哈希表统计频率,两次遍历

📌 最后一句:

美团这场一面,是一场“基础扎实度”的全面体检。从React Hooks原理到缓存机制,从浏览器渲染到性能指标采集,从Promise并发到CSS布局,没有偏题怪题,每一道都是必须掌握的核心知识。

http://www.zskr.cn/news/1496281.html

相关文章:

  • equals 和 hashCode 方法:使用它们的原因和位置,以及它们的工作原理
  • 小程序开发入门:从零掌握基础代码结构
  • 华硕笔记本终极性能调校指南:5分钟掌握G-Helper完整配置
  • 逆水寒手游装备系统主要ui界面拆解
  • 【软件发布】光明正大的看小说而不被发现的摸鱼软件:伪输入法(FakeType)
  • PPDS生产计划排产-报工
  • 异地收单不用愁,H5 支付链接一键收款。
  • 计算机毕业设计之智能仓库管理系统开发与设计
  • GD32F470平台RT-thread-nano移植lwip-2.1.2(网卡CH182H2)
  • 4. Transformer_5_模型构建
  • 第四周学习报告
  • 2026年6月上海崇明区黄金回收+白银回收+铂金回收龙头企业排名 正规品牌TOP3 - 沪上贵金属口碑推荐官
  • 语数英小纸条资料:小学各年级下册语文数学英语练习内容
  • MAC-UriComponentsBuilder扩展2
  • three-bvh-csg 自动拉近 移动到屏幕中央
  • 产品经理做竞品调研,202612款支持链接提取视频工具十余款产品对决最终评测,高效整理竞品
  • 苹果 WWDC 2026 聚焦软件与 AI,库克谢幕,苹果 AI 多维度升级但面临隐私挑战
  • 妙推碰碰卡|独立部署AI获客系统解决方案
  • 别再手动建库了!Kettle Database Repository配置保姆级教程(含Oracle用户初始化脚本)
  • 2026年上海徐汇区黄金回收+铂金回收+白银回收公司排行榜 本地人亲测 - 沪上贵金属口碑推荐官
  • 阿里巴巴升级AI业务架构,Q4财报出炉,AI投入进入商业化回报周期
  • 使用 ventoy 安装WinToGo
  • 6月5日美股科技股暴跌:是崩盘开端,还是AI牛市歇脚?背后风险几何?
  • 别再手动调格式了!用NoteExpress搞定毕业论文参考文献(附Word插件配置避坑指南)
  • 干冰配送服务行业分析:主要企业能力对比与选型指南(2026年更新) - 优质品牌商家
  • 2026年GEO优化服务商能力评估与市场格局分析 - 优质品牌商家
  • 专业玻璃钢储罐市场供应格局与选型分析:行业技术参数与供应商综合评估 - 优质品牌商家
  • Maven 3.8.1 默认禁用 HTTP 仓库?手把手教你为 IDEA 配置阿里云镜像并绕过 blocker 限制
  • 国内电缆桥架行业分析:2026年主流厂商供应能力与适用场景研究 - 优质品牌商家
  • 鼠标或手写笔随手画数学公式,自动转成可复制的LaTeX代码