Funplus 服务端开发实习 面经

官网投了 boss上也问了,hr boss里直接和我约面 

一面:北京时间 2025年2月28,
15:00

自我介绍:略
项目:略

问:项目提到了redis zset,说说底层
跳表,拿平衡树,线段树做了对比,两点优势:合适范围存取,插入后续指针处理相对较快

问:项目接口速率优化怎么做的:
多级缓存(localcache+redis)+golang singleflight 合并同key请求+异步更新redis

问:如果要你自己实现一个简单缓存怎么做:
实际上就是一个并发安全键值对,扯sync.map,读写分离
不过也要分情况,读多写少可以用,写多得另外考虑,以为修改缓存的性能消耗可能拖后腿

问:怎么考虑?
和我之前提的类似,异步改缓存,根本还是并发安全+最终一致性+读写分离

问:缓存淘汰应该有哪些策略?
LRU,基本上就是队列,优化下可以弄上堆,比如优先队列来排序

问:堆是什么
(八股忘了打错了)类似二叉平衡树(实际上是二叉堆),说到底就是空间换时间,设定旋转规则保证遍历顺序,树状结构压缩遍历深度,然后在logn的时间内返回

问:golang熟悉把,讲讲gc
三色标记:从栈里面遍历出去遍历不到就删。还有混合写屏障,用于缩短stw时间,具体不记得了

问:声明变量什么时候在栈里什么时候再堆里
阿巴阿巴(脑子抽了有点乱答语无伦次)
反正动态删改的全局变量一定是再堆里面,函数内部调用的生命周期都在函数内的一定在栈上

问:(引导)那我make出来的map那些呢
make底层是动态函数分配一定是在栈上的

问:(继续引导)比如说我创建一个结构体,然后把直接把这个结构体返回,那这个结构体它是在堆还是栈?
哪里的结构体,函数里面吗?

问:对的
函数里的局部变量就是在里面的。因为它整个生命周期都和这个函数一样,然后函数的话也是栈上的。

问:如果传递到函数外呢
那就逃逸掉了(想当然了)

问:那如果传递的不是指针了是结构体呢?
(恍然大悟,谢谢面试官)哦哦哦赋值不会,引用传递会逃逸。

问:git会用把, merge和rebase有什么区别吗
忘了,一般都是merge,没遇到过rebase的场景

问:用过C++吧,主要写什么呢
写算法题,用stl有些了解

问:那你讲讲stl组件
Container,Adapter,Algorithm,Iterator,Function,Allocator

问:典型的Adapter有哪些
stack,queue,priority queue

问:list底层和和vector有什么不一样,
链表和数组

问:讲讲dfs和bfs
本质就是栈和队列,balabala讲了不少,面试官说ok

问:要你实现一个定时器管理模块,不使用time包之类的,你要怎么做
堆实现,或者直接调用priority queue,按照执行时间排序,每次轮询堆顶,到时间了就执行,需要高并发可以开多个堆,并不影响

问:如果我要删呢
类似redis懒删除,弄个表存要删的id,遍历到要执行对比下是直接丢掉就行

问:如果不要懒删除要直接删呢
那就不能用priority queue,要到堆里面直接查,查到了删掉(没救了,堆不能快速查找,和平衡树搞混了,答错了)

反问
表现怎么样: 还可以,相对起来基础算好的
日常实习还是暑期:日常
组里做什么的:slg
技术栈:Golang+redis+mongo

体验很好,面试官有水平的,会引导,等后续消息了

#面经##后端##golang##redis##funplus##实习##牛客AI配图神器#
全部评论
补充:bg双非一本海外硕,出国之前有一年小厂经验
点赞 回复 分享
发布于 02-28 19:56 英国
没有手撕吗
点赞 回复 分享
发布于 昨天 00:29 广东

相关推荐

评论
1
8
分享

创作者周榜

更多
牛客网
牛客企业服务