这应该是自己暑期实习最早的一份面经 + 攻略~许愿offer啦
2022-3-9 12点来的消息三面过了~~
个人简历情况:双非大三 + 去年八月份开始准备 + 两个项目 + 开源仓库 + 几个国奖 + 知识库 + 专业绩点前1%
面试背景:去年9月投递了一次,过了简历年底才面试,面完三面凉
。也没告知原因,也没被捞,不服气寒假准备了两个月继续投暑期,应该是面的最早的一批,然后就有了这篇面经了~ 从二面写得很详细,尽最大可能还原了现场和我的回答逻辑。希望能给有需要的人一些帮助。
面试情况:笔试1h ak + 6场面试算法题都过 + 八股文应该没问题 + 中间件可能不熟悉 + 项目和场景设计题能勉勉强强满意
达成神奇的成就:仅有的面试机会全是来自字节
[字节跳动暑期实习后端一面面经] 2022-3-3 大三下
[字节跳动暑期实习后端二面面经] 2022-3-7
[字节跳动暑期实习后端三面面经] 2022-3-8
[字节跳动视频架构实习一面面经] 2022-1-3 大三上
[字节跳动视频架构实习二面面经] 2021-11
[字节跳动视频架构实习三面面经(凉)] 2021-11
一面 2022-3-3 1h
这次是我第二次面试,第一次也是面的字节字节跳动视频架构实习三面面经(凉经),因为大三下学校有课有考试,时间原因以及一些其它方面原因(hr说不方便透露)就也放弃了找日常实习了,等了一个月开始面暑期啦
大概情况:
目前大三刚刚开始投递暑期实习
27号笔试1h ak了,看到***也有小伙伴发了暑期实习面经,有点慌,等了好几天才有HR联系我
算上之前三次面试,第四次走字节的面试流程感觉很是熟悉,哈哈,有点喜欢上这个节奏了,不清楚其它公司面试流程咋样
字节面试是真的很看逻辑,讲到哪问到哪,合理提出关键字就会带动面试官去提问(当然我才面试过几次还没这能力,都是随口说出其它八股文关键字,然后面试官就说:你刚刚提到xx,那我们聊聊xxx)。
总结评价:前期项目聊到哪问到哪,后期八股文是真太熟悉了,算法卡时间险过。
项目里面用到RabbitMQ讲讲对RabbitMQ的了解(这里没答很好,挖了一个坑,到三面被gank了)
RabbitMQ的交换机和队列是怎样一个联系简单讲了讲
项目里面用到Mysql监听binlog,binlog是什么?八股文ing,用于备份,用于复制..
redolog和binlog的区别。说了区别,以及联系,两阶段提交,以及分别能做什么
RBAC是什么?怎么实现的?讲了下如何设计,5个表,如何用json优化到三个表,如何配合业务层实现授权以及鉴权
Redis怎么统计在线用户。讲了下暴力统计token,面试官不满意,就过了
项目用了缓存是吧--》开始问redis,开始八股文
【============八股文分割线============】
Redis的数据结构讲一讲 + 使用场景及使用场景 + bitmap等等
Zset里面跳表是什么?抽象地描述了一下,面试官也没深入问底层是如何实现的
既然讲了上面这个数据结构那讲讲Mysql里面为什么用B+树?嘴瓢了,没讲得很清楚,但点都说了
B+树和二叉树区别?那能不能用哈希呢?不行(这里答错了,应该是答不合适),hash不能区间查询
讲讲数据库索引?八股ing
什么是事务?讲讲数据库的隔离级别,分别怎么解决可能出现的问题?八股答很熟悉,但三面也有这个问题(可以看后面),很明显就不是一个级别,需要很深入理解,用一个多线程案例从业务层到缓存到db一直分析可能出现问题
既然你说了MVCC,那简单讲讲MVCC?答得很表面,回去赶紧看了看
既然用了MVCC版本查看,为什么还会出现幻读? 因为之前博客看MVCC能解决幻读,所以晕了没答上来,回答了下串行化、间隙锁可以解决幻读
那聊聊操作系统,说说进程和线程的区别。老八股了
进程线程都怎么通信。八股拿下
线程的状态。老八股文
那聊聊计算机网络输入URL到看到网页老八股文
四次握手。答到一半短路了,没答好。GG
【============算法分割线============】
前序 + 中序 构建二叉树 并且前序 + 中序打印。
由于字节是飞书IDE,导致构建和遍历打印都要自己写,相当于3个题目qwq,凭着记忆马上码完了框架,跑,报错,G。。。(我坚信代码没问题)
最后只好给面试官讲思路,快结束了,面试官开始质疑我代码写错了(要是他不质疑我看时间真快放弃了)。
我问还剩几分钟,让我再调试下,最后拖延了一两钟抢险一发过了,少了个边界,一看时间恰好可能他要面对下一个同学了。最后没有反问环节。
感谢面试官最后质疑我。。。
【============3.4日更新分割线============】
HR第二天通知我一面过了,约了二面时间,感觉安心了一些了,冲冲冲~这次一定要拿下
二面 2022-03-07 1h
2022年3月7日18:33:19 全程都是项目 + 场景,没八股,写完就是写算法留了很长时间,感觉内容不多(写着写着发现不对劲,问了好多),感觉自己准备的还是不够到位。凉经预警qwq (面试完写面经,半小时不到写着写着就过了)
【============项目分割线============】
你是来实习是吧?课程怎么办?我是找暑期实习
哦哦,那讲讲你对spring和springboot的理解?好久没准备spring题目了,答得一般般
springboot是怎么加载redis的,为什么比不用springboot更方便呢?开始抽象描述
加载的redis或者bean是单例还是多例?默认单例
springboot是怎么实现单例模式的呢?面试官应该看出我不熟了,就开始带路看我理解了,回答类似map存beanname
单例模式线程安全吗?本身就不具备安全特性
怎么保证多线程下面单例模式安全?双重校验锁 + volatile(但我理解错了说的concurrentmap可以保证线程安全)
那你刚刚说到的concurrentMap和hashmap有什么区别?面试官就顺着我错地讲得来,面完才get到点
线程安全是什么概念?没去思考过,按照想法和可能发生的问题整理了一下
hashmap为什么多线程不安全,能举出例子来吗?多线程插入resize过程死循环(但我这里答得不够精炼)
怎么保证线程安全?(锁)
**volatile和synchronize有什么区别?**或者功能?我讲得有点杂乱了
那回到刚刚的问题他们怎么保证线程安全?面试官及时把我拉了回来
举个例子i++,分别说说。i++不是原子操作,涉及多个操作,需要保证他的原子性才能安全
volatile能保证i++安全吗?不行,单线程可以,多线程还是会覆盖(我当时咋忘了说全了呢)
那看你简历写了设计模式,你能说说设计模式吗?讲自学的,软工课上学的,巴拉巴拉
为什么设计模式更好,你能说说用和不用的区别吗?代码更优美,更规范、更高级,讲得很抽象,面试官就打断继续和我拉扯``
也说不上高级,那你举个例子讲讲设计模式的好说的策略模式,但感觉没说到点
好,那讲讲几种常见的设计模式。工厂、观察者、建造者,桥接、单例、策略..然后方便简单讲了讲在spring里面的体现
那讲讲微服务吧。(毕竟我简历上写了了解)我说我学了但没怎么用,讲了下单体服务到微服务的过度和区别
微服务两台机器怎么通信呢?单节点HTTP、微服务PRC
那两台机器如何用HTTP怎么找到对方?域名dns解析ip;如果不知道域名呢?不懂了0.0
那微服务都有什么部分呢 注册中心、网关、xxx
注册中心是什么讲讲?中心化思想,巴拉巴拉
网关是什么呢?别说了别说了.jpg, 其实就说了下思想,然后直接说我这块之前学的现在有点记不住了
好那既然有分布式,你能说说分布式登录怎么保持状态吗?讲了下登录怎么保存状态,然后讲了下分布式session、redis存、JWT
讲讲JWT。
那我现在提个需求,假设用户登录了,我想封他id,怎么操作,在java程序哪操作?可以用户数据库+status状态、登录时判断、拦截器请求时判断、redis维护黑名单。
讲讲如果让你项目去实现禁ID(T人),你怎么做? 这个我熟,感谢sa-token作者的博客,给我安排的明明白白
如果不用redis呢?java内存维护set如果黑名单少的话,或者每次请求就搜库
那讲讲set集合?八股ing
**怎么设计限制用户单位时间访问次数? **简单的直接redis 设置带时间的key统计访问次数。实际场景应该用zset统计用户访问时间戳,java程序每次往前读取zset一段时间戳统计访问次数是否大于限制,大于就加入黑名单;还有令牌桶临时没想到
【============算法分割线============】
https://leetcode-cn.com/problems/number-of-dice-rolls-with-target-sum/
d个骰子可以,每个骰子可以投f个面(1-f分),构成targe有多少种情况,结果对1e9 +7除余
我一开始是dp写,但感觉时间不够我去推,我就拿dfs暴力写了一个,结果面试官说时间还有,继续优化
dfs暴力搜索 ==> 相当于 d个for循环 时间复杂度 O(d^f)不行,继续优化,我试探的问了下是继续dfs优化还是换算法,他隐藏提醒换算法,只能硬肝dp了
dp[i][j] 第i个筛子可以凑成j种分数,dp[i][j] += dp[i][j-f] (f从1-f循环)每次从上一层状态凑 过了qwq
【============反问分割线============】
这次没八股文,都是实战场景,想问问我回答情况怎样?能不能给一点建议。 不想要统一的答案,想要解决问题的过程
部门是Java还是Go?·Go
结束,面完还在自闭回想(见第一行最后),我一般不录音,都是面完按照面试官思路去把面经整理出来,同时方便自己复盘感受感受面试官提问逻辑
突然HR来消息问我面的怎么样上一次也问了,等了一天才出结果。我说连环炮提问太刺激了qwq,然后他说结果出了,问我想平静会晚上听还是现在。
那还能等?直接开奖~~~~过了。。约了第二天三面,最后几段路了,冲!
三面 2022-03-08 40min
又是没有八股的一天,甚至没有算法,主要内容是项目和设计以及一些软性的问题(全看临场反应)。没有录音,都是按照面试官思路整理的,附带我现场答题情况,我也尽量还原当时场景。也感谢字节给我 六次面试 的机会。不清楚这次能不能过,发篇面经积积运气吧0.0
先做个自我介绍吧。印象里我以为leader面一般就直接开问的
【============项目分割线============】
那你挑你的项目做个介绍。巴拉巴拉从设计到部署到开发说了很多。
讲讲项目的难点。巴拉巴拉讲了一大堆,然后随口说了个没太考虑多线程问题。
那你觉得你项目会有多线程安全问题吗?会有,本身没做限制,只通过redis自增存点赞等等,其它的没考虑
【============场景分割线============】
那既然用了redis,讲讲缓存一致性问题。按照redis和mysql讲了一个获取更新网站版本号写入数据库删缓存示例,。
那你觉得你说的能保证一致性吗?不能,可能写数据库写的慢,新来的get请求拿不到缓存读数据库读到了旧版本
我看你前面二面试官问了一些脏读幻读的问题。一面问了二面没。
好,那我希望你不紧从redis角度,同时从数据库并发可能产生问题角度答答。qwq,没听懂,试探性问了下,大概是从隔离级别讲讲,说了下mysql默认是可重复度,并且配合mvcc和间隙锁是能解决幻读问题的,我觉得默认数据库会实现线程安全(感觉应该答得不满意)
你能讲讲怎么解决吗?感觉我已经和他不在一个频道了,数据库那边说打住,然后我回答前面的问题,先删缓存,加锁写入数据库后更新缓存,中间读缓存时等待
不是很满意,再想想?一致性问题看的不多,全程在引导,但一个陌生的区域短时间思考出来的结果还是不尽人意,最后通过redis key以及版本号操作实现了,得赶紧补补
好现在来点设计问题,日志系统了解吧?不太了解,mybatis自带,微信云托管也可以存储。
如果我要你设计一个日志系统,你能问三个问题你会问什么?完全临时思考得出结论:日志传输用什么协议(对外服务逻辑);日志量级多少(对内设计数据结构和选择合适算法);有没有什么附加功能需要实现(预警等功能);
**面试官:如果是我答我会问 什么时候完成;该查询什么资料;商讨实现方案;你回答的太偏向设计了 **我内心直接???这就是职场大佬和在校小菜鸡思维的差距qwq,他意思是应该全面考虑,既要考虑技术实现,又要找到合适的资料以及任务期限。ORZ
现在再来个问题,计算机内核态和用户态概念懂吧,给我讲讲,把我当做小白。好家伙,我也可以当把面试官讲正确答案了是吧。小白、计算机、黑盒、提供操作、隔离、用户态调用api切换内核态,说了一大堆
嗯,你还是说了很多计算机用语,再给你一次机会,把我当成文科生。文科生震怒,理科生流泪qwq,然后我用贩卖机举了个例子,买的人--> 小白;贩卖机--> 计算器;售货系统--> 用户态;底层硬件以及相应售货操作--> 内核态+api;售货机商家、开箱钥匙--> 管理员,总算给他说服了。突然的灵感真不错,也可能是面试官不想继续为难我了
**好,现在问几个软性的问题。你说说你的期待,来实习想干什么? **从几个层面讲了讲
最后一个问题,说说你目前是怎么学习的。感觉是看我说的然后给我杀个回马***。
面试官翻了翻屏幕,既然提到新技术学习,我看你一面的rabbitMQ答得不怎么样,回去后看了深入学习了吗。解释了一下,我学过rabbitmq,用了但不是很熟悉
那我再给你一次机会,你能不能讲讲RabbitMQ回答下一面的问题。寄!但还好我对我笔记很熟,对他问题不熟,也不知道能回答道他几分满意,把rabbitmq作用,如何保证可靠性,从三个角度分别作答,然后解释了一下我对rabbitmq技术学习的时间不久等等。然后面试结束。
【============算法分割线============】
面试官后面直接开始问你有什么想问的,然后一个电话走了qwq。我的算法呢?之前问HR第三面注意点,还特地强调算法一定要过,hh。
【============反问分割线============】
实习生干什么工作?
介绍下部门?
Java后端开发在里面负责的是什么工作?
有什么建议?建议不要问这个问题qwq
下面还总结了一些大厂的面试题和经验
如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,,咱们下期见。
收藏 等于白嫖,点赞才是真情。
亲爱的小伙伴们,有需要JAVA面试文档资料请点赞+转发,关注我后,私信我333就可以领取免费资料哦