Skip to content

还没分享过小米的面经呢,今天它来了

今天分享的面经是小米的一面,之前还没有分享过相关的,来看看难度如何。

内容我都整理好了:

  1. 自我介绍+项目问题

2. 讲讲GOLANG的CSP和三色标记法

CSP 是一种并发编程模型,而三色标记法是一种垃圾回收算法。

Golang 的 CSP 模型

Go 语言的创建者们受到 CSP 模型的影响,在设计 Go 时引入了 goroutines 和 channels 来简化并发编程。CSP 模型强调通过消息传递来实现进程间的通信,而不是共享内存。在 Go 中:

  • Goroutines:是轻量级的线程,由 Go 运行时调度。程序员可以轻松地启动成千上万个 goroutines。
  • Channels:是用于 goroutine 之间通信的管道。它们提供了一种类型安全的方式来进行同步和通信,避免了传统多线程编程中常见的竞态条件等问题。

使用 CSP 模型,开发者可以通过简单的语法和结构化的方式来编写高效的并发程序,这大大降低了并发编程的复杂性

Golang 的三色标记法

三色标记法是一种用于垃圾回收(Garbage Collection, GC)的技术,它将堆中的对象分为三种颜色:白色、灰色和黑色,以追踪哪些对象是可达的,哪些是不可达的(即垃圾),从而进行回收。

  • 白色对象:表示这些对象尚未被垃圾回收器访问到,被认为是潜在的垃圾对象。
  • 灰色对象:表示这些对象已被垃圾回收器访问到,但是还需要进一步处理其引用的对象。
  • 黑色对象:表示这些对象已经被完全扫描过,确定为存活对象。

三色标记法的过程大致分为以下几个阶段:

  1. Mark Setup (标记准备) :开启写屏障等准备工作。
  2. Marking (标记) :从根集合开始,递归地将可达对象标记为灰色或黑色。
  3. Mark Termination (标记结束) :关闭写屏障,并计算下一次清理的目标。
  4. Sweeping (清理) :回收所有白色的不可达对象。

为了确保三色标记的正确性,Golang 使用了插入屏障删除屏障等机制来维护所谓的“三色不变式”,防止在并发环境中出现对象丢失的问题。

3. 为什么说索引会加速mysql的查询?背后原理是什么?

索引在MySQL中可以显著加速查询