字节跳动推荐系统架构实习面经(一,二,HR面)已OC

3.04投递,3.06通过简历评估,3.10一面
一面:
请做个自我介绍。
针对我介绍的内容进行项目拷打,面试官着重往多线程,数据和网络方向询问。(我是一个游戏项目,技能系统与数值链路。对技能效果的并发执行,数据驱动模块的设计,以及如何转网络等方面进行浅显追问)
你说你现在主要方向是C++,可我看你游戏项目都是C#
C++学了哪些内容(我跟面试官说最近开始接触C++,但已经较为系统的过了一遍,包含内存结构,常见STL,编译等基础部分)
介绍一下C++程序的内存结构
你刚刚提到.bss区,那么在C++中static都有哪些作用
你刚刚提到C#中内存管理的方式与C++不一致,介绍一下C#的管理方式
你刚刚提到内存泄漏,C++中怎么避免内存泄漏,哪些问题可能导致内存泄漏
异常抛出怎么导致内存泄漏
讲解下C#的GC
讲解下C++的智能指针

网络部分:
讲解下网络七层协议(我按照五层协议讲解)
传输层常见协议有哪些
TCP和UDP的区别
TCP如何进行拥塞控制(我答得比较浅显,回答了TCP头中有对应字段,相互通讯的时候可以通过字段来控制。以及传输网络中路由器也能进行节点提醒和调控)
做过网络相关项目吗
你说网络应用层中需要对数据体进行约定?你说的约定是什么?为什么要约定?(我这方面了解不是很深,这个“约定”是我总结出来的,对应知识点应该没这个东西,不然面试官不会这样问。我回答我说的约定是指,如果使用TCP方式进行传输,那么传输层接收端收到的仅仅是一串字节流,没有对应的意义,这个时候需要按照人为的约定的数据体或者结构体将对应字节流转换为对应实例等)

多线程部分:
当时还没深入了解,面试官看我不是很熟没有追问太深

切换线程的负担主要来自哪里?
你说你在项目中使用了数据驱动的模式,这个技能数据的大小一般是多少?
你是怎么读取数据的?放在什么位置,什么时间进行读取?
如果数据量很大,你会怎么处理?(这里一直在把我往异步读取数据的方向引,但是我项目数据量很小,没做异步,这里也只能硬着头皮说我是用异步设计的了)
你是怎么设计的?
介绍一下协程(我当时只接触了unity协程,这玩意和正常协程压根不是一个东西,它是单线程,本质是在一个线程中将代码换个位置执行,估计不是面试官想要的)
协程和进程,线程的差别在哪

手撕。二叉树最大层宽。
这里我把层宽概念理解错了,我以为一层的节点数量代表层宽,面试官说层宽指该层第一个节点到最后一个中间的距离,哪怕中间有空位也算进去。

反问环节。

4天后收到电话告诉我一面通过

二面:
自我介绍
项目拷打(主体方向与一面相同,追问比较少)

手撕:
假设有一个计算机集群,设计一个函数返回ip,给你一个对应ip表和其权重,要求输出的ip比符合权重比。

当初我没了解集群算法,mapreduce,以为是常规算法题,然后之前刚刚好回答过操作系统对应的调度算法,我就跟面试官说按照CFS的调度思路来做,巴拉巴拉说一堆。其实我最开始想的是随机数,但我觉得这样可能会导致访问数量较小时ip比与权重比相差可能会很大。开始写的时候面试官告诉我思路错了,然后又搞了半天。反正最后也是没想到是集群算法,直到半小时后面试官才告诉我这算法要在所有机子上运行而不是单一机子上运行。然后我才理解压根就不是算法题而是情景题,也没有那么严格的输出要求,最后就说用随机数+前缀和返回值。

LRU用了哪些数据结构(感觉面试官最开始想让我设计对应算法的,但是前面耽误太久了就让我讲一下。)我当初看第一题卡了太久,有点紧张脑子一抽给LRU忘了,只记得是一个缓存策略。然后回答完第三题后面试官一步步引导我把对应数据结构答出来了

第三题是一个简单的图算法,课程表问题的变种,面试官让我讲了下思路就过了。

简单八股:
介绍下智能指针
还有一些忘了,反正挺简单的问题

反问

四天后收到HR消息告诉我过了。二面面完感觉要挂了,当时觉得腾讯一面面挺好什么问题都回答出来了,肯定能过,结果腾讯那边挂了字节过了。。。。。。我项目全是游戏项目,结果游戏岗没过。。。。。。

HR面
自我介绍
我看你项目全是游戏项目,为什么投字节推荐算法架构
还有哪些流程在进行
都是什么岗位
为什么不投这些公司的非游戏岗
讲一下你对推荐系统的了解
如果其他流程都过了,你会偏向哪个?
能尽快接受offer吗
一周能实习几天
能实习几个月
然后HR给我介绍了下我的mentor和对应的业务(这里意识到应该是稳了)

反问环节

当天下午2点HR面,15分钟面完(HR小姐姐好漂亮),晚上5点收到电话告知我通过终面,能否接受offer,然后说offer还在流程处理,过几天才能收到。两天后收到offer
全部评论
为什么二面结果那么久才出来?
点赞 回复 分享
发布于 04-08 16:05 广东
游戏项目也能冲字节,这面经太有参考价值了!
点赞 回复 分享
发布于 04-07 15:00 天津
字节 OC 太牛了!三面全过,实习 offer 稳了!
点赞 回复 分享
发布于 04-07 15:00 江西
大厂HR都好漂亮
点赞 回复 分享
发布于 04-06 20:47 北京

相关推荐

