目 录CONTENT

文章目录

字节跳动 | 抖音支付go实习

如风
2022-11-07 / 0 评论 / 0 点赞 / 26 阅读 / 1,707 字

字节跳动 | 抖音支付go实习

时间:2022.11.7 16:00-17:00 60min

​ 又是在牛客网被邀请投递,我发现字节好喜欢邀请我,被邀请三次了,主动投递不理睬,邀请的一般都会有面试机会。

  • 自我介绍

分布式对象存储项目

  • 怎么实现的?

  • 数据去重算法怎么做的?怎么判断具体的数据怎么重的?时间复杂度?

    数据节点启动的时候,用一个协程,扫描一遍本地磁盘,将所有对象的散列值读入内存map中,避免了每次定位导致一次磁盘访问。
    去重的过程就是 接口节点像数据节点发送定位消息(散列值),判断是否存在于map中,时间复杂度是 O(1)
    
  • 哈希表存储在内存?内存爆满怎么办?

    一种常见的解决方案是使用磁盘文件。将 map 中的键值对按照一定的规则(例如哈希值)分成多个文件,每个文件中存储一部分键值对,然后通过使用哈希表或其他索引数据结构来定位键值对所在的文件,最终实现对 map 的访问。另外,你还可以针对热成分数据(被经常访问的数据)进行缓存,将其存储在内存中,以加快访问速度。
    
    另一个解决方案是使用类似于流式计算的方式处理数据。即在接收到每个定位消息时,把当前 map 里的当前状态持久化并刷到磁盘,然后再去遍历磁盘上剩余的数据。这个过程可以利用较小的 map,如 LRU(Cache),定期刷到磁盘上的方式来实现。由于不需要大量的内存来存储 map,所以可以在一定程度上减少内存占用
    
    第三种方法是通过下面的 Redis 来做缓存
    
  • 上个问题说的用redis做缓存,如果redis缓存中key过期数据不存在,是否存储到数据服务?O(n)判断?。这里一直在追问

    在使用 Redis 作为缓存时,如果某个键的缓存过期且数据不存在,应该考虑是否需要从数据服务中重新获取该数据,并将其存储到 Redis 缓存中。这涉及到数据一致性和缓存穿透的问题。
    
    如果在 Redis 中的某个数据过期了,同时该数据在数据服务中被删除了,那么如果直接从数据服务中重新获取该数据,并将其存储到 Redis 缓存中,可能会导致数据不一致的问题。因此,我们需要在数据服务中删除数据的同时,删除 Redis 中对应的缓存数据。如果通过某种手段,在 Redis 中数据过期的同时,将数据服务中对应数据的删除操作也完成了,那么就可以安全地从数据服务中重新获取数据,并将其存储到 Redis 缓存中。
    
    另一方面,如果在 Redis 中缓存的数据过期,但数据服务中该数据未被删除,那么如果直接从数据服务中重新获取该数据的话,可能会导致缓存穿透的问题,即大量请求都落在了数据服务上,造成了数据服务的压力和浪费。为了避免缓存穿透,可以采用一些技术手段,如 Bloom Filter 等,来判断请求的 key 是否存在于 Redis 中,如果不存在,则可以直接返回缓存未命中的结果,避免了无谓的查询操作。而对于缓存命中的情况下,需要确保数据一致性,将获取到的数据存储到 Redis 缓存中,以加速后续的查询操作。
    
    因此,在实际应用中,需要根据具体的场景和需求进行综合考虑和实现。在实现时,需要做好缓存、数据服务、Bloom Filter 等组件之间的协作和一致性管理,以确保系统的稳定性和可靠性。
    
  • 断点续传怎么实现的?

go语言

没有问

计算机网络和操作系统

  • http的method?具体?
  • cookie和session有什么区别?
  • http和https的区别?单项认证和双向认证流程?对称加密和非对称加密?流程?
  • 进程和线程有什么区别?一个进程有什么数据段?同一个线程有哪些数据段可以共享的?你觉得栈区会共享吗?栈区和堆区有什么区别?
  • 进程的通信方式?哪些方式比较快?为什么共享内存比较快?管道为啥慢?

数据库

  • Mysql的索引有哪些?B+树和哈希索引有哪些区别

算法

  • 版本号对比,version1和version2.大于返回1,小于返回-1,其他返回0.

    001和0001比较的时候都视为1;1.0.0和1.0是相等的返回0

  • 直接给的main函数,没有其他东西

总结和心得

  • 面试官的评价是基础还不错,代码能力有待加强。项目比较符合后端技术栈,做项目需要考虑如何更快的实现?考虑边界条件,做业务很多问题就出在这里
  • 然后总结一下算法题,这个题目出乎我的意料,以为是链表和树,结果是一道从来没见过的题目,所以重点还是要提升自己的算法能力,而不是固有的题目,知道面对一道题怎么去思考?一开始不要急着写,和面试官聊一下思路,边界条件没有考虑准确,这个面试官说也是考察中十分重要的
  • 对面试经历的要求不会太多,理解本科生,不太会要求,看重计算机基础和项目亮点,尤其是做项目有哪些难点和亮点,代码能力是最基本的能力,项目就是锦上添花
  • docker和k8s考察比较少,侧重计算机基础,算法能力,思考问题能力,
0

评论区