阅读更多
一叶知秋,回顾我的Java之路,最感谢还是阿里巴巴能够给我们这些技术人员创造出这样有挑战的业务场景和业务需要,也感谢有这样一群人能够为了这个目标一起努力到现在。
与Java的不解之缘

看到这个专题名字的第一眼,真是感慨万千:Java已经有20年历史了啊,我竟然也用了这语言8年了,真是转眼一瞬。



王晶昱(花名:沈询)

回想起8年前的我,应该是正在大学宿舍里努力地从网上搜索C语言的各种教程,在“值传递和指针传递的区别是什么?”“如何避免引用计数循环引用?”等问题中东突西撞不得要领吧。然后在某天,我偶然间看到了一门据称比C++简单的Java语言,恰巧还碰上一个好老师——莫倩老师,自然而然地激发起我去了解和学习Java的兴趣。现在还记得当时在学习《ThinkinJava》时,我还不是特别理解BruceEckel介绍Java与C++的差别时提到的一句话:“Java是一种生产力语言”。当时我看着这句话,心里一直在想:语言嘛,应该大同小异,能有什么生产力提升?一个解释型语言怎么可能超越编译语言呢?

转眼,我使用Java已有8个年头了,现在想想,Java真的带给了我很多:它尽可能地避免我写出错误的代码。它不需要我去计算指针偏移量,也不需要我去关心垃圾回收问题,连Collection类都有DougLea这样的大神做好了封装。这些语言内建机制和类库极大地减轻了我的头脑负担,让我能够更加专注地完成业务逻辑。而最让我惊喜的是,Java一直不懈地追求JVM虚拟机的持续优化,各种眼花缭乱的锁优化、动态字节码编译调优、GC新算法等JVM优化层出不穷。

在最近的几年,我也可喜地看到,在Oracle的带领下,Java语言的演进变得非常迅速。当我还在熟悉Java7的forkJoin框架的时候,支持Lambda的Java8已正式发布了。

现在,我也想从我个人角度,给Java点个赞。确实,对我而言,这是一门生产力语言,而Java也成功地帮助阿里巴巴、淘宝走过了高速发展时期,并造就了我们阿里的一支明星团队:阿里巴巴-共享业务-中间件和稳定性平台。

说起这个团队,其实它在内部的名字一般称为Java中间件。你看把Java放在了团队的名字里,这就是真爱啊!从2007年开始,我们就逐渐发现,外部企业级中间件并不是非常适合我们互联网业务的实际发展需要。面对着每年翻番的用户量和用户请求,我们不得不开始进行分布式应用体系的探索。当时可真是没什么能够参照的,全都得靠自己去探索,经过了三年多不断摸索,我们彻底地将系统进行了服务化、分布式改造。



目前,整个阿里集团几乎所有的应用都在使用这些中间件。我想,这也是阿里技术体系的精华所在吧。

最近这几年,阿里的核心技术体系架构已经非常稳定可靠了。我们又在这些核心中间件的基础上,不断地深入细化运维体系,尽可能地做到自动化、智能化,为集团节省了比较多的设备成本和运维成本。在2015年,Java中间件更是响应了阿里集团上云的梦想,将阿里集团七年的技术积累,一股脑地搬到了云上,目前所提供的主要产品有:企业分布式应用服务(EDAS)、分布式关系数据库(DRDS)、分布式消息服务(ONS)。它们都是使用Java编写的,为大家量身定做的分布式中间件,与互联网应用体系相结合,能够非常轻松地实现企业IT架构的随需定制和可线性扩缩。如果大家有需求,可以按照自己的需要来进行选择。

与Java一起成长

能够取得这样的成绩,Java功不可没。除了我上面提到语言特性对我们的帮助之外,在团队之中,我们也非常关注整个Java的生态体系。基本上,无论我们有什么新的想法,都可以立刻在Java的开源世界中找到对应的一些实现,里面有很多还非常靠谱,Netty、Tomcat、Ibatis、Hibernate、Spring、Struts、ZooKeeper、Hadoop、Mahout、Cassandra……我能举出无数的开源软件,它们都对我们的平台积累起到了非常大的作用。

同样的,我们也在积极尝试将自己系统的积累反馈回到社区里,大家可以在github.com/alibaba下面找到很多我们开源出来的软件,在这里面我想特别的提几个:RocketMQ(消息队列)、Druid(连接池)、FastJson(JSON解析引擎)、Dubbo(RPC框架)等等。这些开源软件与其他友商的各种开源、闭源的Java软件一起丰富了Java生态体系,也让我们解决问题变得更加轻松。

