研发体系这点事

–本文于2016.08.23最新更新–

早在读研究生的时候,自己负责着实验室的项目,就一直在思索如何建立一套简单又高效的研发管理体系,能够在保证项目高质量顺利进行的同时还能够提升团队成员的技术level。后来在自己在校的几次小的创业中,也做过一些尝试。直到毕业后进入前东家,在几个项目的参与过程中,见到了大公司的研发管理是如何进行的。直至加入目前的公司,将研发体系梳理一遍,且学且抄且实践,对这一套东西算是有了一定的实践感悟。

对于一个研发管理体系,其核心是围绕着产品的整个生命周期来进行的。因此,根据一个产品的生命周期,可以把研发体系划分为几个关键的环节,如图所示:

更为具体的一个研发流程则如下图所示,标注了每一个环节的参与角色。

prject_manage_detail.png

可知,即时沟通和技术提升虽然不属于研发流程中的某一个环节,但它们是贯穿整个研发体系不可或缺的一部分,有着不可替代的作用。此外,任务管理需要对任务做整个研发生命周期的管理,除了作为其中的一个关键环节,也是贯穿整个研发流程的。

[译]Java8 Top Tips

原文:https://dzone.com/articles/java-8-top-tips

本文包含了对于Java8的一些最佳实践,包括Stream和Lambda表达式的一些基础。

笔者已经使用Java8工作许多年,包括新的应用开发以及迁移旧的应用,感觉是时候总结Java8中一些有用东西的最佳实践。笔者个人不太喜欢“最佳实践”这个词,因为字面上传达了一种“one size fit all”的概念,当然,编码肯定不是这样的而是不同的场景有不同的解决方案。但是笔者觉得在如何使用Java 8让自己的生活变得更加容易上还是有一些特殊的经验值得分享的。

[译]StackOverflow: 你没见过的七个最好的Java答案

原文:https://dzone.com/articles/stackoverflow-7-of-the-best-java-answers-that-you

StackOverflow(后边简称so)发展到目前,已经成为了全球开发者的金矿。它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西。这篇文章是在我们审阅了so上最流行的Java问题以及答案后从中挑出来的。即使你是一个有丰富经验的开发者,也能从中学到不少东西。

Java后端工程师学习大纲

之前自己总结过的Java后端工程师技能树,其涵盖的技术点比较全面,并非一朝一夕能够全部覆盖到的。对于一些还没有入门或者刚刚入门的Java后端工程师,如果一下子需要学习如此多的知识,想必很多人会望而却步。

本文截取了技能树中的一些关键技能点,并辅以学习资料和书籍推荐,做为Java后端工程师的一个入门或者入职学习计划,基本上涵盖了一个合格的Java后端工程师必备的技能点,是一个相对完整的从基础到高级的修炼过程。当然,这只是一个大纲性指引的东西,也主要针对的是Java后端这个职位,并不会面面俱到,也不会很详细的讲述。毕竟其中每一个知识点深入下去都是可以成书的。另外,像数据结构、计算机网络等计算机科学基础知识,我认为是从事计算机专业的人必备的知识点,因此并不包括在内。如果要一个很全的知识点可以移步Java后端工程师技能树

本大纲于2016.07.07最新更新^_^…

Java开发的几个注意点

在Java工程师平常的开发过程中,由于业务的不同,可能关注的点有很多不一样的地方,但是在基础层面还是有一些共性的。此文概括了在Java开发、测试、部署、工程化方面一些需要注意的地方,供大家参考。

Java后端工程师技能树

此技能树借鉴自https://github.com/geekcompany/full-stack-tree,基本涵盖了一个Java后端工程师应该具备的技能,如有遗漏或者错误,敬请指出。

PS: 有同学指出tomcat不是web server是servlet容器,这一点图中的确不够严谨,因此更新了此技能树。其实tomcat引入了apr之后也是能够作为web server的(其实目前绝大多servlet容器都同时提供了web服务器的功能,只是性能之类的不好而已),当然把tomcat直接做为web server的应用还不够广泛。目前,nginx+tomcat还是普遍的七层负载均衡构建集群的方案。此外,这里还牵扯到了servlet容器和应用服务器的一个区别,为什么tomcat只是servlet容器而不叫JavaEE应用服务器呢?这一点大家可以通过此链接了解一下:http://www.cnblogs.com/maydow/p/4821249.html。当然,对于互联网领域目前的Java后端体系,weblogic、webspher这些应用服务器基本绝迹,因此并没有写在此技能树中。

谈谈Java内存管理

目录

java

对于一个Java程序员来说,大多数情况下的确是无需对内存的分配、释放做太多考虑,对Jvm也无需有多么深的理解的。但是在写程序的过程中却也往往因为这样而造成了一些不容易察觉到的内存问题,并且在内存问题出现的时候,也不能很快的定位并解决。因此,了解并掌握Java的内存管理是一个合格的Java程序员必需的技能,也只有这样才能写出更好的程序,更好地优化程序的性能。

基于内容和用户画像的个性化推荐

