写点什么

面经复盘:从高并发到数据存储的深度解析

作者:王中阳Go
  • 2024-09-04
    北京
  • 本文字数:1806 字

    阅读完需:约 6 分钟

面经复盘:从高并发到数据存储的深度解析

文末有面经共享群

💼岗位职责:

  1. 负责 Klook 财务系统,电子库存仓储系统研发及日常维护工作,与产品密切配合,保证业务需求的高效落地。

  2. 负责管理自身项目和需求的优先级、按时高质量交付。

  3. 推动团队优秀的软件工程理论方法,code review 保证团队交付质量。

  4. 解决系统疑难杂症,参与技术方案讨论。技术驱动解决业务问题。

📋任职要求:

  1. 熟练掌握 Golang/C/C++/Java 语言,具有扎实的计算机基础和编程能力,熟悉常见的算法与数据结构

  2. 负责过大型项目系统设计,掌握一定的系统抽象能力

  3. 熟悉 Restful 接口设计,有过互联网业务系统或相关技术产品开发经验

  4. 有较强的工作责任心和良好的沟通协调能力,能在压力下独立解决问题

  5. 熟练掌握 MySQL 数据库,擅长 SQL 优化者优先

  6. 开源贡献者优先,GitHub 源码者优先,技术博客者优先

  7. 电商类项目经验优先(仓储系统,ERP 系统,商家/商户系统)

✨面试问题回顾:

1. 自我介绍


2. go 业务中高并发的场景


  • IOT 用户流量峰值时,消息队列消费者采用多协程以及 channel 通信来应对高并发。

  • 高性能的 http web 框架 gin,通过多协程、channel 通信、GMP 调度、内存管理和 gc 优化等手段来处理高并发请求。


3. 协程的数量峰值是多少


对协程数量进行了限制,采用了协程池来保护服务器资源。峰值时达到 100 多个,平时则在 20 多个。


4. kafka 的优势和劣势


  • 优势:

  • 高吞吐量,能够快速处理大量数据。

  • 天生支持集群模式,具有良好的扩展性。

  • 劣势:

  • 不像 RabbitMQ 一样有 web 界面管理,运维相对复杂。

  • 实时性没有那么高,运维成本高。


5. 怎么实现海量数据存储和分析的


使用时序数据库存储海量数据,并通过调用数据库中的函数进行分析,非常方便快捷。


6. 有没有用 mysql 存海量数据的场景


有。例如存储场景执行记录


7. mysql 大表里面是用户的名称信息,有多个字段,怎么优化


  1. 垂直分表:将大字段分开存储,提高查询效率。

  2. 水平分表:通过用户名 hash 分到不同的库,减轻单个表的压力。


8. 分库的 key 怎么设计


分布式 id,如雪花算法、落叶算法等,可以保证分库后的 id 唯一性。


9. 分布式 id 和另一个 string 类型的 id 关联,怎么提高查询的效率


使用中间表去做关联,能够快速定位两个 id 之间的关系。


10. id 如何去重?


可以使用布隆过滤器、set 以及在 MySQL 中设置唯一索引来确保 id 的唯一性。


11. Redis 布隆过滤器有哪些参数可以调整


主要有错误率和初始容量两个参数可以调整,以满足不同的业务需求。


12. redis 你们用过哪些数据结构


  1. 使用 hash 存物模型,优化 bigkey。

  2. 使用 pipeline 命令批量修改。

  3. 还介绍了在其他业务场景中使用的 Redis 数据结构。


13. 集群模式可以使用 pipeline 吗?


可以。在单节点模式下,性能会有提升;在多节点模式下,处理相对复杂,需要进行错误处理。


14. redis 集群模式是怎么定位 key 的


通过 hash 计算,找到对应的 slot(槽),再确定存储该 key 的机器。


15. 如何将部分一样的值,分在同一个 slot 上?


使用 hash tag {} 包住这些值,就可以将它们分配到同一个 slot 上。


16. go 中什么类型可以作为 map 的 key


基本的数据类型如 int、string 等可以作为 map 的 key,还有结构体(里面要是基本类型)也可以。而像 slice 这种切片不可比较的类型,以及函数和 map 则不能作为 map 的 key。


17. recover 是不是所有 panic 都能捕获到?


不是。以下情况 recover 无法捕获 panic:


  1. 在不同的协程中出现的 panic。

  2. panic 在 defer 语句中出现的某些情况。

  3. 某些 Go 运行时的错误(如栈溢出、内存不足等)。

  4. panic 在系统调用或外部库的 C 代码中发生。


18. map 的话,没有使用 make 初始化,读写会发生什么情况


  • 读的时候,会返回空值;

  • 写的时候,会报错。


19. map 使用 make 初始化发生了什么


会分配内存,并且对 map 的底层数据结构进行初始化。


20. HTTP 如何判断 body 的长度?


可以通过 Content-LengthTransfer-Encoding: chunkedmultipart 内容类型等方式来判断 HTTP 请求 body 的长度。


21. HTTP 哪些方法是带有请求体的


post、put、patch 方法通常带有请求体,其他方法也可能带。


22. 英文这块如何


看文档没问题


23. 为什么离职


大家可以根据自己的实际情况准备离职原因的回答。


25. 在团队中的职责 Code review


在 Code review 中,主要关注代码是否清晰,命名是否易理解,有无重复逻辑,结构体封装是否合理等方面。


26. 反问


  1. 业务是什么

  2. 增长趋势

  3. 上班的时间


欢迎关注 ❤

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。


没准能让你能刷到自己意向公司的最新面试题呢。


感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:【infoQ】。

发布于: 刚刚阅读数: 3
用户头像

王中阳Go

关注

靠敲代码在北京买房的程序员 2022-10-09 加入

【微信】wangzhongyang1993【公众号】程序员升职加薪之旅【成就】InfoQ专家博主👍掘金签约作者👍B站&掘金&CSDN&思否等全平台账号:王中阳Go

评论

发布
暂无评论
面经复盘:从高并发到数据存储的深度解析_Go_王中阳Go_InfoQ写作社区