深浅拷贝 注意

记一次深拷贝导致的bug。项目里有一个缓存,简单理解就是一个<Integer, List>的map,由于考虑不周,检索时直接返回了map里的list,后面有对list的过滤操作,然后返回给客户端。这样相当于直接把缓存的list的引用返回了,如果后面要对list做修改,比方说删除元素之类的,就会有副作用,导致缓存内被修改,影响后续的处理。这里其实应该做一个深拷贝,每一次返回时都把缓存的元素深拷贝一份,比方说新new一个list,然后把缓存的元素add到list,最后返回这个list而不是缓存的。以后做项目也要考虑到对象的深浅拷贝问题。

批处理 注意

如果想遍历一个集合,处理,再转成一个新的结合返回,这是要小心如果那一次迭代抛异常了,可能导致永远无法返回结果,所以循环内部一定要做try-catch机制。