应届生秋招考察的主要是计算机基础,包括操作系统、计算机网络、数据库、算法,记得多刷点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的区别