头像

RyanMoriarty

想毕业去阿米的萌新




离线:1小时前


最近来访(4255)
用户头像
mingwang2049
用户头像
acwing_gza
用户头像
易思人
用户头像
incra
用户头像
10serrrrrr
用户头像
zzx123
用户头像
zufestudy3
用户头像
Acwer
用户头像
种花家的兔兔
用户头像
RuoSHUi
用户头像
Aystrn
用户头像
Pr
用户头像
QZX
用户头像
ΘLLΘ
用户头像
liberty..
用户头像
02无名
用户头像
syadream
用户头像
冰之韵
用户头像
qiu
用户头像
Expelliarmus2011


有幸经历过今年的死亡春招季。。。其实今年不算一个很好的找实习的时机,因为很多大厂都在或缩招,或不招一些方向的实习生。但因受朋友鼓动,加之深感自己在学校所能接触到的实际生产场景有限,不太能学到很多东西,缺乏有效的实践,所以想到外面尽早接触工业界的实际生产场景,以此来锻炼自己的能力,顺带丰富一下履历。准备了两个多月过后,我投出了自己人生中第一份简历。经过二战过后(二战的原因一言难尽。。QwQ),最终非常幸运的上岸了,非常感谢字节,能在如此困难的春招大环境下还能给我一份实习的机会。

以下为面筋内容

岗位:飞书文档,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的应用

面试评价



新鲜事 原文

感谢y总,经过两个半月的折磨,终于字节上岸了
图片


新鲜事 原文

RyanMoriarty
4个月前
是开始投简历等待死亡的第一天捏。
图片



RyanMoriarty
6个月前

操作方式:

  • 鼠标右键:移动
  • 短按q:普通子弹
  • 长按q蓄力:弹性霰弹
  • e:弹反
  • d:范围扩散
  • f:范围牵引
  • enter:问候家人
  • esc:关闭聊天窗口
  • 鼠标右键点击小地图:移动
  • 鼠标左键点击小地图:视角切换
  • 空格:视角回归自身
  • 有关更多相关机制的详情,建议在游玩前阅读最新版本的更新记录

皮肤与音乐:

  • 目前已加入了原神大多数五星角色的皮肤,以及对应的bgm,已达到更好的游玩体验

地图机制:

  • 目前已加入了雪天地图,同时加入了暖源,寒冷值的设定,以及寒冷值达临界值时的预警
  • 寒冷值:在暖源覆盖范围外活动都将积攒寒冷值,当寒冷值积攒到70%时,屏幕将出现预警,100%时持续扣除血量

web端:
https://www.genball.cn
APP端:
详情请见应用栏下Genball
AcGit:
https://git.acwing.com/RyanMoriarty/acapp
更新收录:
https://www.acwing.com/solution/content/50528/

向有尝试画大地图的友友们推荐一下 @zyitst大佬的网格调试法,很适合处理大地图绘制初期的定位和调试,真滴好用!




RyanMoriarty
6个月前

操作方式:

  • 鼠标右键:移动
  • 短按q:普通子弹
  • 长按q蓄力:弹性霰弹
  • e:弹反
  • d:范围扩散
  • f:范围牵引
  • enter:问候家人
  • esc:关闭聊天窗口
  • 鼠标右键点击小地图:移动
  • 鼠标左键点击小地图:视角切换
  • 空格:视角回归自身
  • 有关更多相关机制的详情,建议在游玩前阅读最新版本的更新记录

皮肤与音乐:

  • 目前已加入了原神大多数五星角色的皮肤,以及对应的bgm,已达到更好的游玩体验

地图机制:

  • 目前已加入了雪天地图,同时加入了暖源,寒冷值的设定,以及寒冷值达临界值时的预警
  • 寒冷值:在暖源覆盖范围外活动都将积攒寒冷值,当寒冷值积攒到70%时,屏幕将出现预警,100%时持续扣除血量

web端:
https://www.genball.cn/
app端:
https://www.acwing.com/file_system/file/content/whole/index/content/3263126/
AcGit:
https://git.acwing.com/RyanMoriarty/acapp
更新收录:
https://www.acwing.com/solution/content/50528/

更新时踩过的坑:

首先是弹球轨迹同步问题
若干天之前,偶然间看到了Andrew1729大佬写的弹性球,觉得十分有趣,便借鉴后加以修改,加入到了自己的demo中,但没有想到在更新多人模式时,引来了许许多多的麻烦QwQ。

