网易首页 > 网易号 > 正文 申请入驻

面试失败后他自学文档编辑器,做出拖拽式简历工具Roleframe

0
分享至

一次失败面试成了起点

Roleframe 的诞生,源自一场没有通过的面试。作者经历了漫长的求职后,终于拿到一次系统设计面试,题目是他从未接触过的方向:设计一个文档编辑器。他尽力作答,最终没有拿到录用通知,但这个问题一直留在他脑子里。


于是他决定认真学透这件事。编辑器的每一次改动如何被记录,布局引擎如何决定元素的位置,专业工具底层到底怎么搭建,他都从头研究。学到一半时,他回头去看自己求职期间用过的那些简历生成器,才真正看清它们是什么。

大多数简历生成器只是一个表单

剥掉营销包装,几乎所有简历生成器都是同一种结构:一个数据模型加一个模板渲染器。左边是固定字段,右边是静态预览,还有一堆规则限制简历能长成什么样。想要一个数据模型里没有的栏目,不行;想让两个条目并排显示,也由不得你。

这种形态不是偶然。表单是那种一个周末就能搭出来的部分,而真正的编辑器——能拖拽栏目、控制布局、最后还能输出干净多页 PDF——才是难啃的骨头。他用过的每一个生成器都绕开了这个难点。因为一次失败面试而把编辑器从里到外学了一遍之后,他手里正好握着别人跳过的那部分知识。于是 Roleframe 就做成了这样:一个真正的拖拽式简历编辑器,AI 定制功能只是叠加在上面,而不是取代编辑器本身。

状态用映射而不是列表来渲染

技术栈方面,项目使用 Next.js 的 App Router、React、TypeScript、Tailwind,数据库是 Postgres 并直接写原生 SQL,不用 ORM,后台任务跑在任务执行器上,还从零写了一个自定义事件溯源引擎。

事件日志是唯一事实来源,但 React 需要的是当前值,所以每次追加事件都会物化出一个当前状态。值得说的是,这个物化后的结构是专门为渲染设计的,而渲染想要的东西和存储完全不同。

模型里几乎没有数组。块(blocks)是按块 ID 索引的对象,覆盖层(overlays)是按覆盖层 ID 索引的对象,页面(pages)是按页面 ID 索引的对象,页面内部的布局节点也是按节点 ID 索引的对象。整个模型里唯一的有序列表,是挂在布局节点下的子节点 ID 列表——顺序只出现在“内容按什么顺序出现”这一个地方,别处都不该有。

布局节点只有两种:一种是容器,持有子节点 ID 数组;另一种是块引用,通过块 ID 指向内容。树只负责指向内容,从不直接持有内容。

这种结构带来三个直接好处

组件只订阅一个 ID。一个块通过自己的 ID 选中对应实体,拿到的是稳定引用,不会因为别处变化而跟着重渲染。编辑操作只影响相关节点,不会波及整棵文档树。

从一次失败面试,到一个真正可拖拽的简历编辑器,Roleframe 把别人绕开的硬骨头当成了核心功能来做。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
福州夫妻用1234万购得清代府邸,翻修绣楼时发现暗室,查看后傻眼

福州夫妻用1234万购得清代府邸,翻修绣楼时发现暗室,查看后傻眼

今天说故事
2025-08-28 18:30:53
自废“九段线”?退守118度线等于白送30万海域,给殖民旧约招魂

自废“九段线”?退守118度线等于白送30万海域,给殖民旧约招魂

命运自认幽默
2026-08-28 03:05:11
安徽最强十所大学出炉!中科大称王,合工大安大谁是第二

安徽最强十所大学出炉!中科大称王,合工大安大谁是第二

华庭讲美食
2026-08-29 06:13:30
景小姐但凡有点智商,都应该“止损”孙割

景小姐但凡有点智商,都应该“止损”孙割

冰川思想库
2026-08-29 12:07:24
胚胎案后续!知情人爆料,男方和三姐手握三大王牌,难怪这么嚣张

胚胎案后续!知情人爆料,男方和三姐手握三大王牌,难怪这么嚣张

北纬的咖啡豆
2026-08-14 09:50:08
48岁守寡多年,姐夫装修暂住我家,第三天夜里我彻底破防

48岁守寡多年,姐夫装修暂住我家,第三天夜里我彻底破防

观观说事
2026-08-27 22:30:04
4年1.6亿!杜伦顶薪梦碎,活塞玩转前置合同,奥萨尔才是真正赢家?

4年1.6亿!杜伦顶薪梦碎,活塞玩转前置合同,奥萨尔才是真正赢家?

