基本信息

姓名 沈锋
联系方式 邮件: 电话:(+86)18662356437
教育背景 北京信息工程学院(06级本科,理学学士,信息与计算科学)
博客 A programmer's site https://shenfeng.me
工作经验 3年
职业技能
  • 热爱生活,热爱编程,勤(补拙)奋的程序员,practitioner
  • 熟悉web,熟悉HTTP协议,多次零依赖实现过HTTP sever和client
  • 对网络编程有一些经验
  • 擅长解决性能问题,对高性能,低延时的服务器程序设计,优化有实践经验
  • 用合适的语言,合适的解决问题:C++/Go/Java/Clojure/Python/Javascript
  • Linuxer, Emacser
Github帐号 shenfeng http-kit
英语 熟练阅读文档;无字幕听Google IO,公开课(计算机,经济类);可做为工作语言。

工作经历

  1. 美团 http://meituan.com 后台服务开发工程师 2013/5 - 至今

    加入美团数据组的搜索推荐Team。更大的平台,更大的发挥空间。负责支撑美团的后台(搜索,排序,推荐等)流量,以及个性化推荐系统的设计开发。至今,负责的项目有:

    • Thrift Proxy (Go)

      在美团做的第一个项目,为解决Deal排序服务的稳定性问题,提出并开发的Thrfit代理。 在TCP上实现,支持负载均衡,容错,cache结果(内存LRU和Redis)。解决长时间困扰的服务稳定性问题,把稳定性提高到4个9。通过HTTP界面,显示接受请求数,QPS等counter。
    • Thrift Router (Go)

      提出并开发的推荐的多模型分流量测试系统。由于通用和方便,其它服务(排序,搜索,EDM等)陆续接入,现已接管了主站的全部后台流量,以及全部搜索流量。主要特点:
      1. 高性能,高并发,低overhead(仅给请求链带来0.5ms~1ms的latency增加)流量分发
      2. 流量分发方式灵活,用于AB测试,或者剥离特定流量单独优化等。例如支持把北京的推荐流量中的30%发给一组服务器,70%发给另外一组。提供web配置管理界面
      3. Request改写:对每个请求,补上对应用户的最近实时行为(浏览,购买,搜索,下单,支付,消费等)后,再发给后台服务,方便后台服务根据用户的行为,对其进行个性化优化
      4. Response改写:对于推荐流量,按照策略综合多个服务的结果。对于首页排序,在默认排序结果中,插入对于用户的推荐
      5. 支持Copy指定的线上流量到指定的服务器,辅助日常开发,debug,预上线等
      6. HTTP监控页面:显示各个后台服务的状态,QPS,超时数,响应时间,错误率等
    • 推荐(个性化)服务 (C++, Python)

      实时推荐系统:让用户发现更多有意思的团购
      1. 实时计算:实时收集用户行为,推荐结果随着用户行为变化而变化
      2. 大数据量:对7百万用户的1.3亿行为进行挖掘,生成推荐结果
      3. 效率高:20ms左右完成对一个用户的推荐结果计算
      4. 用做工程的思维做算法:整体考虑,数据驱动,拒绝主观猜测,做实验,找瓶颈,抓大放小。完善配套程序:1. debug工具(推荐结果是怎么出来的)2. 实时解析日志得到CTR,流量,点击等数据并可视化(监控)3. 实时用户行为收集并存储(数据收集)4. Router(AB测试系统)

  2. AVOS China http://team.mei.fm 开发工程师 2011/9 - 2013/4

    AVOS 是 YouTube 创始人 Chad Hurley 和 Steve Chen(陈士骏)2011年6月份创立的互联网公司。在创新工厂的帮助下,我们(昆山文石的4个成员)整体加入,做为在北京的分部。我主要参与的项目:

    • 美味书签 http://meiweisq.com

      做为主要开发人员(共3~5人),完成后端大部分工作(Clojure语言),前端部分工作,Android客户端(HTML5+native),部署。 协助设计师,使他可以非常容易的贡献CSS代码。
    • 美味集 http://meiwei.fm

      做为主要开发人员(共4人),继承于已有工作,完成后端部分工作(Python语言),前端部分工作。用JS写了一个较复杂的,支持拖拽的 选辑创建,排版界面

    在加入AVOS之前,在文石公司工作过。后来,昆山文石加入创新工场,并入陈士骏创办的AVOS。

    • 昆山文石信息科技有限公司 http://onycloud.com 2011/3 - 2011/9

      昆山文石由广州文石的创始人在江苏昆山创办,专注于互联网。我主要参与的项目:

      • Trakr https://trakrapp.com

        一个单页面的Issue tracking工具。做为主要开发人员(共4人),完成后端部分工作(Clojure),前端部分工作(Javascript)。 它迫使我认真思考前端JS代码的组织,Rssminer由此诞生:想实践中学习前端单页面的代码组织方式。
    • 广州文石信息科技有限公司 http://www.onyx-international.com.cn/ 2010/9-2011/3

      在这里主要完成了文件同步工具(类似dropbox)的Android客户端的开发,和Onyx的网上书城 http://onybooks.com/的开发

