go 面试题总结

1.什么是goroutine,他与process, thread有什么区别?

2. 什么是channel,为什么它可以做到线程安全?

3. 了解读写锁吗,原理是什么样的,为什么可以做到?

4. 如何用channel实现一个令牌桶?

5. 如何调试一个go程序?

6. 如何写单元测试和基准测试?

7. goroutine 的调度是怎样的?

8. golang 的内存回收是如何做到的?

9. cap和len分别获取的是什么?

10. netgo,cgo有什么区别?

11. 什么是interface?

  1. uint不能直接相减,结果是负数会变成一个很大的uint,这点对动态语言出身的会可能坑。
  2. channel一定记得close。
  3. goroutine记得return或者中断,不然容易造成goroutine占用大量CPU。
  4. 从slice创建slice的时候,注意原slice的操作可能导致底层数组变化。
  5. 如果你要创建一个很长的slice,尽量创建成一个slice里存引用,这样可以分批释放,避免gc在低配机器上stop the world

面试的时候尽量了解协程,线程,进程的区别。

明白channel是通过注册相关goroutine id实现消息通知的。

slice底层是数组,保存了len,capacity和对数组的引用。

如果了解协程的模型,就知道所谓抢占式goroutine调用是什么意思。

尽量了解互斥锁,读写锁,死锁等一些数据竞争的概念,debug的时候可能会有用。

尽量了解golang的内存模型,知道多小才是小对象,为什么小对象多了会造成gc压力。

 

https://blog.csdn.net/weiyuefei/article/details/77963810

https://blog.csdn.net/u010824081/article/details/78181518

https://blog.csdn.net/yuanqwe123/article/details/81737180

https://blog.csdn.net/Charliewolf/article/details/82720886

100题:

https://blog.csdn.net/itcastcpp/article/details/80462619

https://blog.csdn.net/qq_36431213/article/details/80686436

https://blog.csdn.net/weiyuefei/article/details/78851624

https://blog.csdn.net/smile_YangYue/article/details/81076993

https://blog.csdn.net/fengxiaozhuzhu/article/details/80920282

https://blog.csdn.net/qq_28163175/article/details/75287877

posted @ 2019-04-02 22:24  小德cyj  阅读(5439)  评论(0编辑  收藏  举报