知识点标签

线程池面试题解析

线程池相关面试题,覆盖核心参数、执行流程、拒绝策略和容量估算。

17 道题 3 个岗位 5 个公司

线程池相关面试题

过去经历中怎么应对高并发或高性能场景的?

高并发或高性能场景不是考单点技术名词,而是考候选人能否把真实工程问题讲成闭环:先明确业务目标和容量指标,再通过压测和可观测性找到瓶颈,随后从流量、应用、缓存、队列、数据库、线程池、连接池、锁竞争、水平扩展和稳定性预案等层面治理,最后用结果指标证明方案有效。

Java 线程池的核心参数和执行流程是什么?

这道题考察的不是背出几个构造参数,而是要说明 ThreadPoolExecutor 如何用线程数、队列、线程工厂和拒绝策略共同定义资源边界。高质量回答应先点明线程池复用线程、控制并发、削峰和保护系统的目的,再按任务提交后的执行路径解释:先看核心线程,再入队,再扩容到最大线程,最后触发拒绝策略,同时补充队列选择、参数取舍、异常处理、关闭流程和线上监控。

如何在实际中判断是否会出现线程安全问题?

判断实际项目中是否会出现线程安全问题,核心不是先看有没有多线程,而是追踪共享可变状态是否被多个执行路径并发访问,以及访问是否包含读改写、检查后执行、跨字段一致性、对象发布等风险。实战判断要结合代码审查、并发入口梳理、锁边界分析、压测和线上偶发症状,而不是依赖一次本地复现。

怎么排查性能问题?

排查性能问题不能从单点经验出发,而要先把问题定义清楚:慢在哪里、影响谁、从什么时候开始、哪个指标异常、是否可复现。标准思路是先量化现象,再按调用链从客户端、网关、应用、缓存、数据库、网络和机器资源逐层缩小范围,结合压测、监控、日志、链路追踪、慢查询、线程栈、GC 日志、火焰图以及 CPU、内存、IO、网络等指标定位根因,最后通过修复验证和回归压测证明问题真正解决。

如果定时任务多了单个线程处理不了,要使用多线程怎么处理?

如果定时任务多了单个线程处理不了,要使用多线程怎么处理?这道腾讯牛客题的关键是围绕“多线程任务调度与线程数配置”讲清概念、机制、取舍和边界。多线程处理任务要先把任务放进队列,再由线程池消费,避免无限创建线程。CPU 密集型线程数通常接近 CPU 核数或核数加一;I/O 密集型可以按 cores*(1+wait/compute) 估算,并通过压测校准。

如何实现多线程?

如何实现多线程?这道腾讯牛客题的关键是围绕“多线程实现方式”讲清概念、机制、取舍和边界。实现多线程要讲创建线程、任务执行、同步共享状态和生命周期收尾。C/C++ 常用 pthread_create 或 std::thread,Java 可用 Thread、Runnable、ExecutorService,Go 用 goroutine 但它是 runtime 调度的轻量协程。

io密集型和cpu密集型如何分配线程,多分配线程数量还是少?

io密集型和cpu密集型如何分配线程,多分配线程数量还是少?这道腾讯牛客题的关键是围绕“CPU 密集与 I/O 密集线程数配置”讲清概念、机制、取舍和边界。CPU 密集型任务线程数通常接近 CPU 核数或 cores+1,避免过多线程争抢 CPU;I/O 密集型任务有大量等待时间,可以按 cores*(1+wait/compute) 估算更高线程数,再用压测校准。

为什么高并发场景下用unfair锁而不是fair?

为什么高并发场景下用unfair锁而不是fair?这道腾讯牛客题的关键是围绕“高并发下非公平锁取舍”讲清概念、机制、取舍和边界。高并发场景常用非公平锁,是因为它允许刚到达的线程在锁释放瞬间直接竞争成功,减少严格排队带来的线程唤醒、挂起和上下文切换成本。它牺牲一部分公平性,换取更高吞吐和更低平均调度开销。

Java 中实现多线程有哪些方式?

Java 中实现多线程有哪些方式?这道腾讯牛客题的关键是围绕“Java 线程与多线程实现方式”讲清概念、机制、取舍和边界。Java 实现多线程可以从 Thread、Runnable、Callable/Future、线程池和 CompletableFuture 等方式回答。更底层看,Java 线程通常映射到操作系统原生线程,由 JVM 负责创建、调度协作、栈管理和状态维护。