目前比较流行的个性化推荐算法有以下几种:

  • 基于内容的推荐:根据内容本身的属性(特征向量)所作的推荐。
  • 基于关联规则的推荐:“啤酒与尿布”的方式,是一种动态的推荐,能够实时对用户的行为作出推荐。是基于物品之间的特征关联性所做的推荐,在某种情况下会退化为物品协同过滤推荐。
  • 协同过滤推荐:与基于关联规则的推荐相比是一种静态方式的推荐,是根据用户已有的历史行为作分析的基础上做的推荐。可分为物品协同过滤、用户协同过滤、基于模型的协同过滤。其中,基于模型的协同又可以分为以下几种类型:基于距离的协同过滤;基于矩阵分解的协同过滤,即Latent Factor Model(SVD)或者ALS;基于图模型协同,即Graph,也叫社会网络图模型。

本文所讲述的基于内容和用户画像的个性化推荐属于第一种。对于此种推荐,有两个实体:内容和用户,因此需要有一个联系这两者的东西,即为标签。内容转换为标签即为内容特征化,用户则称为用户特征化。对于此种推荐,主要分为以下几个关键部分:

  • 标签库
  • 内容特征化
  • 用户特征化
  • 隐语义推荐

综合上面讲述的各个部分即可实现一个基于内容和用户画像的个性化推荐系统。如下图所示:

uc_interest

数据杂谈

目录

前言

记得几年前,曾经有人预测过未来最流行的三大技术:大数据、高并发、数据挖掘。到现在来看,这三种技术的确也随着这几年互联网的发展变得越发成熟和可靠。掌握这三种技术的人,不管是求职还是创业,都属于香饽饽。一个很深的印象就是当年研究生毕业的时候,专业是数据挖掘、大数据的学生都比较受各种企业的青睐,不管他是不是真的掌握了这些东西。虽然我对大部分高校的相关专业持怀疑态度,但是却也不得不承认,这些专业的确改变了很多东西,也给很多学生镀上了一层金。

自己一直从事的是Java EE中间件、基础架构等方面的研发工作,对数据这一块只是略知皮毛,在前东家的时候我也没有机会接触数据平台。但由于现公司业务的原因,却不得不去触碰这一块,到目前为止也就仅仅半年时间(其间穿插各种协调、管理的杂事)。因此,数据相关的东西对我来说完全是一个新的领域,算是离开了自己的舒适区。不过,逃离舒适区这个想想也挺兴奋的。

2016年的几点规划

明天就要开始新的一年正式的上班了,回想一下过去的2015年,对于自己来说,虽然有不少的收获和成长,但还是令自己比较不满意的。由于某些原因,自己的学习进度以及工作情况都受到了很大的影响,并没有达到年初的期望。不过,至少没有浑浑噩噩的一年又一年,也算不错了。^_^

工作学习方面:

  1. 大数据

    公司业务的增长让以前的架构达到了瓶颈。大数据技术的引入对于我自己来说算是离开了舒适区。从hadoop、flume、kafka到storm等等都是一个崭新的领域。虽然从本质上来看,大数据和普通的程序是没啥区别的。但是牵扯到分布式,各种需要考虑的东西也就多了起来,也就引出了一个个强大的软件。15年基本上完成了公司的lambda架构,16年需要做的是完善、优化已有的,而需要考虑引入的则包括elasticsearch、spark等大数据技术。

  2. 数据挖掘

    大数据是服务于数据统计的,而数据统计的最终目的一方面是指导市场运营的工作,更重要的一点则是服务于数据挖掘。目前接触的主要是怎样构建用户画像,从而形成一个良好的推荐机制,为用户推荐更多感兴趣的运营内容。15年,完成了用户画像以及初版的推荐机制;16年,需要做的是进一步验证已有系统的效果,考虑引入更好、更成熟的方案,此外在文本内容打标签、分类等方面也需要实现成熟的机器学习方案。

  3. 基础平台

    借鉴已有开源框架,实现了公司的dao框架、redis操作框架、java ee应用性能检测框架、分布式调度框架等。16年需要继续升级基础平台。

    值得一提的是,公司代码版本管理使用的gitbucket,自己在此之上做了不少二次开发,有些提交给了原项目,有些则是仅仅为了应对公司的需求。鉴于此,也接触到了scala的开发,不得不说,scala的学习曲线确实很陡,16年争取要能掌握并熟练运用此语言。

  4. Github

    在github上写代码,一方面可以提高自己的编码水平,毕竟质量太差的代码,你也怕拿出来丢人;另一方面,github上那么多优秀的项目,只做拿来党是很可耻的,一些好的东西,分享出来帮助更多的同行给自己带来的成就感反过来也能督促自己技术的提升。15年自己开发或者基于原项目二次开发了一些star较多的项目。16年要坚持在github继续贡献更多好的代码。

  5. 技术分享

    在去年的研发招聘过程中,尤其是校招,感受到了目前后端工程师教育的匮乏。对于一个后端工程师的技术体系,先不说学生,不少工作很长时间的人都没有一个清晰的认识。于是自己萌生了写一本后端工程师技术体系书籍的想法,希望能够给选择后端这个方向的人一些指导。到目前为止也写了一些,希望16年至少能出一个初稿。

    此外,自己在开发者头条的《后端技术杂谈》专栏,会继续分享自己的技术感悟和总结。一方面,增人玫瑰,手有余香;更重要的一点还是能够督促自己多总结,多思考。

工作学习之外:

今年最大的一点感受:不管其他如何,健康才是一个人最最重要的东西。尤其是对于天天坐在电脑面前的程序员们来说,保持健康就是保证最大的竞争力。