晚风停靠站
2026-08-26 19:05:29
会谈非常的激烈!日本访华代表团一口气对我们提了三个要求!中日关系恶化以来,日本国会代表团首次访问中国并与中国官员会面

会谈非常的激烈!日本访华代表团一口气对我们提了三个要求!中日关系恶化以来,日本国会代表团首次访问中国并与中国官员会面

扶苏聊历史
2026-08-28 12:27:01
女子谈释永信过往,她们姐妹住少林寺3天2夜,争着往释永信房间跑

女子谈释永信过往,她们姐妹住少林寺3天2夜,争着往释永信房间跑

江山挥笔
2025-07-29 16:50:59
如今真正让西方集体失眠的,不是中国制造,而是中国的新能源汽车

如今真正让西方集体失眠的,不是中国制造,而是中国的新能源汽车

沙雕小琳琳
2026-08-28 01:51:21
长沙楼市开始离谱了!岳麓区梅溪湖板块从3.2万变成1.4万

长沙楼市开始离谱了!岳麓区梅溪湖板块从3.2万变成1.4万

民生格物
2026-08-27 17:20:10
英超官方解释阿利松送点:出击时未碰球

英超官方解释阿利松送点:出击时未碰球

懂球帝
2026-08-29 21:34:33
男子给女子转款数十万,原配起诉要求全额返还,女子辩称系KTV代收款,法院认定两人存在不正当关系判退六成

男子给女子转款数十万,原配起诉要求全额返还,女子辩称系KTV代收款,法院认定两人存在不正当关系判退六成

大风新闻
2026-08-29 16:21:03
50天狂卖5500万瓶!三得利罪恶碳酸饮料,被自律人买疯了

50天狂卖5500万瓶!三得利罪恶碳酸饮料,被自律人买疯了

Foodaily每日食品
2026-08-12 08:15:56
假如波兰下场,俄军还能撑几天?这么说吧,波兰若出兵乌克兰,等于往俄乌这锅沸腾的油里泼了盆冰水,炸是肯定炸,但谁先糊真不好说

假如波兰下场,俄军还能撑几天?这么说吧,波兰若出兵乌克兰,等于往俄乌这锅沸腾的油里泼了盆冰水,炸是肯定炸,但谁先糊真不好说

扶苏聊历史
2026-08-24 15:33:30
医生们勒紧裤腰带过日子,从8月开始

医生们勒紧裤腰带过日子,从8月开始

医脉圈
2026-08-27 21:10:47
发电量顶50个三峡,中国锁定3.6万公里太空电站,能源格局或重写

发电量顶50个三峡,中国锁定3.6万公里太空电站,能源格局或重写

混沌录
2026-06-04 21:27:07
赵长鹏取关孙宇晨!圈内大佬公开划清界限

赵长鹏取关孙宇晨!圈内大佬公开划清界限

乡野异闻录
2026-08-29 19:48:19
主场攻坚破局对阵升班马快速反击,曼联迎战伊普斯维奇

主场攻坚破局对阵升班马快速反击,曼联迎战伊普斯维奇

老人与海667
2026-08-30 03:15:07
日本女排爆冷输了!亚锦赛决赛:8月30日+央视直播:中国女排VS泰国,胜者直通2028洛杉矶奥运会

日本女排爆冷输了!亚锦赛决赛:8月30日+央视直播:中国女排VS泰国,胜者直通2028洛杉矶奥运会

开成运动会
2026-08-29 23:22:53
2026-08-30 04:07:00
码上闲叙
码上闲叙
有态度网友ytd
139文章数 88关注度
往期回顾 全部

头条要闻

网友涌入西藏吉隆边防站账号留言:古道雄关请回复

头条要闻

网友涌入西藏吉隆边防站账号留言:古道雄关请回复

体育要闻

米兰、巴黎、拉莫斯、巴克拉:所得与所失

娱乐要闻

景甜风波彻底失控!杨紫被拉下水

财经要闻

刑自强:AI投资下半场中国蓄势待发

科技要闻

美团扭亏为盈后,外卖大战结束了吗?

汽车要闻

东风日产NX8“喜柿橙意”限定色正式上市

态度原创

手机
健康
教育
艺术
旅游

手机要闻

小米18 Fold再次被确认:国产芯+国产内存,价格或1.2万!

脑出血两大夺命风险,早治早保命!

教育要闻

南京中小学转学,不是"想转就能转"! 很多转学家长还在焦虑等待!

艺术要闻

若隐若现才是最高级的性感!这位摄影师镜头下的女子,每一寸光影都在撩拨你的心跳

旅游要闻

官方回复:大理古城苍山门天桥计划安排上了!

无障碍浏览 进入关怀版