一、代码风格
代码风格实际上就是合理使用缩进、空格、换行,目的是让代码可读性更强。大家记忆时记清楚用什么样的缩进,哪些时候使用空格,哪些时候使用换行,单行代码不要太长就可以,这部分内容通过两三次的回顾很容易养成习惯,因为是编码中最长用到的。
可参考以下代码:
public static void main(String[] args) {
// 缩进 4 个空格
String say = "hello";
// 运算符的左右必须有一个空格
int flag = 0;
// 关键词if/for/while/switch/do与括号之间必须有一个空格,括号内的 flag 与左括号,0 与右括号不需要空格
if (flag == 0) {
System.out.println(say);
}
// 左大括号前加空格且不换行;左大括号后换行
if (flag == 1) {
System.out.println("world");
// 右大括号前换行,右大括号后有 else,不用换行
} else {
System.out.println("ok");
// 在右大括号后直接结束,则必须换行
}
StringBuffer sb = new StringBuffer();
// 超过120个字符的情况下,换行缩进4个空格,点号和方法名称一起换行
sb.append("zi").append("xin")...
.append("huang")...
.append("huang")...
.append("huang");
// 任何二目、三目运算符的左右两边都需要加一个空格
int result = flag == 0 ? 1 : 0;
}
下边是另外几点需要注意的:
- 注释的双斜线与注释内容之间有且仅有一个空格。
- 方法参数在定义和传入时,多个参数逗号后边必须加空格,如method("a", "b")。
- 没有必要增加若干空格来使某一行的字符与上一行对应位置的字符对齐。
- 方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义 之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。没有必要插入多个空行进行隔开。
二、日志
1.日志配置
主要有日志文件名称、日志输出级别、日志是否向上层传递、日志保留时间。
- 日志文件推荐至少保存15天,因为有些异常具备以“周”为频次发生的特点。
- 避免重复打印日志,浪费磁盘空间,务必在 log4j.xml 中设置 additivity=false
- 谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使 用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘 撑爆,并记得及时删除这些观察日志。
- 应用中的扩展日志(如打点、临时监控、访问日志等)命名方式:appName_logType_logName.log。logType:日志类型,推荐分类有stats/desc/monitor/visit 等;logName:日志描述。这种命名的好处:通过文件名就可知 道日志文件属于什么应用,什么类型,什么目的,也有利于归类查找。
2.日志使用
- 应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
- 对 trace/debug/info 级别的日志输出,必须使用条件输出形式或者使用占位符的方式。
- 异常信息应该包括两类信息:案发现场信息和异常堆栈信息。如果不处理,那么通过 关键字 throws 往上抛出。推荐
logger.error(各类参数或者对象toString + "_" + e.getMessage(), e);
这种格式,不要简单的输出e.getMessage(),那样具体的错误信息都被隐藏,很不利于排查问题。 - 注意日志输出级别和使用场景,避免大量调试日志被生成,最近就遇到过一次在高频接口输出调试信息,忘记清理,在调用高峰拖死了tomcat;在生成环境,尽量只记录异常信息和较重要的业务信息,且控制其量。
- while、for循环等内部的异常需要特别注意发生异常的条件,曾经遇到过while循环从redis队列内取值(事件),redis服务宕机,结果异常日志刷爆磁盘的情况。