字节跳动内推字节跳动面经

参考优秀牛友的经验,字节后端开发面经一面

去年的存货

面试公司:字节【基架部门】

面试岗位:后端开发

面试问题:

1.实习项目

2.有哪些方案可以避免流量高峰造成的问题

- 消息队列削峰填谷

- 缓存预热

- 负载均衡,分散请求

- 限流和降级

3.了解常用的限流或者降级的算法嘛?描述一下原理?

固定窗口计数器:按照时间段划分窗口,有一次请求就+1,最为简单的算法,但是限流不够平滑且无法应对突然激增的流量。滑动窗口计数器:通过将窗口再细分,并且按照时间“滑动”来解决突破限制的问题,但是时间区间的精度越高,算法所需的空间容量就越大。漏桶:请求类似水滴,先放到桶里,服务的提供方则按照固定的速率从桶里面取出请求并执行。缺陷也很明显,当短时间内有大量的突发请求时,即便此时服务器没有任何负载,每个请求也都得在队列中等待一段时间才能被响应。令牌桶:往桶里面发放令牌,每个请求过来之后拿走一个令牌,然后只处理有令牌的请求。令牌桶满了则多余的令牌会直接丢弃。令牌桶算法既能够将所有的请求平均分布到时间区间内,又能接受服务器能够承受范围内的突发请求,因此是目前使用较为广泛的一种限流算法。

4.滑动窗口相对固定窗口算法解决了什么问题

相比于固定窗口算法,滑动窗口计数器算法可以应对突然激增的流量。

5.【手撕】字符串的z型变换

6.操作系统,进程和线程的区别

进程是操作系统资源分配的基本单位,线程是cpu调度的基本单位。进程是一个程序的动态运行实例,而线程是进程当中的一条执行流程。进程包含多个线程,线程从属于一个进程;各进程间相互独立,但线程不一定,同一个进程的多个线程可能相互影响。进程切换的开销显著高于线程切换。

7.threadlocal的原理

就是线程本地变量,如果创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了线程安全问题。ThreadLocal的底层数据建构就是ThreadLocalMap,它的key就是ThreadLocal的引用,值就是Object对象。

8.用户的请求进来,用户的信息怎样在一个请求内传递?

在web应用程序中,ThreadLocal可以用来存储当前请求的上下文信息,使得不同请求之间相互独立

9.epoll?

当调用epoll_create方法时,Linux内核会创建一个eventpoll结构体,用于存放通过epoll_ctl方法向epoll对象中添加进来的事件。这些事件都会挂载在红黑树中,如此,重复添加的事件就可以通过红黑树而高效的识别出来。而所有添加到epoll中的事件都会与设备(网卡)驱动程序建立回调关系,也就是说,当相应的事件发生时会调用这个回调方法,它会将发生的事件添加到rdlist双链表中。当调用epoll_wait检查是否有事件发生时,只需要检查eventpoll对象中的rdlist双链表中是否有epitem元素即可。如果rdlist不为空,则把发生的事件复制到用户态,同时将事件数量返回给用户。

10.项目的代码结构是怎样的

微服务架构,ddd

11.流量是rpc进来还是http进来

12.介绍一下rpc和http在使用场景上的区别

rpc通常使用在分布式系统、跨语言调用、高性能服务中。http通常使用在网页浏览、RESTful API、文件下载等

13.用rpc代替http会有什么问题???

14.http底层连接可以基于连接池嘛

15.了解golang嘛?了解golang的协程吗

16.描述一下动态规划的核心思想?什么样的问题可以用它去解决?

17.排序算法有哪些?挑选排序算法的时候要考量哪些?

考量:时间复杂度、空间复杂度、稳定性、实现难度、数据规模和特性

18.快排是稳定排序的算法嘛?哪些算法是稳定排序的?

不是。稳定排序的算法:冒泡排序、插入排序和归并排序

19.红黑树相对于普通的树有哪些特征?通常用来解决什么问题?

20.mysql的事务隔离级别?

21.读已提交和可重复读的底层区别?

22.mysql有哪些日志?

23.了解redolog吗?

24.redolog的刷盘机制是怎样的?

25.kafka和rocketmq在业务中使用场景上有什么区别?

26.git中版本管理的模型是什么?

Git 中的版本管理模型是围绕快照(snapshot)的概念构建的。每次提交(commit)都会记录一个当前所有文件的快照。快照包含了当时整个目录树的状态,包括文件内容和目录结构。

