Ⅰ 阿里低调程序员蔡景现:靠着写代码登上了胡润富豪榜
人们对程序员的印象总是刻板而单一 "格子衫、双肩包、秃顶、人傻钱多" ,他们熬夜加班是常态,透支生命换取高薪,是猝死的高危人群。难道程序员就没有未来吗?还真不是。 有一位程序员,靠着写代码登上了3年前的胡润富豪榜。
蔡景现,花名多隆,1976年出生,1991年进入苍南中学,理科表现尤为出色,在数学竞赛中多次获奖, 大学期间多隆更是疯狂的研究计算机、编写代码, 在互联网知识方面越发精进。
许是天赋使然,对理科和计算机的极大兴趣为多隆冥冥之中选择好了一条路。
千禧年,多隆加入阿里巴巴,那时阿里巴巴旗下还没有淘宝、支付宝等产品,阿里巴巴自身也只是个初创公司, 这个"扫地僧"多隆就这么写了3年代码,日子平静而安稳。
转折发生在2003年,马云和多隆说要做一个秘密项目,多隆没做他想,看着密密麻麻的全英文合同, 只是问道"是不是还是写代码?"得到肯定回复后直接签了自己的名字。
这个秘密项目,就是后来的淘宝。 这个项目改变了中国的互联网格局, 将神秘的东方古国推进了一个新的时代。多隆是淘宝的第一个程序员,不光是资历长,各种令人费解的程序问题,到多隆这解决起来就是手到擒来。
多隆曾有一个同事遇到了服务器无故崩溃的问题,自己抓耳挠腮想了好几天始终没有解决,于是前来请教多隆, 多隆三分钟后就告诉了对方bug所在。 据说但凡有事找多隆,他总是随叫随到,没有丝毫架子,态度和蔼。
不仅解决问题是一把好手,多隆自己编写程序更是不在话下。 常规来讲需要一个团队做的事情,多隆一个人就能搞定,而且完成的又快又好。
在阿里人眼里,多隆已然封神,他简直不像个凡人,一个人就是一支队伍,以一敌百,而且能力过硬。
多隆的能力常人难以望其项背,但他也没有因此恃才傲物、居功自傲,而是每天该做什么做什么, 捣鼓电脑、写代码,低调的像个再普通不过的程序员, 可他过手的都是上亿的大项目。
努力终将有回报,踏踏实实不争不抢,但该属于多隆的一分也不会少。6年前阿里巴巴在纽约证券交易所正式挂牌上市,在上市前最后的招股书中,多隆赫然在列,得知此事, 多隆的反应是"让我当入股?可我只会写代码啊。"
阿里巴巴资深副总裁彭蕾对此评价道,多隆作为公司最早期的员工,伴随着公司一同成长,与公司文化完全契合,专业方面带头攻坚,个人魅力也鼓舞了许许多多的阿里人, 不论从各方面来看,多隆这个合伙人都是实至名归。
彭蕾这番话,可以说是对多隆的至高评价,这并非上下级之间的鼓励,而是身为同事,由衷对多隆的认可。
多隆成为合伙人之后, 是拥有提名权利的董事,对董事会成员的新增、更换都拥有表决权, 可他依然行事非常低调,网上关于他的资料少之又少,更别说接受什么外界采访,几乎找不到。
在阿里内部,多隆更是如"扫地僧"般的低调存在,什么时候看见他都是在敲代码,生活的就像一个普通人,完全不像亿万富豪。
曾经有一位阿里人采访多隆,问他如何成为技术大牛,多隆回答在他看来,没有所谓的大牛, 都是遇到问题想办法查资料把它弄懂、弄会,只要肯花时间和力气,自然就能会了。 很多情况没有捷径,就看你肯不肯花时间。
这一番恳切的言辞道出了成功的真谛,从浙江温州县城走出来的多隆甚至不觉得自己多么成功,在他看来他就是写代码, 做自己喜欢的事情,然后顺水推舟的做到了这个高度,他本不是奔着这个目标来的。
多隆曾给同事们提过一个建议"发现问题,解决问题,不要绕开问题的本身;多做事情,不会吃亏,即使不是你的事情。"短短的一句话,其中的深意不可小觑, 一是积极解决问题,二是勇于承担责任。
从这句话中,不难看出多隆的人格特质,这并不是一个呆头呆脑程序员偶然成功的故事,而是一个踏实肯干,找到人生使命并肯苦心钻研的人应有的光明未来。
阿里巴巴的技术岗位分为14个等级, 分别是从P1-P14,多隆目前位于P11,对应的管理级别为副总裁。
可别小看这P11,阿里巴巴P6的高级工程师,可以去大部分公司担任部门技术总监,年薪在30万-40万左右,P7可以去很多公司当技术负责人,年薪在50万-60万左右。
至于多隆所在的P11已经是大部分工程师一生也难以到达的高度了,多隆也正因此, 在3年前就以26亿身价登上胡润富豪榜,当时他年仅41岁。 随着时间的变化,多隆的身价也水涨船高,如今说他身价30亿,一点也不为过。
生活中总会有很多不期而遇的幸运,有人的幸运是收到一笔突如其来的财富;有人的幸运是邂逅一段幸福甜蜜的恋情;也有的人如多隆这般, 在年轻时就找到了自己值得奋斗一生的兴趣和使命。
有的人可能会说,道理我都懂,但是我就是不想去做,抛开拖延、自制力差等原因,认真思考一下,这件事到底是不是你的兴趣和使命所在。
回想你在玩 游戏 的时候,你是因为自律而去按时按点玩 游戏 吗?并不是,你是因为喜欢,才去玩 游戏 ,这个道理放在很多地方都是通用的, 如果要靠强迫自己才能完成任务,不如将视野放宽,寻找和 探索 一些人生新的可能性。
心之所向,无力抵抗,愿你也能在年富力强的时候像多隆一样,找到值得奋斗终身的使命。
文/亦言
Ⅱ 为什么阿里工程师代码写的好看看他的代码规范就知道了
曾经与一位从阿里出来的Java工程师一起工作过一段时间,他的技术说不上非常厉害, 但是,他的代码写的的非常好,凡是他做的功能很少出现Bug 。我就很好奇,于是经常向他请教一些代码设计的原则,然后他告诉了我阿里Java手册。并且,他将这个手册进行了修改,也成为了我司Java程序员的开发手册。 这篇文章就让我们看一看这个手册中比较重要的原则。
【消樱强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
反例:_name / __name / $name / name_ / name$ / name__
【强制】 类型与中括号紧挨相连来表示数组。
正例:定义整形数组 int[] arrayDemo; 反例:在 main 参数中,使用 String args[]来定义。
【强制】 POJO 类中布尔类型变量都不要加 is 前缀,否则部分框架解析会引起序列化错误。
说明:表达是与否的值采用 is_xxx 的命名方式,所以,需要在 设置从 is_xxx 到 xxx 的映射关系。
反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(), RPC 框架在反向解 析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
【推荐】 在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。
【推荐】 接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁 性,并加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定 是与接口方法相关,并且是整个应用的基础常量。
正例:接口方誉神法签名 void commit();
接口基础常量 String COMPANY = "alibaba";
反例:接口方法定义 public abstract void f();
说明:JDK8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默认实现。
【参考】 枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。
说明:枚举其实就是特殊的类,域成员均为常量,且构造方法被默认强制是私有庆桥亏。
正例:枚举名字为 ProcessStatusEnum 的成员名称:SUCCESS / UNKNOWN_REASON。
【参考】 各层命名规约:
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects。 3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save/insert 做前缀。
5) 删除的方法用 remove/delete 做前缀。
6) 修改的方法用 update 做前缀。
1) 数据对象:xxxDO,xxx 即为数据表名。
2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
3) 展示对象:xxxVO,xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。
【强制】 不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
【强制】 避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析 成本,直接用类名来访问即可。
【强制】 相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object。
说明:可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程)
【强制】 所有整型包装类对象之间值的比较,全部使用equals方法比较。
说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产 生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数 据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。
关于基本数据类型与包装数据类型的使用标准如下:
说明: POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值 ,任何 NPE 问题,或 者入库检查,都由使用者来保证。
正例:数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险。
反例: 比如显示成交总额涨跌情况,即正负 x%,x 为基本数据类型,调用的 RPC 服务,调用不成功时, 返回的是默认值,页面显示为 0%,这是不合理的,应该显示成中划线 。所以包装数据类型的 null 值,能 够表示额外的信息,如:远程调用失败,异常退出。
【强制】 POJO 类必须写 toString 方法。
使用 IDE 中的工具:source> generate toString 时,如果继承了另一个 POJO 类,注意在前面加一下 super.toString。
说明: 在方法执行抛出异常时,可以直接调用 POJO 的 toString()方法打印其属性值,便于排查问题。
【强制】 关于hashCode和equals的处理,遵循如下规则:
说明:String 已覆写 hashCode 和 equals 方法,所以我们可以愉快地使用 String 对象作为 key 来使用。
【强制】 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
说明:线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销,解决资源不足的问 题。 如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。
【强制】 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
以上规范在设计代码中,是比较重要的原则。如果编写代码的过程中,可以依照以上原则,那代码的可读性和可维护性将大大提升
Ⅲ CRUD 程序员勿进JDK 源码剖析手册与并发编程图册,完美诠释高并发
在后端程序员的中,如果你有高并发的经验,也往往能得到比别人更多的机会。原因很简单,高并发会涉及到各种各样的技术问题,如接口响应超时、GC 频繁、大数据量储存、死锁等等。能搞定高并发的程序员,技术深度一定不会差。
为了能大家更好地了解 Java 并发,我我前段时间特地从阿里的一位朋友手上拿到了他手写的 JDK 源码剖析手册与并发编程图册,下面一起来看看吧:
JDK 源码剖析手册
基于 JDK7 和 JDK 8,对整个 Concurrent 包进行全面的源码剖析。JDK8 中大部分并发功能的实现和 JDK 7 一样,但新增了一些额外的特性。例如 CompletableFuture、ConcurrentHashMap 的新实现、StampedLock、LongAdder 等。
点击并拖拽以移动
点击并拖拽以移动
点击并拖拽以移动
详细内容展示
点击并拖拽以移动
点击并拖拽以移动
点击并拖拽以移动
点击并拖拽以移动
点击并拖拽以移动
并发编程图册
包含大量图文以及源码分析帮助大家理解相关知识,借助这些图文,按照这个顺序学习,至少可以让你简单入门并发。
总览
点击并拖拽以移动
详细内容展示
点击并拖拽以移动
点击并拖拽以移动
点击并拖拽以移动
点击并拖拽以移动
点击并拖拽以移动
点击并拖拽以移动
点击并拖拽以移动
由于这份资料实在是细节内容实在太多啦,所以只能把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!如果有需要完整版的朋友可以: 一键三连支持一下私信我,注意回复【000】即可获取更多免费资料! 希望大家看完之后能够有所收获~