字节-飞书-后端工程师-一二三面面经(凉了,收到感谢信了)
三面终结,许愿hr面,参加活动回馈牛客
投了字节的春招岗,被刷简历,投了实习岗,被刷简历,结果被捞起来当提前批了,幸运的过了第二次笔试得到了面试机会。
收到感谢信了,一二面感觉凉了结果都过了,三面感觉聊的还ok结果挂了,虽然一直跟别人说意向书没到手里都当没有希望比较好,结果还是我自己当有希望了。
心态很崩,但也得继续往前准备吧。
从春招开始准备,看书,啃源码,接受原生家庭的压抑和压力,本以为这波能逃出去了,没想到一切还是回到了最原始的起点啊。
忍住不哭,继续前进吧。
一面
相关问题的谈论可以看原帖链接评论区:https://www.nowcoder.com/discuss/445913?source_id=profile_create&channel=666
终于迎来了人生的第一面,啊,这种激动而又紧张的心情,让我想跑厕所(
本来因为我朋友之前的面试经历一点Java没问,全挖的os,于是我就从接到电话开始一直在准备os和计网来着,结果一点没问😂
1.自我介绍
2.聊项目亮点
然后我选了redis位图,因为我用这个实现了员工打卡功能,然后面试官说公司员工不多不会有太大的内存优化(虽然我确实也是觉得很新奇才用的
然后选了线程池,因为我用线程池实现了字段校验,过于紧张线程池全都忘光了,于是在线程池参数的配置上胡言乱语,被善意的反驳
然后说了sql优化,同理,过于紧张,话都说不顺了,讲了几种sql的普通优化
3.除了redis的位图,还了解什么
然后我从9种数据结构及其适用场景,string-对象json,hash-对象,list-消息队列,set-共同爱好,zset-排行榜,bitmap-打卡签到,hyperloglog-月活,bloom filter-解决缓存穿透
聊到了两种持久化及其详细过程,rdb-save、bgsave,aof-rewriteaof
聊到了主从复制及其新老版的实现区别,旧版的sync-初次复制和断线重连后的重同步,新版的psync-初次复制和断线重连后的部分重同步
好吧,全程就我在口嗨😭
4.zset的底层数据结构
跳表,没细问,细问我也没看(
5.布隆过滤器是redis的数据结构吗
我说没注意。。。他这么一问我以为不是。。。
6.innodb的锁机制
讲了粒度分类的表锁行锁意向锁,讲了排斥性分类的读锁写锁
讲了四种锁算法,record lock, gap lock, next-key lock, previous-key lock
以及我还说了innodb在可重复读下是通过next-key lock来避免幻读的,最后被委婉的说不对,求助,难道不是吗,求解答😭 或者我应该结合mvcc来说吧,但是当时我没说,流泪
(2020/7/4更新,这个问题跟朋友聊了聊,next-key算法解决幻读问题是没毛病的,但是面试官的问题应该是rr级别下怎么能解决幻读问题。rr确实不能完美避免幻读问题,除非加锁,即使是mvcc也不能完全避免,记录在博客里了 https://blog.csdn.net/weixin_42907817/article/details/107121470)
7.算法
力扣 124. 二叉树中的最大路径和 相类似的题,力扣这题求的是最大路径和,我面试的题是求最长的路径,https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/,hard,做过所以做出来了,但是被牛客坑了,要自己根据输入输出构造二叉树,写完后一直运行失败,最后发现输入框是空的要自己填。。。原谅我是第一次参加面试。因为处理输入输出花的时间比较久,本来应该有第二题的吧,反正面试官一开始是说两道题,改口先做一题。
8.反问
建议,他说还是不问这个吧。
就问了学习建议,面试官说多看看原理会对我具有比较大的帮助,有些paper不一定是对的,然后举例next-key算法能不能解决幻读问题,当然了他没细说。
二面
我就是完美跳过面试点小能手,看啥不问啥,复习啥不问啥😅。
顺便提醒大家,如果面完没有收到感谢信不要灰心,我的二面等了五天,期间一直以为自己凉了。。。
说真的我一直看大家问的都是os、计网,所以我准备字节面试都在复习数据库、os、计网、redis。谁能想到两面基础一题没问,还是我自己扯过去的。二面居然扯框架原理了。。。
面试官是给我感觉挺好的小哥。
问题感觉是扯到什么问什么,所以记录的有点杂,不要在意。
1. 自我介绍
2. 项目问题(两面都问的线程池怎么用的😂 因为我是实现字段校验,所以还问我有没有用到建模什么的,我:没有没有没有没有那么高级🤣)
3. 如果让我设计登录系统,我怎么设计
我没碰到过这种问题,毕竟这是我人生第三面,我也不知道他想问什么,但是小哥真的很好,他大概看出来我的迷茫了就细化了问题😭
就是一个用户发出登录请求后服务端怎么处理,然后我很懵的说:就,验证这个用户是不是存在的用户,如果不是给他返回错误消息,如果是就登陆成功(?
4. 怎么保证请求的安全
4. 怎么保证请求的安全
中间问到用什么请求,然后回答了post和get的区别
保证安全我扯到了cookie和session和token,最后说了https
5. https怎么保证安全
我说他基于ssl/tls协议,会对通信内容进行对称加密,密钥通过非对称加密,然后大概讲了下对称加密和非对称加密的区别,说对称加密快但是安全性没非对称高,非对称安全性高但是对消息内容长度有限制
6. 了解加密算法吗
我只知道有rsa,具体没了解过
7. 回到原问题上,http请求过来spring是怎么处理的
我内心os:妈妈这个面试官不按套路出牌啊。
虽然是我用的比较久的spring,但是这一下我真懵了,不知道怎么说。。。就回答了spring mvc的处理流程,什么映射器啊、执行链啊、处理器啊、适配器啊、视图解析器啊。。。
8. 视图解析器怎么解析的
。。。不会,内心很崩溃。
9. http请求怎么交给spring管理的
。。。我想起来spring bean的作用域中的request,就说了他的生命周期和请求一致。然后就问到了bean怎么加载的,我说我只知道单例bean的加载。于是开始讲起了spring bean加载的源码,包括三层缓存、循环引用的解决、依赖注入都说了。。。
10. 回到原问题上,怎么知道这个用户是不是存在的用户
我说查数据库。。。
11. 怎么存的用户信息
我说存用户名,密码存加密后的密码
12. 用的什么编码,可不可逆?
我说调的spring security的一个编码器,忘了叫什么,不可逆。(我还是好懵逼。。。
13. 查数据库怎么防止sql注入
这个我只知道mybatis的$和#,但是我以为问的不是这个,就说了不会。。。
14. 知道sql注入吗
我就说了mybatis的$和#,$字符串拼接会有注入
15. 注解实现的原理,如果让你实现一个注解你会怎么做
老实的回答不会,不过这个确实该会吧。。。
16. 算法
第一题:
不知道原题在哪,直接复制了。。。
虽然但是,牛客能不能不要老用牛牛啊😑
题意 牛牛有一个苹果园。又到了一年一度的收获季,牛牛现在要去采摘苹果买给市场的摊贩们。 牛牛的果园里面有n棵苹果树,第i棵苹果树上有ai个果子。 牛牛为了保证果子的新鲜程度,每天都会去苹果树上采摘果子。 牛牛特意安排一个计划表: 计划m天去采摘果子。 对于第i天,它会去所有果树上轮流采摘bi个果子。 如果对于第i天,某棵果树上没有bi个果子,那么它只会把当前果树上的果子采摘完。 牛牛想知道它每天能供应多少个苹果给市场的摊贩们。 示例1 输入 [10,20,10],[5,7,2] 输出 [15,17,2] 说明 苹果树上的果子变化[10,20,10]-->[5,15,5]-->[0,8,0]-->[0,6,0]
只能想到暴力,后来面试官提示了,没get到点,于是换题了。
(2020/07/08 更新,这道题朋友提供了思路,在力扣上写了题解,可以参考+提建议 https://leetcode-cn.com/circle/article/NA6h7i/)。
哦做这道题有个插曲,因为我弟在家打游戏会乱叫吵到我,所以我问面试官:请问我可以跟我弟说句话嘛?他说可以。于是我转过头用方言大喊:XX,别吵。(我是温州人,所以方言可能比较好玩,面试官就笑了🤣
第二题:二叉树的左视图
力扣原题 反了一下 https://leetcode-cn.com/problems/binary-tree-right-side-view/ ,同样要自己构建二叉树,输入输出自己定,思路说了没问题,但是不知道为什么编译过不了。。。
力扣原题 反了一下 https://leetcode-cn.com/problems/binary-tree-right-side-view/ ,同样要自己构建二叉树,输入输出自己定,思路说了没问题,但是不知道为什么编译过不了。。。
16. 反问
感觉自己已经凉透了,就没什么好问的,问了下字节的工作氛围,小哥说挺好的,会比较轻松。
这也是我向往字节的最大原因了唉,可惜无缘了。
最后我的碎碎念。
今天面试前收到了另一个公司的感谢信,只参加了那种测评,90题的各种智力题、表格题、性格题那种,就被感谢了。然后收到了一个小公司的offer,但是这个公司需要长期的,就婉拒了,因为离学校离家都远。唉。春招到现在除了石沉大海的简历和一堆感谢信外啥都无,很迷茫。
最后祝愿大家都能拿到offer吧。
三面
因为前两面基础一点没问,所以我特意推迟了一天面试时间然后把b站王道考研os和计网视频看了大半。。。结果又又又又又一点没问🤣
其实问的不多,因为我逻辑题想太多想太久了orz
面试官很好,所有问题都有在引导我,不会的也会跟我说怎么做。
1. 自我介绍
2. 选一个之前两次面试都没讲过的项目功能讲一下,也可以讲自己之前没讲好的
我选了一面没讲好的——线程池处理大数据导致大量数据走饱和策略的问题,讲了自己的一个想法,他还提了有没有优化,然后跟我说了下blablabla
3. 你做过web项目,假设让你设计一个web服务器,简单化假设这边就是一个线程池处理请求,需要考虑什么问题?
我就说了需要考虑大量请求同时打过来的问题和线程拼命切换的问题。。。
他说这是要考虑的,然后说这其实是一个啥啥啥架构问题,如果我了解过那就好说,然后就问我有没有了解过协程,我:只了解过概念。他:那没事,前两面看你简历也问的差不多了,简历就不问了,问问理论方面的,
4. 你认为链表和树这两个数据结构有什么相同点和不同点,从多方面来讲
从数组上来讲了链表的一个适合增删不适合查询的点,讲了树的一个适合增删改的点(平衡),然后提了链表的引申(双向链表、环形链表)和树的引申(平衡二叉树、二叉搜索树、多路的b树)
5. 树的应用和链表的应用,可以从Java的api上想
树的果断讲了数据库的索引,然后他说树只是个逻辑概念,问我知道时间复杂度和他的物理存储吗(有点忘了,大概这个意思),然后我讲了目录页,数据页和一个大概的搜索过程
链表的应用讲了线程池的链表阻塞队列
6. 逻辑题
之前一直怕字节的算法题,到现在怕字节的逻辑题
一间屋子有许多桌子,许多人. 如果3个人坐一桌多2个人, 如果5个人坐一桌多4个人, 如果7个人坐一桌多6个人, 如果9个人坐一桌多8个人, 如果11个人坐一桌刚好,请问屋子里有多少人我想得太复杂了,算出了一个答案不过有偏差,就讲了思路,然后面试官一步一步引导我,直到我看到面试官一动不动才发现我网卡了。。。
较于飞机加油和海盗分金币而言(我早上都在看飞机加油问题和海盗分金币的问题🙃),其实真的很简单,就是一个最小公倍数的问题,但是我非要选择手算😑
然后面试官就说了一个就是“现实的问题要经过简化再给编程实现”这一个点,真的这次体会很深了。
7. 反问
Q:字节是不是三面很喜欢出逻辑题🤣
A:都有的,有些也不会问的,编程确实是字节的一大特色了。
然后面试官向我提问了
Q:我看你现在大三已经做了三个项目(其实都是crud),很难得了,你是怎么看待编程这件事的?
A:讲了我其实选这个专业完全是个偶然,并且大三上才决定的后端方向,在这之前有想过做UI设计、想过做前端也想过做安卓,最后是因为跟着导师做项目,觉得做出来的成品就很有成就感,以及准备春招这段时间看了一些原理性的东西,感觉很厉害,所以喜欢编程。以后的话如果可以也想全栈发展。
Q:泼个冷水,编程是一件很累的事,你能坚持下去吗?
A:笑着说可以。
三面over,这次面试真的学到很多,最后许愿一个hr面
面试结束收到了之前面的浩鲸的oc,希望字节也能看看我😭