27.git的常见操作

28.git merge和rebase的区别

`git merge` 合并后的历史记录保留了所有分支的历史,呈现出分叉后再合并的结构。

`git rebase` 会将当前分支的提交按顺序应用到另一个分支的顶端,这相当于在另一个分支的基础上重新应用当前分支的更改。

29.反问

加入改变世界的科技力量

(25届春招+日常实习)

[关于我们]

字节跳动是全球领先的科技公司,旗下产品覆盖短视频、社交、教育、企业服务等领域,拥有抖音、TikTok、飞书、剪映等数十款国民级应用。

●全球用户超20亿,业务覆盖150+国家与地区

●福布斯全球最具创新力企业TOP 3

●2024年研发投入超800亿元,持续探索AI、XR、云计算等前沿技术

[招聘岗位]

技术类:算法工程师、前端/后端开发、客户端开发、大数据工程师、AI研究员

产品类:产品经理、游戏策划、用户增长

设计类:交互设计师、视觉设计师、多媒体创作

市场与运营:国际化运营、内容生态运营、商业化策略

职能类:人力资源、财务、法务

更多岗位持续开放中,覆盖北京、上海、深圳、杭州、新加坡、伦敦等全球办公地

[内推链接]

https://job.toutiao.com/campus/m/position?external_referral_code=NC7G6RU

内推码:NC7G6RU(链接为内推码转化,如从官网投递可复制内推码使用)

面经助力贴合集:************************

加入我们,重新定义数字时代!

全部评论

相关推荐

自我介绍请说下什么是单例模式(没啥印象,感觉和快速原型混起来了,答的比较含糊)说下mvc架构(就简单介绍了下模型视图控制器以及作用)可以说下http的常见状态码吗(各类说了与什么有关以及几个常见的)可以说下acid吗(介绍那四个特性)可以介绍下进程与线程吗(简单说了下进程是资源分配的基本单位,线程是调度的基本单位,以及特点)可以介绍下多进程与多线程优缺点吗(简单说了下多线程并发度更高,但是开销会大一些等)项目:介绍了分布式博客系统你项目的难点是什么(讲了一开始处理跨域请求,后续的服务线上容器化)你的项目一个方法用了update语句,它这样写你觉得有什么问题(说不出来)你的项目submitlikes方法用到了MySQL事务吗(没有,说了当时遇到问题,后端没法和MySQL同时优化,只能通过嵌入sql)算法:20分钟用On实现了找出只含有abc字母主串中含abc子串个数。十五分钟我用双指针写出来了,但有个细节没处理好,有的case过不了跟面试官说了思路,就是两个指针找到第一个含abc最短子串,然后加上后续字母数,同时在保持abc均有情况下,前指针向后挪,移动一位加一个,以此迭代反问:你觉得我有什么不匹配该岗位地方吗(面试官说本次面试的事情保密)你建议我学校不算特别强的情况下,走golang栈去校招吗(本身语言不是限制的,主要是你对基础知识的理解,学语言也就半个月的事儿。当然有的公司可能会问你特定语言的)你提到像现在高校很多教授不具备工业化开发经验,课程也是很落后的,那我们校招生只能靠自己摸石头过河,怎么办呢(计算机专业迭代本身非常快,特别需要有极强的自学能力,你比较建议能做的,就是找已经工作的学长学姐,咨询下,然后针对岗位要求针对性学习)像我这样考完研过年后才开始准备校招了,春招还有希望进大厂吗(现在环境非常差,进字节本身就是一件非常难得事情,春招三四月份其实现在就已经开始了,时间挺极限的,并且面试本来就是一件很看缘分的事儿,比如刚好这道题你会背,你跟面试官聊得来。你在提高自学能力到比较高的情况下,进字节这种大厂是有可能的。)我本身都在学校,那到底怎么做,有什么才能让我更好通过面试呢(很多校招进来的学生,做的项目也都是查表,也不如你做项目,但是他们有一个baseline,并且有吸引到面试官的地方。所以你在baseline的地方一定不能跨,并且要找自己的闪光点)可以详细说下baseline吗(比如说,面试问到的知识点都要答的好,现在有的教材也是错的。同时,算法题也要能写出来。所以在baseline具备的同时也需要具备一定的计算机知识的天赋和沉淀。这些才是最重要的)#牛客AI配图神器#
查看15道真题和解析
点赞 评论 收藏
分享
官网投了 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配图神器#
查看21道真题和解析
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客企业服务