type
status
date
slug
summary
tags
category
icon
password
2024 超参数暑期实习面试
好像是做AI Bot游戏开发,开发什么AI狼人杀,不太懂,原来超参数是做游戏的嘛?
要求我一星期之内到岗,这是真没办法兄弟。。。然后offer没了hhh
📎一面(3.26,已通过)
支付系统
- 支付系统这边是纯法币,还是法币兑换加密货币?
- 支付系统你认为最关键的问题是什么?怎么解决?(金额入账问题)
算法题(但没让我写,说思路而已)
给定一系列的数字,请你找到其中想要删除的数字并将它删除。
- 上述这样的非常简单,直接遍历一遍过去删除即可
- 或者排序+二分
- 但要注意删除操作本身是
O(n)
,我们可以把要删除的数字直接换到最后面,然后直接pop_back
就可以实现O(1)
的删除操作
加条件,说如果想删除第i大的数字要怎么做?
- 优先队列,大顶堆解了
设计题
- golang中的map不是并发安全的,请你写一下怎么才能简单地实现并发安全?
- 一直加锁很影响性能,如果这边的map存放的数据是均匀的,你会怎么做?
Answer
- CAS乐观锁,给每个数据加上版本号,版本号对上了才更新,否则回退重来,因为数据均匀,所以冲突应该较少。
- 分治,假设建100个map,在存数据之前对数据取余,判定其落在哪个map中,再进行插入,可以很好地减少并发冲突
场景题
- 请你设计一个文件存储系统,支持上传和下载操作,先简要说说你的设计思路?(我从os的DMA和零拷贝方案去答了)
- 磁盘读取是顺序读快还是随机读快?为什么?(机械硬盘的扇区读取问题)
- 一个1GB的文件能放进一个大小为1GB的硬盘中吗?(不能,元数据inode占据空间)
- 那么你能根据我刚说的这两个提示,重新设计一下系统吗?(难泵。。。)
最后说没关系,因为我前面的全答出来了,最后这个比较难短时间说不出来也正常,好像是说把inode删掉,然后自己构建inode,然后给我提示说下来可以看一下seaweedfs,是用golang实现的文件存储。
面后复盘:seaweedfs
SeaweedFS 是一个简单且高度可扩展的分布式文件系统,它旨在处理大量小文件,并提供高吞吐量的存储解决方案。它的设计哲学是通过尽可能简化数据存储的架构来实现高效的存储和访问速度,特别适合云环境和大数据场景。以下是 SeaweedFS 的一些关键特性和设计理念:
特点
- 高效存储小文件:SeaweedFS 特别优化了小文件的存储,通过将多个小文件打包成一个大的数据块来减少元数据的开销,从而提高存储效率。
- 自动数据复制和修复:它可以配置多副本存储,以提高数据的可靠性。当系统检测到副本数低于预设的水平时,会自动复制数据到其他节点,保证数据的持久性和可靠性。
- 易于扩展:SeaweedFS 支持从几台服务器到数千台服务器的无缝扩展,添加新节点很简单,不需要重新平衡数据,这对于动态扩展存储系统非常有用。
- 支持多种数据访问接口:支持 RESTful API、FUSE 客户端和 Hadoop 兼容的文件系统接口,这使得应用程序可以以多种方式访问存储在 SeaweedFS 中的数据。
- 高性能:SeaweedFS 通过减少磁盘 I/O 操作和网络开销,以及优化数据存储结构来提高性能。
架构组件
- Master Server:负责管理文件元数据(不存储文件数据),包括文件名、volume 信息和其他元数据。它将请求定向到正确的 Volume Server。
- Volume Server:实际存储文件数据的服务器。文件被打包成卷(volume),每个卷是一个或多个文件的集合。
- Filer:可选组件,提供更传统的文件系统接口,如目录和路径名。Filer 允许用户以文件系统的方式操作 SeaweedFS,而不是直接与 Volume Server 交互。
使用场景
SeaweedFS 适用于需要存储大量小文件的应用场景,如图片或视频分享服务、日志文件存储、对象存储等。它通过其高效的小文件处理和易于扩展的架构,为这些场景提供了一个高性能且成本有效的解决方案。
总之,SeaweedFS 是一个现代的分布式文件系统,特别适合云计算和大数据场景,它通过简化的架构设计和优化的性能实现了高效的数据存储和访问。
所以打包数据块和自定义Master Server去管理元数据,就是面试官想要提醒我的东西,但确实没看过想不到hhh。。。
- 作者:Kasyn
- 链接:https://kasyn.blog/article/intern-2024-Parametrix_ai
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章