Bug Mark

1.SpringContextHolder 和线程绑定,多线程会出现问题。 

                ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

                此时得到的attributes 是绑定当前线程的。

 

2. clone 浅克隆只是克隆了对象中的引用,如果在克隆中对引用对象进行修改还是会印象原始对象中的数据。

      深克隆的好方法:1.针对对象序列进行化 ,然后再转换过来。

                                   2. 这次遇到的是JSONObject, 直接转换为字符串然后再转换为jsonObject对象 挺快的.备注:这个方法还是不要用了,data:1970-01时间段转换有问题。

 

3.Java线程的坑:线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉,比较残忍的是当前线程终止,其他线程和主线程不受影响,主线程还是会返回正常的结果。

    3.1 我用的excutorService,若无返回值则可以用一种比较low的方法,增加返回值,正常返回0,捕获异常后返回1,通过Future拿到结果进行判断,若有结果返回1,则跑出异常。后来发现 future.get()方法也会将异常抛出。

    3.2  通过ThreadPoolExecutor中的afterExecute和beforeExecute

4.通过分布式锁去解决重复提交的问题:有一个code保存在数据库中实唯一的,不想通过设置唯一索引来进行判断,就想通过分布式锁来实现,比较坑的是 自己 在方法 checkRepect和add方法之前对code加锁,add之后释放锁,还是出现重复提交的问题。其实是应该在保存这个事务提交后进行释放锁的操作。

5.127.0.0.1和localhost并不是一个域,cookie并不能共享,但是本地机器发布了2个应用,如果用127.0.0.1访问,却可以使得cookie共享。

6.并发查询数据,可能出现线程数大于数据库配置的连接数,导致线程获取不到数据库连接从而超时,

7.紧接bug6,递归查询中又用到了多线程,采用FixedThreadPool(5),由于递归查询等待子线程的查询结果导致大量的线程未释放,从而到时线程阻塞获取不到线程。

至于6-7 2个bug,准备把 数据库查询线程和递归操作中的线程池分开,后续再考虑更好的方法

8.想当然的问题:mysql  bigint(20)的问题,bigint的最大值是9223372036854775807,长度却不到20位。

9. httpclient问题:jdk1.7不支持 TLS_DH_anon_WITH_AES_128_GCM_SHA256,需要jdk1.8

10 . 前后分离,前端应用访问多个不同的后端,权限认证的管理

 

 

你可能感兴趣的:(个人回顾,Exception)