一、给你一个业务,如何处理,你的想法是什么?
不需要特别详细,说说你的想法,逻辑思路就行,这是楼主在面试众安保险实习时技术面问楼主的。
- 首先,我会和业务方进行沟通,包括这个业务的细节,这个业务的实际需求是什么?这个业务做完之后,对项目会有什么好处
- 其次,我会去分析这个业务,是使用什么方式去实现比较好,就比如考虑实现一个功能是使用抽象类还是接口去实现
- 之后我会去考虑业务的规范,就比如我要去实现一个接口的话,我回去查看使用什么样的参数类型,是Integer,还是Long又或者是Double,再去考虑它的返回值什么类型等等
- 如果这个业务给用户使用,看看是不是需要考虑异常处理啊,如何给用户提供功能,是否需要记录该业务的使用次数(例如统计一个接口何时被调用,调用多少次,可以使用动态代理记录开始运行的时间和结束的时间,添加一个计数器记录执行次数)
- 最后,查看自己编写的一个业务实际运行的结果好坏,好的话如何进行后续优化,不好的话如何改进业务
二、随着业务的发展,有一些场景需要进行数据迁移,有哪些方案?比如迁移数据到其他数据库或者分库分表后的数据迁移
1.停机迁移
就是在数据迁移前,在网站或者App上发送一个公告,某某时间段需要对系统进行维护,不能访问。在这个时间段将系统停掉,就没有流量写入了,这时候旧表就不会数据进行写入,就可以使用迁移的工具,将旧库的数据读出来,写到新库中。迁移完之后,修改系统的数据库连接配置,再去重新部署,上线之后,再去验证一下,没问题就结束了;
缺点在于必须停机一顿时间,如果没迁移成功,就必须切回原来的库,再次去发公告,而且有的项目上线不能停止运行,这种方案就无法实施了。
2.双写迁移,将数据写入两个数据库
就是在业务代码中,在数据写入的时候,不仅要写入旧库也要写入一个新库,考虑性能的问题,新库可以异步写入,保证旧库写入成功就行。保证两个库的数据一致性:将新库写入失败的数据记录在单独的一个日志中。只需要将旧库中的数据读取,需要新库中没有的,或者最后这个数据修改的时间比新库数据新,再去写入到新库,之后抽样比较数据,进而保证数据一致。
之后将流量灰度的进行迁移,比如开始切换10%的流量,之后逐渐切换到100%,因为两个库,有任何的问题都可以随时切换到旧的库中