记一次工作难点

说一下工作中遇到的最困难的事。
因为最开始把定时任务难点说了,所以没啥说的了。就说自己理解单例模式的双重检验锁。于是让我讲了下。讲的不是很顺溜。
他说这是原理学习层面的,让我再说说工作难点。我提到搭建elk中遇到一些异常,因为忘记具体异常了,所以没多说。他说这是环境搭建方面的,也不算。实在没办法,我只好把最开始的定时任务说了下。
我说测试人员发现同时收到了两份相同的电子邮件(理论只收到一份)。首先,怀疑框架的问题,认为两台服务器导致的。但考虑到elasticjob是分布式的,生产环境四台服务器都没有这种重复执行定时任务的情况。然后,认为是西安和上海服务器都启动的缘故,将上海服务器停掉,就不再有这种现象。他说,只是停掉服务器,并不能说明是这个原因。自己想了会说,看日志,看两台服务器的日志。他问,具体怎么看。我说在发送邮件的代码附近打日志。我说的模糊,因为没有实际操作过。他补充说了下。勉强过关。

面试思绪乱。现重新整理下排查问题的思路。

bug描述:定时任务每个发票只发送一次邮件,为何用户同时收到两份。
想起最近业务验收,上海的测试环境也有服务在跑,所以怀疑是两台服务器同时运行导致。于是先将一台停掉,然后观察。发现不再有此问题。继而想到,生产环境是多台,为什么生产环境就不会出现这个情况呢。查阅资料,得知定时任务框架是elasticjob+zk。zk可以分布式调度,所以不会多台服务器同时执行定时任务,只会有一台执行。
那么西安测试环境和上海测试环境的服务器为什么没有组成分布式调度,查看配置,果然,二者数据库配置相同,但和zk相关的配置不同。因为不是一个zk,自然不会组成分布式。
为了进一步证实猜想,在西安测试环境和上海测试环境定时发送邮件的代码块中追加注释。通过日志的方式证明,用户同时收到的两份邮件来着上海服务器和西安服务器。

你可能感兴趣的:(面试)