我写的弹性球原理十分简单,如果是球撞到了玩家,则random一个新的随机值作为angle,进而改变vx和vy,如果是撞到了墙壁则直接将vx或者vy取反值。

但问题就出在random上。

由于在不同的玩家的playground上,球实际上是不同步的,只是由于最初传入参数的限制,球在被创建后的行为,看上去像是同步的。如果是原始版的火球倒也没什么影响,毕竟就是直线轨迹,撞到人就没了。如果是弹性球撞到墙壁上,也只是简单的vx或vy取反,在不同playground上的表现是没有太大区别的。但需要random的时候,由于不同playground上的球random出来的angle值是不一样的,这也代表了弹性球接下来的轨迹将无法在不同playground上保持看上去的统一。

更糟糕的是,由于我加入了一个霰弹的技能,霰弹消失后散射的子弹的初始angle全是random出来的,这就意味着20个散射子弹的轨迹在不同playground上全是差异巨大的。

在我原本的废案里,有一个解决方法,就是在球update_move时不断向后端发送小球发射者playground里对应小球的x和y,从而更新其他玩家playground里小球的x和y。虽然想法很美好,但事实证明这是一个糟糕的想法,当小球数量多起来后,游戏就出现了明显的卡顿现象,显然暴力的方法是走不通了。

但其实事情并没有那么复杂,我们并不需要不断去更新其他玩家playground里小球x和y来确保轨迹看上去一致,事实上,我们仅需要在弹性球撞到玩家时取random更新参数的时候,同步一下其他playground里对应弹性球的x,y,vx,vy等参数即可,只要当对应弹性球在不同playground里参数出现显著不一致时,同步一下差异巨大的参数,理论上就能保持在不同playground里轨迹看上去的统一,而且相比废案,对服务器的负担也小了许多。

霰弹散射的轨迹不一致问题同理。

明明是那么简单的道理,却弄了一个多小时QwQ。。。泪目

另外则是关于弹反的同步问题。
在y总的原设计中,出于游戏打击体验感,我们参考了fps的普遍模式,受击判定由攻击方进行,而被攻击方的火球只是动画,不会造成实际效果。这种设计在y总的demo是完全没有问题的。

但我的demo由于加入了弹反机制,这就造成了大问题,也就是最早体验本demo多人模式时大家的一致体验:受到不间断的虚空攻击

产生这种情况的原因其实比较容易猜到,由于我们最初的设计是,成功弹反后,弹反方向其他玩家广播这颗小球已经被成功弹反,但由于延迟的原因,实际经常会发生的一点是,在我们的信息还没发送到攻击方之前,攻击方的小球已经判定为击中弹反方了,这就意味着,攻击方仍然会发送弹反方被成功命中的消息,所以会出现小球被弹反后,自己仍然会被攻击到的bug。

当然麻烦不止于此。由于我们的弹反机制会将攻击方的小球转化为自己的,接下来的受击判定将由原弹反方进行,但由于原攻击方已经判定小球击中了原弹反方,小球已经被destroy掉,这就导致了在原攻击方的playground里,被弹反的小球是不存在的,而在原弹反方的playground里小球依旧存在。这就会造成当小球在原弹反的playground里击中原攻击方时,原攻击并没有看到小球,但依然收到了了被击中的信息,进而莫名被攻击到,这就是虚空攻击的起源。

这就是一个很神奇的问题,击中和弹反是互斥事件,然而因为延迟问题,这两个事件都发生了,从而造成了神奇的bug。

所以我进行了简易的修改,会出现互斥事件的行为统一放到被攻击方判断,这样就避免了冲突的问题。

代价则是打击感的减弱,是否击中非常受被攻击方的网速影响,比如假如只要被攻击方网速足够慢,接收到攻击方发射小球的信号总是慢半拍,就会出现在攻击方看来小球击中了被攻击方,但实际上在被攻击方并没有被判定为击中的情况。不过由于本demo的节奏比较快,这种判定误差只要不是非常卡(比如你在用校园网,当然也跟本demo忽略了加载资源的等待,在游玩时仍需要加载大量资源,占用过多网络资源有关)的情况下并不会特别明显。

当然,问题还是很显而易见的,主要还是技术力过于薄弱的问题(也有部分是我小破服务器的锅)以后技术力上去后,情况会慢慢改善的。友友们一起学习一起进步。

