抽象类命名使用Abstract或Base开头,异常类命名使用Exception结尾,测试类命名以它要测试的类名开始,以Test结尾
在一个方法中,在不同代码块中的局部变量的命名不要相同
子类和父类的成员变量名称不能相同
接口类中的方法和属性不要加任何修饰符(public也不要加)
讲常量按功能放到不同的常量类中,比如缓存常量放到CacheConsts,系统配置常量放到ConfigConsts类中。
注释的// 与注释的内容之间有且仅有一个空格
单个方法的行数不超过80行
定义的接口会被调用 所以不能修改方法签名 对过时的方法需要注解@Deprecated.
所有想同类型的包装类对象之间值的比较,全部使用equals方法
所有的POJO类属性必须使用包装类数据类型
RPC方法的返回值和参数必须使用包装数据类型
所有局部变量使用基本数据类型
在循环体内 字符串的连接方式使用Stringbuilder的append
collections类返回的对象,如emptyList()和singletonList()等都是immutable list ,不可以对其添加或者删除元素
在使用collection接口的任何实现类的addAll()方法时,都要对输入的集合参数进行NPE判断,比如ArrayList#addAll()
Arrays.asList()把数组转换为集合时,不能使用集合的相关方法,如add/delete/clear方法
不要在foreach循环里面进行元素的remove/add操作,remove元素使用iterator方式,,如果并发操作需要对iterator对象加锁
使用entrySet遍历Map类集合K/V,而不是用keySet方式遍历
利用set元素唯一的特性,可以快速对一个元素进行去重操作
在高并发场景中,避免使用“等于”判断作为终止或者退出的条件,应使用大于或者小于的判断。比如当商品=0时,退出,由于高并发导致商品数为负数,这就导致永远不满足=0的条件。
异常中,不能在finally块中使用return
NPE:自动拆箱、查询数据库数据返回null
避免重复打印日志,否则会让费磁盘空间,必须在日志配置文件中设置additivity=false
web应用必须正确配置robots文件,非SEO URL必须配置为禁止爬虫访问
数据库名,表名,字段名都不允许出现任何大写字母,mysql在windows下不区分大小写,在linux下区分大小写。表名不使用复数名词。
数据库小数类型为decimal,不能用float和double存储,因为float和double存在精度损失的问题
冗余字段遵循:不是频繁修改的字段 并不是varchar或者text类型
禁止3个表进行join,多表关联时,确保被关联的字段有索引
页面搜索禁止使用左模糊获取全模糊,通过搜索引擎来解决。索引文件具有B-tree的最左前缀匹配特性,如果左边的值不确定,就无法使用改索引。
建组合索引时,区分度越高的越排在组合索引的左边。
不得使用外键和级联,一切外键概念必须在应用层解决
禁止使用存储过程,存储过程难以调试和扩展,更没移植性。存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行
如果要存储表情,那么选择utf8mb4进行存储
不允许直接拿hashmap和hashtable作为查询结果集的输出
二方库里可以定义枚举类型,参数也可以使用枚举类型,但是接口返回值不允许使用枚举类型或者包含枚举类型的POJO对象