实习经历

开源项目

工作之外的时间,会写一些代码,Learning by doing,来学习新技术,验证一些想法,做一些自己还没做过的东西。 他们可以大部分在github找到: https://github.com/shenfenghttps://github.com/http-kit。其中较受欢迎的几个:

  1. http-kit http://http-kit.org

    用Java为Clojure写的零依赖,事件驱动,多线程的HTTP server/client。 在Clojure社区,受到了一些关注,收到 十几个社区朋友 的patch,多封邮件感谢。2次被顶上Hacker News首页,在github上也收到了600多个star。 这个项目有完善的单元测试,使得维护较轻松。

    在它之前,曾实现过多次HTTP server/client:

    1. Tiny-web-server:C语言,pre-fork
    2. Engish-English Dictionary github/shenfeng/dictionaryC,epoll。 纯c,零依赖的英英字典,2011年春节期间学epoll时完成,在16G机器上,可稳定1600K并发:c1600k
    3. Async-http-client: 在Netty基础上封装的异步client,支持SOCKS,HTTP代理,支持HTTPS
    4. Async-ring-adapter: Java & Clojure,在Netty的基础上封装的server,暴露异步的API。
    5. Nio-httpserver:学习Java NIO时写的
  2. Rssminer http://rssminer.net(已下线)

    RSS reader, 类似Google Reader。 GR关闭后,受到一些关注,大量用户涌入,导入他们在GR的收藏,每天抓取几百万文章,硬盘容量压力山大(CPU,RAM很轻松),后面关掉了服务。 从这个项目学了到很多东西:做了实时的全文搜索;个性化推荐;完整的单元测试,使维护,加功能变得较轻松。为了它,写了一些较基础的库:

    • http-kit:需要一个支持异步server & client,来scale抓取和推送。 先在Netty的基础上封装异步的client和server,后面用JAVA零依赖实现http-kit。受到一些关注,逐步完善API,文档。
    • 模板引擎:mustache.clj:API方便,简单够用,高性能(数倍于另外的实现)。Rssminer也用它实现了多语言支持。
    • 数据库连接池:dbcp.clj,采用Threadlocal,可能比市面上其它的快一些,和http-kit的线程模型配合很好,支持自动重连。
    • 中文分词:mmesg,正向最大匹配,准确性够用,速度快,内存占用少。
  3. http-watcher https://github.com/shenfeng/http-watcher

    2012年元旦在家写的。用go为前端人员开发的HTTP服务器,代码更改后,自动reload连接的浏览器(可以多个,零配置,不需要复制粘贴一段 js 片段)。 支持本地文件模式和HTTP透明代理模式。前端利器。