2026-01-22 22:36:52
华顺信安后端日常实习一面面经总结如下:
1. MySQL 聚簇索引和非聚簇索引特点:数据物理排序与索引一致,查询效率高,但插入、更新、删除操作可能因页分裂导致性能下降。
适用场景:主键查询或范围查询。
特点:索引与数据分离,适合辅助索引,但多次查询可能引发回表开销。
适用场景:非主键字段的查询优化。
避免多线程的锁竞争和上下文切换开销。
数据结构操作原子性,无需额外同步机制。
机制:通过版本号或时间戳实现,更新时检查数据是否被修改。
适用场景:读多写少,冲突概率低的场景(如库存扣减)。
机制:通过 SELECT ... FOR UPDATE 加锁,确保独占访问。
适用场景:写多读少,冲突概率高的场景(如转账操作)。
基于协程的键值存储,生命周期与协程绑定。
通过 context.WithValue 添加数据,context.Value 读取数据。
G(Goroutine):用户级轻量线程。
M(Thread):操作系统线程。
P(Processor):逻辑处理器,绑定 M 和 G 的调度上下文。
支持按分数排序和范围查询。
原子性操作,适合高并发场景。
使用 sync.Mutex 或 sync.RWMutex 加锁。
使用并发安全的 sync.Map(适合读多写少场景)。
使用切片存储键,排序后遍历(如 sort.Strings)。
通过 for 循环切片索引访问 map 值。
未关闭的资源(如文件、连接)。
缓存未设置过期策略。
循环引用导致 GC 无法回收。
当容量不足时,按 2 倍或 1.25 倍(根据元素类型大小)扩容。
扩容会触发内存重新分配和数据拷贝,可能引发性能问题。