主要记一下平时不注意的点
java篇
pojo中的成员变量必须是包装类属性
pojo中都要有toString方法
pojo 类中布尔类型的变量,都不要加 is
方法参数中的可变参数(…)要放在其他参数的最后
1
2
3
4
5
6
7
8
9
10
11
12
13public class Varargs {
public static void test(String... args) {
for(String arg : args) {
System.out.println(arg);
}
}
public static void main(String[] args) {
test();//0个参数
test("a");//1个参数
test("a","b");//多个参数
test(new String[] {"a", "b", "c"});//直接传递数组
}
}long b = 4L; 符号标记要大写,因为字体
l
和1
很像method(“a”, “b”, “c”);方法参数书写格式要注意逗号后空一格
代码格式中缩进要4 个空格,不要2个空格
在pojo的方法中应遵守下面的规范
- 获取单个对象的方法用get做前缀
- 获取多个对象的方法用list做前缀
- 获取统计值的方法用count做前缀
- 插入的方法用save(推荐)或insert做前缀
- 删除的方法用remove(推荐)或delete做前缀
- 修改的方法用update做前缀
数据传输对象取名:xxxDTO,之前我没写DTO后缀,下次记住
用设计模式时,需要把类名给体现出来,如下
1
2
3public class OrderFactory;
public class LoginProxy;
public class ResourceObserver;使用常量的equals方法,可以防止空指针问题:
"1".equals(temp)
不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁
1
2
3
4
5
6
7Iterator<String> it = a.iterator();
while(it.hasNext()){
String temp = it.next();
if(删除元素的条件){
it.remove();
}
}在做抽象接口中,可以利用泛型把抽象更深化
1
2
3public interface Info<T> {
public T getVar();
}使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历,前面这种是一遍循环,后面两遍
线程资源必须通过线程池提供,不允许在应用中自行显式创建线程
SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用 DateUtils 工具类
1
2
3
4
5
6private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};并发修改同一记录时,避免更新丢失,要么在应用层加锁,要么在缓存加锁,要么在数据库层使用乐观锁,使用 version 作为更新依据
- Math.random() 这个方法返回是 double 类型,注意取值的范围 0≤x<1(能够 取到零值,注意除零异常),如果想获取整数类型的随机数,不要将 x 放大 10 的若干倍然后 取整,直接使用 Random 对象的 nextInt 或者 nextLong 方法
- 获取当前毫秒数 System.currentTimeMillis(); 而不是 new Date().getTime();
- 异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低
- 不能在 finally 块中使用 return,finally 块中的 return 返回后方法结束执行,不 会再执行 try 块中的 return 语句
mysql篇
- 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1表示是,0表示否),此规则同样适用于odps建表
- 唯一索引名为
uk_字段名
;普通索引名则为idx_字段名
- 表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只出现数字
- 小数类型为 decimal,禁止使用 float 和 double
- 如果存储的字符串长度几乎相等,使用 char 定长字符串类型
- varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率
- 不要使用 count(列名)或 count(常量)来替代 count(*),count(*)就是 SQL92 定义 的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关
- 不得使用外键与级联,一切外键概念必须在应用层解决
- 禁止使用存储过程,存储过程难以调试和扩展,更没有移植性(不用学存储过程好开心)
in
操作能避免则避免,若实在避免不了,需要仔细评估in
后边的集合元素数量,控制在 1000 个之内- pojo 类的 boolean 属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中 进行字段与属性之间的映射
其实我还有一些没记下,因为完全没接触过。。尴尬,还是要继续学习