1.接口实现类建议使用Impl结尾,可以比较直观的看出是个实现,实现接口的方法加上@Override,这样可以准确判断是否实现成功。另外,如果在接口中对方法签名进行修改,其实现类会马上编译报错。
2.RandomDP类中定义的private static final Random r = new Random();如果这个类后续会有多线程访问,建议使用ThreadLocalRandom类,Random在多线程并发时,会有线程阻塞问题,性能低。
3.OutputPerturbDP实现类的方法getC没有处理逻辑,直接返回了0.0,如果是一个默认实现,可以在它实现的接口类中使用default 关键字修饰方法,这样在增加其他实现类时,就不需要在重写这个方法。
4.VerticalLRMode类中有只有当前类中使用的但是声明为public的变量,变量和方法的作用域尽量小,如果是private的,后续如果不需要可以放心删除,如果是public的就需要慎重,随着工程代码量越来越大,这个问题会越来越突出。
5.VerticalLRParameter类的方法obtainPara中,使用了大量的字符串,并且其他Parameter类中也有使用,如果不小心修改了某个值,问题会非常隐蔽,建议定义到Constant类中,所有类中共用。
6.RandomForestJavaModel类中含有大量重复的字符串,比如”numTrees“和”feature_opt“,应该定义成常量而不是复制多次。 打印日志时,不要自己处理字符串你的拼接
7.logger.info(String.format("HasLabel: %s, label name: %s", trainData.hasLabel, labelName));即使日志级别不是info也会先进行字符串拼接的操作, 推荐 logger.info("HasLabel: {}, label name: {}",trainData.hasLabel,labelName); 让日志框架去做替换。
8.一些不用的属性和import提交代码之前删除掉,代码看上去会更整洁,而且在创建对象时,无用的属性会浪费空间。
9.单元测试中使用断言Assert来判断返回值是否等于预期值
10.全局变量和局部变量尽量不要同名,虽然局部变量会覆盖全局变量,但是影响代码可读性。