Ali-Check 【Blocker】

aliyun-check-script:阿里云检查脚本 立即下载
Blocker

Blocker直译过来是“雏形锻模”的意思,大意应该是要给开发者提供一个开发的模板。它在Ali-Check中的提示等级是最高的,在Android Studio中也是红色的标记。
Blocker Inspections包含代码规范(消除歧义,增强可读性),性能调优等检测,值得开发者去了解,并且处理该类型的Inspections。

如何查看Blocker

在安装了Ali-Check的插件以后,如果想查看Blocker中所有的检测内容,可以点击Android Studio 的“File→Settings”,然后如下图所示,筛选Ali-Check中的Blocker即可。

Blocker目录

Blocker Inspections

从上面目录可以了解到,目前总共有11条Blocker提示信息,下面会对每条Blocker进行简单的记录。


1. long或者Long初始赋值时,必须使用大写的L

long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。

  • Negative example:
     //It is hard to tell whether it is number 11 or Long 1.
     Long warn = 1l;
    
  • Positive example:
     Long notwarn = 1L;
    
  • 笔记
    这个Blocker很好理解,主要是为了提高代码的可读性,防止误导开发者。为了方便的看出long类型,有些时候小写的“l”还是有可能被误解成“1”的。

2.不要在foreach循环里进行元素的remove/add操作

不要在foreach循环里进行元素的remove/add操作,remove元素请使用Iterator方式。如果并发操作,需要对 Iterator 对象加锁。

  • Negative example
    List<String> originList = new ArrayList<String>();
    originList.add("22");
    for (String item : originList) { 
       //warn
       originList.add("bb");
    }  
    
  • Positive example
    Iterator<Integer> it=b.iterator();		 
    while(it.hasNext()){                      
       Integer temp =  it.next();             
       if (delCondition) {
           it.remove();
       }
    }
    
  • 笔记
    在foreach循环里面进行元素的remove/add操作,可能会导致程序异常崩溃。之前项目中有出现过异常。
    这篇文章有记录,不过根据文章步骤暂未复现。 不要在 foreach 循环里进行元素的 remove/add 操作

3. 在if/else/for/while/do语句中必须使用大括号

在if/else/for/while/do语句中必须使用大括号,即使只有一行代码,避免使用下面的形式:if (condition) statements;

  • Negative example
    if (flag) System.out.println("hello world");
    
  • Positive example
    if (flag) {
            System.out.println("hello world");
    }
    
  • 笔记
    主要是为了提高代码的可读性。单行省略括号,这样看起来比较“高端”,但是降低代码可读性。特别是
    多行的时候有多个else,之后如果修改代码,会令人头大,也有很大的几率改错。

4.在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。

在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。

  • Negative example
     public class XxxClass {
            public Pattern getNumberPattern() {
                // Avoid use Pattern.compile in method body.
                Pattern localPattern = Pattern.compile("[0-9]+");
                return localPattern;
            }
     }
    
  • Positive example
     public class XxxClass {
            // Use precompile
            private static Pattern NUMBER_PATTERN = Pattern.compile("[0-9]+");
    }
    
  • 笔记
    性能优化类的Blocker,提高程序运行的效率。

5.多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题。
  • Ali
    //org.apache.commons.lang3.concurrent.BasicThreadFactory
      ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,
          new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
      executorService.scheduleAtFixedRate(new Runnable() {
          @Override
          public void run() {
              //do something
          }
      },initialDelay,period, TimeUnit.HOURS);
    
  • 笔记
    暂未遇到,不予记录

6.所有的包装类对象之间值的比较,全部使用equals方法比较。