如果有更好的优化方案或者新奇的idea,务必在评论区下方留言哟QwQ。




RyanMoriarty
7个月前

操作方式:

  • 鼠标右键:移动
  • 短按q:普通子弹
  • 长按q蓄力:弹性霰弹
  • e:弹反
  • d:范围扩散
  • f:范围牵引
  • enter:问候家人
  • esc:关闭聊天窗口
  • 鼠标右键点击小地图:移动
  • 鼠标左键点击小地图:视角切换
  • 空格:视角回归自身
  • 有关更多相关机制的详情,建议在游玩前阅读最新版本的更新记录

皮肤与音乐:

  • 目前已加入了原神大多数五星角色的皮肤,以及对应的bgm,已达到更好的游玩体验

地图机制:

  • 目前已加入了雪天地图,同时加入了暖源,寒冷值的设定,以及寒冷值达临界值时的预警
  • 寒冷值:在暖源覆盖范围外活动都将积攒寒冷值,当寒冷值积攒到70%时,屏幕将出现预警,100%时持续扣除血量

web端:
https://www.genball.cn/
APP端:
详情请见应用栏下Genball
AcGit:
https://git.acwing.com/RyanMoriarty/acapp
更新收录:
https://www.acwing.com/solution/content/50528/

更新时踩过的坑:

首先是弹球轨迹同步问题
若干天之前,偶然间看到了Andrew1729大佬写的弹性球,觉得十分有趣,便借鉴后加以修改,加入到了自己的demo中,但没有想到在更新多人模式时,引来了许许多多的麻烦QwQ。

我写的弹性球原理十分简单,如果是球撞到了玩家,则random一个新的随机值作为angle,进而改变vx和vy,如果是撞到了墙壁则直接将vx或者vy取反值。

但问题就出在random上。

由于在不同的玩家的playground上,球实际上是不同步的,只是由于最初传入参数的限制,球在被创建后的行为,看上去像是同步的。如果是原始版的火球倒也没什么影响,毕竟就是直线轨迹,撞到人就没了。如果是弹性球撞到墙壁上,也只是简单的vx或vy取反,在不同playground上的表现是没有太大区别的。但需要random的时候,由于不同playground上的球random出来的angle值是不一样的,这也代表了弹性球接下来的轨迹将无法在不同playground上保持看上去的统一。

更糟糕的是,由于我加入了一个霰弹的技能,霰弹消失后散射的子弹的初始angle全是random出来的,这就意味着20个散射子弹的轨迹在不同playground上全是差异巨大的。

在我原本的废案里,有一个解决方法,就是在球update_move时不断向后端发送小球发射者playground里对应小球的x和y,从而更新其他玩家playground里小球的x和y。虽然想法很美好,但事实证明这是一个糟糕的想法,当小球数量多起来后,游戏就出现了明显的卡顿现象,显然暴力的方法是走不通了。

但其实事情并没有那么复杂,我们并不需要不断去更新其他玩家playground里小球x和y来确保轨迹看上去一致,事实上,我们仅需要在弹性球撞到玩家时取random更新参数的时候,同步一下其他playground里对应弹性球的x,y,vx,vy等参数即可,只要当对应弹性球在不同playground里参数出现显著不一致时,同步一下差异巨大的参数,理论上就能保持在不同playground里轨迹看上去的统一,而且相比废案,对服务器的负担也小了许多。

霰弹散射的轨迹不一致问题同理。

明明是那么简单的道理,却弄了一个多小时QwQ。。。泪目

另外则是关于弹反的同步问题。
在y总的原设计中,出于游戏打击体验感,我们参考了fps的普遍模式,受击判定由攻击方进行,而被攻击方的火球只是动画,不会造成实际效果。这种设计在y总的demo是完全没有问题的。

但我的demo由于加入了弹反机制,这就造成了大问题,也就是最早体验本demo多人模式时大家的一致体验:受到不间断的虚空攻击

产生这种情况的原因其实比较容易猜到,由于我们最初的设计是,成功弹反后,弹反方向其他玩家广播这颗小球已经被成功弹反,但由于延迟的原因,实际经常会发生的一点是,在我们的信息还没发送到攻击方之前,攻击方的小球已经判定为击中弹反方了,这就意味着,攻击方仍然会发送弹反方被成功命中的消息,所以会出现小球被弹反后,自己仍然会被攻击到的bug。

