<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>滴滴 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E6%BB%B4%E6%BB%B4/</link><description>Recent content in 滴滴 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 28 Jul 2025 06:07:53 +0000</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E6%BB%B4%E6%BB%B4/index.xml" rel="self" type="application/rss+xml"/><item><title>滴滴-社招-5年 · 第 1 轮 · 二面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-60/round-96/</link><pubDate>Mon, 28 Jul 2025 06:07:53 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-60/round-96/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-60/round-95/"&gt;第 1 轮&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-60/"&gt;返回本次面经&lt;/a&gt; · 已是最后一轮 →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本轮共 10 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-a53118303d0b"&gt;1. 介绍一下你觉的最有成就感的项目&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-ca872c95e3b9"&gt;2. 项目为什么选择Lerna+Yarn Workspaces构建Monorepo&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Monorepo 实现多包统一管理，提升代码复用和维护效率&lt;/li&gt;
&lt;li&gt;Lerna 管理版本发布、变更检测、脚本执行&lt;/li&gt;
&lt;li&gt;Yarn Workspaces 优化依赖安装，支持本地包软链接&lt;/li&gt;
&lt;li&gt;两者结合，实现高效、便捷的 Monorepo 构建和维护&lt;/li&gt;
&lt;li&gt;适合大型复杂项目及多包同步开发场景&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h2 id="一考察点"&gt;一、考察点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;理解 Monorepo 的概念及优势&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多个相关包/模块统一管理、版本控制、发布流程等&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;掌握 Lerna 与 Yarn Workspaces 的功能和配合方式&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;包管理、依赖安装优化、版本发布、脚本执行等&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;能够分析技术选型的利弊和实际应用场景&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;团队协作、构建效率、依赖一致性等&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;展示架构设计思路和实践经验&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="二参考答案"&gt;二、参考答案&lt;/h2&gt;
&lt;h3 id="11-原理说明"&gt;1.1 原理说明&lt;/h3&gt;
&lt;h4 id="monorepo-概念"&gt;Monorepo 概念&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;将多个相关的项目包（packages）放在同一代码仓库中统一管理&lt;/li&gt;
&lt;li&gt;便于代码复用、版本统一、跨包协调&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="lerna-功能"&gt;Lerna 功能&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;管理 Monorepo 中多个包的版本发布和依赖关系&lt;/li&gt;
&lt;li&gt;支持基于 Git 的变更检测，自动决定哪些包需要发布&lt;/li&gt;
&lt;li&gt;脚本集中执行，提升跨包开发效率&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="yarn-workspaces-功能"&gt;Yarn Workspaces 功能&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;优化依赖安装，自动将多个包的依赖扁平化安装，避免重复依赖&lt;/li&gt;
&lt;li&gt;支持包之间的本地软链接，方便跨包开发调试&lt;/li&gt;
&lt;li&gt;减少 &lt;code&gt;node_modules&lt;/code&gt; 大小，提升安装速度&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="lerna--yarn-workspaces-配合优势"&gt;Lerna + Yarn Workspaces 配合优势&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Lerna 专注版本和发布管理&lt;/li&gt;
&lt;li&gt;Yarn Workspaces 专注依赖管理和安装优化&lt;/li&gt;
&lt;li&gt;组合使用，实现 Monorepo 的高效管理和性能提升&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="12-核心用法--选择理由"&gt;1.2 核心用法 + 选择理由&lt;/h3&gt;
&lt;h4 id="选择-lerna--yarn-workspaces-的具体理由"&gt;选择 Lerna + Yarn Workspaces 的具体理由&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;依赖管理高效&lt;/strong&gt;：Yarn Workspaces 扁平化依赖树，减少冗余，提高安装速度，节省磁盘空间&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;版本发布便捷&lt;/strong&gt;：Lerna 支持自动检测改动包，实现增量发布，减少发布成本&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨包开发友好&lt;/strong&gt;：Workspaces 实现包间软链接，调试时无需发布即可实时联动&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;统一管理多个包&lt;/strong&gt;：代码结构清晰，版本一致性好，避免包版本冲突&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;社区成熟稳定&lt;/strong&gt;：Lerna 和 Yarn 是成熟开源项目，生态完善，文档丰富&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="使用场景举例"&gt;使用场景举例&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;大型前端项目拆分为多个业务组件包&lt;/li&gt;
&lt;li&gt;同时管理多个相关 npm 包，需同步发布和升级&lt;/li&gt;
&lt;li&gt;需要提升 CI/CD 流程效率和开发体验&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="13-常见误区或面试陷阱"&gt;1.3 常见误区或面试陷阱&lt;/h3&gt;
&lt;h4 id="-误区一认为-lerna-可以独立完成所有-monorepo-管理工作"&gt;❌ 误区一：认为 Lerna 可以独立完成所有 Monorepo 管理工作&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;实际 Lerna 本身不管理依赖安装，需配合 Workspaces 或 npm/yarn 其他特性&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="-误区二忽视依赖扁平化带来的版本冲突风险"&gt;❌ 误区二：忽视依赖扁平化带来的版本冲突风险&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;需要合理规划依赖版本，避免冲突和不兼容&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="-误区三monorepo-不适合所有项目盲目迁移可能增加复杂度"&gt;❌ 误区三：Monorepo 不适合所有项目，盲目迁移可能增加复杂度&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;适用项目规模和团队协作需求需评估清楚&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-f330b14e4e91"&gt;3. 如何解决子包间的循环依赖问题&lt;/h2&gt;
&lt;h3 id="题目要点-2"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;循环依赖会导致加载异常和维护困难&lt;/li&gt;
&lt;li&gt;抽取公共模块拆分依赖，消除环路&lt;/li&gt;
&lt;li&gt;使用接口抽象和依赖注入解耦&lt;/li&gt;
&lt;li&gt;动态导入延迟加载，规避同步循环&lt;/li&gt;
&lt;li&gt;设计单向依赖，保持依赖关系 DAG&lt;/li&gt;
&lt;li&gt;配合工具检测和团队规范防范&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h2 id="一考察点-1"&gt;一、考察点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;理解循环依赖的概念及危害&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>滴滴-社招-5年 · 第 1 轮 · 一面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-60/round-95/</link><pubDate>Mon, 28 Jul 2025 06:01:19 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-60/round-95/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← 已是第一轮 · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-60/"&gt;返回本次面经&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-60/round-96/"&gt;第 1 轮&lt;/a&gt; →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; 作用域链与闭包、全方位解读this、函数柯里化、原型链与继承、DOM操作、深拷贝/浅拷贝、call、apply和bind&lt;/p&gt;
&lt;p&gt;本轮共 24 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-a5330a58-5be0-4f4f-8394-43392311ddaa"&gt;1. 深拷贝浅拷贝有什么区别？怎么实现深拷贝？&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;题库原题：&lt;a href="https://fe.ecool.fun/topic/a5330a58-5be0-4f4f-8394-43392311ddaa"&gt;深拷贝浅拷贝有什么区别？怎么实现深拷贝？&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;JS数据类型分别基本数据类型和引用数据类型，基本数据类型保存的是值，引用类型保存的是引用地址(this指针)。&lt;/p&gt;
&lt;p&gt;浅拷贝共用一个引用地址，深拷贝会创建新的内存地址。&lt;/p&gt;
&lt;h4 id="浅拷贝方法"&gt;浅拷贝方法&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;直接对象复制&lt;/li&gt;
&lt;li&gt;Object.assign&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="深拷贝"&gt;深拷贝&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;JSON.stringify转为字符串再JSON.parse&lt;/li&gt;
&lt;li&gt;深度递归遍历&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h2 id="一数据类型存储"&gt;一、数据类型存储&lt;/h2&gt;
&lt;p&gt;前面文章我们讲到，&lt;code&gt;JavaScript&lt;/code&gt;中存在两大数据类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基本类型&lt;/li&gt;
&lt;li&gt;引用类型&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基本类型数据保存在在栈内存中&lt;/p&gt;
&lt;p&gt;引用类型数据保存在堆内存中，引用数据类型的变量是一个指向堆内存中实际对象的引用，存在栈中&lt;/p&gt;
&lt;h2 id="二浅拷贝"&gt;二、浅拷贝&lt;/h2&gt;
&lt;p&gt;浅拷贝，指的是创建新的数据，这个数据有着原始数据属性值的一份精确拷贝&lt;/p&gt;
&lt;p&gt;如果属性是基本类型，拷贝的就是基本类型的值。如果属性是引用类型，拷贝的就是内存地址&lt;/p&gt;
&lt;p&gt;即浅拷贝是拷贝一层，深层次的引用类型则共享内存地址&lt;/p&gt;
&lt;p&gt;下面简单实现一个浅拷贝&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;shallowClone&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;obj&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;newObj&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;prop&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;in&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;obj&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;obj&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;hasOwnProperty&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;prop&lt;/span&gt;)){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;newObj&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;prop&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;obj&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;prop&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;newObj&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在&lt;code&gt;JavaScript&lt;/code&gt;中，存在浅拷贝的现象有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Object.assign&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Array.prototype.slice()&lt;/code&gt;, &lt;code&gt;Array.prototype.concat()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用拓展运算符实现的复制&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="objectassign"&gt;Object.assign&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;obj&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;age&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;18&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;nature&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#39;smart&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;good&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;names&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;name1&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;fx&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;name2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;xka&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;love&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;console&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;fx is a great girl&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;newObj&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Object.&lt;span style="color:#a6e22e"&gt;assign&lt;/span&gt;({}, &lt;span style="color:#a6e22e"&gt;obj&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="slice"&gt;slice()&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fxArr&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#34;One&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Two&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Three&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fxArrs&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fxArr&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;slice&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;fxArrs&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;love&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;console&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;fxArr&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// [&amp;#34;One&amp;#34;, &amp;#34;Two&amp;#34;, &amp;#34;Three&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;console&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;fxArrs&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// [&amp;#34;One&amp;#34;, &amp;#34;love&amp;#34;, &amp;#34;Three&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="concat"&gt;concat()&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fxArr&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#34;One&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Two&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Three&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fxArrs&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fxArr&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;concat&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;fxArrs&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;love&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;console&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;fxArr&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// [&amp;#34;One&amp;#34;, &amp;#34;Two&amp;#34;, &amp;#34;Three&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;console&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;fxArrs&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// [&amp;#34;One&amp;#34;, &amp;#34;love&amp;#34;, &amp;#34;Three&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="拓展运算符"&gt;拓展运算符&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fxArr&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#34;One&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Two&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Three&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fxArrs&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [...&lt;span style="color:#a6e22e"&gt;fxArr&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;fxArrs&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;love&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;console&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;fxArr&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// [&amp;#34;One&amp;#34;, &amp;#34;Two&amp;#34;, &amp;#34;Three&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;console&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;fxArrs&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// [&amp;#34;One&amp;#34;, &amp;#34;love&amp;#34;, &amp;#34;Three&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="三深拷贝"&gt;三、深拷贝&lt;/h2&gt;
&lt;p&gt;深拷贝开辟一个新的栈，两个对象的属性完全相同，但是对应两个不同的地址，修改一个对象的属性，不会改变另一个对象的属性&lt;/p&gt;</description></item><item><title>滴滴-社招-3年 · 第 1 轮 · 三面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-94/</link><pubDate>Mon, 28 Jul 2025 05:39:29 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-94/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-93/"&gt;第 1 轮&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/"&gt;返回本次面经&lt;/a&gt; · 已是最后一轮 →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; 浏览器渲染过程、浏览器的缓存机制、浏览器的垃圾回收机制、浏览器的存储机制&lt;/p&gt;
&lt;p&gt;本轮共 10 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-98da1f5bbe94"&gt;1. 在你做过的项目中，最值得说的是哪一个&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;STAR法则&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;基于自己简历挖掘亮点项目&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-1a73c841fa54"&gt;2. 在该项目中，你主要负责哪些模块的开发？这些模块的技术难点是什么&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-5b176ffb091f"&gt;3. 请举例说明在项目中，你是如何通过技术手段解决业务问题的&lt;/h2&gt;
&lt;h3 id="题目要点-2"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-0fdfb5bf5b6b"&gt;4. 在项目中，你采取了哪些性能优化措施？效果如何&lt;/h2&gt;
&lt;h3 id="题目要点-3"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;可以参考 【性能优化】相关知识点，在面经最后&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-3fa86026797b"&gt;5. 在项目中遇到的最大技术挑战是什么？你是如何解决的&lt;/h2&gt;
&lt;h3 id="题目要点-4"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-e967bea0e873"&gt;6. 在项目中，你是如何与团队成员协作的？请分享一个具体的协作案例&lt;/h2&gt;
&lt;h3 id="题目要点-5"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-fcdcf89f3234"&gt;7. 在团队协作中，遇到过哪些冲突？你是如何解决的&lt;/h2&gt;
&lt;h3 id="题目要点-6"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-a4d9118359ba"&gt;8. 在项目中，你是如何进行项目管理和进度保障的&lt;/h2&gt;
&lt;h3 id="题目要点-7"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-723e5a28df32"&gt;9. 你的职业规划是什么样的？短期和长期目标分别是什么&lt;/h2&gt;
&lt;h3 id="题目要点-8"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-265243f3e08c"&gt;10. 给定两个以字符串形式表示的非负整数 num1 和 num2，返回 num1 和 num2 的乘积，它们的乘积也表示为字符串形式&lt;/h2&gt;
&lt;p&gt;注意：不能使用任何内置的 BigInteger 库或直接将输入转换为整数&lt;/p&gt;
&lt;p&gt;示例 1:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;输入&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num1&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;num2&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;输出&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;6&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例 2:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入: num1 = &amp;#34;123&amp;#34;, num2 = &amp;#34;456&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出: &amp;#34;56088&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="题目要点-9"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;模拟多位数乘法的过程，按位乘积+进位合并&lt;/li&gt;
&lt;li&gt;用数组保存每一位的计算结果，最终拼接成字符串&lt;/li&gt;
&lt;li&gt;注意字符串转数字、进位处理、前导 0 清除等细节&lt;/li&gt;
&lt;li&gt;不允许使用 BigInt、Number 等将字符串转换为数字&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;考察对字符串操作的熟练程度和大数模拟乘法逻辑实现能力&lt;/li&gt;
&lt;li&gt;掌握多位数相乘的数学原理，模拟竖式乘法&lt;/li&gt;
&lt;li&gt;考察对数组操作、进位处理、边界情况的处理能力&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一原理说明"&gt;一、原理说明&lt;/h4&gt;
&lt;p&gt;由于不能直接将字符串转为整数，需模拟“&lt;strong&gt;逐位乘法 + 进位处理&lt;/strong&gt;”，如同手动计算多位乘法（竖式）一样：&lt;/p&gt;</description></item><item><title>滴滴-社招-3年 · 第 1 轮 · 二面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-93/</link><pubDate>Mon, 28 Jul 2025 03:27:35 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-93/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-92/"&gt;第 1 轮&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/"&gt;返回本次面经&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-94/"&gt;第 1 轮&lt;/a&gt; →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; react hooks、列表和key、高阶组件、性能优化、react 渲染机制、React函数组件更新、react 组件设计模式、全方位解读this、类型判断&lt;/p&gt;
&lt;p&gt;本轮共 14 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-26e1dc3b0dcc"&gt;1. 项目中遇到的最大技术挑战是什么&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-69995578c3fa"&gt;2. 项目整体架构是什么样的&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-6df78bf9f0d6"&gt;3. 在项目中，你们是如何进行前端代码的模块化和组件化的&lt;/h2&gt;
&lt;h3 id="题目要点-2"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;模块化：代码拆分成独立功能模块，使用 ES Module 标准&lt;br&gt;&lt;/li&gt;
&lt;li&gt;组件化：UI拆分成可复用组件，封装结构、样式和逻辑&lt;br&gt;&lt;/li&gt;
&lt;li&gt;结合构建工具支持模块管理和代码分割&lt;br&gt;&lt;/li&gt;
&lt;li&gt;组件通信通过 props、事件、状态管理实现&lt;br&gt;&lt;/li&gt;
&lt;li&gt;合理设计文件结构和规范，提升维护性和扩展性&lt;br&gt;&lt;/li&gt;
&lt;li&gt;注意职责单一、样式隔离和性能优化&lt;br&gt;&lt;/li&gt;
&lt;li&gt;防止模块和组件划分不合理导致管理混乱&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;理解模块化和组件化的概念及其在前端开发中的重要性&lt;br&gt;&lt;/li&gt;
&lt;li&gt;熟悉常见的模块化规范（如 CommonJS、ES Module）及其区别&lt;br&gt;&lt;/li&gt;
&lt;li&gt;掌握组件化设计思想和实现方式，尤其是在主流框架中的实践&lt;br&gt;&lt;/li&gt;
&lt;li&gt;能结合项目需求合理组织代码结构，提高复用性和维护性&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一原理说明"&gt;一、原理说明&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;模块化&lt;/strong&gt; 指将代码拆分成独立的、功能明确的模块，每个模块有自己的作用域和接口，避免全局污染，提高代码可维护性。&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;常见规范包括：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CommonJS&lt;/strong&gt;（Node.js环境，使用 &lt;code&gt;require&lt;/code&gt; 和 &lt;code&gt;module.exports&lt;/code&gt;）&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AMD&lt;/strong&gt;（异步模块定义，适用于浏览器异步加载）&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ES Module（ESM）&lt;/strong&gt;（现代标准，使用 &lt;code&gt;import&lt;/code&gt; 和 &lt;code&gt;export&lt;/code&gt;，支持静态分析）&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;组件化&lt;/strong&gt; 是模块化的进一步细化，专注于 UI 层面，将界面拆分成独立且可复用的组件，封装逻辑、样式和结构。&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;组件通常包含状态管理、事件处理、生命周期管理等，方便组合和维护。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;主流框架如 Vue、React、Angular 都鼓励基于组件开发。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="二项目中模块化和组件化的实践"&gt;二、项目中模块化和组件化的实践&lt;/h4&gt;
&lt;h5 id="1-模块化管理"&gt;1. &lt;strong&gt;模块化管理&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;项目采用 &lt;strong&gt;ES Module&lt;/strong&gt; 作为标准模块规范，利用 &lt;code&gt;import&lt;/code&gt; 和 &lt;code&gt;export&lt;/code&gt; 进行模块间依赖管理。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;通过合理拆分功能模块（如工具库、接口服务、状态管理、业务逻辑）形成清晰的依赖关系，便于维护和测试。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;使用构建工具（Webpack、Vite）支持模块打包和代码分割，提高加载效率。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;配合 &lt;code&gt;alias&lt;/code&gt; 和路径管理，保持模块引用简洁，提升开发体验。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="2-组件化设计"&gt;2. &lt;strong&gt;组件化设计&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;界面层面，拆分成粒度合适的可复用组件，满足单一职责原则。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;采用状态提升、属性传递和事件回调机制实现组件间通信。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;使用组件库（如 Element UI、Ant Design）或自研组件库提升开发效率。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;结合样式模块化（CSS Modules、Scoped CSS、CSS-in-JS）实现样式隔离，防止样式冲突。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;组件支持配置化和插槽机制，提高灵活性和扩展性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="3-代码组织结构"&gt;3. &lt;strong&gt;代码组织结构&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;按业务域或功能划分文件夹，模块和组件分层清晰，便于定位和扩展。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;统一入口导出，方便模块聚合和复用。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;编写完善的文档和规范，确保团队成员对模块和组件使用方式达成共识。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="4-优势与价值"&gt;4. &lt;strong&gt;优势与价值&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;提高代码复用率，减少重复开发和维护成本。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;降低耦合度，提升系统可扩展性。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;加快开发节奏，方便多人协作。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;利用现代构建工具实现性能优化。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="三常见误区与注意点"&gt;三、常见误区与注意点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;模块划分过细或过粗&lt;/strong&gt; 导致管理困难或代码臃肿，需根据项目复杂度合理拆分。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;组件职责不明确&lt;/strong&gt;，混合业务逻辑和表现层，影响复用和测试。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;忽视样式隔离，导致样式污染和冲突。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;组件间通信设计不合理，导致状态管理混乱。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;忽略模块和组件的性能优化，如避免无意义的重新渲染和重复加载。&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-43824f1001b4"&gt;4. 项目中做过哪些性能优化方面的工作&lt;/h2&gt;
&lt;h3 id="题目要点-3"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;资源按需加载与代码拆分减少首屏加载时间&lt;br&gt;&lt;/li&gt;
&lt;li&gt;静态资源压缩、合并和 CDN 加速&lt;br&gt;&lt;/li&gt;
&lt;li&gt;图片优化与懒加载&lt;br&gt;&lt;/li&gt;
&lt;li&gt;减少 DOM 操作，合理使用虚拟 DOM&lt;br&gt;&lt;/li&gt;
&lt;li&gt;JS 任务拆分，使用防抖节流和 Web Worker&lt;br&gt;&lt;/li&gt;
&lt;li&gt;接口合并、缓存和 HTTP/2 多路复用&lt;br&gt;&lt;/li&gt;
&lt;li&gt;持续性能监控与数据驱动优化&lt;br&gt;&lt;/li&gt;
&lt;li&gt;避免过度拆分和缓存策略失误&lt;br&gt;&lt;/li&gt;
&lt;li&gt;注重整体性能和用户设备多样性&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点-1"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;理解前端性能优化的核心目标与常见瓶颈&lt;br&gt;&lt;/li&gt;
&lt;li&gt;掌握多种性能优化手段及其适用场景&lt;br&gt;&lt;/li&gt;
&lt;li&gt;能结合具体项目场景，分析问题并提出有效优化策略&lt;br&gt;&lt;/li&gt;
&lt;li&gt;熟悉常用性能监控和评估工具，验证优化效果&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案-1"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一原理说明-1"&gt;一、原理说明&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;前端性能优化的核心目标是提升页面加载速度、响应速度和交互流畅度，从而改善用户体验，降低用户流失。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;性能瓶颈通常来源于资源加载慢、渲染阻塞、JavaScript 执行耗时、内存泄漏和网络请求频繁等。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;现代性能优化涉及多个层面，包括网络层、资源层、渲染层和代码执行层。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;性能优化不仅是技术问题，更涉及合理架构设计和业务合理拆分。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="二项目中的具体优化实践"&gt;二、项目中的具体优化实践&lt;/h4&gt;
&lt;h5 id="1-资源加载优化"&gt;1. &lt;strong&gt;资源加载优化&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;采用代码拆分（Code Splitting）和按需加载，避免一次性加载大量无关代码，缩短首屏加载时间。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;使用 CDN 分发静态资源，提升资源下载速度。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;资源压缩和合并（如压缩 JS/CSS，合并小文件减少请求数量）。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;图片优化（WebP 格式替代、图片懒加载、合理尺寸裁剪）。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;利用浏览器缓存策略（Cache-Control、Service Worker）减少重复请求。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="2-渲染性能优化"&gt;2. &lt;strong&gt;渲染性能优化&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;减少 DOM 操作次数，合并多次修改，避免触发频繁回流和重绘。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;使用虚拟 DOM 和虚拟列表技术优化大量数据渲染。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;CSS 动画尽量使用 GPU 加速属性（如 transform、opacity）。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;避免长任务阻塞主线程，合理拆分 JS 任务，防止界面卡顿。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="3-javascript-执行优化"&gt;3. &lt;strong&gt;JavaScript 执行优化&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;减少不必要的计算和事件绑定，防抖节流常用来优化频繁触发的事件。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;使用 Web Worker 将计算密集型任务移至后台线程，避免主线程阻塞。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;利用 Tree Shaking 去除未使用代码，减小包体积。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;预编译和缓存机制提升运行效率。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="4-网络请求优化"&gt;4. &lt;strong&gt;网络请求优化&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;接口合并，减少请求次数。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;接口缓存，避免重复请求同一数据。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;接口压缩与批量请求。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;使用 HTTP/2 多路复用，提升请求并发性能。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="5-性能监控与持续优化"&gt;5. &lt;strong&gt;性能监控与持续优化&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;集成性能监控工具（如 Lighthouse、Chrome DevTools Performance、RUM 埋点等）。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;通过埋点监控首屏时间、接口响应时间、动画帧率等关键指标。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;根据监控数据持续跟踪性能瓶颈，迭代优化。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="三常见误区与注意点-1"&gt;三、常见误区与注意点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;只注重单一优化手段，忽视整体性能提升策略。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;盲目过度拆分导致请求过多，反而影响性能。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;缓存设置不合理，导致用户看到过期内容。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;不关注性能监控数据，缺乏闭环改进。&lt;br&gt;&lt;/li&gt;
&lt;li&gt;忽视用户设备差异，优化方案不够适配低端设备。&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-bfa8d18a2415"&gt;5. 在移动端开发中，你们是如何处理不同设备的适配问题的&lt;/h2&gt;
&lt;h3 id="题目要点-4"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;了解并使用 viewport 设置布局基础&lt;/li&gt;
&lt;li&gt;灵活组合 rem/vw/flex/media query 等单位和布局方案&lt;/li&gt;
&lt;li&gt;使用 postcss 工具链统一适配流程&lt;/li&gt;
&lt;li&gt;考虑高DPR设备图像清晰度适配&lt;/li&gt;
&lt;li&gt;针对横屏、Pad 等极端设备考虑额外样式方案&lt;/li&gt;
&lt;li&gt;注重兼容性测试，处理浏览器差异&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点-2"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;是否了解常见的移动端适配方案及原理&lt;br&gt;&lt;/li&gt;
&lt;li&gt;是否能结合业务场景选择合理的适配策略&lt;br&gt;&lt;/li&gt;
&lt;li&gt;是否关注兼容性、用户体验和性能平衡&lt;br&gt;&lt;/li&gt;
&lt;li&gt;是否能系统性总结适配技术手段的优缺点&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案-2"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一适配问题的来源"&gt;一、适配问题的来源&lt;/h4&gt;
&lt;p&gt;移动端设备种类繁多，存在如下适配挑战：&lt;/p&gt;</description></item><item><title>滴滴-社招-3年 · 第 1 轮 · 一面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-92/</link><pubDate>Mon, 28 Jul 2025 03:15:10 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-92/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← 已是第一轮 · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/"&gt;返回本次面经&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-59/round-93/"&gt;第 1 轮&lt;/a&gt; →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; z-index、布局技巧、Flexbox、优化性能、react hooks、浏览器渲染过程、浏览器的缓存机制、浏览器的垃圾回收机制&lt;/p&gt;
&lt;p&gt;本轮共 11 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-920e774f1156"&gt;1. 讲一下可视化搭建平台中魔方组件的设计与实现难点&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-6898841d5b91"&gt;2. 如何解决多模块叠加时的z-index管理问题&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;z-index&lt;/code&gt; 基于层叠上下文，简单数字不能保证全局一致性&lt;/li&gt;
&lt;li&gt;建立统一 z-index 管理系统（如 Z_INDEX_MAP）是可维护的关键&lt;/li&gt;
&lt;li&gt;模块内部创建局部 stacking context，避免全局冲突&lt;/li&gt;
&lt;li&gt;动态模块如拖拽、浮层应使用自动 z-index 分配策略&lt;/li&gt;
&lt;li&gt;避免滥用 z-index，建议结合 portal、绝对定位和容器设计实现可控叠加&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;面试官想了解你在复杂 UI 组件系统中的图层管理策略&lt;/li&gt;
&lt;li&gt;探查你对 &lt;code&gt;z-index&lt;/code&gt; 的工作机制、层级上下文（stacking context）的理解&lt;/li&gt;
&lt;li&gt;是否具备系统化组织多模块图层关系的经验，能避免冲突和错乱&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一z-index-背后机制与问题本质"&gt;一、z-index 背后机制与问题本质&lt;/h4&gt;
&lt;h5 id="1-z-index-的作用机制"&gt;1. z-index 的作用机制&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;z-index&lt;/code&gt; 定义元素在“同一层叠上下文（stacking context）”中的前后顺序&lt;/li&gt;
&lt;li&gt;层叠上下文由具有特定属性的元素（如&lt;code&gt;position: relative/absolute/fixed&lt;/code&gt; + &lt;code&gt;z-index&lt;/code&gt;）创建&lt;/li&gt;
&lt;li&gt;每个层叠上下文是独立的，只影响自身子元素的层叠关系&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="2-可视化搭建系统的典型挑战"&gt;2. 可视化搭建系统的典型挑战&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;多模块（如弹窗、悬浮面板、组件拖拽层、选中态）频繁叠加，若统一用裸 &lt;code&gt;z-index&lt;/code&gt; 数字管理，非常容易：
&lt;ul&gt;
&lt;li&gt;维护混乱&lt;/li&gt;
&lt;li&gt;层级冲突（某组件盖住了弹窗）&lt;/li&gt;
&lt;li&gt;模块互相影响，难以解耦&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="二系统化的-z-index-管理方案"&gt;二、系统化的 z-index 管理方案&lt;/h4&gt;
&lt;h5 id="1-建立统一的层级管理规范z-index-map"&gt;1. 建立统一的层级管理规范（z-index Map）&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;在系统中定义一套统一的 z-index 枚举表，例如：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ts" data-lang="ts"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;export&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Z_INDEX_MAP&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;base&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;component&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;10&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;floatingPanel&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;100&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;modal&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;1000&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;tooltip&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;2000&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;dragLayer&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;3000&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;globalMask&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;9999&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;所有模块只能从该映射中引用 z-index，禁止硬编码数字，避免冲突&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="2-模块隔离建立明确的层叠上下文边界"&gt;2. 模块隔离，建立明确的层叠上下文边界&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;position: relative/absolute&lt;/code&gt; + &lt;code&gt;z-index&lt;/code&gt;，每个模块在其容器内控制层级&lt;/li&gt;
&lt;li&gt;避免所有元素在一个全局层叠上下文中争夺 z-index&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="3-动态-z-index-分配机制如拖拽时临时置顶"&gt;3. 动态 z-index 分配机制（如拖拽时临时置顶）&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;为拖拽、临时弹出等模块动态分配最高层级，例如：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ts" data-lang="ts"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dynamicZIndex&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Z_INDEX_MAP&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;dragLayer&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getNextZIndex() {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dynamicZIndex&lt;/span&gt;&lt;span style="color:#f92672"&gt;++&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;使多个拖拽元素在交互中可动态置顶，不影响整体秩序&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="4-可视化调试工具辅助"&gt;4. 可视化调试工具辅助&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;引入 DevTool 插件或内嵌 z-index 层级可视化辅助组件，用不同颜色或 label 显示当前模块层级，便于调试&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="三z-index-冲突的实际案例与应对策略"&gt;三、z-index 冲突的实际案例与应对策略&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：浮层 A（z-index: 200）被浮层 B（z-index: 100）遮挡&lt;/p&gt;</description></item><item><title>滴滴-社招-2年 · 第 1 轮 · 二面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-57/round-90/</link><pubDate>Mon, 28 Jul 2025 02:28:18 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-57/round-90/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-57/round-89/"&gt;第 1 轮&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-57/"&gt;返回本次面经&lt;/a&gt; · 已是最后一轮 →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; WebWorker、Canvas 和 SVG&lt;/p&gt;
&lt;p&gt;本轮共 10 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-ee1b2317997f"&gt;1. 自我介绍，项目介绍&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-5057de803a73"&gt;2. 为什么选择Vue3+TS而非React&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-d894c5540f67"&gt;3. 你们用的是什么脚手架，脚手架的基本原理了解么&lt;/h2&gt;
&lt;h3 id="题目要点-2"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;脚手架是提升工程效率、统一规范的工具&lt;/li&gt;
&lt;li&gt;底层通过 Node.js 实现文件复制、模板注入、命令执行&lt;/li&gt;
&lt;li&gt;常用工具：Vue CLI、CRA、Vite、自研 CLI（基于 Plop、Yeoman）&lt;/li&gt;
&lt;li&gt;企业通常自研脚手架实现快速初始化、统一配置和组件生成&lt;/li&gt;
&lt;li&gt;掌握核心原理（模板渲染、交互、文件操作）有助于二次开发&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;面试官希望了解你是否具备工程化思维&lt;br&gt;&lt;/li&gt;
&lt;li&gt;是否熟悉当前项目所用的脚手架工具及其底层实现原理&lt;br&gt;&lt;/li&gt;
&lt;li&gt;是否理解脚手架在项目初始化、规范约定、自动化等方面的作用&lt;br&gt;&lt;/li&gt;
&lt;li&gt;是否具备定制或维护脚手架的能力&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一常用脚手架工具及我们团队的选择"&gt;一、常用脚手架工具及我们团队的选择&lt;/h4&gt;
&lt;p&gt;我们项目主要使用的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vue 项目&lt;/strong&gt;：使用 &lt;code&gt;@vue/cli&lt;/code&gt;、&lt;code&gt;vite&lt;/code&gt; 或公司自研的内部模板系统&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;React 项目&lt;/strong&gt;：早期使用 &lt;code&gt;create-react-app&lt;/code&gt;，后续迁移为 &lt;code&gt;Vite + 自定义模板&lt;/code&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自研脚手架&lt;/strong&gt;：基于 &lt;code&gt;Plop.js&lt;/code&gt;、&lt;code&gt;Yeoman&lt;/code&gt;、&lt;code&gt;Commander&lt;/code&gt; 或 &lt;code&gt;create-*&lt;/code&gt; 实现，通过 Node.js 实现项目初始化、目录结构生成、依赖安装、git 初始化等功能&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="二脚手架的核心功能"&gt;二、脚手架的核心功能&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;初始化项目结构&lt;/strong&gt;（生成项目目录和基础文件）&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注入标准化配置&lt;/strong&gt;（eslint、prettier、commitlint、husky、tsconfig等）&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自动安装依赖&lt;/strong&gt;（npm/yarn/pnpm install）&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;选择模板和功能模块&lt;/strong&gt;（用户选择功能特性，动态生成对应模块）&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自定义交互式命令行（CLI）&lt;/strong&gt;（使用 inquirer 等库实现配置选择）&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生成代码片段/组件&lt;/strong&gt;（如 &lt;code&gt;plop generate component&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="三脚手架的实现原理"&gt;三、脚手架的实现原理&lt;/h4&gt;
&lt;p&gt;脚手架本质上是基于 Node.js 脚本，通过命令行交互完成初始化和代码生成，主要原理包括：&lt;/p&gt;</description></item><item><title>滴滴-社招-2年 · 第 1 轮 · 一面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-57/round-89/</link><pubDate>Mon, 28 Jul 2025 02:20:14 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-57/round-89/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← 已是第一轮 · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-57/"&gt;返回本次面经&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-57/round-90/"&gt;第 1 轮&lt;/a&gt; →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; 生命周期、Vue3 API、响应式原理、v-for、事件循环&lt;/p&gt;
&lt;p&gt;本轮共 21 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-2245b14e802d"&gt;1. 为什么使用 &lt;header&gt; 而非 &lt;div class="header"&gt;&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;是HTML5语义化标签，明确头部区域含义&lt;br&gt;&lt;/li&gt;
&lt;li&gt;语义化标签有助于SEO和辅助技术识别&lt;br&gt;&lt;/li&gt;
&lt;li&gt;提高代码可读性和维护性，减少依赖类名赋予语义&lt;br&gt;&lt;/li&gt;
&lt;li&gt;推荐优先使用语义标签代替无语义的&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;+类名组合&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;理解HTML语义化标签的重要性及作用&lt;br&gt;&lt;/li&gt;
&lt;li&gt;掌握语义化标签对SEO和无障碍的影响&lt;br&gt;&lt;/li&gt;
&lt;li&gt;了解语义化标签在开发协作和维护中的优势&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一语义化标签的核心概念"&gt;一、语义化标签的核心概念&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;HTML5引入了如 &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt; 等语义化标签，明确表达页面结构和内容含义&lt;br&gt;&lt;/li&gt;
&lt;li&gt;语义化标签比普通 &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 搭配类名更具意义，利于浏览器、搜索引擎、辅助设备等理解页面&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="二使用-header-的优势"&gt;二、使用 &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; 的优势&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;明确语义&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;表示页面或区块的头部区域，包含标题、导航等信息&lt;br&gt;&lt;/li&gt;
&lt;li&gt;比 &lt;code&gt;&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;/code&gt; 直接通过类名赋予语义更标准、易识别&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;提升可访问性&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;语义化标签被屏幕阅读器等辅助技术识别，帮助视障用户理解页面结构&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;使辅助设备快速定位页眉内容，提升用户体验&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SEO友好&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;搜索引擎利用语义标签准确抓取页面结构和重点内容&lt;br&gt;&lt;/li&gt;
&lt;li&gt;语义标签利于内容分类和权重判断，可能提高搜索排名&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;代码规范与维护&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;语义化标签增强代码自解释性，方便团队协作和代码维护&lt;br&gt;&lt;/li&gt;
&lt;li&gt;减少对类名、ID等非结构性属性的依赖，代码更简洁清晰&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="三使用场景对比"&gt;三、使用场景对比&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;适合定义页面或区块的头部区域&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;/code&gt;仅作为普通容器，没有内置语义&lt;br&gt;&lt;/li&gt;
&lt;li&gt;两者均可通过CSS样式控制外观，但语义化标签具备结构语义&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-247f9e07b586"&gt;2. SEO和可访问性有何影响&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;语义化标签提升SEO抓取效率和内容权重分配&lt;br&gt;&lt;/li&gt;
&lt;li&gt;结构化页面内容，增强搜索引擎对重点信息的识别能力&lt;br&gt;&lt;/li&gt;
&lt;li&gt;语义标签是辅助技术识别页面结构的关键，提升可访问性&lt;br&gt;&lt;/li&gt;
&lt;li&gt;有助于残障用户快速导航和理解页面&lt;br&gt;&lt;/li&gt;
&lt;li&gt;符合无障碍标准，降低法律和合规风险&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点-1"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;理解SEO（搜索引擎优化）对网页结构和内容的重要性&lt;br&gt;&lt;/li&gt;
&lt;li&gt;掌握语义化标签对搜索引擎抓取的正面影响&lt;br&gt;&lt;/li&gt;
&lt;li&gt;了解可访问性（Accessibility）概念及辅助技术如何利用语义标签&lt;br&gt;&lt;/li&gt;
&lt;li&gt;能说明如何通过结构优化提升用户体验及业务价值&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案-1"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一seo影响"&gt;一、SEO影响&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;语义化标签助力搜索引擎理解页面结构&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;</description></item><item><title>滴滴-社招-1年 · 第 1 轮 · 三面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-88/</link><pubDate>Mon, 28 Jul 2025 02:03:06 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-88/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-87/"&gt;第 1 轮&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/"&gt;返回本次面经&lt;/a&gt; · 已是最后一轮 →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本轮共 15 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-fcde3fad466c"&gt;1. 介绍一下实习项目的业务背景（这块说了蛮久）&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-e13e2c7222bb"&gt;2. 假如你是一个项目的负责人，面对一个新需求你会如何判断以及决策&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;业务价值与需求背景明确 / 技术可行性与风险评估 / 资源与时间合理估算&lt;br&gt;&lt;/li&gt;
&lt;li&gt;多方案设计与优劣比较 / 风险预判及缓解措施&lt;br&gt;&lt;/li&gt;
&lt;li&gt;结合团队和业务做权衡决策 / 明确执行计划与责任 / 持续跟进与复盘优化&lt;br&gt;&lt;/li&gt;
&lt;li&gt;沟通协调能力和风险管理能力是关键&lt;br&gt;&lt;/li&gt;
&lt;li&gt;决策既考虑短期交付，也兼顾长期维护和团队承受能力&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;评估候选人对需求分析和项目管理流程的理解&lt;br&gt;&lt;/li&gt;
&lt;li&gt;探查其在技术可行性、资源评估、风险管理等方面的判断能力&lt;br&gt;&lt;/li&gt;
&lt;li&gt;了解候选人如何在多方利益、时间与质量之间做权衡决策&lt;br&gt;&lt;/li&gt;
&lt;li&gt;关注其沟通协调和方案落地的思路&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一需求理解与评估"&gt;一、需求理解与评估&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;明确需求背景和目标&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;充分沟通业务方，理解需求的业务价值、核心目标和痛点&lt;br&gt;&lt;/li&gt;
&lt;li&gt;判断该需求是新增功能、优化还是技术债清理&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;技术可行性分析&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;评估现有系统架构、技术栈对该需求的支持程度&lt;br&gt;&lt;/li&gt;
&lt;li&gt;识别技术难点和潜在风险，如性能、安全、兼容性等问题&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;资源与时间评估&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;估算开发、测试、上线所需的人力、时间和成本&lt;br&gt;&lt;/li&gt;
&lt;li&gt;考虑团队现有工作负载，排期合理性&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="二方案设计与风险控制"&gt;二、方案设计与风险控制&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设计多套实现方案&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;比较不同方案的优劣，如技术复杂度、扩展性、维护成本&lt;br&gt;&lt;/li&gt;
&lt;li&gt;结合业务优先级和技术条件选择最优方案&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;风险预判与缓解&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;识别潜在风险点，设计应对措施（如技术预研、灰度发布）&lt;br&gt;&lt;/li&gt;
&lt;li&gt;规划阶段性验收，快速反馈，减少偏差&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="三决策与执行"&gt;三、决策与执行&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;结合业务战略和团队实际作出决策&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;权衡需求价值与资源限制，明确是否优先推动或延期&lt;br&gt;&lt;/li&gt;
&lt;li&gt;与产品、设计、测试等多方协作，达成共识&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;推动方案落地&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;制定详细开发计划，分解任务，明确负责人和时间节点&lt;br&gt;&lt;/li&gt;
&lt;li&gt;跟踪进展，快速解决过程中出现的问题&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;复盘与优化&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需求完成后组织复盘，总结经验，优化流程&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-c5e77b182a65"&gt;3. 功能上线后如何判断这个功能上线前后的影响和优化有多少呢&lt;/h2&gt;
&lt;h3 id="题目要点-2"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;明确功能目标和关键评估指标 / 多渠道数据采集与监控&lt;br&gt;&lt;/li&gt;
&lt;li&gt;功能上线前后指标对比 / A/B测试验证功能效果&lt;br&gt;&lt;/li&gt;
&lt;li&gt;用户反馈与定性分析辅助判断&lt;br&gt;&lt;/li&gt;
&lt;li&gt;定位影响原因，制定优化方案&lt;br&gt;&lt;/li&gt;
&lt;li&gt;持续监控、复盘和迭代形成闭环&lt;br&gt;&lt;/li&gt;
&lt;li&gt;兼顾数据驱动与用户体验&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点-1"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;理解功能上线后效果评估的重要性及方法&lt;br&gt;&lt;/li&gt;
&lt;li&gt;掌握多维度数据监控和指标分析手段&lt;br&gt;&lt;/li&gt;
&lt;li&gt;能结合业务目标设计合理的评估方案&lt;br&gt;&lt;/li&gt;
&lt;li&gt;理解A/B测试、用户行为分析、性能监控等工具的应用&lt;br&gt;&lt;/li&gt;
&lt;li&gt;关注持续优化与反馈闭环&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案-1"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一明确评估目标和关键指标kpi"&gt;一、明确评估目标和关键指标（KPI）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;结合业务目标确定功能上线的核心衡量指标，如用户活跃度、转化率、留存率、错误率等&lt;br&gt;&lt;/li&gt;
&lt;li&gt;设计具体可量化的指标体系，保证评估具备科学性和针对性&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="二数据采集与监控"&gt;二、数据采集与监控&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;利用埋点、日志采集用户行为数据，覆盖点击、浏览、交互等关键操作&lt;br&gt;&lt;/li&gt;
&lt;li&gt;结合前端性能监控（如首屏时间、接口响应时间）与错误监控（JS报错、接口失败）&lt;br&gt;&lt;/li&gt;
&lt;li&gt;设置告警机制，实时监测异常情况&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="三功能上线前后的对比分析"&gt;三、功能上线前后的对比分析&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;历史对比&lt;/strong&gt;：将上线前后的关键指标进行趋势对比，分析变化幅度和方向&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;同类用户对比&lt;/strong&gt;：如果可行，采用A/B测试，控制组与实验组对比，确保因果关系明确&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用户反馈收集&lt;/strong&gt;：结合用户调查、客服反馈等定性信息辅助判断&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="四分析影响及优化空间"&gt;四、分析影响及优化空间&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;识别指标波动背后的具体原因，如性能瓶颈、交互体验问题等&lt;br&gt;&lt;/li&gt;
&lt;li&gt;结合用户反馈发现潜在需求或痛点&lt;br&gt;&lt;/li&gt;
&lt;li&gt;制定针对性优化方案，优先解决影响最大的瓶颈&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="五持续迭代与复盘"&gt;五、持续迭代与复盘&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;将监控和分析形成常态化流程，确保功能优化闭环&lt;br&gt;&lt;/li&gt;
&lt;li&gt;定期复盘评估结果，总结经验教训&lt;br&gt;&lt;/li&gt;
&lt;li&gt;结合业务目标调整优化策略，持续提升功能效果&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-bf34aa50fb92"&gt;4. 有去了解过用户反馈最多的问题或者诉求最强的问题是什么吗&lt;/h2&gt;
&lt;h3 id="题目要点-3"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;</description></item><item><title>滴滴-社招-1年 · 第 1 轮 · 二面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-87/</link><pubDate>Mon, 28 Jul 2025 01:53:33 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-87/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-86/"&gt;第 1 轮&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/"&gt;返回本次面经&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-88/"&gt;第 1 轮&lt;/a&gt; →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; 浏览器渲染过程&lt;/p&gt;
&lt;p&gt;本轮共 11 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-038c546ee8da"&gt;1. 简单介绍一下你上一段实习中觉得做的比较好的项目&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-139b60ddec82"&gt;2. 想知道你们的项目大概是什么样的结构，你在开发的时候会从什么地方下手&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;理解项目结构和流程是高效开发的基础&lt;br&gt;&lt;/li&gt;
&lt;li&gt;先从入口和路由入手，理清全局数据和功能模块&lt;br&gt;&lt;/li&gt;
&lt;li&gt;注重调试和测试，减少开发盲点&lt;br&gt;&lt;/li&gt;
&lt;li&gt;合理利用团队协作工具提升开发效率&lt;br&gt;&lt;/li&gt;
&lt;li&gt;持续学习和总结，快速适应项目迭代&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;h3 id="考察点"&gt;考察点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;理解典型前端项目的整体结构及模块划分&lt;br&gt;&lt;/li&gt;
&lt;li&gt;掌握从项目启动到开发流程的系统思路&lt;br&gt;&lt;/li&gt;
&lt;li&gt;能清晰描述如何快速定位入口及关键代码区域&lt;br&gt;&lt;/li&gt;
&lt;li&gt;展示合理的开发习惯与代码管理思路&lt;br&gt;&lt;/li&gt;
&lt;li&gt;体现对团队协作和版本控制的认知&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="参考答案"&gt;参考答案&lt;/h3&gt;
&lt;h4 id="一典型前端项目结构说明"&gt;一、典型前端项目结构说明&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;目录结构&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;src/&lt;/code&gt;：项目源码，包含页面（Page）、组件（Component）、样式（Styles）、工具函数（Utils）、状态管理（Store）等&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;public/&lt;/code&gt; 或 &lt;code&gt;static/&lt;/code&gt;：静态资源，如图片、字体、favicon 等&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;build/&lt;/code&gt; 或 &lt;code&gt;scripts/&lt;/code&gt;：构建相关脚本和配置&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config/&lt;/code&gt;：环境配置文件，如开发、测试、生产环境参数&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tests/&lt;/code&gt;：单元测试和集成测试代码&lt;br&gt;&lt;/li&gt;
&lt;li&gt;配置文件如 &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;.babelrc&lt;/code&gt;, &lt;code&gt;webpack.config.js&lt;/code&gt; 或 &lt;code&gt;vite.config.js&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;关键文件&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;入口文件（如 &lt;code&gt;src/main.js&lt;/code&gt;、&lt;code&gt;src/index.js&lt;/code&gt;）负责挂载应用&lt;br&gt;&lt;/li&gt;
&lt;li&gt;路由配置文件定义页面导航&lt;br&gt;&lt;/li&gt;
&lt;li&gt;状态管理文件（如 Vuex、Redux）管理全局状态&lt;br&gt;&lt;/li&gt;
&lt;li&gt;公共组件库及工具函数模块&lt;br&gt;&lt;/li&gt;
&lt;li&gt;API 接口封装层，统一管理后端请求&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h4 id="二开发时的切入点及流程"&gt;二、开发时的切入点及流程&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;理解业务和需求&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先明确当前任务目标和业务逻辑&lt;br&gt;&lt;/li&gt;
&lt;li&gt;查阅需求文档、设计稿和接口文档&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;定位项目入口&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从入口文件入手，理清项目启动流程&lt;br&gt;&lt;/li&gt;
&lt;li&gt;理解路由配置，确定目标页面&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;代码结构梳理&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;理解页面层与组件层的关系&lt;br&gt;&lt;/li&gt;
&lt;li&gt;查找关键组件和功能模块的实现&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查看状态管理和数据流&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;</description></item><item><title>滴滴-社招-1年 · 第 1 轮 · 一面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-86/</link><pubDate>Mon, 28 Jul 2025 01:45:16 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-86/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← 已是第一轮 · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/"&gt;返回本次面经&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-56/round-87/"&gt;第 1 轮&lt;/a&gt; →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; 响应式原理、Webpack与Vite、https、浏览器渲染过程、浏览器的缓存机制&lt;/p&gt;
&lt;p&gt;本轮共 19 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-1760562f8190"&gt;1. 介绍一下简历中的组件库项目&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;略&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-dc78e2f9-568a-445d-988c-594092179848"&gt;2. 聊聊 vite 和 webpack 的区别&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;题库原题：&lt;a href="https://fe.ecool.fun/topic/dc78e2f9-568a-445d-988c-594092179848"&gt;聊聊 vite 和 webpack 的区别&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Webpack&lt;/strong&gt;：成熟的模块打包工具，功能强大但配置复杂，适合需要高度定制和复杂构建需求的项目。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vite&lt;/strong&gt;：现代化的开发工具，提供快速的开发体验和优化的生产构建，适合追求开发效率和现代化特性的项目。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择 Vite 还是 Webpack 取决于项目的需求和开发团队的偏好。如果重点是开发体验和快速反馈，Vite 是一个很好的选择。如果需要高度定制化和广泛的插件支持，Webpack 可能更适合。&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;Vite 和 Webpack 都是前端打包工具，它们的作用类似，但实现方式和使用方法有所不同。以下是它们之间的一些区别：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;构建速度&lt;/strong&gt;：Vite 的构建速度比 Webpack 更快，因为 Vite 在开发环境下使用了浏览器原生的 ES 模块加载，而不是像 Webpack 一样使用打包后的文件进行模块加载。在 Vite 中，每个模块都可以独立地进行编译和缓存，这意味着它只需要重新编译修改过的模块，而不是整个应用程序。这使得 Vite 开发起来更加高效。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置复杂度&lt;/strong&gt;：Vite 的配置相对更简单，因为它无需进行大量的配置，只需指定一些基本的选项就可以开始开发。Webpack 的配置更加复杂，需要针对具体项目进行不同的配置，且需要理解各种插件、Loader 等概念。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;生态环境&lt;/strong&gt;：Webpack 的生态环境更加成熟，在社区中拥有广泛的支持和丰富的插件库。而 Vite 尚处于发展阶段，尽管其已经获得了很多关注，但其生态系统仍然不太完善。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;功能特性&lt;/strong&gt;：Webpack 是一个功能更加全面的打包工具，支持各种 Loader 和插件，可以处理多种类型的文件和资源。而 Vite 的设计初衷是专注于开发环境下的快速构建，因此其对一些高级特性的支持相对较少。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;综上所述，Vite 更适合用于开发环境下的快速构建，而 Webpack 则更适合用于生产环境下的复杂应用程序的打包处理。选择使用哪种工具需要根据具体项目需求进行评估。&lt;/p&gt;</description></item></channel></rss>