对我个人而言,Java的生态体系之所以能够这样丰富,主要原因在于它编写一次、多点运行的特性,以及一直坚持着的向下兼容能力。这些都非常有利于Java生态体系的积累和演进,也造就了现在如此丰富的Java开源软件环境和体系。

提到Java的向下兼容能力,我也想稍微聊一下我的看法。我经常能看到很多人谈到,Java的历史包袱太重了,为了兼容这些历史遗留的包袱,Java的演进已经非常困难,这会导致Java语言的崩溃。针对这个问题,我个人的看法是:首先,Java作为一个被这么广泛的使用的语言,有着这么深厚的系统积累,完全不考虑系统的兼容性而演进整个系统,这其实是比较危险的,对其他革新进行兼容并包可能才是它最好的发展方向。就目前而言,我几乎没看到过哪个语言能够比较好地解决这种语言升级所导致的软件断层问题,所以,更多的只是两害取其轻的过程吧。同时,我也非常高兴地看到,依托于JVM,我们有了大量的新的语言实现,这里面有Groovy,Scala,JPython等等。它们都非常优秀,这些新生的语言与Java一起,进一步丰富了整个Java的生态体系,也更加坚定了我对Java生态体系的信心,它一定还能再战十年!

寄语现在,展望未来

一叶知秋,回顾我的Java之路,最感谢还是阿里巴巴能够给我们这些技术人员创造出这样有挑战的业务场景和业务需要,也感谢有这样一群人能够为了这个目标一起努力到现在。

能够跟这些大牛们一起工作,耳濡目染,不断提高,是我的工作生涯中最为宝贵的一笔财富。而如果能够回到过去,我最想告诉8年以前的自己:“要买房!”

笑~~

其实是:“还是要特别注重基础,操作系统、网络、算法数据结构、离散数学、数据库原理与实践,这些看起来枯燥而无味的基础科学,是我目前感到知识最为匮乏,但却最为急需的部分,要了解它们是必须付出非常多的时间才有可能理解通透些。而这些基础的扎实程度,就直接决定了你的高度”。可惜,我没办法在21天内学会C++,这些建议,也就只能提供给还有机会实践的各位做参考了。

作者简介:王晶昱花名沈询,阿里高级专家,来自阿里巴巴中间件和稳定性平台。目前主要负责阿里的分布式数据库DRDS(TDDL)和阿里的分布式消息服务ONS(RocketMQ/Notify)两个系统。
  • 大小: 433 KB
  • 大小: 163.9 KB