所有的包装类对象之间值的比较,全部使用equals方法比较。
说明:对于Integer var=?在-128至127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。

  • Positive example

      Integer a = 235;
      Integer b = 235;
      if (a.equals(b)) {
          // code
      }
    
  • 笔记
    如果用“==”比较Integer类,在超过 [-128, 127]范围的时候就会失效,需要特别注意

  • 经典题

    Integer i1 = 1;
    Integer i2 = 1;
    Integer i3 = 128;
    Integer i4 = 128;
    Log.i("", ""+(i1 == i2));
    Log.i("", ""+(i1.equals(i2)));
    Log.i("", ""+(i3 == i4));     
    Log.i("", ""+(i3.equals(i4)));
    

    输出结果

    true,true,false,true
    

7.所有的覆写方法,必须加@Override注解。

所有的覆写方法,必须加@Override注解。

  • Negative example
    getObject()与get0bject()的问题。一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。
  • 笔记
    这种继承的方法没有@Override情况在项目中,还是有遇到过,不知道是不是老代码迁移的问题,
    @Override表示的是一种继承的关系,表示对父类的重写,有助于开发者更好的理解代码的结构。

8.线程池不允许使用Executors去创建

线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。

  • Executors各个方法的弊端:

    • 1.newFixedThreadPool和newSingleThreadExecutor:
      主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。
    • 2.newCachedThreadPool和newScheduledThreadPool:
      主要问题是线程数最大数是Integer.MAX_VALUE,可能会创建数量非常多的线程,甚至OOM。
  • Positive example 1

     //org.apache.commons.lang3.concurrent.BasicThreadFactory
     ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,
         new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
    
  • Positive example 2

     ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
         .setNameFormat("demo-pool-%d").build();
    
     //Common Thread Pool
     ExecutorService pool = new ThreadPoolExecutor(5, 200,
         0L, TimeUnit.MILLISECONDS,
         new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
    
     pool.execute(()-> System.out.println(Thread.currentThread().getName()));
     pool.shutdown();//gracefully shutdown
    

9.获取当前毫秒数:System.currentTimeMillis()

获取当前毫秒数:System.currentTimeMillis(); 而不是new Date().getTime();
说明:如果想获取更加精确的纳秒级时间值,用System.nanoTime。在JDK8中,针对统计时间等场景,推荐使用Instant类。

  • Negative example
    long b = new Date().getTime();
    
  • Positive example
    long a = System.currentTimeMillis();
    

10.避免用Apache Beanutils进行属性的copy。

说明:Apache BeanUtils性能较差,可以使用其他方案比如Spring BeanUtils, Cglib BeanCopier。

 TestObject a = new TestObject();
 TestObject b = new TestObject();
 a.setX(b.getX());
 a.setY(b.getY());

11.避免通过一个类的对象引用访问此类的静态变量或静态方法

避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。

  • Negative example
    实例化了一个对象,然后用这个对象引用调用了对象的静态方法
    class Demo{
      private static void getxxx(){
      ...
      }
    }
    //实例化对象调用了对象的静态方法
    Demo demo =new Demo()
    demo.getxxx();
    
  • Positive example
    class Demo{
      private static void getxxx(){
      ...
      }
    }
    Demo.getxxx();
    

后记
避坑指南:从聚宽迁移到QMT必须知道的5个细节(含Redis连接异常处理) 本文详细解析了从聚宽迁移到QMT平台时需注意的5个关键细节,特别是Redis连接池优化和xtquant重连机制。通过实战代码示例,帮助量化团队解决信号传递稳定性、时间同步、滑点控制等核心问题,确保交易策略平稳过渡。 阅读详情

相关推荐

【黑马点评优化】3-压测秒杀接口,算出性能塌陷区,之后用sentinel实现秒杀接口限流

【黑马点评优化】3-压测秒杀接口,算出性能塌陷区,之后用sentinel实现秒杀接口限流

m0_52031708的博客 3567

关闭阿里代码检测条件

Preferences -> Inspections -> Ali-Check

snpmyn 1011

海豚调度器(dolphinscheduler)再次使用,添加钉钉预警

1,首先我们部署是海豚调度器 1.3.8版本,由于页面只有邮件预警,所以在了解源码的同时,需要添加钉钉预警 2,说明,这一块是同事搞的,不是我搞的,新版本的dolphinscheduler已经有了钉钉模块,只是新版本还没有发布 3,我们现在只是添加简单的钉钉预警,任务成功或者失败会发送邮件+钉钉 4,具体操作 找到最新的源码devhttps://github1s.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-alert/src/ma...

qq_31866793的博客 3083

使用Zipkin-SourceMonitor-AliCheck代码优化

微服务拆分后的代码优化摘要:工具组合简单介绍ZipkinSourceMonitorAliCheck工具使用ZipkinSourceMonitor函数圈复杂度(Function Complexity)函数深度(Block Depth)AliCheck总结 摘要: 系统做微服务拆分后,有很多业务流程比较慢,这时我们需要使用有效的方法来定位那些地方有问题。其实最好的方法还是利用系统化的检查工具来做这件事...

October 1205

无人机飞控技术最详细解读

已剪辑自: https://zhuanlan.zhihu.com/p/64519280[导读]被称作是“飞行器的大脑”的飞控到底是什么?以前,搞无人机的十个人有八个是航空、气动、机械出身,更多考虑的是如何让飞机稳定飞起来、飞得更快、飞得更高。如今,随着芯片、人工智能、大数据技术的发展,无人机开始了智能化、终端化、集群化的趋势,大批自动化、机械电子、信息工程、微电子的专业人材投入到了无人机研发大潮中,几年的时间让无人机从远离人们视野的军事应用飞入了寻常百姓家、让门外汉可以短暂的学习也能稳定可靠的飞行娱乐。不可

qq_41854911的博客 1万+

强化学习 reward 曲线可视化:从基础绘制到顶刊级对比分析

本文详细介绍了强化学习reward曲线的可视化方法,从基础绘制到顶刊级对比分析。通过matplotlib和seaborn的实战示例,展示了如何优化曲线图的视觉效果,包括多实验对比、置信区间添加和分面图应用。文章还分享了顶刊级图表的进阶技巧,如字体排版、颜色选择和关键标注,帮助研究者提升论文图表质量。

weixin_29096377的博客 270

idea开发工具使用经验

idea开发工具使用经验 1.修改代码时CPU占用过高 2.debug调试时F8不可用 3.调整代码补全ctrl+space为shift+space 4.序列化class自动生成序列化ID 5.快速导包 6.代码提示、示例 7.驼峰转换插件 8.不显示service窗口(springboot面板) 9.启用自定义模块 10.快速foreach 11.断言失效 12.Intellij IDEA 快速添加maven依赖 13.idea部分页面在笔记本上显示不全!!! 14.Maven dependency

搬山境KL攻城狮的修炼手册 1699

浅谈innovus Update io latency相关作用

同样我们使用update io latency,工具取launch clock latency负值反标到clock端口上,同时认为capture clock latency与launch clock latency相等,这样可以相互抵消,这样setup time slack = T – Tsetup -Tcomb – Toutput_delay,因此采用update io latency后,reg2out timing path的setup check变得真实些。图3 in2reg示意图。

芯冰乐 474

代码规范---------Ali插件

   失踪人口回归    距离上次写博客,又两个月了!终归是我太懒了。。。     两个月的时间:培训一月,个人项目一月。不得不对公司的培训点赞!!!从运维到开发,从开发到数据库,从数据库到规范,从规范再到移动端,从移动端到算法,从算法最后到大数据,中间还夹杂着公司运维平台,各种工具的使用,不得不说超级全。无奈一口吃不了一个大胖子,只能日后慢慢消化。     接下来的一个月就是个人项目-...

就是这么菜 424

二十八.国民技术MCU开发之UID获取与应用

在国民NT MCU中均有一个96位和128位的唯一设备标识符,其中UCID128 位, UID 为 96 位。手册中描述的作用是:通常用来做为序列号或作为密码,在编写闪存时,将此唯一标识与软件加解密算法相结合,进一步提高代码在闪存存储器内的安全性,也可用于激活带安全功能的自举程序(SecureBootloader)。UCID 和 UID,遵守国民技术芯片序列号定义,它包含芯片生产及版本相关信息。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 1676

【数据集】1970-2023年全球温室气体排放 GHG 数据集 EDGAR

1970-2023年全球温室气体排放 GHG 数据集 EDGAR

WW、forever的博客 1172

Alibaba p3c规则引擎终极配置指南:如何告别混乱代码并实现团队规范统一

你是否厌倦了团队中五花八门的编码风格?是否在Code Review中花费大量时间讨论基础规范?Alibaba p3c规则引擎正是解决这些痛点的终极方案。作为阿里巴巴Java开发指南的PMD实现,p3c不仅提供了一套完整的代码规范检查工具,更通过灵活的配置体系让团队能够快速统一编码标准,提升代码质量和开发效率。 ## 🔍 为什么选择p3c而非其他代码检查工具? 传统的代码检查工具往往存在配置复

gitblog_01094的博客 885

C 语言多文件编程 : 大型程序的组织与管理

本文介绍了C语言多文件编程的核心概念与实践方法。主要内容包括:1. 多文件编程的必要性:解决单文件编程在大型项目中的维护和协作问题;2. 文件组织方式:头文件(.h)负责声明接口,源文件(.c)实现具体功能;3. 编译链接过程:分阶段编译和链接多个源文件;4. 头文件设计原则:包含接口声明、使用保护机制、保持自包含性;5. 模块化实践:通过示例展示学生信息管理系统的模块划分;6. 构建工具:介绍Makefile的编写和使用方法。文章还提供了创建静态库和动态库的指导,并强调了模块化设计、信息隐藏等软件工程原则

2503_91057718的博客 1946

从混乱到规范:实战指南:如何深度配置P3C规则引擎提升代码质量

Alibaba Java Coding Guidelines(简称P3C)作为阿里巴巴开源的Java代码规范检查工具,通过PMD规则引擎为开发者提供了一套完整的代码质量保障方案。你是否曾因团队代码风格不统一而烦恼?是否在Code Review中花费大量时间检查基础规范问题?本文将带你深入P3C规则引擎的配置体系,从核心原理到实战配置,彻底解决代码规范落地难题。 ## 一、代码规范检查的痛点与P3

gitblog_00777的博客 942

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

3个维度深度配置阿里巴巴Java开发规约插件:从基础规则到企业级定制

阿里巴巴Java开发规约插件(p3c)是提升代码质量、统一团队编码风格的重要工具。作为基于PMD规则的静态代码分析引擎,它不仅能自动检测代码中的潜在问题,还提供了灵活的配置机制来适应不同团队的开发需求。本文将带你从基础规则配置深入到企业级定制,掌握p3c插件的完整配置体系。 ## 一、规则引擎架构:理解p3c的核心工作机制 p3c插件采用**规则定义-规则执行-结果展示**三层架构。规则定义存

gitblog_01195的博客 842

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

如何通过p3c规则配置解决团队代码规范落地难题

你是否遇到过这样的场景:团队制定了详细的Java编码规范,但在实际开发中却难以落地执行?😊 开发人员要么忘记规范细节,要么觉得手动检查太麻烦,最终导致代码质量参差不齐。p3c(Alibaba Java Coding Guidelines)作为阿里巴巴的Java编码规范插件,通过PMD规则引擎实现了自动化代码检查,解决了这一痛点。本文将带你从零开始,掌握p3c的规则配置技巧,让代码规范真正落地执行

gitblog_01053的博客 1058

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

这款 IDE 插件再次升级,让「小程序云」的开发部署提速 8 倍

今年3月份,在阿里云北京峰会上,阿里巴巴正式发布了“阿里巴巴小程序繁星计划”,截至当前,已经有成千上万的开发者加入这个计划,使得小程序得到蓬勃发展,然而不可避免的是,这些...

阿里巴巴中间件 365

阿里代码规范检查工具的安装使用

简单了解一下这插件 该插件由阿里巴巴 P3C 项目组研发。 代码已经开源,GitHub:https://github.com/alibaba/p3c 阿里介绍文章:https://mp.weixin.qq.com/s/IbibsXlWHlM59kfXJqRvZA#rd 插件支持了IDEA、Eclipse,在扫描代码后,将不符合规约的代码显示出来,甚至在 IDEA 上,还基于 Inspecti...

w522301629的博客 1150

阿里代码规范检查工具P3C的安装使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34345560的博客 456

java代码质量相关插件(PMD|JaCoCo|sonar)关于maven及IDEA使用及配置

java后端项目代码质量检测集成插件 静态代码分析:PMD 代码测试用例覆盖率:jacoco 持续代码质量检查:sonar 注:后续主要介绍,如何在maven和idea上提成上述插件 二、静态代码分析插件集成 ​ PMD是一种代码静态分析工具,当使用PMD规则分析Java源码时,PMD首先利用JavaCC和EBNF文法产生了一个语法分析器,用来分析普通文本形式的Java代码,产生符合特定语法结构的语法,同时又在JavaCC的基础上添加了语义的概念即JJTree,通过JJTree的一次转换,这样就将J.

liuzhupeng的专栏 3624

IDEA安装阿里代码规范检查插件

选择Plugins->Maketplace->搜索框输入Alibaba->找到Alibaba Java Coding Guidelines->Install。重启IDEA,Restart IDE,重启之后,即可生效。首先,可以在Tools->阿里编码规约->切换中英文。在项目右键->编码规约扫描,即可检查代码。可根据提示进行修改代码。检查结果和提示如下图。

颜淡慕潇 8430

IDEA使用阿里巴巴Alibaba编码规范插件

IDEA使用阿里巴巴Alibaba编码规范插件最新版《阿里巴巴Java开发手册》以及idea\插件等官方项目地址:https://github.com/alibaba/p3c。

qq_43985303的博客 2804

IDEA配置阿里代码检查工具

选择sittings 4. 点击install 按钮即可 5. 安装完成后重启idea 6. 在项目或者文件上直接右键即可看到 7.

隐心咒Amor的博客 1427

获取当前毫秒数:System.currentTimeMillis(); 而不是new Date().getTime()@阿里编码规约扫描解决

阿里编码规约扫描:获取当前毫秒数:System.currentTimeMillis(); 而不是new Date().getTime(); 原因是因为使用了new Date().getTime()来获取当前的毫秒数 改为使用System.currentTimeMillis()来获取当前的毫秒数即可解决。

心有谦谦结 2706

【学姐亲测】论文季救命神器!这4个AI工具能让你少熬半个月夜

去年这时候我也在电脑前抓耳挠腮,直到发现了几个AI神器,直接让我从"论文困难户"逆袭成"查重5%选手"。最绝的是降重功能,直接把"随着社会经济发展"这种套话,改成"现在大家钱包鼓了"这种大白话。像我这种总写"然后然后"的口水话选手,它能自动替换成高级词汇。准备答辩的时候,把论文结论部分丢进去选"口语化"模式,立马得到一份现成的演讲提纲。上次我肝了八千字的调查报告,它三十秒就提炼出三个核心结论,导师看了直夸重点抓得准。举个例子,你输入"短视频对大学生消费观的影响",选好专业和学历,三秒就能吐出个千字大纲。

2301_79545694的博客 439

java获取时间

强制】获取当前毫秒数 System.currentTimeMillis(); 而不是 new Date().getTime(); 说明:如果想获取更加精确的纳秒级时间值,使用 System.nanoTime()的方式。在 JDK8 中, 针对统计时间等场景,推荐使用 Instant 类。 public class TimeTest { public static void main(String[] args) { SimpleDateFormat sdf = new Simpl.

拱卒的博客 543
上一篇: 和我一起实现EditText一键清空功能
下一篇: TextView
Client_Block
博客等级 码龄11年 33粉丝 61原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值