24届字节后端开发实习面筋
坐标某牛马院校,有幸亲历今年死亡春招季。。因受朋友鼓动,加之深感自己在学校所能接触到的实际生产场景有限,不太能学到很多东西,缺乏有效的实践,所以想到外面尽早接触工业界的实际生产场景,以此来锻炼自己的能力,顺带丰富一下履历。准备了两个多月过后,我投出了自己人生中第一份字节跳动的简历。经过二战过后(二战的原因一言难尽。。),最终非常幸运的上岸了,非常感谢字节,能在如此困难的春招大环境下还能给我一份实习的机会。
以下为面筋内容
岗位:飞书文档,Base:广州,一面+二面+业务调整换部门
tips:飞书文档的全流程是两轮技术面+一轮hr面
一面
主要以项目为主,八股为点缀,细节考察略多
项目
不同客户端之间是如何通信的
Django channel和websocket
redis对Django channel的作用(背文档)
为什么要使用websocket,websocket的特性,和传统http通信的区别 (八股)
匹配系统的实现
结合thrift框架,多线程模型,匹配池,参数设计,函数等的具体实现
Thrift框架的各类server、协议如何选用,最终方案的理由 (结合项目做横向对比)
如果匹配系统挂了会有什么后果
玩家一直停留在等待界面,排不到人
如果项目挂了怎么办,有没有容灾,如何排查错误
(1)明确故障:什么故障,出现在什么地方,可不可以场景复现
(2)排查原因,分段排查:客户端排查(其他客户端有没有这个问题),服务端排查(看进程指标是否正常),中间链路排查(看看有没有错误调用),打日志
(3)根据原因进行修改
(4)重新启动
以上仅针对个人开发的小玩具而言,其实对于正常的业务而言,是应该需要容灾,包含:故障发生,故障感知,自动切换,服务恢复多个过程,由于细节太多,不赘述。
用户登录模块的登录是怎么实现的
Django自带的Login模块
Django的login模块是基于什么实现的
当时没有了解Django新版本有没有做改动,但是以前看过一篇博客讲的是古早时期Django的login模块是基于cookie和session的,所以说了cookie和session
Cookie和session的区别(八股)
介绍项目中基于Oauth2的第三方授权实现
详细描述每一个过程发送的数据、数据的发送方和接收方,参数的来源(比如有些url参数是自己对外提供的,有些如应用id,应用密码等参数是应用所注册的第三方平台所提供的)
Token的特点 (八股)
如果第三方平台跑路了,原有基于第三方授权注册的用户怎么办
在用户注册时强制填多几个注册信息,避免其中一种渠道挂了后用户就没办法再登陆了
闲聊
部门培养计划
针对该岗位的学习建议
二面
主要还是以情景题为主,八股不少但耗时不长,大部分时间还是面试官在引导如何解决情景题
情景
如何对项目进行优化
服务层调优:
数据库(做缓存,加索引,减少访问次数等)
服务端代码逻辑优化(算法选择、利用测试工具找瓶颈,依次优化、选择更合适的函数,协议等)
服务链路间的调用(减少调用次数,避免重复调用,减少冗余数据的传输和处理);
基本库调优(涉及sdk涉及,不赘述)
语言层调优(涉及函数内联,逃逸分析等内容,不赘述)
其他:
借助nginx,做动静分离,数据压缩,负载均衡,调整worker进程的数量控制并发量
根据场景(以读多写少为例),部署多个数据库(负责处理读请求的数据库需要比处理写请求的数据库要更多,这是根据场景决定的),将不同类型的请求转发到不同的数据库进行处理
使用多线程模型,IO多路复用等
如何应对高并发场景
负载均衡,服务降级,熔断,避免雪崩
降级的方式:消息队列削峰,停掉优先级不高的服务,做监控等等
常见的限流算法:计数器,滑动窗口,桶漏,令牌桶
如何设计一套自己的限流算法
?????投了投了,15吧。
数据库
为什么redis是单线程(八股)
介绍一下redis的单线程模型(八股)
Redis在项目中的使用
Django channel的依赖,验证码
Redis的持久化(aof,rdb),两种方式的区别和优劣(八股)
Update语句执行流程,两阶段提交(八股)
聚簇索引和二级索引,回表(八股)
介绍僵尸进程,孤儿进程的成因,解决方式(八股)
从输入域名到显示网页全流程(八股)
http常见字段,状态码(八股)
闲聊
面试评价
对基础和自己的技术栈掌握得还可以,但是离工业界太远,不太了解工业界处理问题的方式,学院派气息比较重
有什么可以继续学习的
我刚问什么你学什么
hr面
因为业务调整,原定的招收24届同学名额改为招收23届,24届的同学年底再储备,所以hr帮我换了部门(血压上来了,因为要从头面起)
碎碎念:说好的优先广州Base,结果换到深圳了,导致一半的工资面临上交房东的尴尬情况QwQ,这房租,我都想在公司睡行军床、搭帐篷了
岗位:growth中台,Base:深圳,一面+二面+三面+hr面(省略)
已OC
一面
综合考察,八股为主
项目
项目介绍
如何实现联机,如何把其他玩家渲染到客户端上
Django channel,websocket,渲染是根据客户端存储玩家数组依次渲染的,玩家匹配成功就会被加入到数组中,自然就可以被渲染
Django channei的底层实现(背文档)
redis在Django channel中起到了什么作用(背文档)
项目挂了怎么办,有没有做容灾
小玩具无容灾(其实自己也不会hh)
(1)明确故障:什么故障,出现在什么地方,可不可以场景复现
(2)排查原因,分段排查:客户端排查(其他客户端有没有这个问题),服务端排查(看进程指标是否正常),中间链路排查(看看有没有错误调用),打日志
(3)根据原因进行修改
(4)重新启动
数据库
Redis的两种持久化方式(八股)
Redis的数据结构,以及实现这些数据结构的底层数据结构(八股)
介绍一下ACID,以及实现它们的日志,bin log,redo log,undo log(八股)
bin log和redo log的区别(八股)
update语句执行流程,两步骤提交细节(八股)
各个隔离等级(八股)
聚簇索引和二级索引,回表(八股)
行级锁(next-key锁,间隙锁,记录锁),锁的退化规则(八股)
分库分表,为什么分表,怎么分,多少数据分一次(八股)
操作系统
内存分页的实现,换页,页缓存(八股)
介绍文件系统,讲一下一个文件从磁盘到内存的全过程,含inode,中断等内容(八股)
介绍文件的非连续空间存储和连续空间存储(八股)
二面
纯八股考察
数据结构(二叉排序树,平衡树,红黑树)
各自的特点,优劣,复杂度(八股)
写项目时平衡树和红黑树怎么选
读多写少用平衡树,写多读少用红黑树
寄网
TCP的滑动窗口,流量控制,拥塞控制(八股)
影响网络传输效率的各种因素(八股)
按照OSI或者TCP/IP各层依次枚举可能的原因,也涉及操作系统IO效率,网卡等角度
数据经过TCP/IP每个层所发生的变化(八股)
有网络层为什么还需要传输层(八股)
UDP协议传输大数据和传输小数据的区别(是没有见过的问题,失策了)
https握手的全过程,含会话密钥生成,CA证书等内容(八股)
对称加密相比非对称加密除了速度以外的优点(八股)
语言
Python和cpp的区别(聊得比较宽泛,不多阐述)
闲聊
内部项目如何进行测试
部门的职能和岗位详情
培养计划
三面
综合考察
项目
项目介绍
遇到什么难点
帧同步,状态同步分析各自原理,横向比较,阐述最终选用方案的原因
不同客户端如何通信
Django channel,websocket
是否有测试过网络延迟
无详细数据,但有简单的测试
语言(Python)
生成器和迭代器的区别和底层实现(八股)
怎么理解装饰器(按自己的理解来说就行)
可以在装饰器里计算函数的运行时间吗
装饰器适合用来做什么设计模式
Python的垃圾回收:引用计数,分代回收,标记清除(八股)
Python中new和init的区别,底层做了什么工作 (八股)
数据结构(跳表和红黑树)
跳表的特点和实现
分析跳表和红黑树的区别,复杂度,分别适用的场景
如果写项目,要二选一,怎么选
http各版本,1.0,1.1,2.0,3.0
闲聊
字节内Devops的应用
面试评价
#字节跳动##春招##实习##后端开发##春招上岸经验#