3.6 一面自我介绍一、 项目相关1. 大概介绍一下你整个系统架构的链路,或者说你的系统整体链路是长什么样子?2. 你的库存信息怎么保留?存不存在超卖的现象?3. 你 Redis 里的信息是怎么跟 MySQL 做同步的?4. 初始结果不一致怎么办?(存不存在 Redis 初始结果跟 MySQL 不一致的问题)5. 你觉得这条链路在真实的生产环境下能用吗?还有哪些不完备的点?6. 如果消费队列扣减失败或订单写入 MySQL 失败,导致数据不一致,你有什么自动化机制(校验+补偿)来解决?7. 知识库构建的文档和语义信息数据来源是哪里?是自己整理的吗?8. 通过什么去做分词和检索?9. 向量数据库跟正常数据库的区别是什么?它怎么加速相似向量检索?10. 是否了解 HNSW 算法的具体实现?二、 八股1. 缓存击穿、穿透、雪崩这三个概念上的区别是什么?3. 使用 SETNX 指令跟执行 Lua 脚本的差异是什么?4. 排他锁(X锁)跟共享锁(S锁)的区别是什么?5. Java 线程模型如何保证线程间的公平性6. CAS是做什么的?它有什么问题?7. 数据库有哪些隔离级别?8. 如何解决“幻读”问题?InnoDB 引擎下是怎么处理的?9. 聚簇索引和非聚簇索引的区别是什么?10. 什么情况下不需要“回表”查询11. TCP 是通过哪些机制保证可靠传输的?12. 如何解决网络拥塞问题?(拥塞控制、慢启动、快重传等机制)13. 进程和线程在内存结构上有哪些区别和关系?14. 同步 I/O 和异步 I/O 的概念怎么理解?15. 异步 I/O 是在用户态执行还是系统态(内核)执行?谁来负责通知结果?16. Linux 的软链接和硬链接有什么区别?删除原始文件后哪种还能正常访问?17. Java 的 HashMap 是怎么解决冲突的18. 实现“数组+链表”时,为什么不能直接用 ArrayList 或 LinkedList 替换掉那个数组?手撕之字形(Zigzag)打印二叉树。3.10 二面一、项目1. 请介绍你在项目过程中印象最深、最具技术挑战或复杂度的点,以及你是如何解决的。2. 在秒杀场景下,如何保证“库存扣减”与“一人一单”逻辑的原子性?3. 为什么 Lua 脚本能做到分布式一致性?它是如何把多条命令聚合为原子操作的?4. Lua 脚本是如何编排这些多条 Redis 命令的?它是感知多个用户的命令还是单用户的顺序命令?5. 限流算法6. 除了限流,你是否了解“熔断”机制?它与限流的区别是什么?在下游服务扛不住时该如何处理?7. 你构建的知识库文档量级是多少?8. 如何从原始文档构建出向量检索索引库?索引库的底层数据结构是什么样的?9. 你了解 HNSW 和 IVF这两种索引算法的区别吗?它们分别适用于什么场景?手撕1. 无序数组频率统计 时间复杂度 O(n),空间复杂度 O(1)(允许修改原数组)2. 旋转有序数组找最小值3. 有 10 个 100G 的日志文件,存储用户的搜索 Query(存在重复),找出访问频次最高的 100 个 Query。单机内存仅 10G,可以使用多台机器。 口述思路3.11 hr面半小时后oc,晚上下正式offer明天就要入职了,希望一切顺利
点赞 评论 收藏
分享
部门是番茄小说,base北京,可能部门比较缺人,流程飞快,都是当天反馈面试结果。其实有很多问题我觉得自己答得也不是很好,三面的最后一个手撕也没撕出来(刷题太少了),但还是让我通过了3.31 一面,问的不是很常规,记录一下比较有特点的问题吧- 常规项目拷打- js 和 c、c++、java 这些语言的区别,哪个快(运行速度、冷启动速度)- html中img标签请求资源的过程- 双 token 机制 refresh_token 不也会泄漏吗- http3.0 使用 udp 是怎么保证可靠性的- 为什么说 react 是一个高性能的框架- react fiber的调度问题(感觉面试官描述的有点奇怪,我对这一块也不熟悉…)- 如果让你自己实现一个markdown实时渲染的编辑器你会怎么做手撕:- 扁平数组转转换为嵌套结构的数组- 抽奖,写一个函数,返回一个函数,每次调用返回的函数根据权重随机返回一个奖品,并且该奖品的权重-1- 实现一个带并发限制的异步调度器,保证同时运行的任务最多有两个4.02 二面,快问快答,有些问题我中间稍微停顿一下,面试官就说可以了- 常规拷打,拓展了很多场景,能感受到面试官的技术栈很广- seo 怎么做的,如何评估 seo- seo 在 ai 时代有哪些变革,引出了 geo,geo 是怎么做的,大模型投毒的原理- rag 怎么处理用户的 query,如何处理文档中的敏感数据- 线程和进程的区别,进程之间如何通信- 浏览器的进程模型- vue2 和 vue3 的区别- vue 的 diff 算法- 修改 this 的方法- 箭头函数的 this- 使用了闭包页面变得很卡如何排查- ts 怎么删除接口的某个属性- 如何理解ts中的范型,有哪些使用场景- 怎么判断链表是否有环,快慢指针的原理是什么- http 和 https 的区别- TLS 加密是对称加密还是非对称加密- 证书是干什么的,证书存在哪,证书是怎么颁发的- 什么是 hash 碰撞,怎么解决- 什么是 bfc,怎么触发- z-index设置为无限大还是被覆盖了怎么办手撕:- 拼手气红包,m金额分给n个人,扩展:每个人分到的金额尽可能平均- 手写 classnames 函数4.03 三面,面试官问的比较随意,说该问的都问过了...- 项目简单拷问- 为什么学前端- 死锁怎么解决,怎么预防死锁- px、em、rem的区别- 介绍一下set、map、weakMap,有哪些应用场景手撕:- lc 17. 电话号码的字母组合- 有关 this 的输出判断- lc 322. 零钱兑换4.03 面完十分钟后直接HR面,可能因为快放假了...- 你认为自己为什么能考上北航- 人生中做过哪些重要决定- 职业规划- 参与学校实验室的情况,遇到冲突怎么解决的- 如何看待ai取代程序员的言论- 自己的优缺点- 同学老师怎么评价你的- 口头offer4.04 正式offer,直接接受了,4.08入职,毕竟距离学校就3公里
点赞 评论 收藏
分享
评论
5
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务