文章
大厂面试
Tadori1zanai 腾讯微信游戏小游戏三面
作者:Tadori1zanai 时间:2026.5.13
注:
- 回答多数为 AI 生成,仅供参考。
- 只记录部分面试和部分问题,部分问题暂无回答。
goroutine 如何实现,goroutine 切换时保存哪些信息?#
- Goroutine 是 Go 在用户态实现的轻量级协程。
- 每个 goroutine 维护自己的栈和状态。
- 切换时,Go 主要保存少量关键寄存器信息到 G 的
gobuf结构体。 - 典型信息包括
sp栈顶指针、pc下一条指令地址、ret系统调用返回值、bp栈帧基址。 - 这些操作在用户态完成,开销远低于操作系统线程切换。
goroutine 切换和线程、进程切换有什么区别?#
- 进程和线程切换由操作系统内核完成,属于内核态切换。
- goroutine 切换由 Go runtime 完成,属于用户态切换。
- 进程切换最重,涉及虚拟地址空间切换,会影响 TLB 和缓存。
- 线程切换共享地址空间,但仍需要保存较多寄存器和调度状态。
- goroutine 切换更轻,不涉及地址空间变化,只保存少量核心上下文。
UDP 不可靠体现在什么地方?#
- 数据包可能丢失。
- 数据包可能乱序到达。
- 数据包可能重复。
- UDP 没有流量控制和拥塞控制。
- UDP 只负责尽力发送,不保证到达和顺序。
- UDP 仍然有 checksum 校验,数据损坏通常会被丢弃。
UDP 的数据帧一般的大小是多少?太小或者太大的数据帧会怎么样?#
- UDP 理论最大数据报大小约为
65535 - 20(IP头) - 8(UDP头) = 65507字节。 - 以太网 MTU 通常是 1500 字节,因此 UDP payload 常控制在
1500 - 20(IP头) - 8(UDP头) = 1472字节以内,避免 IP 分片。 - UDP 包太大会被 IP 层分片,一个分片丢失会导致整个数据报失效。
- UDP 包太小会让 header 占比变高,系统调用和网络包数量增加,带来 CPU 和网卡压力。
- 工程上通常控制 UDP 包大小,减少分片,同时兼顾传输效率。
TCP payload 常见最大值是 MSS,通常为 1500 - 20(IP头) - 20(TCP头) = 1460 字节。