联系方式
- 手机: 18615462063
- Email : [email protected]
- QQ/微信号: 597489129
—-
个人信息
- 明扬 /男 /1991
- 工作年限: 4 年
- 技术博客: https://famer.me ( 服务器在境外,为了更好的体验,还请翻墙访问 )
- Github : http://github.com/mingyang91 ( 偶尔有小 PR )
- 期望职位: Nodejs/全栈工程师
- 期望薪资:税前月薪 15 ~ 20k ,特别喜欢的公司可例外
- 期望城市:上海、北京
精通 JavaScript 、 Node.JS 、 React 、 Redux
大学期间曾获得工信部国信蓝点杯 C 语言大赛山东第一,全国二等奖。曾做过最有挑战性的项目是《钢管切割的最省料计算》(整数规划、单纯形、分支定界)
—-
工作经历
东软载波 ( 2014 年 9 月 ~ 至今 )
物联平台一期
云平台是连接所有智能家居设备的通信主干。设备接入云平台后方可远程控制,升级维护备份。前端作为云平台的用户界面,与后端交互使用 REST 接口,并且部分 REST 接口对外开放供手机、设备使用。
前后端分离,前端为 Node 集群,后端为 SpringMVC
浏览器使用 Angular 构建单页面应用、基本布局为 Bootstrap GridSystem , Node 端使用 Express 构建路由以及 REST 接口、 MongoDB 集群作为 Session 存储。
Promise 模型解决 Callback Hell 。
使用 Node.js 简化了前端开发, angularjs 单页面应用配合 css3 转场过度动画效果酷炫
项目上线后由 PM2 管理,一期连接数量并不大,所以暂时用单机多核集群。
Npm + Bower 管理依赖, Grunt 自动化测试与 jshint 代码审查。
测试框架,服务端选用 Mocha + should 断言库, supertest ( superagent )模拟用户操作,浏览器端使用 jasmine 测试保证 ui 逻辑。
因为之前没有前后分离系统的经验,这个项目算是走了一部险棋,但是结果很成功。同时我也积累了传统项目转型到前后分离项目的经验。
我在项目中主要负责:
- 界面设计
- 架构设计与技术选型
- RESTful API 设计
- 开发
IoT 物联网云(可访问)
借由 MQTT 协议来打通设备之间的互联互通,前端用于管理已连接设备以及身份认证等资源。前端服务器为 Nodejs ,后端原定使用 PlayFramework 但因为新人较多,又回到了 Spring MVC 。开发过程中还主导了 Express -> Koa 和 Angular -> React 的技术升级,使用 Redux 接管数据流, Ramda.js 解决代码冗余和降低复杂度。 npm 替代 bower 。
优化
- 强制缓存

- 使用 gzip 压缩

- 编写了部署阿里云 CDN 的自动化脚本。
- 对路由按需加载做了分块,大大降低了首次加载时间

工作内容
在一期基础上,我还额外负责了:
- 持续集成
- 架构迁移
- 代码审查
- 人员培训
日谷公司 与 海尔集团 ( 2012 年 2 月 ~ 2014 年 9 月 )
海尔智能电视遥控 app
智能电视遥控,基于 DLNA 协议和 airplay 协议的局域网音视频分享播放,调用 Android 4.4 新增的红外接口实现红外遥控器功能,移屏传屏与游戏模式。
负责编码,算法设计,红外电信号调制解调,界面性能优化。播放器性能优化
自学编写了调制解调算法,将遥控器指令码调制为高低电平的红外信号(东芝码, nec 码,全波形码)
自学播放协议,将播放器绘图性能由以前的 8 fps 提高到 58 fps ,因底层播放器是另一家外包公司开发,并没有给我们源代码。所以使用了三线程缓冲绘制,将视频缩放旋转放置于单独线程中对位图进行矩阵运算,也达到了每秒 20 帧的性能。并且降低了播放延迟,从以前的 5 -> 30 秒延迟降低到稳定 300 毫秒左右
自动抓取网络爬虫与比价购买机器人
自项目开始两年来以来一直使用 .net 的 web browser 控件,低性能低扩展性运行
使用原始的 getElementById 、 getElementByTagName 、取索引等方式
代码冗余多,可维护性差。
我提出重构,使用更简洁的 css 选择器优化代码的可读性和降低冗余,混用 xpath 表达式与正则表达式来弥补 css 选择器的缺陷。
负责:
项目架构设计,技术调查与技术选择
性能优化,编码
我提出重构全系统
重构后数据抓取由线程池统一管理,理论无限但实际为防止网站阻挡 DDOS 攻击设定为并发 5 线程抓取。
特别是使用 CSS 选择器后,以前 20 - 50 行代码才能完成的工作,优化后仅需要 5 - 20 字符的字符串。
但因缺乏架构设计经验,后来的继承、接口管理混乱给维护造成了一定麻烦。
—-
开源项目和作品
技术文章
- Miller-Rabin 素性检验:
- [LeetCode]10. Regular Expression Matching:简单正则表达式引擎,只包含.*
- [LeetCode]5. Longest Palindromic Substring:在不知道 Manacher's ALGORITHM 的前提下,独自实现了这个神一般的算法。和 Manacher 思路一致,实现方式略有区别
演讲和讲义
- 内部培训:Node.js 介绍 (
翻译后添加部分个人私货) - 内部培训:Play 框架介绍 (
翻译自 LinkedIn 技术分享)
基础学习
- 业余时间自学《组合数学》
- 正在看《 SICP 》,博客同步发文
技能清单
以下均为我熟练使用的技能
- 服务器端: Node/Scala
- 以及 C#/Java/PHP
- Web 框架: Express/Koa/Play Framework
- 操作系统: Fedora(Linux)
- 编辑器:从 Vim 叛逃至 Emacs
- 前端框架: Bootstrap/AngularJS/React
- 前端工具: PM2/Npm/Gulp/SaSS/LeSS/webpack
- 数据库相关: MySQL/PgSQL
- 版本管理、文档和自动化部署工具: Git/SVN/Markdown/Travis-CI
- 单元测试: Mocha/Karma/ScalaUnit
- 云和开放平台: Heroku/OpenShift/AWS/Aliyun
相关证书
参考技能关键字
- nodejs(105)
- javascript(60)
- linux(53)
- java(18)
- express/Koa(17)
- git(16)
- restful(9)
- sql(4)
- angular(4)
- react
- promise(3)
- scala(2)
- coffeescript(2)
—-
致谢
感谢您花时间阅读我的简历,期待能有机会和您共事。
