golang研发岗面经(23年秋)

基础篇

  1. 进程、线程、协程的区别和联系
  2. 进程间的通信方式有哪些?
  3. 如何在运行时控制协程数?
  4. 协程的切换时机有哪些?
  5. 协程是如何使用堆栈的?
  6. TCP的三次握手,能不能用两次握手或者四次握手?
  7. TCP的生命周期会经历哪些阶段(过程)?
  8. 网络拥塞了,有哪些解决策略?
  9. server挂了,发送端会采取哪些动作?
  10. 接收端buffer满了,server会采取哪些动作?
  11. ip寻址的过程是怎样的?
  12. 手机端app是如何把请求发送到服务端的?
  13. 有哪些需要调整协程数的场景?如何通过调整协程数使得并发效率提升?针对CPU密集型和IO密集型的任务如何调整携程数量?
  14. 二叉搜索树、平衡二叉搜索树有哪些优缺点?
  15. B、B+树、红黑树的数据结构?有哪些区别?应用场景分别是什么?
  16. rpc和http协议的区别?rpc如何解决负载均衡问题?微服务之间有哪些通信方式?
  17. 从客户端发起一个api请求后,都发生了哪些事情(各种网络栈和应用栈)?
  18. 客户端和服务端是怎么处理即时消息的?如何发送和接收?

数据库篇

  1. mysql的索引使用什么数据结构?为什么?
  2. 什么情况下会出现索引失效?
  3. 有哪些索引优化的方法?如何知道是否命中了索引?
  4. 使用联合索引时,有哪些需要注意的点?(联合索引)select * from t where a>1 and b=2是否失效?
  5. mysql的主从复制有哪些使用场景?读写分离怎么理解?什么场景使用读写分离?读写分离解决什么场景?读多写少和写多读少的场景分别应该怎么设计数据库?分表写入有什么问题?
  6. 如何解决跨表查询?
  7. mysql主从同步的过程是怎样的?
  8. 多个进程同时写表,如何保证写入的正确性?
  9. 多个进程同时查询到某条记录不存在时,都进行插入,应该怎么加锁?能利用索引解决吗?效率怎么样?如果能用索引解决,应该怎么加索引?
  10. varchar和char的区别?varchar(100)是什么意思?varchar(100)和varchar(200)的区别?
  11. order by和group by和having有哪些区别?使用顺序是什么?
  12. mysql进行范围查询时,如何能快速定位1-100的记录?
  13. 什么场景适合加索引?什么场景不适合加索引?
  14. 插入数据库时,数据量突增,有哪些解决方案?
  15. 数据库表能够承载的最大数据量?超过了有哪些解决方案?
  16. MVCC
  17. redo log,bin log,undo log都是什么?有什么区别?用途?
  18. 分布式事务是什么?应用场景?如何保证数据一致性?

缓存篇

  1. 读写锁和分布式锁的区别?redis是如何实现分布式锁的?
  2. redis有哪些数据结构?底层是怎么实现的?
  3. redis为什么快?使用redis要注意什么问题?
  4. redis和mysql如何保持数据一致性?
  5. 如何判断redis中的数据是旧数据?
  6. redis如何实现分布式存储?如何知道是谁抢到了分布式锁?
  7. 什么是redis的cluster?原生的cluster怎么维护节点之间的关系?如何确认某个key在哪个实例上?
  8. redis的哨兵是什么?机制怎么做的?哨兵自己挂掉怎么办?
  9. redis的网络模型?redis是单线程还是多线程?为什么使用单线程+多路复用?
  10. 缓存雪崩,缓存击穿,缓存穿透是什么?有哪些解决方案?

消息队列

  1. kafka何时会出发rebalance?有哪些分配策略?
  2. kafka如何进行消息同步?
  3. kafka消息丢失怎么办?怎样保证消息的可靠性?怎样防止重复消费?消费失败了怎么办?重新消费怎么解决?手动ack和自动ack分别有什么优缺点?自动ack如果物理上消费成功但是逻辑上消费失败?
  4. 你还知道哪些消息队列?分别有哪些优缺点?应用场景是什么?

golang篇

  1. golang的优势是什么?go func()执行时,G、M、P分别会发生什么?
  2. golang的GMP原理
  3. golang的gc是怎么样的?
  4. 局部变量和全局变量有哪些区别?分别是怎么存储的?
  5. golang中new和make的区别?
  6. defer的执行顺序?defer和return的执行顺序
  7. slice如何进行扩容?
  8. map是否是并发安全的?如何保证map并发安全?golang有没有支持并发安全的map?实现原理是怎样的?
  9. golang有哪些异常?如何处理?
  10. recover的作用是什么?怎么使用?如果不recover,发生panic了,会对其他协程造成怎样的影响?panic之后程序是否会退出?
  11. golang中8核16G的机器,最多能启动多少进程、协程?
  12. gin框架在得到一个request之后,会做什么?gin如何处理请求的流转?

容器篇

  1. k8s是如何把请求发送到pod中的?
  2. k8s的服务发现是怎么做的?
  3. k8s有哪些常用的组件?有什么功能?如何做负载均衡的?

算法篇

  1. 回溯(排列、组合、子集)
  2. 链表(反转、环、合并)
  3. 排序(快排、归并、堆)
  4. 树(遍历)
  5. 字符串(编解码,回文,dp)

其他篇

  1. 分布式的一致性协议?raft?
  2. zk的一致性协议如何实现?etcd?
  3. 服务的架构?
  4. rpc通信的消息格式?protobuffer?rpc长链接如何解决粘包的问题?

golang研发岗面经(23年秋)


原文始发于微信公众号(晴天码字):golang研发岗面经(23年秋)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/247468.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!