深情的小鱼干在努力存钱 level
获赞
12
粉丝
7
关注
2
看过 TA
176
门头沟学院
2023
深度学习
IP属地:陕西
暂未填写个人简介
私信
关注
以下内容量比较大,不过自己复盘了一下,确实这几轮面试都是自己表现比较好的,问题也都回答了个7788,运气也算是集中到这几轮了岗位是字节data下面的数据平台的大数据XX工程师(防一下定位),拿到意向后努力回忆一下三轮面试的内容,也为我上一个帖子引下流,有知道数据平台情况的朋友可以和我同步一下相关信息。timeline:9.23 一面 (第二天约9.29二面)9.29 二面  (节后第一天约10.14三面)10.14 三面  (第二天约当天hr面)10.15 hr面10.24 意向-----------------------------------------------------------------------------------------------------------------------------一面(1h):开始面时基本没觉得自己最后能拿到意向,所以回答还有思考都比较松弛,和面试官聊了一下ai时代下数据仓库的核心竞争力其实还是分布式架构,高可用以及弹性扩缩容这些大数据时代涌现出来的技术,因为就目前来看数据库支持RAG实现向量检索,虽然有一定竞争力,但没有任何垄断性(甚至最近经常刷推文看到RAG已死什么的,不过就向量索引这个事来说确实没什么技术含量)具体问题:1.实习相关问题(实习做的主要是数据仓库湖仓一体相关的东西,比如读写外部服务器上的大数据格式文件这些东西)2.了解数据湖吗(hudi,iceberg这些)3.非结构化数据或者说多模态的数据用向量化存储,为什么能解决查询问题?4.设计一个向量数据库,需要哪些模块和核心能力?5.机器内存不够的情况下,如何取出几个大文件中出现频率最高的URL(搞底层的面试官真的很喜欢问内存不够,三面的时候问了同样的问题)6.刚才你有说到大根堆,实现一个大致的大根堆(写了堆化完面试官就说可以了,没太刁难)反问:业务和部门人数这些-----------------------------------------------------------------------------------------------------------------------------二面(1h)经典面试官迟到几分钟,三轮面试加上hr面,面试官全都迟到了,说实话有点无语,不过二面时候由于非常紧张所以语速比较快,面试官提醒了一下可以降低一下语速给我松了口气还挺好的。1.实习相关问题(同一面)2.简单描述一下parquet格式,parquet中不同的column配置的行数是一致的吗3.列存的优劣势(三面也问了)4.知道布隆过滤器吗5.实习项目最大的挑战6.使用的C++排查问题工具有哪些?最后问了几个八股:7.死锁和活锁的区别在于8.C++里有守护线程和非守护线程吗?9.了解exactly once语义吗?手撕:使用int数组实现一个记录1~n值是否存在的位图。-----------------------------------------------------------------------------------------------------------------------------三面(1h)问的最多也是压力最大的一面,虽然没有手撕也没有继续问实习项目相关的东西了,但感觉面试官想把我榨干一样疯狂提问领域内知识,而且中间还会一度比较大声的打断我,不耐烦的重复自己的问题和我的回答有什么问题,压力还是比较大的,还好提前准备了一些业内知识,问到的时候能回答个7788,不然不准备可能前几个问题就寄了。1.olap与oltp的区别2.列式存储的优缺点3.向量化执行具体是指什么,SIMD是什么,具体使用SIMD指令时是需要调用函数吗还是怎么使用(不同架构的芯片提供的具体SIMD指令有所不同,可以程序中内联汇编调用SIMD,但是在高级语言层面,可以调用编译器如GCC的内置封装了SIMD指令的函数编译时指定芯片架构即可,或者某些操作系统或者三方库也封装了一些常用的SIMD指令函数,比如memcpy和memchr等会在编译时使用SIMD进行优化)4.数据库中的变长字符串如何编码才方便进行比较和存储?5.你说字符串前记录字符长度,但是如果我想直接访问第100个字符不是要把前100个字符都过一遍,怎么优化?6.使用字符偏移表或者说字符指针也可以,但是这样频繁来回访问会导致较为严重的CPU缓存失效(比如说先访问一个偏移的指针,然后遍历一大段字符串后,再访问下一个偏移的指针,此时就会发生缓存失效),如何解决?7.实习时有没有遇到一些任务执行时内存不够的情况,不够的话数据库是怎么处理的?8.把上个问题简单一些,比如说现在要对一个比较大的数据进行排序,数据不够放到内存里怎么排?(经典内存不够,说的底层一些就是外部排序,说的系统一些就是map reduce,都可以,看自己对那个更熟悉)9.给你一个单机redis,如何构建一个分布式redis集群(不是问redis集群怎么拉起来,是怎么构建一个分布式架构),我这里说了现在主流数据仓库的mpp架构,虽然对redis可能不是最优的,但是应该面试官也比较了解这个架构,也能说的比redis集群构造的东西多一点(但其实自己也不知道redis集群具体怎么做的,只知道mpp)10.你的实际存储数据的从节点是只能故障时使用吗,还是平常能读写?也是最后问了几个八股:10.C++的构造函数和析构函数能不能设置为析构函数?11.解释一下什么叫协程(因为学过一些go,所以就用go的gmp模型解释了一下相关理解,这个应该挺加分,因为go的gmp确实是各个语言中协程里做的最好的)12.知道什么是连接池吗(面试官这里好像有什么急事,没问的很清楚,所以就没回答的很好)反问:1.业务以及该岗位目前与ai的结合2.这场面试自己哪点做的不够好,面试官说我很多东西最后说的都是对的,但是说之前没组织好语言,讲的不够清楚,需要再提升一下交流能力,想清楚再说。这个确实是我的通病,很害怕面试官等一会就觉得我不会就不给回答机会了,所以一有想法就开始流式吐字,导致逻辑不够清晰,大家也可以注意一下,面试官给的建议就是先说个大概,然后说自己需要措辞一下,一般都会等,说清楚说对最重要,不是说的快(但该说不说,可能有的面试官一直看你半天不回答不会不会觉得你在等ai回复)。-----------------------------------------------------------------------------------------------------------------------------hr面(20min)面试官感冒了,说话一直吸溜鼻子,所以说问了几个问题就结束了,估计hr也知道决定权不在这一面上,所以没有很多刁难问题,感觉比较重点的问题就这个几个:1.之前看你面过一轮数据库的岗位,你有复盘为什么上一轮没通过吗(说实话我一点都不知道为啥挂我,问了几个冷门的linux知识没回答上来,然后手撕个反转链表后一周给我挂了,但是我回复还是结合着岗位匹配度不同和面试官关心得具体知识不同做了回答,简单来说就是这个岗位更适合我,之前那个没那么匹配,之前的面试官关心得点也和我自身得核心能力不太符合,大概这样)2.如何协作,遇到过什么困难,遇到压力如何应对(全是万金油问题,我就万金油回答,挑一些绝对不会出错得打法就好)3.手边offer反问:部门氛围,ai相关,啥时候出结果这些
查看28道真题和解析
0 点赞 评论 收藏
分享
09-05 17:34
已编辑
门头沟学院 深度学习
面试官很和善了,问的问题也都是简历上自己写的,还是自己准备的不够充分,这场面试让我深刻认识到自己的拉跨和面试真得把简历上得东西特别熟悉(连简历上自己写的都没回答好,纯菜jb了 🥲)面试基本问的是项目,一点实习没问(估计对实习干什么不太了解)1. 实现内存池的三级缓存分别是哪三级,为什么要设计成三级,有何作用?2. 中央缓存有没有必要做成无锁的?3. 这个中央缓存在NUMA架构下可能存在什么问题(其实就是想问tcmalloc的cpu-local的实现,怎么针对numa做的具体优化,但是这部分没看过,遂寄)4. 问另外一个RAG的项目,介绍一下项目架构(网上买的项目,其实自己不够熟悉),介绍完之后,面试官问为什么四个模块要作为独立进程运行,为什么不设计成多线程的呢(我说其实项目就是一个单进程的,没有多进程),然后问改成多进程会带来什么好处,不是多进程为什么要用消息队列,你对消息队列熟悉吗(直接给我问懵了,对这个项目太不熟悉了)5. RAG里构建的知识库是自己爬的数据吗,文本是怎么分割然后转换为向量的,检索的时候具体是怎么检索的。6. 简历中的一段话是怎么实现的(简历是让ai写的,这段话实际上项目里没有,拉跨完了)7. 手撕:c++实现c风格的safe_strcpy,将源字符串src复制到目标字符串dest,不能使用cpp标准库里的函数实现,纯靠基本类型和操作实现,且需要重点考虑两个字符串有内存重叠的情况,这道题其实真的很简单,但是我对c风格的char*操作不够熟悉,导致硬是一点没写出来,遂寄 😭这里给大家提示两个关键的点,可以试着自己写一下,然后问问ai对不对。(1)c风格的字符串是char*,是地址连续的若干char组成的,每次++就能取到下一个字符,且字符串会以’\0’结尾(2) 不用考虑拷贝后src是什么,只要dest是src拷贝前的字符串就好,所以要考虑dest和src内存重叠时dest在src前还是后(因为字符串地址是连续的,所以直接可以判断dest和src的地址大小与长度,就可以知道是不是重叠,重叠的话在前还是在后了)8. 反问:部门是快手的搜推,40来号人,作息比较自由。9. 我让面试官给我一个面试和简历建议,面试官说对RAG这个项目不够熟悉,这个项目比较新,可能更容易被问。果然最短板的被最狠狠的记住了,其实中间还有一些其他小问题没回答上来,但还是自己感觉回答最不好的,面试官也感觉最不好,面试也是木板效应,建议大家还是好好深挖简历,把每个点都熟悉(至少自己写简历上的得能说的很好,额外发散问的就看自身有没有相关经历和运气回答对了,那个就不好把握了)补充:又想起来几个问题。1. 客户端向服务端分别发送三个TCP包和三个UDP包(不考虑建立连接,假设连接已经有了),服务端分别会收到几个包?这个问题实际上是想问TCP和UDP的可靠和不可靠,答案是TCP理论上服务端会收到3个,UDP是0-3个(可能会丢),但是自己考虑到TCP的字节流,粘包上去了,回答的是TCP可能粘包,是1-3个,UDP是3个,拉完了2. 客户端向服务端发送读取文件的请求,服务端进行一次磁盘IO然后返回数据,要调用哪些系统调用(假设连接已经建立,如果是两个的话是哪两个),两个的话最起码是read和write,之后又接着问,read做几次拷贝,write做几次拷贝,如果使用sendfile这个零拷贝的系统调用的话实际上有几次拷贝?
查看15道真题和解析
0 点赞 评论 收藏
分享
岗位是:KVcache/高性能缓存开发上来先让做自我介绍(这里切出来看自己写好的自我介绍了),自我介绍完后因为听面试官声音有点小就又切出来提音量了,然后面试官就恼火了,说别一直切屏,他那边一直弹提醒(赛码网面试不写代码的时候切屏也会提醒,注意一下),之后就是面试官自我介绍,开始八股:1. 智能指针有哪些以及适用场景2. c++中有哪些常用的锁,使用场景是什么(这块问的很多,但是答得不够流利,得练习)3. 自旋锁和排他锁有什么区别4. 如何排查进程中cpu最繁忙的api或者说函数(这里没整过不太会,说的gdb写个脚本查看,太夸张了,下来查了一下大概是`top`+`perf`+`pstack`, top(或者htop可以更直观的查看cpu各个核心的使用率以及进程的资源占用,top -H -p PID也可以直接查看进程中的线程CPU占用)查看高消耗CPU的进程,然后执行pred top -p PID即会显示进程中系统调用和模块(可执行命令,链接库等内容)所占用CPU的百分比,然后pstack -TID(或PID)打印线程的调用栈(PID就是打印所有线程的调用栈),就可以排查高占用的进程以及函数。可以举一反三一下:内存,磁盘等IO占用率高如何排查?5. STL标准库中哪些容器是用树实现的,哪些容器是用哈希表实现的。6. 项目里的thread_local高并发内存池,三级缓存是怎么做的,使用什么数据结构管理这些缓存页以及分割为大小不一的对象的。7. 手撕:hashmap,要求使用开放地址法里的线性探测法实现,实现put和get函数(这个线性探测法第一次写,直接写成index一直++寻找空的了,面试官提醒要考虑最后找不到回来从头找的情况,因为可能hash算出来的key直接在最后,直接index++然后认为hash桶不足然后rehash的话可能会频繁发生rehash)8. 反问:业务,是小红书哪儿做分布式高性能缓存的团队,还是需求挺多的,然后现在一个小组大概8个人主要做缓存这一块,处理一些什么什么的具体问题。这个小红书的面试官真的是雷厉风行,大开大合的那种,30min急速八股然后手撕结束,一点实习没问,恼火恼火的也快,然后问问题的时候也会回答的很细很多,经常他回答的时候我都插不上话,如果不挂我的话,那我觉得他性格还不错,挂我我就要怪他调个音量就恼火我了。
查看8道真题和解析
0 点赞 评论 收藏
分享
发面经攒人品~上来先问了下为什么不做算法(做个雷达深度学习和大模型属实是差太远),研究方向是什么,然后直接八股:1. 智能指针用过哪些,各自适合于什么场景2. 虚函数是怎么实现运行时多态的,虚函数查表的开销有多大(静态多态和运行时多态那个开销更大)?查表的时间复杂度是 O(1),因为虚函数的偏移地址在编译期间就确定了,调用的时候直接可以用,但是后面面试官又问从 cpu 指令角度看还有什么开销,问了 ai 大概有这些开销(相比于普通函数调用的开销):首先我们说下虚函数在底层角度会多执行三步:获取 vptr->计算函数地址(偏移量是编译器就定了无所谓,但需要访问虚函数表 )->调用函数- 影响最大的是如果 vptr 或vtable 不在 cpu 高速缓存中的话,会触发缓存未命中(因为前两步大致的汇编代码是 `mov rax, [rdi] ; 假设rdi是对象地址,rax = vptr` 与 `mov rbx, [rax + 0x10] ;` 需要访问内存,就会发生缓存未命中,但是普通函数或者静态多态的地址在编译器就确定了,可以直接使用固定地址调用,就无需从内存中读取数据),这会延长大约 50+时钟周期(普通函数调用就 1~3 个时钟周期)- 调用函数时,因为 call 的是间接地址(即虚函数表中存储的内存地址,存在寄存器中被调用),会导致 CPU 指令预取失效,流水线需要重新同步,产生 3~10 个的时钟周期(所以即便虚函数表在缓存中,虚函数调用也普遍比普通函数或静态多态函数慢这么多)3. 移动语义简单说一下(这里移动语义答的不是很好,一慌就和 ai 发生幻觉了一样乱吐词,可以后面多了解一下具体应用上的移动语义),问知不知道 move 的底层实现(说到强转,又问有哪些转换)4. Cpp 中有哪些锁(这部分答得不是很好,可以系统梳理一下),粒度最小的锁是哪个(基于 atomic 的原子操作是粒度最小的,精确到单个内存位置),自旋锁什么场景使用(临界区执行时间很短,自旋等待的开销小于线程阻塞/唤醒的开销,以及不希望线程阻塞的实时系统)5. 问了解哪些常用的数据结构。6. 操作系统的虚拟内存说一下,一个页大小大概是多大,还有哪些页大小,页大了或者小了有什么优缺点(可以了解一下 THP 透明大页的概念)7. 场景题:微博这种搜索平台如何设计一个实时统计一定时间段(比如 5min)内 topK 热点关键词的系统,用那些数据结构或者软件可以做到?8. 手撕 LRU9. 反问环节:主要做的是快手的搜索架构,还做一些AI搜索,与快手视频的RAG
查看13道真题和解析
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务