朱安邦的工作经历
基本信息
我叫朱安邦,现杭州
仅分享我做过的一些开源的项目;
其它在公司的coding
和内网Svn
的项目,因涉及隐私不列出,不分享。
团队的开源Github: https://github.com/canonchain
博客
- Github: github.com/anbang (代码托管)
- 博客: axihe.com/anbang/blog/home.html(个人自建)
- 站酷: zcool.com.cn/u/13379494 (一些设计作品的展示)
个人总结
擅长区块链周边的业务开发,使用 JavaScript
封装公用业务模块,npm
包的制作,Node.js
做接口以及相对复杂的业务,在公司的团队内主要做一些探索性的开发和处理棘手性的问题
设计师出身,有不错的美感和用户体验思维,做过 2 年半的前端开发组长,有相对丰富的项目推进和人员调配经验。
内心真正的热爱大前端这个行业,并建立 阿西河前端教程(axihe.com)的网站,用于分享和帮助别人,以及交流提高自己的前端技术。
技能总结
- 前端基础技能
HTML
/CSS
/JavaScript
均熟练掌握 - 熟练使用
Vue.js
,React.js
,Angular
,且均做过稳定运行的线上产品。 - 熟练使用
TypeScript
,Gulp
,babel
,Webpack
及不同情况下的Webpack
配置 - 熟读
web3.js
源码,对以太坊前端生态的技术有较深入的理解,并做过多个类似的区块链线上产品(下面项目区有介绍) - 良好的数据结构和算法基础,熟练使用基于
Nodejs
的后端开发,开发过基于Express
,Koa
,Eggjs
的线上产品 - 熟悉Nodejs线程模型,并发模型,异步原理,熟悉V8引擎;
- 深刻理解
HTTP
,HTTPS
,grpc
网络协议 - 熟悉
PostgreSql
,Mongodb
的使用和性能优化(了解基本数据库的优化,索引知识,但没有做过线上产品的分库分表)。 - 熟练使用
Git
和SVN
进行团队协作 - 熟练进行
Linux
和Windows
服务器下的项目部署,熟悉Docker。 - 熟练使用抓包工具
Charles
,Postman
,以及Chrome Dev Tools
工具 - 可以阅读英文的文档,但口语较差
前端工作经历
- Nakamoto & Turing Labs (实验室性质的组织,非公司)
- 2018 年 1 月 - 至今
- 配合 3 位在美国的博士大佬做大前端辅助工作
- 主要是分布式计算和区块链科研方向的前端辅助
- 杭州链生科技有限公司 (区块链开发的公司)
- 2018 年 6 月 - 至今
- 2018 年 6 月劳动关系由 微飞胜科技 转到 链生科技
- 老板和团队均未改变,仅换了下劳动关系
- 从事工作
- 区块链浏览器开发 - 独立完成
- 区块链 PC 钱包开发 - 独立完成
- 区块链 Web 开放 Api 开发 - 独立完成
- czr.js 开发 (JavaScript SDK) - 独立完成
- Erc20 代币映射到主网币的完整发币流程 - 独立完成
- 智能合约的开发工具开发 - 辅助同事完成
- 2018 年 6 月 - 至今
- 杭州微飞胜科技有限公司
- 2016 年 5 月 - 2018 年 6 月
- 劳工关系后续转到 链生科技
- 从事工作
- 微信公众号开发
- 基于微信摇一摇的 iBeacon 设备(摇钱宝)周边页面开发
- “摇钱宝"是微信摇一摇市场份额排名第一
- 内部管理后台的开发 (用户为微信用户,用户量为 150 万)
- 内部通用 JS 模块的封装(基于 jQuery 或 基于原生 JavaScript)
- 2016 年 5 月 - 2018 年 6 月
- 科大讯飞股份有限公司
- 从事工作
- 内部项目的管理后台开发
- 从事工作
工作经历总结:先在安徽合肥的科大讯飞股份有限公司工作,后面 2016 年入职一家杭州创业型公司;
项目描述
区块链浏览器开发 - 独立完成
- 线上地址: explorer.canonchain.com
- Github仓库
- 说明:
Axure
做原型图 ->Sketch
做设计稿 ->Vue.js
做前端页面 ->Nodejs
+Express
+PostgreSql
做后端接口- 用
Nodejs
做服务,实时从区块链节点中获取数据,经过组装后写入PostgreSql
数据库的各个表
- 难点:
- 因测试的时,经常用 3 亿至 5 亿条数据进行模拟测试,所以在 SQl 索引及分页查询优化地方进行摸索很久
- 区块链节点开发的同事因需要频繁测试 Bug 及分叉情况,所以要求浏览器的数据展示要及时;而一笔交易需要处理封装后写入到 21 个数据表中,所以 Nodejs 写入数据库的代码性能做了很多优化,重点是数据库索引及前端查询方式的优化,最终优化到:从向节点获取数据开始计算,到写入数据库完毕;Nodejs 服务每秒可以处理 1600-2500 笔交易;
区块链 PC 钱包开发 - 独立完成
- 地址:https://github.com/canonchain/canonchain-wallet
- 说明:
Axure
做原型图 ->Sketch
做设计稿 ->Electron
做页面和应用- 节点程序由
Electron
进行下载和控制
- 难点
- Windows 平台的兼容性,热更新在 win10 部分系统被默认屏蔽的问题
- Windows 平台因环境缺失,导致应用意外的问题
- 360/ 腾讯管家对
Electron
报毒的处理 - Mac 系统中节点下载后,部分系统的节点无权限问题
- 在强制断电,系统蓝屏等情况下,本地存储的账号文件的安全保障
区块链 WebApi 开发 - 独立完成
- 区块链信息查询的接口
- 说明:
- 身份 Key 的生成
- Api 调用的频率限制
- 使用
Node.js
+Koa
+PostgreSql
完成
- 使用
- 难点
- API 的身份验证
- API 调用速率的限制及扩展,避免 API 的恶意使用
- 从浏览器sql内取数据,主要是数据库优化以及业务处理来提高性能
czr.js 开发 (JS SDK) - 独立完成
- 地址:https://github.com/canonchain/czr.js
- SDK的使用文档: https://czr.readthedocs.io/en/latest/
- 说明:
- 与节点进行交互的方法
- 周边的账户以及常用工具类方法
- 合约相关的封装
- 难点
- 发送交易时,因不确定调用的节点是否为恶意,以及是否有
wireshark
这种显卡级抓包工具及类似的截取脚本,所以交易流程做了特殊处理;可以保证即使发送到恶意节点,用户的资产信息也是绝对的安全 - 账号随机生成时,在内存中工作生成,因为担心有恶意脚本可以读取内存中的信息,做了对应的随机混淆
- 因为需要在浏览器中使用,而账号的生成算法是
C++
写的,所以用WebAssembly
转为.wasm
文件,后期因为多个 wasm 维护问题,又转为base64
使用
- 发送交易时,因不确定调用的节点是否为恶意,以及是否有
Erc20 代币映射发币 - 独立完成
- 地址: http://explorer.canonchain.com/#/mapping_log
- 说明:
- 用户通过智能合约将 Erc20 Token 转入合约,进行映射
- 监听 Eth 主网,过滤需要的交易,组装写入 PostgreSql;
- Nodejs 服务从数据库中筛选合适的数据,自动转入等额的主网币
- 难点
- 做 Nodejs 服务时候的,各种异常的处理,写到最后
try catch
的代码比业务代码还多。 infura
接口的返回数据,不应该作为精准来源,最好自建一个;
- 做 Nodejs 服务时候的,各种异常的处理,写到最后
智能合约开发工具 - 辅助同事完成
- 地址: studio.canonchain.com
- 说明:
- 开发和调试智能合约的工具
- 主要是协助同事进行项目的开发,提供技术建议
- 因需要中国和美国等都需要正常访问,静态资源使用了阿里云的全球 CDN
分布式算力租用 - 辅助同事完成
- 地址: www.gopekka.com
- 说明:
- 基于 Eth Token 的分布式算力租用
- 独立完成配套的 Pc 端应用,使用
Electron
- 协助同事进行 Web 项目的开发,提供技术建议
- 代表项目和又拍云进行项目对接
- 协商合作的技术实现方案
- 对定制接口协商内部同事对接
- 推进项目的进度
其他
- Canonchain 官网 开发
- ntlabs 官网 开发
- Developer Hub 开发
- Npm 一些公开包
- 下面是发布到公开 NPM 官网的包
- 雪花算法 Snowflake
- https://www.npmjs.com/package/@axihe/snowflake
- 分布式递增 ID 生成算法,不依赖于数据库,完全在内存生成
- 实际测试每秒可生成 180W-220W 个递增 ID
- JS 版的 argon2 加密
- https://www.npmjs.com/package/argon2-wasm-pro
- 基于 C++ 代码的封装,C++ 代码转为
base64
进行调用
- JS 版的 ed25519 加密
- https://www.npmjs.com/package/ed25519-wasm-pro
- 基于 C++ 代码的封装,C++ 代码转为
base64
进行调用
- json-rpc 自定义库
- https://www.npmjs.com/package/json-rpc-cli
- 为公司测试小伙伴做的一个,请求公司产品的包
我在公司内搭建了
NPM私服
用来储存内部业务的包,公司的npm私服
上的通用包,涉及公司敏感信息和隐私,不列出
其它项目属于公司为别的公司做的定制产品,因涉及公司隐私,不再继续放出。