10
1
评论 共 3 条 请登录后发表评论
3 楼 jiwenke 2015-05-21 08:39
很久不见了,头发短了哈:),有机会向你请教消息中间件的东东。。。
2 楼 bewithme 2015-05-20 17:04
我也喜欢和她再战二十年。
1 楼 jiangchao419 2015-05-20 16:59
挺喜欢java的,希望能和她再战二十年!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 正则表达式实现excel判断(=IF(EXP,TRUE,FALSE))三元表达式(含各种嵌套复杂的判断表达式)分组提取内容

    如果是简单的=if(a,b,c),用简单的分组很容易就能提取出a、b和c,但是在复杂的嵌套如=IF(G2,"0",IF(G2>G3,IF(G2>90,14*G1,(((G2-G3)*13-1)*G1)), IF(G2,(10-(G3-G2)*2)*G1,11*G1))) 要提取出 G2、"0"、和IF(G2>G3,IF...

  • Python正则表达式之嵌套分组匹配

    嵌套分组匹配 一般的分组匹配 target1 = '021-12345' pattern = r'^(\d{3})-(\d{3,8})$' m = re.match(pattern,target1) print(m.groups()) # 返回提取的子串 print(m.group(0)) # 永远是目标字符串本身 print(m....

  • 正则表达式之findall()方法——分组嵌套

    当正则表达式中没有分组,findall()方法返回一个字符串列表。列表中的每个字符串都是一段被查找的文本,它匹配该正则表达式。如果在正则表达式中有分组,那么findall()方法将返回元组列表。每个元组表示一个找到的...

  • Python正则表达式嵌套组

    一个正则匹配表达式可以有多个组,组之间也可以嵌套,但是需要满足一个原则,就是先要匹配到上层的组,再匹配下层的组,上层组的序号先于下层组,如果一个上层组满足匹配条件,一定是以嵌套组也满足为前提。

  • 【C++正则表达式】正则表达式基础

    正则表达式基础

  • 正则表达式分组

    在正则表达式中用()进行分组如"(\\w|\\d){2,5}[2345]\\d+(\\w&&[^._])"而每一个分组都有自己的序号以左括号为标准第一个出现的为第一组其中(\\w|\\d)是第一组,(\\w&&[^._])是二组类似嵌套的正则(a*|(b+{9})其中...

  • 正则表达式的语法汇总

    正则表达式的基本语法1.1两个特殊符号 '^' 和 '$'^ 正则表达式的起始符$ 正则表达式的结束符^$ 结合使用不使用 ^$1.2 出现次数的表示符号 * + ?* 表示出现 0次 或者 至少1次+ 表示出现 至少1次? 表示出现 0次 或者 ...

  • 正则html标签 嵌套,正则表达式匹配闭合HTML标签 支持嵌套

    先确定我们要解决的问题——从一段Html文本中找出特定id的标签的innerHTML,需要的朋友可以参考下任何复杂的正则表达式都是由简单的子表达式组成的,要想写出复杂的正则来,一方面需要有化繁为简的功底,另外一方面,...

  • 正则表达式

    对正则表达式中常用的元字符和方法、属性进行总结,并进行对比区分。

  • mysql多对多正则_MySQL 高级查询(多表、嵌套和正则表达式)

    MySQL 提供了功能强大、灵活的语句来实现这些操作,本章将介绍如何使用 SELECT 语句查询数据表中的一列或多列数据、使用集合函数显示查询结果、连接查询、子查询以及使用正则表达式进行查询等。重要提示:查询的能力...

  • python 正则表达式 分组_正则表达式之分组的用法

    分组的概念在一个正则表达式中, 通过英文()包裹的...对应整个表达式匹配的文本也就是说, 整个正则表达式所匹配到的文本, 就对应着分组0, 而我们显示指定的分组, 都是从1开始排序的那么如果我们的分组中包含有嵌套...

  • php 正则匹配分组命名,正则表达式分组的详解(附代码)

    这次给大家带来正则表达式分组的详解(附代码),正则表达式分组的注意事项有哪些,下面就是实战案例,一起来看一下。正则表达式分组:如果想匹配3个数字,正则表达式可以用如下写法:\d{3}以上代码使用重复量词可以匹配...

  • 学习正则表达式 - 选择、分组和向后引用

    选择操作、选项和修饰符、统计单词出现的行数、子模式、捕获分组和后向引用、命名分组、非捕获分组、原子分组、回溯

  • 正则表达式替换技巧

    1.正则表达式应用——替换指定内容到行尾 原始文本如下面两行 abc aaaaa 123 abc 444 希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg” 即上面的文本最终替换为: abc efg 123 abc efg 解决:...

  • JS正则表达式完整版

    第一章 正则表达式字符匹配攻略 1 两种模糊匹配 2. 字符组 3. 量词 4. 多选分支 5. 案例分析 第1章 小结 第二章 正则表达式位置匹配攻略 1. 什么是位置呢? 2. 如何匹配位置呢? 3. 位置的特性 4. 相关...

  • 正则表达式—分组

    当有嵌套的小括号时,怎么区分那个是第一组那个是第二组呢? 只需要数小括号边的左小括号,看到第一个左小括号就是第一组,第二个左小括号就是第二组 // group(分组) public class Test8 { public static void main...

  • 正则表达式详解(七、扩展正则表达式)

    介绍基础表达式与扩展表达式的区别,并举例用扩展表达式语法匹配邮箱地址。

  • 正则表达式规则

    元字符:正则表达式主要依赖于元字符。元字符不代表他们本身的字面意思,他们都有特殊的含义。一些元字符写在方括号中的时候有一些特殊的意思。以下是一些元字符的介绍:运算符优先级:正则表达式从左到右进行计算,...

  • C# 使用正则表达式

    正则表达式是一种用于匹配和处理文本的强大工具,常用于字符串的搜索、替换、验证等操作。在C#中,可以使用命名空间提供的类来处理正则表达式。正则表达式由一系列字符和特殊字符组成,用于定义模式或规则,用于匹配...

  • 正则表达式之子表达式与分组替换

    在使用子表达式的正则表达式中,有一种很有用的特性-**反向引用**。要理解**反向引用**首先得了解**捕获组**的概念

Global site tag (gtag.js) - Google Analytics