【字节提前批】后端开发一二三四面分享

先说一下个人情况:985渣硕,没项目也没实习…… 本身是抱着练手的心态去投一下字节提前批的,没想到过了。

一面:1小时(7.30)

基本上就是常见的八股文。
先是计算机网络的。

  1. 从下到上说一下OSI七层协议,以及每一层的作用;
  2. IP地址和MAC地址的转换方式;
  3. TCP连接的三次握手,为什么需要三次握手;
  4. TCP释放连接的四次挥手,服务器发送FIN报文之后客户端的状态,为什么?
  5. TCP的流量控制和拥塞控制流程;

然后是操作系统的。

  1. 说一下虚拟内存(LZ说自己对OS不了解,然后说为了进程隔离…… 面试官笑了笑,说看来你确实不了解);

再后面是MySQL的。

  1. 说一下MySQL中的索引(LZ一个人balabala了一大堆,主要谈了索引的数据结构和几种类型);
  2. 事务的隔离级别;
  3. 事务是怎么实现的(不知道这个问题怎么答,就从ACID的角度把三种日志、行锁间隙锁、MVCC全说了一遍);

算法题:

  1. 用两个栈实现一个队列,口述一下;
  2. 二叉树中每个节点的值都是0~9中的一个数字,从根节点到叶子结点的路径上所有数字按个位、十位、百位……的顺序可以拼成一个整数,求所有这些整数的和。(实在找不到原题了……)

反问:

  1. 可以介绍一下部门的业务吗?
  2. 为什么不问Java,我对Java也蛮熟悉的?(真是给自己挖坑)

一面面试官挺和善的,我说的过程中有一些口误,我跟他都笑了起来。面试完毕当场表示要给我约下一面,找个会Java的来问我。不过我晚上还有笔试,就推掉了。

二面:50分钟(8.2)

基本上全程都在问JUC,问得比较深入。

  1. Java中实现进程同步的机制有哪些(LZ对OS不熟,所以不知道面试官想问什么,就答了synchronized和ReentrantLock);
  2. 说一下synchronized的原理(答了偏向锁和轻量级锁的机制,还有ObjectMonitor);
  3. 说一下ReentrantLock的实现(先答AQS的原理,再提了一下tryAcquire()这些方法的实现);
  4. Java中的同步机制有哪些(意识到了好像不止这两个,就把JUC里面的报菜名,一个一个说);
  5. CopyOnWriteArrayList的实现原理(这个很简单);
  6. 线程池了解过吗,怎么实现的(生产者消费者模型,workQueue和workers等等);
  7. 读写锁了解过吗,怎么实现的(没了解过…… 面试官给我解释了一下,我说这不就是MySQL里面的锁吗,于是问题就来到了数据库);
  8. 事务是怎么实现的(又是相同的问题,LZ这次答得可能更有准备了);

算法:
旋转图像(LeetCode第48题)

反问环节就随便聊了聊。

面试官人比较严谨,上来还介绍了自己的名字。尴尬的是我算法题没写出来…… 边界条件似乎一直有问题,最后面试官让我说了一下思路,没问题,也放我过了。

三面:50分钟(8.3)

面试官上来问有啥项目吗?我说没有…… 学校做的是别的东西,简单介绍了一下。
面试就问了两个问题:

  1. MVC是什么?
  2. 在百度搜索框输入一串文字,假如后端是SpringMVC架构的,会发生什么?

算法题:
n皇后(LeetCode第51题,差点没写出来)

场景题:
设计一个停车场,有大车和小车两种车位,大车位可以停大车和小车,小车位只能停小车。
LZ以为这个题就随便问问,就想了一个计数器的方案,但明显有漏洞;在面试官的提醒下改掉了漏洞,但面试官说从车位的角度思考,不要从车辆的角度思考;中间还一直局限在数量这个角度上;最后,在面试官的不断提示下,给出了一个类似线程池的解决方案,将大车位和小车位放入车位池,每当来一个车辆就为其从车位池中拿出一个车位并匹配,车开走后释放。

反问:
问了一下场景题的答案,面试官说比较开放,他给出的解决方案跟我最后说的那个有一点像,也不完全像。

面试官看起来挺年轻的,有点像我的堂哥,交流起来蛮舒服的,最后问我假如给offer的话能不能去实习,我说寒假应该可以。

四面:30分钟(8.4)

三面后不久,HR给我打电话说面试官要求加一轮交叉面,可能对我之前的面试不太满意。
四面面试官说之前聊了那么多了,这次咱们聊点别的,我以为要聊人生了,没想到还是技术……

  1. 数据库和文件系统相比的优点(LZ不懂文件系统……只能一个劲吹数据库);
  2. 数据库的锁(乐观锁MVCC、排他锁行锁、间隙锁、临键锁);
  3. Java的锁(synchronized、ReentrantLock);
  4. C++的锁(我说不懂C++,面试官问你猜C++有锁吗?我猜有)
  5. 线程池有了解吗,为什么线程创建和撤销开销大?

场景题:
用手机扫码支付时,背后发生了什么?(从用户、服务器、银行服务器、店家这些角色的角度说了一下流程)

反问:

  1. 跟我一面的面试官是一个部门嘛(是);
  2. 需要的技术栈有哪些(刚刚问你的就差不多了);
  3. 对我有什么建议(去把操作系统学一学);

四面面试官不太在意技术细节,一开始每次我想说一些的时候都会被打断,后来就干脆只聊设计思路了。面试官似乎意识到我操作系统不怎么懂,每次涉及到OS的时候都会提出中断请求来问我为什么是这样子。

意向书(8.10)

我感觉自己后两面表现都不怎么好,没想到还是给发了意向书,只能说是惊喜了~

#字节跳动2021秋招##面经##校招##字节跳动##Java工程师#
全部评论
太强了 羡慕
点赞 回复 分享
发布于 2021-08-11 22:06
请问是字节的哪个部门呀
点赞 回复 分享
发布于 2021-08-11 22:11
事务是怎么实现的,这个问题怎么答比较好一点
点赞 回复 分享
发布于 2021-08-12 16:22
硕士没有项目是科班吗?
点赞 回复 分享
发布于 2021-10-07 22:16

相关推荐

会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
评论
6
51
分享

创作者周榜

更多
牛客网
牛客企业服务