快手C++二面凉经
面试官很和善了,问的问题也都是简历上自己写的,还是自己准备的不够充分,这场面试让我深刻认识到自己的拉跨和面试真得把简历上得东西特别熟悉(连简历上自己写的都没回答好,纯菜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这个零拷贝的系统调用的话实际上有几次拷贝?
面试基本问的是项目,一点实习没问(估计对实习干什么不太了解)
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这个零拷贝的系统调用的话实际上有几次拷贝?
全部评论
佬,这个多久之后给的结果呀


大佬,快手的搜推是做预估这个方向么
已经很强了佬
相关推荐
点赞 评论 收藏
分享
查看16道真题和解析