当前位置: 首页 > 面试经验 >

爱诗科技- Go社招 - 硬 - 7.25

优质
小牛编辑
64浏览
2024-07-26

爱诗科技- Go社招 - 硬 - 7.25

  1. 自我介绍
  2. 项目-我被美女包围了-基于Redis订阅机制的高效缓存管理系统,用于及时更新和安全读取游戏中的卡片信息
    1. 为什么将卡的信息存在服务器的excel里,为什么不用数据库
    2. 将卡缓存到内存里,卡的数据量大概有多少
    3. 卡的视频存储在哪的?
    4. 你将卡写到内存变量里是Golang的一个全局生命周期的变量吗
    5. 你觉得这个内存在操作系统里面的话会分配到哪里?
    6. GM修改卡后往redis特定的频道pub,然后服务器redis订阅这个频道,监听缓存更新信号,从而更新缓存。 你这种设计两个问题:1. redis本身不是一个强一致性的,你下发通知可能会失败的; 2.你对一个全局内存修改会涉及到并发安全
    7. 你对第一个问题redis强一致性这块有什么好的想法吗?redis不是强一致性的,这个业界其实有一个比较通用的中间件在做这种配置的分发,有了解吗?
    8. 这个内存你是自己定义的结构变量还是一个大的map,假设用map结构的话你觉得还有什么比较好的方式去处理这个修改变量并发安全的问题
    9. 有了解sync.map和加读写锁的一个性能的对比吗
    10. sync.map什么时候读变写这个说的不太正确,他会记一个命中次数吧,肯定不是说按照时间去算,肯定是没有命中然后需要去更新
  3. 项目-我被美女包围了-使用bitmap的签到设计
    1. 签到应该是一个持久化的东西吧,redis服务不起停吗?如果起停的话是不是就丢了
    2. redis线上有做主从吗
    3. 有了解集群模式的一个原理吗?他是怎么做数据分片的
    4. 一致性hash是nginx做代理,然后api转发的时候的一个负载均衡算法
    5. 主从有了解吗?同步是怎么做的
    6. 落盘需要有一个落盘的文件有了解吗
    7. 主从用rdb和aof做的同步,然后分全量和增量,你结合这两个日志的特点,全量应该用什么,增量应该用什么;或者rdb和aof你觉得他们本身存储的应该是什么
    8. 全量用快照,快照内的内容应该是什么?rdb和aof实际存储的内容有什么区别?一个是二进制一个是增加的命令。aof用增量比较好,rdb用来全量。
    9. 哨兵有了解吗?用来做什么的 ?
    10. 你觉得他是怎么监听个个节点的状态
    11. 继续关于签到redis持久化的问题,如果现在让你来设计的话,你觉得用redis会有什么问题,在持久化上会不会有问题?数据会不会丢失,redis占内存如果你不停的去set key的话,那肯定内存后面肯定会OOM的。
    12. 或者说我们就用位图这种思想,然后用二进制的表示将他落到数据库你觉得会有什么问题吗?一个bit一天,如果构造成字符串落到库里也就是一个31长度的一个字符串,大小其实很小,只占了31个字节。数据库的话一个字段存几千个都是ok。落数据的开销要小于放到redis内存里的开销,检索的话redis是map,数据库也可以走b+树的索引比较快的。
    13. 结合起来怎么设计比较好,冷的数据落盘到mysql里,热的数据放到redis里,它们两个的一个同步你觉得怎么更新比较好。
    14. 或者你有了解mysql和redis的一个数据同步吗
    15. 定时任务定时将redis的数据写入到mysql,那mysql写失败了怎么办?
    16. 一般来说的话都是以mysql为准,redis 做旁路。现在redis做主库,mysql来做一个冷数据的备份。mysql数据如果丢失的话,服务断电了,redis oom了,那么还没写入到mysql,那么这一部分的数据是不是就会丢失,因为redis是不具备一个可恢复性。
    17. mysql向redis的一个同步有了解吗?
    18. 查是先查redis,那么查redis的过程中mysql有更新,那么redis返回的是不是就是错误数据,怎么办?
    19. 常用的是:主动删除redis 这个key就可以了。让这次查询直接落到mysql上,然后用mysql反着去更新redis,穿透的一个方式。
    20. 还有一种对业务无感知的就是通过binlog去同步,监听mysql的binlog,这种好处是业务上是不需要关注的,也能保证一定的实时性
  4. 项目-ark-跨渠道抓数
    1. 你觉得用kafka有什么优势吗?和其他的mq这个选型是怎么考虑的?这个场景为什么选择用kafka
    2. kafka的一些设计你了解吗?大概分哪些模块
  5. 题: m个生产者,n个消费者,用channel进行数据通信,消费函数为f unc work(msg int) error,当消费捕获到error 的时候,关闭所有 的生产者和消费者。
  6. 反问
#Golang社招##项目##面试##redis##mysql#
 类似资料: