百度-商业化-秋招 · 第 1 轮 · 一面
← 已是第一轮 · 返回本次面经 · 已是最后一轮 → 本轮概述: 这场面试主要围绕前端项目的实际工程能力展开,重点考察了候选人对动态路由、权限控制和状态管理的理解与实践。 同时涉及网络请求优化、缓存机制及组件复用等中高级工程问题,体现出对项目可维护性和性能的关注。 面试还关注了候选人对 TypeScript 应用、学习方法和职业规划的思考,考察其成长潜力与技术视野。 本轮要点: 跨域相关 本轮共 16 道题。答案默认折叠,便于先自行作答。 1. 如何在前端项目中实现动态路由? 题库原题:如何在前端项目中实现动态路由? 题目要点 动态路由的核心是将路由配置从静态定义转为运行时生成或挂载。常见做法包括“前端维护完整路由表后过滤”以及“后端下发路由配置”。 具体实现依赖框架提供的 API(如 addRoute、useRoutes),同时需要兼顾权限控制、懒加载与导航组件的解耦,才能在保证安全性的同时保持可扩展性和良好的用户体验。 参考答案 在前端项目中实现动态路由,本质上是根据用户权限、接口返回的数据或者运行时条件,动态地生成或加载路由配置,从而决定页面的可访问性和导航结构。 以 React Router 和 Vue Router 为例,核心思路有一些共通点: 在应用启动时,会有一个静态的基础路由表,用来保证最基本的页面可以正常访问(例如登录页、404 页、Layout 容器等)。而真正需要按用户角色、接口数据控制的路由,则通过接口请求或预置配置动态挂载进路由系统。 常见的实现方式有两类: 一种是前端自行维护完整的路由表,用户登录后,后端返回权限信息(角色、菜单、可访问模块 ID 等),前端在已有的路由表中做过滤,只保留当前用户有权限的部分,再动态挂载到路由系统。这种方式对前端掌控力更强,体验流畅,但需要在前端同步维护一份路由和权限的映射关系。 另一种是由后端直接下发路由配置(通常带有 path、component 标识、子路由结构等),前端拿到配置后再通过组件映射表动态生成路由。这种方式能减轻前端维护压力,但会带来接口设计和前后端耦合的问题。 在技术层面,React Router v6 提供了 useRoutes 可以直接基于对象动态生成路由,Vue Router 也支持 router.addRoute 在运行时动态添加路由。对于懒加载组件,还需要结合 import() 或 defineAsyncComponent(Vue)来实现,避免一次性加载所有页面。 此外,动态路由不仅仅是技术实现,还涉及安全性和用户体验。例如: 在前端动态路由实现时,不能只依赖前端的路由控制,还需要后端接口做权限校验,避免用户绕过前端访问受限页面。 路由结构最好和菜单、面包屑等导航组件解耦,通过统一的数据结构管理,保证后续扩展的灵活性。 在大规模项目中,动态路由还常与微前端、模块化加载结合,按需挂载子应用或子模块。 2. Vue3的addRoute与React Router的动态useRoutes有何区别?如何解决动态路由刷新后失效的问题? 题库原题:Vue3的addRoute与React Router的动态useRoutes有何区别?如何解决动态路由刷新后失效的问题? 题目要点 Vue3 的 addRoute 属于“增量挂载”,可以在运行时动态向现有路由表中追加新配置;React Router 的 useRoutes 则是基于配置对象动态生成,强调整体渲染而不是单点挂载。动态路由刷新后失效的根本原因是路由配置只存在于内存中,需要在应用初始化时通过本地存储或接口请求恢复路由数据,才能保证页面刷新后仍能正确访问。 ...