首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

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

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

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


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

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

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

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

    我的理解里 Service 和 DAO 是在系统内部被调用完成业务逻辑的,并不会被暴露给外部系统,这里的 SOA 是什么意思?
        53
    aristotll   2017-02-10 23:19:01 +08:00
    @Shura 这个名字好像一直都这个吧...
        54
    vikeria   2017-02-11 09:12:11 +08:00 via iPhone
    @CYKun 面向服务
        55
    popil1987   2017-02-11 09:14:32 +08:00
    @murmur 但是实际测试确实 COUNT(id)要比 COUNT(*)快多了
        56
    huanghaofu86   2017-02-11 09:50:19 +08:00
    阿里用什么数据库?
        57
    0915240   2017-02-11 10:29:01 +08:00
    @murmur 那么究竟要用什么呢?我现在用的是 count(1)
        58
    nashxk   2017-02-11 10:32:59 +08:00
    如果自己没有一套合理的规范,学习一下也是很好的,提高协作效率,不用怎么评价。
        59
    murmur   2017-02-11 10:53:41 +08:00
    @0915240 我也是用的 count1..
        60
    kingcos   2017-02-11 11:38:02 +08:00 via iPhone
    不错啊,如果好的话准备用到下面的项目里
        61
    zhx1991   2017-02-11 12:12:44 +08:00
    里面关于使用 final 可以提升效率的说法是不严谨的
        62
    hjklb   2017-02-11 13:22:05 +08:00 via Android
    com.eg.android.AlipayGphone
    支付宝的包名 2 个大写字母。还强制?
        63
    hjklb   2017-02-11 13:23:14 +08:00 via Android
    还有 eg 是什么鬼简写。
        64
    davinci   2017-02-11 23:23:30 +08:00
    不明觉厉
        65
    mingyun   2017-02-11 23:48:55 +08:00
    有对应 php 或 python 版吗
        66
    Miy4mori   2017-02-12 01:35:38 +08:00
    要效仿使用的话为什么不用 google style guide ,反正阿里的东西总觉得是世界上有比它好的他却要自己造个有点问题的。。。
        67
    1762628386   2017-02-12 11:56:14 +08:00
    @CYKun 暴露出来的服务 一定要在接口文件中声明
        68
    1762628386   2017-02-12 11:56:32 +08:00
    .
        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 "";
    }
    }
        70
    stevenkang   2017-02-15 14:14:58 +08:00
    @phx13ye 可能在假的支付宝网站上面下载到了假的支付宝员工编写的假的代码。
        71
    dz8235462   2017-02-15 16:08:22 +08:00
    @reeco 我并不相信写一个 if 并生成一个 map ,放进去几个值再返回,比用异常直接结束方法要方便。一个应该返回 int 的方法,不应该在需要报错的时候报错吗?
        72
    stevenkang   2017-02-17 09:29:37 +08:00
    @reeco
    @dz8235462
    异常不能用于业务逻辑控制,仅在异常的情况下进行报错,这样更方便调用者捕获并处理异常。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2833 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 12:11 · PVG 20:11 · LAX 05:11 · JFK 08:11
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1