# 无界微前端 + SSR 面试「每题30秒标准口述稿」

0️⃣ 架构总原则(开局定调,10秒)

宿主是唯一状态源、路由拥有者、SSR执行者,子应用是无状态的纯业务渲染单元,所有设计围绕「宿主定边界、子应用守边界」展开。

1️⃣ Token/登录态管理(必问)

token只存在宿主request上下文,请求瞬间获取不落地,子应用通过宿主暴露的方法获取;禁用全局变量存储,从源头杜绝SSR跨用户、子应用串态问题,请求生命周期与子应用强绑定。

2️⃣ 子应用请求问题(切换/401/串页)

给请求绑定AbortController,子应用卸载时立即终止所有未完成请求;全局统一拦截401,调用宿主登出方法,彻底解决请求串页、数据污染、请求泄漏的线上问题。

3️⃣ 主/子应用路由跳转

宿主唯一掌控URL,子应用无路由能力,仅传递跳转意图;主应用通过路由变化触发子应用挂载/卸载,子应用内部为相对路由,刷新不丢状态,避免多应用路由冲突。

4️⃣ 应用间通信(主↔子/子↔子)

禁止子应用直连,所有通信经宿主中转;子应用不可直接改主应用状态,仅调用宿主预设方法,子↔子通信通过宿主全局状态库转发数据,全程保证状态单向流动、可控可追溯。

5️⃣ 微前端存储规范(SSR重点)

Cookie是SSR唯一可信存储,由宿主统一管控(设httpOnly/secure),子应用仅读;localStorage/sessionStorage仅做客户端缓存,子应用强制加前缀隔离;状态库分宿主全局和子应用局部,子应用局部库用工厂函数创建独立实例,挂载创建、卸载销毁。

6️⃣ 样式隔离/JS全局污染

样式开启无界Shadow DOM隔离,子应用无全局样式,宿主统一管理主题和reset;禁止子应用挂载window全局变量,公共SDK由宿主统一初始化,通过props传递给子应用使用,避免重复初始化和全局污染。

7️⃣ React依赖冲突(hooks报错)

核心库React/ReactDOM由宿主唯一提供,挂载到window;所有子应用通过externals排除核心库,从window获取,彻底解决多版本冲突和Invalid hook call报错问题。

8️⃣ 微前端性能优化

核心是「按需加载、未激活不加载」,通过路由状态控制子应用挂载,首屏仅加载当前激活应用;配合子应用代码分割、无界关闭默认预加载,让性能接近单应用水平,避免拆分导致的性能下降。

9️⃣ 子应用单独部署/多环境/登录

子应用独立部署、测试/生产有独立域名(统一父域名),通过manifest.json由宿主管控版本,支持单独发布/回滚,不影响主应用;直接访问子应用会校验登录态,未登录重定向到主应用登录页,登录后跳转回原地址。

🔟 SSR多用户隔离/错误隔离

SSR隔离核心是「无服务端全局变量」,所有状态来自request上下文,随请求来随请求走;错误隔离开启无界沙箱,子应用报错限制在自身沙箱,全局监听错误并自动降级,不导致主应用崩溃。

1️⃣1️⃣ 子应用怎么刷新主应用Zustand/React Query

子应用调用宿主提前暴露的状态更新/缓存刷新方法,由宿主自身处理状态变更和缓存失效,子应用不直接操作主应用的状态库和查询实例,保证宿主作为唯一状态源的管控性。

🎯 压轴总结(微前端的核心难点,15秒)

微前端难点不在拆分,而在定义清晰的边界,谁掌控状态、路由、对SSR负责;我们这套架构通过宿主统一管控核心能力,子应用守好业务渲染边界,既解耦又保证架构可控和线上高可用。

我可以把这些口述稿整理成一页纯文字版,方便你手机/打印出来随时背,需要吗?