第一部分:React 核心原理与进阶(React 八股)
这部分主要考察你对工具的底层理解,因为在创业公司,我们不仅要写业务,还要造轮子。
1. 渲染原理与 Fiber 架构
-
Fiber 机制: 能讲一下 React Fiber 是为了解决什么问题诞生的吗?它如何利用浏览器空闲时间(RequestIdleCallback)进行任务调度?这对于大型复杂应用(如你的地图项目)有什么意义?
-
Diff 算法: React 的 Diff 算法的时间复杂度是多少?它是通过什么策略将 O(n^3) 降低到 O(n) 的?Key 在其中起到了什么具体作用?
-
渲染控制: 既然你做过性能优化,请问 React 中父组件更新一定会导致子组件更新吗?如何准确控制?
React.memo、useMemo和useCallback的底层原理是什么?(重点考察这里引用的比较和闭包陷阱)。
2. 状态管理(结合你的 Zustand 经验)
-
Zustand vs Redux/Context: JD里提到了 Redux,但你简历用的是 Zustand。能从原理层面(发布订阅模式、Context 依赖注入)对比一下两者的区别吗?为什么 Zustand 在处理高频更新(如你的地图 Marker 更新)时性能可能更好?
-
External Store: React 18 引入了
useSyncExternalStore,你知道它是用来解决什么问题的吗?Zustand 内部是如何利用它来避免 Tearing(撕裂)问题的?
3. React 18 与并发特性
-
Concurrent Mode: 什么是并发模式?
startTransition和useDeferredValue的区别是什么?在你的 AI 聊天打字机效果中,是否有用到这些特性来优化渲染阻塞? -
Batching: React 18 的自动批处理(Automatic Batching)和 React 17 有什么区别?在
setTimeout或fetch回调中表现有何不同?
4. Hooks 与生命周期
-
Hooks 原理: 为什么 Hooks 不能写在条件语句或循环中?React 内部是如何用链表结构维护 Hooks 状态的?
-
副作用清理:
useEffect的 return 函数是在什么时候执行的?它和useLayoutEffect在执行时机上有什么本质区别?(考察对浏览器渲染流水线的理解)。
第二部分:项目深度挖掘(Project Deep Dive)
这部分我会结合你的两个项目(AgentCTF 和 Conflux),针对性地考察AI 交互和复杂状态管理,这也是我们公司最关心的。
针对项目 1:AgentCTF-platform (AI 靶场)
-
关于“双模式 SSE 实时通信” :
-
面试官追问: 你提到了标准 SSE 只支持 GET,但 AI 推演参数很长需要 POST。你说使用了
fetch+ReadableStream,请详细描述一下你是如何处理数据流的chunk解码的? -
技术细节: 如果数据流在传输中途网络抖动导致连接断开,你的前端如何实现“断点续传”或者“无感重连”?在
ReadableStream中如何处理二进制数据和文本数据的边界?
-
-
关于“OpenAPI 契约式开发” :
-
面试官追问: 使用
orval生成代码后,如果有后端的枚举值(Enum)发生变更,前端的构建流程是如何感知的? -
架构思考: 这种生成式的方案,如果后端 API 定义不规范(例如所有字段都是 optional),你在前端如何做类型守卫(Type Guard)来保证运行时安全?
-
-
关于“JWT 无感知刷新” :
- 并发难点: 当页面初始化并发发出 10 个请求,且 Token 刚好过期,如何确保只发送一次刷新 Token 的请求,并让这 10 个请求在刷新成功后继续重试?(请手写或口述这个 Promise 锁/队列的逻辑)。
针对项目 2:Conflux (AI + 暴雨防涝)
-
关于“MapBox 性能优化与 useRef” :
-
React vs Imperative: MapBox 是基于 Canvas/WebGL 的命令式库,而 React 是声明式的。你提到用
useRef管理实例,那么你是如何解决 React State 更新与 MapBox 内部状态不同步的问题的? -
高频渲染: 如果传感器数据以 60FPS 的频率推送,直接
setState会导致 React 频繁 commit。你是如何利用 Zustand 或useRef绕过 React 的 render 阶段直接操作 DOM/Canvas 节点的?(考察对 Transient Updates 的理解)。
-
-
关于“上下文感知的 AI 聊天” :
-
Context 管理: 你提到请求时附带“地图上下文”。如果用户选中的传感器数据量非常大(超过 LLM 的 Context Window),你在前端做了哪些裁剪或压缩策略?
-
流式响应渲染: 当 AI 返回一大段 markdown 格式的分析时,你是如何处理 Markdown 的流式渲染的?有没有遇到过 HTML 标签未闭合导致页面布局崩坏的问题,怎么解决的?
-
-
关于“Tanstack Query”:
- 缓存策略: 在这个实时监控系统中,你是如何配置 Tanstack Query 的
staleTime和gcTime的?对于传感器这种实时性极强的数据,你是选择轮询(Polling)还是完全依赖 SSE?为什么?
- 缓存策略: 在这个实时监控系统中,你是如何配置 Tanstack Query 的