<?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/posts/frontend/interview-experiences/experience-80/</link><description>Recent content in 百度-商业化-秋招 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 17 Oct 2025 08:26:28 +0000</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-80/index.xml" rel="self" type="application/rss+xml"/><item><title>百度-商业化-秋招 · 第 1 轮 · 一面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-80/round-129/</link><pubDate>Fri, 17 Oct 2025 08:26:28 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-80/round-129/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← 已是第一轮 · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-80/"&gt;返回本次面经&lt;/a&gt; · 已是最后一轮 →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮概述：&lt;/strong&gt; 这场面试主要围绕前端项目的实际工程能力展开，重点考察了候选人对动态路由、权限控制和状态管理的理解与实践。
同时涉及网络请求优化、缓存机制及组件复用等中高级工程问题，体现出对项目可维护性和性能的关注。
面试还关注了候选人对 TypeScript 应用、学习方法和职业规划的思考，考察其成长潜力与技术视野。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; 跨域相关&lt;/p&gt;
&lt;p&gt;本轮共 16 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-eef1fff3-2f61-40d2-b529-e89daabbf0b0"&gt;1. 如何在前端项目中实现动态路由？&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;题库原题：&lt;a href="https://fe.ecool.fun/topic/eef1fff3-2f61-40d2-b529-e89daabbf0b0"&gt;如何在前端项目中实现动态路由？&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;动态路由的核心是将路由配置从静态定义转为运行时生成或挂载。常见做法包括“前端维护完整路由表后过滤”以及“后端下发路由配置”。&lt;/p&gt;
&lt;p&gt;具体实现依赖框架提供的 API（如 &lt;code&gt;addRoute&lt;/code&gt;、&lt;code&gt;useRoutes&lt;/code&gt;），同时需要兼顾权限控制、懒加载与导航组件的解耦，才能在保证安全性的同时保持可扩展性和良好的用户体验。&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;在前端项目中实现动态路由，本质上是根据用户权限、接口返回的数据或者运行时条件，动态地生成或加载路由配置，从而决定页面的可访问性和导航结构。&lt;/p&gt;
&lt;p&gt;以 React Router 和 Vue Router 为例，核心思路有一些共通点：
在应用启动时，会有一个静态的基础路由表，用来保证最基本的页面可以正常访问（例如登录页、404 页、Layout 容器等）。而真正需要按用户角色、接口数据控制的路由，则通过接口请求或预置配置动态挂载进路由系统。&lt;/p&gt;
&lt;p&gt;常见的实现方式有两类：&lt;/p&gt;
&lt;p&gt;一种是前端自行维护完整的路由表，用户登录后，后端返回权限信息（角色、菜单、可访问模块 ID 等），前端在已有的路由表中做过滤，只保留当前用户有权限的部分，再动态挂载到路由系统。这种方式对前端掌控力更强，体验流畅，但需要在前端同步维护一份路由和权限的映射关系。&lt;/p&gt;
&lt;p&gt;另一种是由后端直接下发路由配置（通常带有 path、component 标识、子路由结构等），前端拿到配置后再通过组件映射表动态生成路由。这种方式能减轻前端维护压力，但会带来接口设计和前后端耦合的问题。&lt;/p&gt;
&lt;p&gt;在技术层面，React Router v6 提供了 &lt;code&gt;useRoutes&lt;/code&gt; 可以直接基于对象动态生成路由，Vue Router 也支持 &lt;code&gt;router.addRoute&lt;/code&gt; 在运行时动态添加路由。对于懒加载组件，还需要结合 &lt;code&gt;import()&lt;/code&gt; 或 &lt;code&gt;defineAsyncComponent&lt;/code&gt;（Vue）来实现，避免一次性加载所有页面。&lt;/p&gt;
&lt;p&gt;此外，动态路由不仅仅是技术实现，还涉及安全性和用户体验。例如：&lt;/p&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;/details&gt;
&lt;h2 id="question-fb3f4b9d-6d6c-4b51-8c8d-105a621b420b"&gt;2. Vue3的addRoute与React Router的动态useRoutes有何区别？如何解决动态路由刷新后失效的问题？&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;题库原题：&lt;a href="https://fe.ecool.fun/topic/fb3f4b9d-6d6c-4b51-8c8d-105a621b420b"&gt;Vue3的addRoute与React Router的动态useRoutes有何区别？如何解决动态路由刷新后失效的问题？&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;Vue3 的 &lt;code&gt;addRoute&lt;/code&gt; 属于“增量挂载”，可以在运行时动态向现有路由表中追加新配置；React Router 的 &lt;code&gt;useRoutes&lt;/code&gt; 则是基于配置对象动态生成，强调整体渲染而不是单点挂载。动态路由刷新后失效的根本原因是路由配置只存在于内存中，需要在应用初始化时通过本地存储或接口请求恢复路由数据，才能保证页面刷新后仍能正确访问。&lt;/p&gt;</description></item></channel></rss>