知乎上有人问遇到过哪些高质量面试题目,有网友给出如下几道题:

  1. 1.9/1.10中,time.Now()返回的是什么时间?这样做的决定因素是什么?
  2. golang的sync.atomic和C++11的atomic最显著的在golang doc里提到的差别在哪里,如何解决或者说规避?
  3. 1.10为止,sync.RWMutex最主要的性能问题最容易在什么常见场景下暴露。有哪些解决或者规避方法?
  4. 如何做一个逻辑正确但golang调度器(1.10)无法正确应对,进而导致无法产生预期结果的程序。调度器如何改进可以解决此问题?
  5. 列出下面操作延迟数量级(1ms, 10us或100ns等),cgo调用c代码,c调用go代码,channel在单线程单case的select中被选中,high contention下对未满的buffered channel的写延迟。
  6. 如何设计实现一个简单的goroutine leak检测库,可用于在测试运行结束后打印出所测试程序泄露的goroutine的stacktrace以及goroutine被创建的文件名和行号。
  7. 选择三个常见golang组件(channel, goroutine, [], map, sync.Map等),列举它们常见的严重伤害性能的anti-pattern。
  8. 一个C/C++程序需要调用一个go库,某一export了的go函数需高频率调用,且调用间隔需要调用根据go函数的返回调用其它C/C++函数处理,无法改变调用次序、相互依赖关系的前提下,如何最小化这样高频调用的性能损耗?
  9. 不考虑调度器修改本身,仅考虑runtime库的API扩展,如果要给调度器添加NUMA awareness且需要支持不同拓扑,runtime库需要添加哪些函数,哪些函数接口必须改动。
  10. stw的pause绝大多数情况下在100us量级,但有时跳增一个数量级。描述几种可能引起这一现象的触发因素和他们的解决方法。
  11. 已经对GC做了较充分优化的程序,在无法减小内存使用量的情况下,如何继续显著减低stw pause长度。
  12. 有一个常见说法是“我能用channel简单封装出一个类似sync.Pool功能的实现”。在多线程、high contention、管理不同资源的前提下,两者各方面性能上有哪些显著不同。