阿里规约其它

  1. 【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。
    说明:不要在方法体内定义:Pattern pattern = Pattern.compile(规则); 
    理解:看如下例子
        /**
         * 在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。
         * 说明:不要在方法体内定义:Pattern pattern = Pattern.compile(规则);
         */
        private static Pattern FIND_PATTERN = Pattern.compile("\\w+");
    
        private static Pattern REPLACE_PATTERN = Pattern.compile("moving");
        
        public static void demoFind(){
            Matcher matcher = FIND_PATTERN.matcher("Let's keep moving");
            System.out.println(matcher);
            while (matcher.find()) {
                System.out.print(matcher.group()+" ");
            }
         }
    
  2. 【强制】velocity 调用 POJO 类的属性时,建议直接使用属性名取值即可,模板引擎会自动按 规范调用 POJO 的 getXxx(),如果是 boolean 基本数据类型变量(boolean 命名不需要加 is 前缀),会自动调用 isXxx()方法。
    说明:注意如果是 Boolean 包装类对象,优先调用 getXxx()的方法。 
    理解:目前我们的POJO类不做手工修改。
    
  3. 【强制】后台输送给页面的变量必须加$!{var}——中间的感叹号。
    说明:如果 var=null 或者不存在,那么${var}会直接显示在页面上。 
    理解:这里说的是velocity,{var}打印在界面上,太不专业,也有安全问题,必须使用${var}代替。我们采用的不是velocity,velocity是一种基于java的模版引擎(template engine) VTL提供一种简单、容易的方法将动态内容合并到web页面。我们可以不用管。
    
  4. 【强制】注意 Math.random() 这个方法返回是 double 类型,注意取值的范围 0≤x<1(能够 取到零值,注意除零异常),如果想获取整数类型的随机数,不要将 x 放大 10 的若干倍然后取整,直接使用 Random 对象的 nextInt 或者 nextLong 方法。
    理解:如果要生成(0,10]的随机数
         Random rd = new Random();
         int randomInt = rd.nextInt(10)+1;
         如果要生成一个6位的随机数
         int sixBitRandomInt = (int)((Math.random()*9+1)*100000);
         如果是并发的情况,还是要用ThreadLocalRandom,见(六)并发处理
    
  5. 【强制】获取当前毫秒数 System.currentTimeMillis(); 而不是 new Date().getTime();
    说明:如果想获取更加精确的纳秒级时间值,使用 System.nanoTime()的方式。在 JDK8 中, 针对统计时间等场景,推荐使用 Instant 类。
    理解:1、currentTimeMillis返回的是系统当前时间和1970-01-01之前间隔时间的毫秒数,如果系统时间固定    则方法返回值也是一定的(这么说是为了强调和nanoTime的区别),精确度是毫秒级别的。
      2、nanoTime的返回值本身则没有什么意义,因为它基于的时间点是随机的,甚至可能是一个未来的时间,所以返回值可能为负数。但是其精确度为纳秒,相对高了不少。
      3、currentTimeMillis不仅可以用来计算代码执行消耗的时间 ,也可以和Date类方便的转换。而   nanoTime则不行。
      4、可以这么说吧,currentTimeMillis是一个时钟,而nanoTime是一个计时器,你可以用时钟来计算时间差,也可以用来单纯的看时间,但是作为计时器的nanoTime则只能用来计算时间差,好在优点是精确度高。
      5、currentTimeMillis是基于系统时间的,也就是说如果你再程序执行期间更改了系统时间则结果就会出错,而nanoTime是基于CPU的时间片来计算时间的,无法人为干扰。
      6、前面说了nanoTime基于的时间点是随机的,但是对于同一个JVM里,不同地方使用到的基点时间是一样的。
    
  6. 【推荐】不要在视图模板中加入任何复杂的逻辑。
    说明:根据 MVC 理论,视图的职责是展示,不要抢模型和控制器的活。
    理解:对于combiz的MVC划分,我们也存在这个问题,譬如UI类中写逻辑。这个问题值得思考。
    
  7. 【推荐】任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存。
    理解:尤其是集合、批量参数、数据库表都要有最大数量的限制,否则就为OOM埋下隐患,这需要引起我们的注意。
    
  8. 【推荐】及时清理不再使用的代码段或配置信息。
    说明:对于垃圾代码或过时配置,坚决清理干净,避免程序过度臃肿,代码冗余。 
    正例:对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三 个斜杠(///)来说明注释掉代码的理由。
    理解:正例的解决方式好,值得借鉴。
    

你可能感兴趣的:(阿里规约其它)