业务背景: 我们有一个劳务系统,前端需要调用一个 GET 接口获取某项目下所有工人(目前约 2000 人)的考勤记录,并展示他们的数据是否已经同步到了政务监管平台。
当前代码逻辑(伪代码):
public List<UserSyncStatusVO> getSyncStatus(Long projectId) {
// 1. 查出该项目下所有的工人 (约2000条)
List<User> users = userMapper.selectByProjectId(projectId);
List<UserSyncStatusVO> result = new ArrayList<>();
// 2. 遍历处理
for (User user : users) {
UserSyncStatusVO vo = new UserSyncStatusVO();
vo.setUserId(user.getId());
// 痛点A:循环内查考勤表
List<Record> records = recordMapper.selectByUserId(user.getId());
// 痛点B:循环内调用第三方 HTTP 接口同步数据,外部接口平均耗时 200ms
String status = thirdPartyHttpService.sync(user.getId(), records);
vo.setStatus(status);
result.add(vo);
}
return result;
}
面临问题: 这个接口一调就超时报错,系统卡死。
请问:
[推广] 送 $5 余额| Claude 满血 Opus 99% SLA / GPT 倍率 0.2, API 中转站 comeu.ai
[推广] 送 $5 余额| Claude 满血 Opus 99% SLA / GPT 倍率 0.2, API 中转站 comeu.ai
-
这段代码存在哪些致命问题?
-
如何用 Java 现有的技术重构并优化这段代码?
-
如果前端要求点击按钮后必须在 2 秒内看到所有人的状态,怎么设计这套架构?
7 个帖子 - 4 位参与者