简历追问:低代码变量编辑器与数据总线

关联:全栈工程师简历 > 低代码工作流引擎15分钟:低代码平台15分钟:公式编辑器Tiptap 原子化胶囊如何防止光标越界或被部分删除公式智能提示层的光标位置跟随是如何实现的

对应简历描述

基于 Tiptap/ProseMirror 自研了低代码动态变量编辑器,支持通过 /${} 快捷唤起全局/上游节点变量菜单;设计了自研的表达式引擎,在运行时精准解析节点间的依赖引用,实现复杂业务场景下的跨节点参数传递与上下文状态管理。

面试官真正想确认

你是否把“变量引用”做成结构化能力,而不是字符串拼接和 eval

连续追问链

1. 编辑器模型

  • 变量在 Tiptap 文档里存的是展示名,还是稳定 id?节点重命名后公式会不会坏?
  • 原子化胶囊如何防止用户把变量删一半、复制一半或把光标插进去?
  • / 菜单和 ${} 菜单的触发条件、候选过滤、键盘交互怎么做?
  • 提示框在弹窗、滚动容器里如何跟随光标?

2. 变量作用域

  • “全局变量”和“上游节点变量”如何区分?下游能否引用未执行分支?
  • Condition 未命中的分支输出,在表达式里是 undefined、null、还是不可引用?
  • 节点删除、复制、重命名后变量引用如何更新或报错?

3. 表达式引擎

  • 表达式是如何从文本变成 AST 的?Lexer、Parser、Evaluator 分别做什么?
  • 为什么不能用 evalnew Function?白名单函数和上下文如何注入?
  • 类型转换、空值、日期、数组、函数参数数量错误如何提前提示?
  • 异步函数或跨表查询如果进入公式,执行器如何处理 Promise 和性能问题?

4. 数据总线

  • 运行时 ExecutionContext 如何按 nodeId 隔离节点输出?
  • 跨节点参数传递是 push 还是 pull?下游执行前何时解析占位符?
  • 多个节点并行执行时,如何避免上下文串数据?

场景推演题

HTTP 节点 B 的 URL 里引用了 Form 节点 A 的 ${A.customerId}。后来 A 被复制成 A2,且 A 的字段 displayName 改了。请说明编辑器存储、变量解析和运行时上下文如何保证引用不乱。

继续追:如果 B 引用了一个只在未命中分支里产生的变量,发布时还是运行时拦截?

准备证据

  • ProseMirror document JSON 中变量节点的结构。
  • 一个表达式 AST 示例。
  • 变量解析器的错误类型。
  • 跨节点上下文结构样例。

容易露馅的回答

  • “变量就是字符串替换。”
  • “用中文名拼到公式里,改名时一起替换。”
  • “运行时直接 eval。”
  • “上游下游关系靠用户自己不要配错。”