美团暑期前端一面面经整理笔记(六)
1. js == 和 === 的区别
答案
这题核心是“输入防抖 + 请求竞态处理 + 联想列表展示”。
- 输入变化后做防抖,避免每次键入都发请求。
- 请求返回时要处理乱序问题,避免旧请求覆盖新结果。
- 列表项点击后要正确回填输入框,并处理空状态和 loading 态。
2. js 数据类型,区别
答案
JavaScript 数据类型可以分成基本类型和引用类型。
- 基本类型包括
number、string、boolean、null、undefined、symbol、bigint。 - 引用类型包括对象、数组、函数等。
- 基本类型按值存储,引用类型变量里保存的是对象引用。
3. symbol 是什么,应用场景
答案
Symbol 是一种唯一且不可变的基本类型,通常用来避免对象属性名冲突。
- 可以作为对象的唯一 key。
- 常用于框架内部保留字段和元编程协议,比如
Symbol.iterator。
4. 防抖,如何实现,应用场景
答案
防抖和定时器题的关键是“控制触发频率”和“避免时间漂移”。
- 防抖适合输入框联想、搜索建议;节流适合滚动、拖拽。
- 轮询或倒计时更推荐递归
setTimeout,因为比setInterval更容易控制节奏,避免任务堆积。 - 倒计时展示时最好以真实时间戳为准,而不是单纯每次减一。
5. 轮询请求怎么做,setTimeout 还是 setInterval,为什么
答案
防抖和定时器题的关键是“控制触发频率”和“避免时间漂移”。
- 防抖适合输入框联想、搜索建议;节流适合滚动、拖拽。
- 轮询或倒计时更推荐递归
setTimeout,因为比setInterval更容易控制节奏,避免任务堆积。 - 倒计时展示时最好以真实时间戳为准,而不是单纯每次减一。
6. 输入 URL 发生什么
答案
从输入 URL 到页面展示,主线一般是:
- URL 解析,判断协议和资源地址。
- DNS 解析拿到 IP。
- 建立 TCP 连接;如果是 HTTPS,还会进行 TLS 握手。
- 浏览器发起 HTTP 请求,服务端返回 HTML。
- 浏览器解析 HTML 构建 DOM,解析 CSS 构建 CSSOM。
- 如果遇到同步脚本,可能会阻塞解析并执行 JS。
- DOM 和 CSSOM 合成渲染树,随后做布局、绘制、合成显示。
- 页面加载后,还可能继续执行异步请求、图片加载和事件绑定。
7. HTTP 和 HTTPS
答案
HTTPS = HTTP + TLS,核心作用是身份认证、数据加密和完整性校验。
- HTTP 明文传输,容易被窃听和篡改;HTTPS 通过证书和加密建立安全连接。
- 证书无效常见原因有:过期、域名不匹配、证书链不完整。
- SSL/TLS 证书过期后,浏览器无法继续信任服务端身份,所以连接会被警告甚至拦截。
8. 为什么证书能保证安全,对非对称加密的理解
答案
HTTPS = HTTP + TLS,核心作用是身份认证、数据加密和完整性校验。
- HTTP 明文传输,容易被窃听和篡改;HTTPS 通过证书和加密建立安全连接。
- 证书无效常见原因有:过期、域名不匹配、证书链不完整。
- SSL/TLS 证书过期后,浏览器无法继续信任服务端身份,所以连接会被警告甚至拦截。
9. script 标签属性
答案
常见的 script 相关属性要重点区分 async 和 defer。
async:脚本并行下载,下载完成后立即执行,顺序不保证。defer:脚本并行下载,等 HTML 解析完成后按顺序执行。type="module"会把脚本按模块方式加载,天然支持import/export。
10. 对跨域的理解
答案
浏览器安全策略最核心的是同源策略,它限制不同源脚本随意读取彼此资源。
- 跨域常见解决方案是 CORS、反向代理、JSONP(仅限 GET)。
- 另外还有 CSP、XSS 防护、CSRF 防护、沙箱 iframe 等安全机制。
- 面试里最好补一句:前端只是一层防线,真正的数据权限还是要靠后端控制。
11. 项目中 CSS 怎么命名,CSS 结构是怎么维护的
答案
CSS 命名和维护重点是“可读、可扩展、可避免冲突”。
- 常见会用 BEM、模块化 CSS、组件级样式目录。
- 样式通常按页面、组件、主题、公共变量分层组织。
- 团队里最好统一命名规范和样式边界,不要全局随意污染。
12. 日夜模式切换怎么实现
答案
日夜模式切换常见做法是 CSS 变量配合主题标记。
- 把颜色抽成变量。
- 通过
class或data-theme切换变量值。 - 主题状态可以持久化到 LocalStorage。
13. CSS display 属性有哪些
答案
常见的 display 有:
blockinlineinline-blockflexgridnonetable等
面试里重点是知道它们对布局参与方式的影响。
14. SSE 和 socket 区别
答案
SSE 是服务端单向推送,WebSocket 是全双工通信。
- SSE 基于 HTTP,更适合通知流、日志流、AI 文本流。
- WebSocket 更适合聊天、协同编辑、实时互动。
- 两者没有绝对优劣,关键看场景。
15. 在什么场景下 AI 不好,怎么优化
答案
AI 不擅长的场景通常是上下文不足、规则复杂、风险高或强业务约束的场景。
- 比如复杂业务建模、线上紧急故障、需要强一致性判断的逻辑。
- 优化方式是补充上下文、明确约束、缩小任务范围,并加强人工 review。
16. 同步异步输出顺序
答案
事件循环的主线是:执行一轮宏任务,然后清空微任务队列,必要时进行渲染,再进入下一轮。
- 常见宏任务:
setTimeout、setInterval、I/O、UI 事件。 - 常见微任务:
Promise.then、queueMicrotask、MutationObserver。 - 所以输出顺序题一般先看同步代码,再看微任务,最后看下一轮宏任务。
17. 带联想列表的防抖输入框
答案
防抖和定时器题的关键是“控制触发频率”和“避免时间漂移”。
- 防抖适合输入框联想、搜索建议;节流适合滚动、拖拽。
- 轮询或倒计时更推荐递归
setTimeout,因为比setInterval更容易控制节奏,避免任务堆积。 - 倒计时展示时最好以真实时间戳为准,而不是单纯每次减一。