1. Goroutine 中出现 panic 会发生什么
如果任何一个子 Goroutine 发生了 panic,且该 Goroutine 内部没有使用 defer + recover 来拦截它,那么整个程序(包括主 Goroutine 和其他所有正在运行的 Goroutine)都会立即终止。
2. Golang 的 GC 什么时候回出现卡顿
延长 STW(Stop-The-World)导致的程序“绝对停顿”(如抢占延迟、海量协程栈扫描)以及因资源竞争和 GC 协助(Mark Assist)导致的业务“响应变慢”(吞吐量下降)两大类核心因素。
3. 清理过程会出现 STW 吗?
Sweeping 清理过程本事是并发运行的,不会出现 STW(Stop The World)。
但在 GC 的完整周期中,Sweep Termination(清理终止)阶段中有一项操作是清扫上一轮 GC 的剩余任务。这个阶段也包好了清理动作,而这个阶段是 STW 的。
3. 手撕:零钱兑换

4. 文件描述符是什么
文件描述符(File Descriptor, FD)是 类 Unix 操作系统 中用于 访问文件或其他 I/O 资源 的 抽象句柄(Handle)。
5. I/O 多路复用是什么
I/O 多路复用(I/O Multiplexing)是一种高性能的网络编程技术,它允许 单个线程同时监控多个网络连接(文件描述符) 的状态。当某个连接就绪(如数据可读或可写)时,内核会通知程序进行处理,从而避免了为每个连接创建独立线程带来的巨大资源损耗,也解决了非阻塞轮询导致的 CPU 浪费,是构建高并发服务器(如 Redis、Nginx)的核心基石。
6. 为什么 epoll 底层用红黑树管理?
select 和 poll 的缺点对上以及红黑树的优点,以及为什么不用哈希表之类的其他方案
选择红黑树是因为它在 的时间复杂度下,为内核提供了最稳健、最高效的 FD 管理方式。它在频繁的增删改查操作中表现极其出色,是 epoll 能够支持“ C10M ”(千万级并发)目标的关键基石之一。
7. 为什么 select 的文件描述符集合是有序的?
select 的文件描述符集合之所以是有序的,是因为它利用位图的索引(Index)来直接映射文件描述符的值。这种设计让内核可以按顺序进行线性扫描,但也正是这种“必须有序遍历”的特性,限制了它在大规模并发场景下的表现()性能表现。
8. 说说异步 Asynchronous I/O 和非阻塞 Non-Blocking I/O
非阻塞 I/O 是一种“立即返回、主动轮询”的同步模型:进程发起调用后若数据未就绪内核会即刻返回错误而不挂起,由进程通过循环轮询直至数据就绪并完成拷贝。
异步 I/O 是一种“委托-通知”模型:进程发起调用后立即返回,由内核完成等待数据准备和数据拷贝至用户缓冲区的全过程,待数据彻底就绪后再主动通知进程直接使用。