当然麻烦不止于此。由于我们的弹反机制会将攻击方的小球转化为自己的,接下来的受击判定将由原弹反方进行,但由于原攻击方已经判定小球击中了原弹反方,小球已经被destroy掉,这就导致了在原攻击方的playground里,被弹反的小球是不存在的,而在原弹反方的playground里小球依旧存在。这就会造成当小球在原弹反的playground里击中原攻击方时,原攻击并没有看到小球,但依然收到了了被击中的信息,进而莫名被攻击到,这就是虚空攻击的起源。

这就是一个很神奇的问题,击中和弹反是互斥事件,然而因为延迟问题,这两个事件都发生了,从而造成了神奇的bug。

所以我进行了简易的修改,会出现互斥事件的行为统一放到被攻击方判断,这样就避免了冲突的问题。

代价则是打击感的减弱,是否击中非常受被攻击方的网速影响,比如假如只要被攻击方网速足够慢,接收到攻击方发射小球的信号总是慢半拍,就会出现在攻击方看来小球击中了被攻击方,但实际上在被攻击方并没有被判定为击中的情况。不过由于本demo的节奏比较快,这种判定误差只要不是非常卡(比如你在用校园网,当然也跟本demo忽略了加载资源的等待,在游玩时仍需要加载大量资源,占用过多网络资源有关)的情况下并不会特别明显。

当然,问题还是很显而易见的,主要还是技术力过于薄弱的问题(也有部分是我小破服务器的锅)以后技术力上去后,情况会慢慢改善的。友友们一起学习一起进步。

如果有更好的优化方案或者新奇的idea,务必在评论区下方留言哟QwQ。



新鲜事 原文

RyanMoriarty
7个月前
原来我一直忘记把仓库权限改为公开了
图片



RyanMoriarty
7个月前

操作方式:

  • 鼠标右键:移动
  • 短按q:普通子弹
  • 长按q蓄力:弹性霰弹
  • e:弹反
  • d:范围扩散
  • f:范围牵引
  • enter:问候家人
  • esc:关闭聊天窗口
  • 鼠标右键点击小地图:移动
  • 鼠标左键点击小地图:视角切换
  • 空格:视角回归自身
  • 有关更多相关机制的详情,建议在游玩前阅读最新版本的更新记录

皮肤与音乐:

  • 目前已加入了原神大多数五星角色的皮肤,以及对应的bgm,已达到更好的游玩体验

地图机制:

  • 目前已加入了雪天地图,同时加入了暖源,寒冷值的设定,以及寒冷值达临界值时的预警
  • 寒冷值:在暖源覆盖范围外活动都将积攒寒冷值,当寒冷值积攒到70%时,屏幕将出现预警,100%时持续扣除血量

web端:
https://www.genball.cn/
APP端:
详情请见应用栏下Genball
AcGit:
https://git.acwing.com/RyanMoriarty/acapp
更新收录:
https://www.acwing.com/solution/content/50528/




RyanMoriarty
7个月前

操作方式:

  • 鼠标右键:移动
  • 短按q:普通子弹
  • 长按q蓄力:弹性霰弹
  • e:弹反
  • d:范围扩散
  • f:范围牵引
  • enter:问候家人
  • esc:关闭聊天窗口
  • 鼠标右键点击小地图:移动
  • 鼠标左键点击小地图:视角切换
  • 空格:视角回归自身
  • 有关更多相关机制的详情,建议在游玩前阅读最新版本的更新记录

皮肤与音乐:

  • 目前已加入了原神大多数五星角色的皮肤,以及对应的bgm,已达到更好的游玩体验

地图机制:

  • 目前已加入了雪天地图,同时加入了暖源,寒冷值的设定,以及寒冷值达临界值时的预警
  • 寒冷值:在暖源覆盖范围外活动都将积攒寒冷值,当寒冷值积攒到70%时,屏幕将出现预警,100%时持续扣除血量

web端:
https://www.genball.cn/
APP端:
详情请见应用栏下Genball
AcGit:
https://git.acwing.com/RyanMoriarty/acapp
更新收录:
https://www.acwing.com/solution/content/50528/



新鲜事 原文

RyanMoriarty
7个月前
等找到合适的图后续的角色皮肤会慢慢加,鉴于部分角色现在并没有出官方的ost,可能会在别的地方找bgm截取和同人作品,见谅,
图片