谈谈互联网后端基础设施

对于一个互联网企业,后端服务是必不可少的一个组成部分。抛开业务应用来说,往下的基础服务设施做到哪些才能够保证业务的高可用、稳定、可靠、可维护呢?纵观整个互联网技术体系再结合公司的目前状况,个人认为必不可少或者非常关键的后端基础技术/组件/设施如下图所示:

开发或者搭建好以上的后端基础设施,一般情况下是能够支撑很长一段时间内的业务的。

研发体系这点事

–本文于2016.08.23最新更新–

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

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

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

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