百度 Golang 面试题分享

百度 Golang 一面

百度的面试步骤分为计算机基础、go 相关、mysql 相关、redis 相关、linux 相关问题。还有一些发散性的问题。

基础相关

  • 算法,包括不限于红黑树、二叉树等等。
  • 数据结构,包括不限于链表、数组等。
  • tcp、ip 相关的一些问题,比如三次握手、四次挥手、time_wait 等等。
  • 浏览器输入地址,中间发生的过程,仔细的描述一下。(这个我感觉基本都会被问,哈哈哈)。

这一块的话,我回答的是稀碎,算法和数据结构我一个都没答上来,后面两个因为之前面试问到过,所以查过一些,回答的还算可以。

go 相关

  • GC,(面 GO 必问题),GC 中 stw 时机,各个阶段是如何解决的。

  • gpm,(面 GO 必问题),这个必须要完全理解,抢占式调度是如何抢占的,怎么调度 goroutine 的,M 和 P 的数量问题。

  • 如何优雅的实现一个 goroutine 池(这个回答的稀碎)

  • 谈谈内存逃逸

  • 内存管理(这个也回答的稀碎)

    mysql 相关

  • mysql 锁,分锁粒度和锁算法(间隙锁、记录锁,临键锁),以及锁算法在什么情况下会用到。大概意思就是如果精准能匹配到的话,用的就是记录锁,否则退化为间隙锁

  • mysql mvvc 实现原理。

  • mysql 索引,索引建立时机,建立规则。

  • mysql 分库分表规则,有没有实践过?

  • mysql 索引的类型以及索引的数据结构

  • mysql 事务特性,已经隔离级别。

redis

  • redis 的数据类型有哪些,使用场景说说。
  • redis zset 的编码方式,应该有两种,在配置文件中配置的,默认 128 个元素是 ziplist(压缩表),大于 128 则是 skiplist
  • redis 的内存淘汰策略
  • redis 的持久化策略
  • redis 分布式锁
  • redis 分布式架构有哪些
  • 如果有一个排行榜,用 zset,根据积分和时间来排序,积分高的,时间最近的拍前面,怎么实现?

linux

  • 你熟悉的有哪些命令
  • 如果线上流量暴增,全都打到一个 upstream 上了,怎么排查。
  • 如何在 nginx 的 access log 中查出请求前 10 的 ip