应届生秋招考察的主要是计算机基础,包括操作系统、计算机网络、数据库、算法,记得多刷点leetcode,秋招不难的。


至于Golang的话,现在八股文也比较多了,常见的GC、GMP、内存分配、并发原语都会考,可以给你一些准备的方向:

1. 并发

  • sync.map、sync.pool、sync.once 的原理
  • sync.pool 如果采用该方案实现连接池,会不会出现连接断开情况?

2.底层原理

  • map 底层实现&sync.Map的区别
  • Context 的使用,用法,有无父子关系?怎么去做并发控制?底层实现(高频)
  • go内存分配
  • 聊到了内存对齐,说说为什么要内存对齐,原理原因
  • chan 底层实现 、 make(chan struct {}) 和 make(chan bool) 在chan的源码实现上有什么区别,chan,什么时候会panic
  • go gc的实现与触发机制
  • go 内存分配
  • go gmp 调度模型实现。从早期1.x版本演进到1.14,做了哪些大改变? time.sleep阻塞时,网络请求阻塞时,调用系统方法时,GMP怎么流转的?
  • go 读写锁和互斥锁的区别和使用场景
  • go panic 的机制。defer,recover的结合使用(golang的panic怎么理解,怎么处理,recover 一般怎么处理)
  • interface 底层实现,怎么判空?
  • reflect 的使用
  • 是否有必要使用协程池?好坏处?举个使用场景
  • go timer底层的实现 . 时间调度可以用哪些数据结构来实现?( 如 回答 时间轮: nginx 。最小堆: go timer 链表等 )
  • 谁负责来标记抢占? 有如下代码 go func(){ for{}}() 死循环,能否被抢占?1.14版本前会有什么问题?
  • etcd 中 watch 底层是如何实现的?
  • for(i<1000000;i++){go fun(){ …time.sleep(10秒)}()} 同时启动100万协程。会有什么问题?影响面: 如(gc 检查,死锁检查) 怎么解决?
  • go 调度模型。发生网络io.会怎么调度。发生阻塞的IO会怎么调度。epoll

3.基本问题

  • goroutine(协程)和线程是什么关系,goroutine是如何调度的?
  • 如何控制goroutine并发数?
  • 逃逸分析能做什么?如何进行逃逸分析?
  • 有缓冲channel和无缓冲channel区别?
  • slice 和 array的区别?
  • slice的底层实现
  • init函数如何使用?
  • []byte{} string 的区别
  • context 的使用,context是否并发安全?
  • defer关键字的作用, 多个defer的调用顺序?
  • go 内存分配,大小对象内存分配区别?多级分配的优点是什么?
  • new和make的区别(高频)
  • go 性能问题的定位( pprof,各项指标)
  • 讲一下Golang 空结构体
  • golang 的map 插入顺序和输出顺序是一样的吗?随机输出
  • 实现一个并发模型。生产者消费者
  • select和epoll的区别