工作一年回顾

菜鸟回顾。
技术短板 线程安全与多线程,spring系列,jvm原理,shell编程,分布式。

学来的观念方法,实验现象,打印日志,寻找原因。

有时候很迷茫,结果与自己的推断就是不一样。不知从什么地方下手。同事过来断点,在出错的地方,打印一行日志。看看现象是什么。再接着向前调用方法处打印日志,看看现象是什么。日志太多的话,就打印特殊的内容自己看得懂的前缀,然后看看现象是什么。这样就找到原因了。然后把出错的地方改正就好了。这样的情况出现了两次。每次都是王者段位的淡淡的来了一行log.info。倒推方法的调用处。直到出错的地方出现结果。才知道事实是哪里出了问题。而不是自己深信不疑的没问题。

记得遇见一个要完成尽可能多的调用别人的一个接口的问题。王者段位的同事说用多线程。像游戏里面的路人提示。追问问不出来更多线索。自己琢磨很困难。这一天真的想放弃,第二天一早醒来,在床上的我起身,感到多线程有点意思。我从b站学来了线程池背后的解释和源码剖析。

线程池ThreadPoolExecutor.for(i从1到n){pool.execute(new Task(i))}
它将n个在一个cpu上串行执行的代码段,通过,线程池的任务提交,线程池将会为任务创建线程,在多个cpu上面并发执行。花费的时间就少了。然后就写了一个多线程处理那个问题,速度还没测试…结果…结果…我忘了测试一下性能。下次去测试一下吧。

还有一个小插曲,别人调用我的接口传递一条记录参数,我将一条数据入到表里面成为一条记录。一直怼我接口超时。我打印日志,发现是插入表中慢,插入一条记录到370万数据量的表中需要0.3秒。被怼,告诉我至少500条记录每一秒。用insert into values(),(),()…这种批量,而不是insert into values ()这种一条记录。Mysql批量性能高很多。我半信半疑。去操作的时候发现请求来的始终是一条数据对一个的是表中的一条记录啊!我想到保存到一个列表中,到500个对象就入库,然后清空列表。为了避免多个线程处理进度不同导致对公共的列表操作,造成数据不一致。加了同步锁。当一个线程对公共的列表进行操作时,其他线程如果进入到这一步都不能执行。这样每一个时刻对于公共列表的操作就是唯一的。线程安全的。经过测试,使用批量比使用单个插入到mysql快了170倍。原先是1条0.3秒多,现在是500条0.7秒左右。后来,别人发现是自己设置http连接时间是5ms而不是5s。所以才会报错连接超时。差点又背黑锅。代码没问题。

本质就是将相同的代码块通过线程分给多个cpu并发执行。

然后就是多操作,多操作,多问,多问,别乱想(一步登天,急于求成,人生意义,方向抉择),你的想法真的经过事实检验吗?多客观了解。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页