如何评价阿里巴巴公布《阿里巴巴 Java 开发手册》? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stevenkang
V2EX    Java

如何评价阿里巴巴公布《阿里巴巴 Java 开发手册》?

  •  
  •   stevenkang 2017-02-10 14:43:32 +08:00 12189 次点击
    这是一个创建于 3164 天前的主题,其中的信息可能已经有所发展或是发生改变。

    摘要: 阿里巴巴集团推出的《阿里巴巴 Java 开发手册(正式版)》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让 Java 开发者能够提升协作效率、提高代码质量。

    链接: https://yq.aliyun.com/articles/69327

    第 1 条附言    2017-02-13 15:22:13 +08:00
    附上网盘下载地址

    链接: http://pan.baidu.com/s/1gfLuXcn 密码: vt3t
    72 条回复    2017-02-17 09:29:37 +08:00
    abellee
        1
    abellee  
       2017-02-10 15:00:57 +08:00
    看着好的学习一下 that's it
    antowa
        2
    antowa  
       2017-02-10 15:03:01 +08:00
    感觉是重复。 JAVA 材料已经不少了吧?
    donyee
        3
    donyee  
       2017-02-10 15:06:47 +08:00
    是不是要登陆阿里云才能下载?
    stevenkang
        4
    stevenkang  
    OP
       2017-02-10 15:08:18 +08:00
    @donyee 我传到网盘上面吧,确实要登录
    stevenkang
        5
    stevenkang  
    OP
       2017-02-10 15:10:54 +08:00   8
    下载的话,用网盘的吧,阿里上面那个需要注册账号
    链接: http://pan.baidu.com/s/1gfLuXcn 密码: vt3t
    zgqq
        6
    zgqq  
       2017-02-10 15:11:59 +08:00 via Android
    就一些代码规范,而且很多都是共识了
    Ouyangan
        7
    Ouyangan  
       2017-02-10 15:14:31 +08:00
    结合 effective java 可以看看
    donyee
        8
    donyee  
       2017-02-10 15:14:57 +08:00
    @stevenkang 已经下载,多谢
    winglight2016
        9
    winglight2016  
       2017-02-10 15:19:49 +08:00
    这种东西,自己公司订的规范文档都不会看,就更不用说外部的了
    hellommd
        10
    hellommd  
       2017-02-10 15:24:36 +08:00
    感觉挺好,公司规范用这一套就好了;-)
    loryyang
        11
    loryyang  
       2017-02-10 15:31:49 +08:00
    @zgqq 我看了一下,不仅仅是编码规范,还是有一些有价值的内容的
    jakes
        12
    jakes  
       2017-02-10 15:38:37 +08:00
    还是有很多干货的,推荐看一下。
    lynx
        13
    lynx  
       2017-02-10 15:47:38 +08:00
    看到他的集合处理的第 10 条,说 keySet 是遍历了两次,但是他内部的实现是套了一层迭代器,并不是遍历两次,实际只遍历了一次
    saberpowermo
        14
    saberpowermo  
       2017-02-10 15:52:57 +08:00
    感觉还是非常不错的。。


    之前在 1 个程序员群里 因为代码规范 跟人对喷过
    就是关于 = == 左右两边加不加空格的问题, 我说这种是基本规范把 还是加上的好,
    然后被一帮人 用 "我 不加空格 这程序能不能跑? " 的角度 一个劲怼。
    最后想明白了 还是自己 too young....
    zeroten
        15
    zeroten  
       2017-02-10 16:01:14 +08:00
    是这个地址么?
    https://yq.aliyun.com/attachment/download/?id=1170

    竟然还要账号登录,谁能下载下来共享下?
    ThomasAnderson
        16
    ThomasAnderson  
       2017-02-10 16:02:44 +08:00
    @stevenkang xiexie
    vozon
        17
    vozon  
       2017-02-10 16:09:16 +08:00
    现在的公司不强调统一的编码风格, 导致强迫症真的很难忍...
    murmur
        18
    murmur  
       2017-02-10 16:10:50 +08:00   1
    [强制] 不要使用 count(列名)或 count(常量)来替代 count(*), count(*)就是 SQL92 定义
    的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。

    看到这行快哭出来了。。 count(*)、 count(1)、 count(列)哪个更快估计现在还可以吵几个小时,都快成玄学了
    sorcerer
        19
    sorcerer  
       2017-02-10 16:15:09 +08:00 via iPhone
    学习了
    murmur
        20
    murmur  
       2017-02-10 16:16:09 +08:00
    @antowa 这东西的意义在于你不看,面试官会看,大家一起看就相当于你复习到原题了
    acoder2013
        21
    acoder2013  
       2017-02-10 16:29:14 +08:00
    写的不错,有很多干活
    lalalafq
        22
    lalalafq  
       2017-02-10 16:46:54 +08:00
    我比较期待对应的代码检查脚本。
    ptyfork
        23
    ptyfork  
       2017-02-10 16:58:47 +08:00
    当你们都在争论代码格式的时候,我们 gophers 一个 gofmt 命令就全部搞定了。。
    chairuosen
        24
    chairuosen  
       2017-02-10 17:01:40 +08:00
    @stevenkang 。。。发现百度网盘一个 BUG ,未登录状态,输入密码进入文件下载页,点一下保存到网盘,会弹登录框,关掉,再点一下右上角登录,弹出的登录对话框里面有两套登录 form 。。。
    lxlgod
        25
    lxlgod  
       2017-02-10 17:16:11 +08:00
    @zeroten 链接: http://pan.baidu.com/s/1gfbtOt1 密码: wqgq
    antowa
        26
    antowa  
       2017-02-10 17:20:04 +08:00
    @murmur 咱俩说问题角度不一样。
    mgcnrx11
        27
    mgcnrx11  
       2017-02-10 17:33:38 +08:00
    有没有说判断时要 null == instance 还是 instance == null
    dz8235462
        28
    dz8235462  
       2017-02-10 17:50:07 +08:00
    更多的差异是在逻辑使用上,我个人一直使用异常来帮助跳出方法以及提供错误提示。但至今还没见过其他同事使用这种方式。所以基本每个人写的代码都是完全不同的,逻辑方式也不一样。我大部分情况都避免超过两层的循环和 if ,然而其他人并不这么搞。
    reeco
        29
    reeco  
       2017-02-10 17:54:17 +08:00
    @dz8235462 (一) 异常处理 [强制] 异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低。
    Mogugugugu
        30
    Mogugugugu  
       2017-02-10 18:01:29 +08:00
    之前看 Google Java 编程风格规范,现在阿里也出了,怎么说呢,灵活应对吧。一般的常识性的规范,写代码的时候也都下意识的遵守了。不必强制,灵活就好。
    deweixu
        31
    deweixu  
       2017-02-10 18:04:24 +08:00
    今天下午看了一下,发现自己的 Java 基础知识太烂了,准备补补
    linghutf
        32
    linghutf  
       2017-02-10 18:10:22 +08:00
    下载正在看,这种可以体现别人的意图,怎么避免坑
    acrisliu
        33
    acrisliu  
       2017-02-10 18:15:20 +08:00 via Android
    学习一下
    300
        34
    300  
       2017-02-10 18:16:34 +08:00
    我记得前两天还有人讨论了来着( ̄ ̄")
    8. [强制] POJO 类中布尔类型的变量,都不要加 is ,否则部分框架解析会引起序列化错误。
    反例:定义为基本数据类型 boolean isSuccess ;的属性,它的方法也是 isSuccess(), RPC
    框架在反向解析的时候,“以为”对应的属性名称是 success ,导致属性获取不到,进而抛出异
    常。
    watzds
        35
    watzds  
       2017-02-10 18:27:11 +08:00 via Android   3
    学好了再去阿里,阿里就减少培训成本了
    zhiyuan91
        36
    zhiyuan91  
       2017-02-10 18:31:19 +08:00
    @mgcnrx11 这样做有啥意义?
    caixiexin
        37
    caixiexin  
       2017-02-10 18:57:31 +08:00   1
    @zhiyuan91 null == instance 还是 instance == null 这种要求,记得在 C 和 C++里面是要注意的,因为很多人写 if( instance == null ) 时容易少打一个等号,导致 instance 被赋值,程序员又没发现,所以写这种 if 条件时常量必须放前面,比如 null == instance 。但是 java 里面 if(instance=null)是编译不过的,应该也不用要求了。
    zhiyuan91
        38
    zhiyuan91  
       2017-02-10 19:00:19 +08:00 via iPhone
    @caixiexin 就是这意思,写 java 的时候没必要沿用 c++的规范
    hrong
        39
    hrong  
       2017-02-10 19:02:35 +08:00 via Android
    这个文档体系感差了一点,不适合新手。
    阿里的文档也就这水平。。。。
    zgqq
        40
    zgqq  
       2017-02-10 19:08:22 +08:00 via Android
    @hrong 这个本来用来内部培训的吧
    Antidictator
        41
    Antidictator  
       2017-02-10 19:34:12 +08:00 via Android
    @mgcnrx11 哈哈哈
    wdlth
        42
    wdlth  
       2017-02-10 19:44:47 +08:00
    感觉很杂,像是东拼西凑出来的……
    Shura
        43
    Shura  
       2017-02-10 20:08:55 +08:00
    StringBuffer sb = new StringBuffer();
    这个变量名啊, navie
    xiaonengshou
        44
    xiaonengshou  
       2017-02-10 20:15:47 +08:00
    还是需要这样的规约的,就像 airbnb 的规范。约束不是目的,而是统一、
    smithtel
        45
    smithtel  
       2017-02-10 20:29:52 +08:00 via Android
    后面有干货,还是可以看看
    aristotll
        46
    aristotll  
       2017-02-10 21:03:08 +08:00
    居然都覆盖 Java8 了 Java 果然兼容性好 导致升级压力下了啊
    mgcnrx11
        47
    mgcnrx11  
       2017-02-10 21:04:48 +08:00 via iPhone
    @caixiexin 感谢解释
    tt0411
        48
    tt0411  
       2017-02-10 21:09:52 +08:00
    干货挺多的.

    代码规范必须配套代码分析工具, 工具比规范文档更重要, 希望阿里的同学能分享甚至开源他们的工具
    zacard
        49
    zacard  
       2017-02-10 21:42:21 +08:00
    有干货,很多规范非常实用。
    ddou
        50
    ddou  
       2017-02-10 22:31:54 +08:00
    编码规范,老鸟们早都烂熟于心了。作为新手指引,在公司内作为一个代码的基本要求规范,还是有点价值的。
    gouchaoer
        51
    gouchaoer  
       2017-02-10 22:40:55 +08:00 via Android
    还行吧,都看完了
    CYKun
        52
    CYKun  
       2017-02-10 23:07:26 +08:00 via Android
    请教一下各位,“对于 Service 和 DAO 类,基于 SOA 的理念,暴露出来的服务一定是接口,内部的实现类用 Impl 的后缀与接口区别” 是什么意思?

    我的理解里 Service 和 DAO 是在系统内部被调用完成业务逻辑的,并不会被暴露给外部系统,这里的 SOA 是什么意思?
    aristotll
        53
    aristotll  
       2017-02-10 23:19:01 +08:00
    @Shura 这个名字好像一直都这个吧...
    vikeria
        54
    vikeria  
       2017-02-11 09:12:11 +08:00 via iPhone
    @CYKun 面向服务
    popil1987
        55
    popil1987  
       2017-02-11 09:14:32 +08:00
    @murmur 但是实际测试确实 COUNT(id)要比 COUNT(*)快多了
    huanghaofu86
        56
    huanghaofu86  
       2017-02-11 09:50:19 +08:00
    阿里用什么数据库?
    0915240
        57
    0915240  
       2017-02-11 10:29:01 +08:00
    @murmur 那么究竟要用什么呢?我现在用的是 count(1)
    nashxk
        58
    nashxk  
       2017-02-11 10:32:59 +08:00
    如果自己没有一套合理的规范,学习一下也是很好的,提高协作效率,不用怎么评价。
    murmur
        59
    murmur  
       2017-02-11 10:53:41 +08:00
    @0915240 我也是用的 count1..
    kingcos
        60
    kingcos  
       2017-02-11 11:38:02 +08:00 via iPhone
    不错啊,如果好的话准备用到下面的项目里
    zhx1991
        61
    zhx1991  
       2017-02-11 12:12:44 +08:00
    里面关于使用 final 可以提升效率的说法是不严谨的
    hjklb
        62
    hjklb  
       2017-02-11 13:22:05 +08:00 via Android
    com.eg.android.AlipayGphone
    支付宝的包名 2 个大写字母。还强制?
    hjklb
        63
    hjklb  
       2017-02-11 13:23:14 +08:00 via Android
    还有 eg 是什么鬼简写。
    davinci
        64
    davinci  
       2017-02-11 23:23:30 +08:00
    不明觉厉
    mingyun
        65
    mingyun  
       2017-02-11 23:48:55 +08:00
    有对应 php 或 python 版吗
    Miy4mori
        66
    Miy4mori  
       2017-02-12 01:35:38 +08:00
    要效仿使用的话为什么不用 google style guide ,反正阿里的东西总觉得是世界上有比它好的他却要自己造个有点问题的。。。
    1762628386
        67
    1762628386  
       2017-02-12 11:56:14 +08:00
    @CYKun 暴露出来的服务 一定要在接口文件中声明
    1762628386
        68
    1762628386  
       2017-02-12 11:56:32 +08:00
    .
    phx13ye
        69
    phx13ye  
       2017-02-13 16:53:44 +08:00
    翻了一下当时下的支付宝即时到帐 sdk ,我可能下了假代码。。。。
    /**
    * 生成文件摘要
    * @param strFilePath 文件路径
    * @param file_digest_type 摘要算法
    * @return 文件摘要结果
    */
    public static String getAbstract(String strFilePath, String file_digest_type) throws IOException {
    PartSource file = new FilePartSource(new File(strFilePath));
    if(file_digest_type.equals("MD5")){
    return DigestUtils.md5Hex(file.createInputStream());
    }
    else if(file_digest_type.equals("SHA")) {
    return DigestUtils.sha256Hex(file.createInputStream());
    }
    else {
    return "";
    }
    }
    stevenkang
        70
    stevenkang  
    OP
       2017-02-15 14:14:58 +08:00
    @phx13ye 可能在假的支付宝网站上面下载到了假的支付宝员工编写的假的代码。
    dz8235462
        71
    dz8235462  
       2017-02-15 16:08:22 +08:00
    @reeco 我并不相信写一个 if 并生成一个 map ,放进去几个值再返回,比用异常直接结束方法要方便。一个应该返回 int 的方法,不应该在需要报错的时候报错吗?
    stevenkang
        72
    stevenkang  
    OP
       2017-02-17 09:29:37 +08:00
    @reeco
    @dz8235462
    异常不能用于业务逻辑控制,仅在异常的情况下进行报错,这样更方便调用者捕获并处理异常。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2844 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 00:23 PVG 08:23 LAX 17:23 JFK 20:23
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86