面试|业务面试问题
#面试 [字体·小·中·大]身边伙伴经常被问到的一些问题,我总结了一下。
1、项目怎么上线
- 在上线之前需要自测,自测后 qa 测试无问题可以进行线上数据验证(CR 分支)
- 进行 code review (变更少可以不进行),提 merge request 到 CR 分支,CR 完毕部署该分支到线上让 QA 验证,该环境使用线上数据不对外公开
- QA 确定线上数据验证完毕,产品验收通过,可以上线,然后在周二、周四固定时间上线
- 将每个模块开发的功能合并到 release 分支,统一晚上 8:00 后上线,如果新功能对产品可能造成验证影响,需要在灰度环境验证一到两周才能到线上
- 上线完毕后 QA 再次进行验证,第二天无问题,release 分支合并到 master 分支
2、怎么参与线上问题
- 如果是事故级别问题,需要立即对代码进行回滚
- 常规问题一般先看问题的现象,如果能够通过报错信息找到问题根源就就 checkout 一个 master 进行处理并上线
- 如果问题比较隐蔽,优先通过日志系统排除,最后再看业务代码
- 处理完毕线上问题并验证后,高优缺陷当天上线,其他类缺陷可以跟着周二、周四上线
3、线上出现问题怎么回滚
- 回滚既部署上个版本的代码,由于我们每个上线周期都使用一个 release 分支,直接切换到这个分支重新部署即可。
- 使用公司的 CI/CD 系统可以方便回滚,通常配置回滚策略后可以一键回滚。
- 也可以手动部署上个版本的 release 分支进行回滚。
4、线上表结构更改怎么做(数据迁移)
- 由于业务优化变更导致需要修改表结构的时
- 通常暂时不动先不动旧表和旧业务接口,然后创建新表,实现新接口
- 通过灰度验证没有问题后,再进行上线,之后可以移除旧表的业务接口
- 过程中一般要注意新表旧表的数据同步,数据迁移时机(一般在用户少的晚上进行)
5、解决过什么线上问题
解决的问题多数为业务问题,极少部分时优化相关的。 一般的有:空指针、线程池 Discard、内存溢出 优化的有:
- 大事务导致接口超时问题
- 数据同步过程,数据一致性方案。使用 binlog 监控兜底保证一致性(监听变更+校验)。