教育
经历
字节跳动
前端工程师,全职
2018 年 2 月 ~ 现在,北京
电商小程序:
从头开发全功能的电商小程序。践行了视图与逻辑分离,将所有视图状态和操作描述在状态管理机制中,得以对视图逻辑提供全面覆盖的单元测试,并由此实现测试用例的自动录制。解决了小程序中渲染 HTML,同时要保持图片可点击的问题。通过 parse HTML 并重新构建等效结构,将原 HTML 拆分成图片部分和非图片部分的列表,分别利用不可点击但精确还原的
<rich-text />和可点击但只能显示图片的
<image />进行渲染。
相关技术:
小程序
单元测试
UI 测试
HTML
电商即时通讯工具「飞鸽」:
基于已有的后端基础设施,从头开发即时通讯工具的前端,包括用于商户的电脑端网页和用于用户的移动端网页,以及一个试验性的用于商户的移动客户端。主要基于 React Native Web 实现网页,从而得以低成本复用在基于 React Native 的移动客户端。利用 Inversify 的依赖注入实现对宿主客户端的适配。
相关技术:
React
React Native Web
React Native
TypeScript
电商后台管理系统:
维护服务商户和运营的后台管理系统。对一个可能多达 8000 个输入框的表单进行优化,利用虚拟滚动极大减少真正渲染的元素数量,将流畅时的最大输入框数从 80 提升到了几乎无限。
相关技术:
虚拟滚动
Vue.js
杭州熵功场科技有限公司
前端工程师,实习
2016 年 7 月 ~ 2017 年 2 月,杭州
Catch×Airbnb 商城:
桌面端摄影服务预约网站,提供下单、订单查看等功能。 技术特点:利用 React 作为前端框架,Redux 作为状态管理系统,用
webpack-isomorphic-tools实现了(部分的)同构渲染。
相关技术:
React
同构渲染
Catch 应用:
用 Vue.js 实现的 Web app,后端则是建构于 Leancloud API 之上的、用 TypeScript 写的服务器。负责服务器端的端到端测试,数据一致性检查和清理脚本的开发,以及数据访问接口的重构。基于 decorator 实现了 AOP 的缓存系统,提高了首页的吞吐量。
相关技术:
Node.js
Express
Leancloud
TypeScript
浙江大学求是潮团队
软件工程师,校内组织
2015 年 3 月 ~ 2017 年 6 月,杭州
浙江大学求是潮网站:
学生组织「求是潮」的网站,媒体门户性质。从头实现了新版的网站。利用 express 作为服务器,jade 作为模板引擎,sequelize 作为 ORM,实现了一个传统型网站(即非单页应用),但有做了一些类单页应用的优化,如利用 pjax 实现了列表翻页、文章切换不重新加载页面。利用 Vue 实现了图片、视频轮播。
相关技术:
Node.js
Express
Sequelize
PJAX
Vue.js
Jade (Pug)
浙江大学青年电影节网站:
合作开发了「求是潮」中「水朝夕」部门举办的「青年电影节」的活动网站。利用 AngularJS Material 库实现基本的布局和响应式设计,并实现了大小不一的方格系统。用 PHP 的 CodeIgniter 框架实现了投票统计和作品上传的后台。我负责一部分前端和全部的后端,过程中自己封装了一个 ORM。
相关技术:
MySQL
PHP
CodeIgniter
ORM
Angular.js
Angular.js Material
项目
净土
知识社区,网站,支持多国语言
2017 年 11 月 ~ 现在,
后端:
实现了一套基于 decorator 的 GraphQL schema 自动生成系统(详见前述文章),结合 sequelize-typescript,较大程度地避免了 TypeScript 接口、数据库模型、GraphQL 模型等相似模型的重新定义。利用 InversifyJS 做依赖注入,实现了后端的类 Java 型工程化开发,降低了接口复杂化下的开发难度。
相关技术:
Node.js
PostgreSQL
GraphQL
TypeScript
依赖注入
GraphQL
Nginx
前端社区功能:
前后端共享文件,利用 TypeScript 的 literal type 功能,实现了带有类型检查的错误消息国际化。前端利用 Angular Universal 实现了服务器端渲染。解决了 MathJax 渲染过慢的问题,详见《我是如何解决 Angular 上用 MathJax 的一些问题的》。利用双重缓冲,解决了编辑过程中 MathJax 重复渲染导致的预览闪烁。
相关技术:
Angular
TypeScript
GraphQL
双重缓冲
同构渲染
前端学语言功能:
提供了在阅读文章时候标注生词的功能。这些生词,连通其出现的例句,会被储存。下次在文章中再遇到,会被自动标识出来。同时也可以为这些生词查询及贡献释义。功能介绍可见《用 Angular 弄了一个背单词的网站——eliseos.org》
相关技术:
TypeScript
GraphQL
HTML5
ACLLib (fork)
图形库
2016 年 8 月
平台移植:
ACLLib 是用于浙江大学 C 语言程序设计课的一个图形库,基于 Win32 API 开发,拥有简单的绘图接口。我将它从 Windows 平台移植到了 Qt 和 GTK 后端,从而实现了跨平台。利用 Qt 的
paintEvent转写类 Win32 的事件循环 API。
相关技术:
Qt
GTK
C
C++
细节处理:
用双重缓冲避免朴素实现会遇到的绘图闪烁问题。
相关技术:
双重缓冲
Math as You Will
Chrome 扩展,在 Chrome 扩展商店中上架。
2015 年 9 月
渲染数学:
利用 Chrome 扩展的 background 和 extension 互相通信,实现了通过 extension API 匹配当前网址,并传送信息给 background 中嵌入的 MathJax 来启动渲染。
相关技术:
Chrome 扩展
MathJax
域名选择:
使用 Angular.js 搭建了配置界面,可以利用正则表达式配置想要启用渲染的网址,也可以更改 MathJax 的渲染分隔符和渲染习惯。
相关技术:
Angular.js
Bootstrap
博文
例说 C 语言类型声明
用例子结合 C 语言标准,探讨了如何理解和解构类似
double complex_func(int(*(int(*[9])[5]))[5]);的复杂类型声明。
相关技术:
C
类型系统