09-14 面试总结

面试题

公司1

  • 介绍项目,项目的一些细节问题
  • 定时任务处理设计
  • 对k8s的理解
  • golang一些基础知识
  • mysql 的联合索引的使用情况
  • Golang 锁知道的有哪些(互斥锁,读写锁)
  • Golang 遍历map无序为啥无序。
  • goroutine 什么时候会触发调度
    • channel阻塞的时候
    • 写入磁盘的时候
    • 从网络读写数据的时候
    • runtime GoSched 方法
    • Lock 临界区的时候
  • select 和 epoll 的区别

    • 支持的fd的数量不同
    • 等等
  • MySQL 数据库隔离级别

    • 未提交读 脏读
    • 提交读
    • 可重复读 幻读
    • 串行化
  • MySQL 如何解决的幻读

    • 用的间隙锁(啥是间隙锁)
  • Golang make vs new

  • lock 和 atomic 那个快

    • atomic 因为是硬件级别的
  • Goroutine 的调度, M 的最大个数(1万)

    • G M P 结构

公司2

  • 介绍项目
  • 请求调用方式
  • golang slice 和 数组的区别
  • LRU 如何实现
  • nginx 是否了解
  • websocket 是否了解
  • 对Linux的了解
  • 对NSQ的理解
  • NSQ 同步数据异常处理,超时控制

    • 异常处理用defer, 每个goroutine一个defer
    • 超时控制用channel

      1
      2
      3
      4
      5
      select {
      case <-ch:
      case <-time.After(5 * time.Second):
      return
      }
  • 用两个栈实现一个队列
  • 二叉查找树的时间复杂度 O(logn)