三面(总监面):项目中碰到的技术难点和解决方案
这问题还真不是很好答,我准备几个大家可以去看看:
1、关于数据权限的统一配置和处理方式
第一种,简单方案,针对具体场景,比如项目成员配置,用的项目id加成员id的方式,再用拦截器经过对应controller都提前进行校验;然后为什么没用mybatis的插件修改实际执行sql,因为这个查询实在过于频繁,只要进入个人面板基本所有接口都有使用,我要避免把sql写的过于复杂,分成两步便于扩展,比如我先把数据权限做成缓存,项目信息则依然从数据库查询,数据权限短时间没有刷新是有一定容忍度的。
2、没有大数据框架下的数据同步与统计
需求:比如研发绩效考核平台,从jira中同步研发、设计、测试的故事点数、任务数,从gitlab同步研发代码提交行数,最后计算和汇总得到健康度、效能和排行榜数据,还要从统计图进入对应jira和gitlab的项目主页。
问题:一个部门的所有人的任务数量、代码提交数量,圈复杂度、健康度、效能、排行榜的计算太过庞大,如果是季度数据的统计,从12点到早上上班时间定时任务都跑不完。
解决:第一步先执行没有改动过的代码,观测服务器性能是否完全使用,主要看内存
第二步用多线程分开统计不同角色的数据,把load data infile的数据文件造出来,再一次性入库;为什么load data infile比直接insert快,因为insert是单条插入数据同时生成索引,而且有sql长度限制;load data infile是批量插入、批量生成索引。
第三步查询快照表统计健康度、效能、排行榜用forkjoin的方式
第四步取消非必要日志的打印,比如取消每个用户数据采集开始和结束的日志
效果:八九个小时的统计缩短了一半
3、