一、先读题:搞清楚要干什么1. 确定输入输出
输入是什么:数组 / 字符串 / 树 / 图
输出是什么:值 / 路径 / 数量 / 是否存在
一句话复述题目:
题目是要求我找……满足……的最优 / 计数结果。
2. 找约束看关键词:
n <= 10^5 -> 不能 O(n^2)
多组查询 -> 可能要预处理 / 前缀和 / 哈希
数据范围很大 -> 可能要 O(n log n)
图 / 树 -> 基本 DFS / BFS / DP / 最短路
约束直接决定算法方向。一个常见的误区是忽略输入规模,导致设计出正确但超时的解法。建议在读题后第一时间圈出 n 的范围,以此框定可接受的复杂度上限。
3. 找关键词(”算法信号”)
关键词
可能算法
最长 / 最短
DP / 二分 / BFS
子数组 / 连续
滑动窗口 / 前缀和
最多 / 最 ...
背景历来互联网多线程、高并发场景多用于快速响应的服务接口,但近两年AI兴起之际,大家对于接口服务的响应时间的容忍度逐渐升高,也更多得使用多线程去处理一些长耗时的任务。进而导致了一些被忽略的细节而引发了线程池的问题。今天就来聊一聊CompletableFuture的线程取消问题。
鉴于公司线上业务有些敏感性,故抽样脱敏了部分代码,将所遇问题做个介绍。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util ...
