ARTS 第二周

Algorithm

   本周完成了2个简单的算法题目。Reverse Integer 和 Palindrome Number。
第一道题目比较简单,需要注意的是整型的溢出判断。而第二道题目可以在第一道题的基础上进行处理。不过答案中的Revert half of the number的方式更为巧妙。

Review

   本周继续阅读《Effective Java 英文版》第二章的第二小节,讲的是当构造器有很多参数时考虑使用Builder。
   该小节从一个例子,引出了可伸缩构造器模式(telescoping constructor pattern)Java Bean模式 以及 Builder模式
   相比Builder模式来说,可伸缩构造器模式与Java Bean模式都比较简单,也很直观。但是可伸缩构造器模式随着参数的增多将变得难以控制,且在多个类型相同的可选参数的情况下容易出现bug。而Java Bean模式可读性强,但不能保证实例对象状态的一致性,在状态不一致的情况下使用很可能会出问题,且难以定位;另外,Java Bean排除了使类不可变的可能,需要付出额外的代价保证线程安全。
   而Builder模式有着以下优点:

  •    builder的setter方法返回自身,所以支持链式调用(流式API),易写且可读。
  •    便于检查参数的有效性。在builder的构造方法和普通方法中可校验参数的有效性,为防止被破坏,可在创建对象时再次校验参数有效性。
  •    builder模式能够很好地适应类的继承层次。builder层次与类的继承层次平行,各自嵌在相应的类中。抽象类有抽象builder,具体类有具体builder。
  •    builder可以有多个可变参数(Type...),通过多次调用将多个参数设置进某个字段中。
  •    很灵活。单个builder可以重复使用来构造多个对象;构造器的参数也可以随着对象创建而调整;builder可以自动填充一些字段,如序列号。

   不过,因为创建对象需要先创建Builder对象,所以在性能要求非常严格的情况可能会降低性能(一般情况下应该不会有显著的性能损耗)。
   总之,在构造具有多个可选参数的对象时,可考虑使用Builder模式。

Tip

通过生产环境日志的观察和查找相关的文档,知道了在SpringBoot中使用@Schedule注解配置定时任务时,默认使用单线程进行任务调度。若多个定时任务在某个时间点同时启动,则最好配置线程池。

Share

关于jdk动态代理的一点理解: jdk动态代理初探,记录下来,便于日后回顾。

你可能感兴趣的:(ARTS 第二周)