阿里云代码规范学习

更一下:idea有专门的插件 Alibaba Java Coding Guidelines
1.一行至多120字符,一个方法最多80行代码(注释除外);
2.换行第二行缩进4字符;三行起持平第二行;.换到下一行;,放到上一行;
3.// 注释之间有且只有一个空格
4.for if 与 ()要有一个空格
5.int a = int(“1”);强转之间无空格
6.method(a, b, c){} 方法定义时多个参数逗号后面加一个空格
7. yyyy-MM-dd HH-mm-ss(hh:12小时,HH:24小时)
7.1. switch case 最后必须加default; 例:default: break;
7.2 少用if else 改为 if(),if(),if()为妙
7.3 if(boolean),boolean较复杂时应该单独拿出来
8.获取今年的天数:int yearsOfThisYear = LocalDate.Now().lengthYear(); now()或者of(2021.11.16)
9.HashMap 判空的使用 isEmpty() 而不是.size()
10.Array.asList(数组);不可add,clear,remove.
11.实现Collection接口的类,使用addAll()要判空
12.forEach中for(String item : list){}禁止remove和add,换为iterator方式
13.simpleDateFormat 线程不安全,不要用static,使用则要加锁
2021年11月16日22:03:51 23页
14.Math.random();返回值类型为double,整数使用:.nextInt() 或 .nextLong()
15.java占位符,%s,例:
String url = “我叫%s,今年%s岁。”;
String name = “小明”;
String age = “28”;
url = String.format(url,name,age);
例2:%{1}
String url02 = “我叫{0},今年{1}岁。”;
String name = “小明”;
String age = “28”;
url02 = MessageFormat.format(url02,name,age);
16.生产环境禁用 system.out / system.err ; 异常catch禁用 e.printStackTrace(),防止多次输出超出文件长度报错,线程产生死锁;
17. map不存在a b 互换的地址问题
18.数据库建表表示是否:is_xxx,类型:unsigned tinyint(1,0)
19.数据库名,表名,字段名:小写,禁止以数字开头 例::aliyun_admin,rdc_config,level3_name
20.表名不使用复数名词。
21.主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。
22.小数类型为 decimal,禁止使用 float 和 double。,超出范围将小数和整数拆分。
23.代码质量
可读性:
@Test
public void testListSimpleStyle() {
List list = Lists.newArrayList(
new Superman(“xixi”),
new Superman(“haha”)
);

System.out.println(list);

}

@Test
public void testListSimpleStyle() {
List list = Lists.newArrayList(
new Superman(“xixi”),
new Superman(“haha”)
);

System.out.println(list);

}

不要使用魔法值
变量声明后立即使用
对于变量声明,不仅要见名知意,还要遵守“使用时再声明”,或者“声明后立即使用”。
用卫函数代替if else
及时return,以避免过深的嵌套
像写诗一样换行
private List<RebateItemDetailInfo.ShopScore> getScoreList(ProductDetail productDetail) {
// 描述
RebateItemDetailInfo.ShopScore descScore = new RebateItemDetailInfo.ShopScore();
descScore.setScore(formatScore(productDetail.getDescScore()));
descScore.setType(ShopScoreTypeEnum.DESC.getType());

// 服务
RebateItemDetailInfo.ShopScore serviceScore = new RebateItemDetailInfo.ShopScore();
serviceScore.setScore(formatScore(productDetail.getServiceScore()));
serviceScore.setType(ShopScoreTypeEnum.SERVICE.getType());

// 物流
RebateItemDetailInfo.ShopScore shipScore = new RebateItemDetailInfo.ShopScore();
shipScore.setScore(formatScore(productDetail.getShipScore()));
shipScore.setType(ShopScoreTypeEnum.SHIP.getType());

return Lists.newArrayList(descScore, serviceScore, shipScore);

}
抽取方法
把强相关的代码抽取到同一个方法中,保证一个方法只做一件事
抽取类
多用stream
public class StreamTest {

private final static List<Person> personList = ImmutableList.of(
        new Person("i", 18, "杭州", 999.9),
        new Person("am", 19, "温州", 777.7),
        new Person("iron", 21, "杭州", 888.8),
        new Person("iron", 17, "宁波", 888.8)
);

// Stream API本身具有良好的可读性,filter、map等函数本身就是结构化的
public static void main(String[] args) {
    Set<String> suitablePersonNames = personList.stream()
            .filter(person.getAge() > 18 && "宁波".equals(person.getAddress()))  // 过滤出年龄大于18 && 来自宁波的
            .map(Person::getName)                                               // 只要他们的名字
            .collect(Collectors.toSet());                                       // 收集到set,避免重复
    
    System.out.println(suitablePersonNames);
}

}

public static void main(String[] args) {
    // 可以避免并发修改异常
    boolean removed = personList.removeIf(person -> "杭州".equals(person.getAddress()));
    System.out.println(personList);
}

在一定条件下(开启并行流或者大数据量)Stream的效率确实要优于普通for/foreach,而一般编程场景中普通for/foreach可能效率更好些。但是仍推荐使用Java8,因为可读性是最重要的,而且内存计算0.x毫秒的差距是微不足道的,与其争这点时间,不如多注意网络IO(一次数据库访问是100ms左右)。

记得打日志
log的性能损耗微乎其微。
排查问题:先确定前后端的问题;后端查看具体问题内的log;根据log找问题

性能
要么减少IO
要么减小IO
避免循环嵌套
例如service中for循环中使用dao;
只是内存数据的处理,其实双层for效率也没有差很多(特别是一般分页只有10条)。
时刻注意非空判断
考虑使用缓存
一旦使用缓存,就要做好觉悟:能否接受一定程度的更新延迟,也就是缓存脏读问题
为常用的SQL添加索引

设计
结构化编程与面向对象
@Autowired/@Resource能帮我们自动注入Bean,但实际上Spring不仅能帮我们自动注入单个Bean,还能帮我们注入BeanList、BeanMap。
实现了ItemService接口的实例都会被搞到ItemServiceList里面
@Autowired
private List itemServiceList;

做到了“以增量的方式应对变化的需求”,是符合好的设计原则的(开闭原则)。
这才是面向对象,核心是多态。

多态分类:
方法多态(这是我们平常说的所谓的“多态”);接口多态

以增量的方式来应对变化的需求,进而达到较为理想的软件管理(符合开闭原则)。
实际开发最常用的设计模式无非 策略模式、模板方法模式、工厂模式、责任链模式,反正绝对不会23种都用得上(实际上也不止23种)

常用快捷键:
ctrl + alt + insert :在选中类(包)所在的文件夹添加类。。。
fori(集合.fori);
forr(逆序)
psf:public static final
ifn:if (== null){ }; inn不等于null判断
thr:throw new
自定义的一些:
prl prii prib pris prid ifnot trywithcatch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值