学妹字节、蘑菇街、阿里、莉莉丝...面经

三太子敖丙

共 5267字,需浏览 11分钟

 ·

2021-08-27 11:46

这次投稿面经的是一位读者,其实我对他印象还是比较深刻的,因为他之前实习是在蘑菇街的,然后因为当时所在团队给他的感觉不是很强他想去B站,就有咨询过我。

说实话他的学校本身在实习生和校招生里面都不算有优势的,能面过字节还是比较意外的,当然他也比较努力,经常问我一些面试题(虽然我不回,主要是沟通成本太大)。

以下就是他的准备心路历程,和一些面试题了:

我学校是一个双非本科,在找工作的时候学历上其实很不占优势,刚起步找工作的时候很多都是简历关都没有过,字节这些大厂简历投一次挂一次,很幸运的是阿里给了我面试的机会,也是阿里的这一次面试让我推翻了我原本学习的方式。

之后沉淀了一个月,又重新开始投简历,简历不断的修修改改,原本我简历上写了三个项目,但没有一个能聊的,在面试的过程中面试官很多都是略过项目直接八股和算法,之后重新整理了项目,完成了一个轮子项目,简历上的技术栈也从原来的熟悉Spring、熟悉各种华丽花哨的东西,变成了三行技术栈,框架这些知识也写成了了解,熟悉的知识则为计算机网络、操作系统这些计算机类专业通识的课程。

作为校招生这些东西真的是唯一能打的。在面试的过程中也总是被打击,之后陷入一段时间的自闭,又重新捡起出本开始学,真的,一本书第1次看和第n次看感触很不同,谢希仁老师的计算机网络写的真的特别好。

以下就是各种面试了:

2月份的阿里一面是我学习方向的一个转折点,起初我很多东西只停留在八股文阶段没有自己的思考,简历上的项目也是自己玩的CRUD业务项目,阿里的面试官给了我很多的建议,我能感受到面试官是真的喜欢编程。

我原以为我对计算机网络的了解已经很充分了,直到这次面试击垮了我最后的一点自信心,之后我就买了本书《网络是怎么连接的》,重新开始学习计算机网络。

Java的东西面试官问的很深,我提到一个点他就会问为什么,需要对每一个点有自己的思考,并不仅仅背了就可以的。至于项目,面试官也点出了,作为一个双非学校的学生,在学历上是不占优势的,所以需要一些有亮点的项目,此后我跟着JavaGuide做了一个RPC的框架,之后的面试很多的面试官也更加的喜欢问这个RPC项目,刚好也能展现我对计算机网络的了解,可以说是很适合我的面试项目了。

暑期实习:

阿里一面 2月


自我介绍

估计是自己项目太拉垮,面试官直接开始问基础了

进程和线程?

怎么理解线程安全的?

那在Java中怎么保证线程安全呢?

synchronized的实现?为什么要这么做,和ReentrantLock的差别

你提到了线程间共享的变量每个线程是会创建一个副本吗,这个副本存储的位置在哪呢?(后面发现Java并发编程书上写的很清楚)

提到了volatile,可以说一下内存屏障吗?

线程池的线程数呢会怎么设置呢?如果CPU密集型和IO密集型操作都有呢,你怎么设置呢?

服务发现了解吗?(很可惜在2月份的时候自己真没怎么接触过分布式)

网络:

说说你理解的TCP?

在使用TCP传输数据的时候要注意些什么?(我说了应用层粘包的情况)

那怎么解决粘包呢?(在这里面试官其实引出了Netty,可是我不了解Netty,再此之后我就学习netty了)

SYN泛洪攻击具体说说?

半连接队列?了解Linux下TCP相关的配置吗?

最后就是聊天,面试官很耐心的帮我分析简历上的问题,很详细的指出了我面试过程中知识点的欠缺。可以感受的出,面试官是真的很热爱Java,跟我讲了很多学习的方式,带着好奇去探索Java。

富途一面 3月


自我介绍

介绍项目

锁:synchronized、ReentrantLock、CAS

悲观锁、乐观锁

MySQL的事务隔离级别?

间隙锁?

Redis的基本数据结构,你说说ZSET的实现吧?

你知道层数是怎么确定的吗?

聊聊TCP,三次握手?

如果建立连接之后不发送数据会怎么样?

四次挥手?

如果客户端直接Closed连接会发生什么?

WEB后端安全你说几点?

DDOS的原因?

跨站域名伪造怎么预防?

SQL注入?预编译

你熟悉的设计模式,单例需要注意些什么?

反序列化会破坏单例,怎么处理呢?

反射破坏又怎么处理呢?

代理模式说说?能做什么呢?

算法题整一道:两数组之间的交集,mlogn和n + m这样的复杂度在什么情况下各自速度更快呢

01背包,没做出,面试官讲了讲思路

反问:算法得继续加强,部门是统一校招,具体分配到哪个组得看公司分配

富途二面 3月


全程算法题+智力题+概率题

莉莉丝游戏一面 3月


自我介绍

RPC是什么?

如果要你去实现负载均衡你会怎么做?

持久化连接、长连接你怎么做的?

JVM的垃圾回收机制你知道吗?

MySQL的事务

MySQL的日志

Redis的基本类型

Redis的缓存击穿、崩溃、穿透

如果要你去实现Redis的LRU淘汰策略你会怎么做?

莉莉丝游戏二面 3月


自我介绍

1亿个数取前100个最大的

https://blog.csdn.net/super828/article/details/108890489

HTTP状态码100、200、301、302

301和302的区别

HTTPS的TLS的握手过程

粘包问题的原因,怎么解决?

抓过包吗?wireshark

PING的底层实现?ICMP

同步阻塞、同步非阻塞、多路复用聊聊

select、poll、epoll

莉莉丝游戏的三面又教会了我很多,面试官是一个10年经验的技术专家,问的问题都很针对,是一个很专业的面试官。一开始让我选择一个聊的项目,面试整个过程其实都是在聊一个项目,从宏观实现到具体细节,到遇到的问题,会根据我的项目去询问相关的知识点,根据我遇到的问题让我分析为什么会遇到这样的,为什么我这么做就能够解决。最后莉莉丝游戏还是挂在了三面

莉莉丝游戏三面 3月


自我介绍

围绕着项目展开

项目介绍

网络模块怎么做的?

粘包问题怎么解决的?为什么会出现沾包问题?

BIO和NIO的区别?

性能上的区别呢,为什么选择NIO呢?

多路复用select/poll/epoll

你是使用Netty的啊,Netty的线程模型?

零拷贝说说?mmap()系统调用和sendfile()系统调用的区别?

操作系统的内核态缓冲区存储什么数据呢?

Java哪些操作涉及到了系统调用呢?

序列化模块说说?

序列化失败的坑,具体说说,为什么呢,怎么解决的呢?

JDK原生序列化和JSON序列化的区别,为什么原生序列化效率低?

Kryo序列化了解吗?区别?

服务注册说说?

Nacos存储的数据是怎么映射的?

负载均衡怎么实现呢?

不使用Redis怎么去实现轮询负载均衡算法呢?

负载均衡算法说说?

MySQL索引的类型具体说说,有哪些,分别有什么区别

联合索索引什么情况下会出现索引失效的问题

索引字段使用聚合函数是否会失效

算法题:大数相乘 https://leetcode-cn.com/problems/multiply-strings/

蘑菇街一面 3月


自我介绍

项目:

热点动态的分布式锁,怎么保证原子性呢?

名额扣减是怎么去做的?怎么保证扣减的原子性

RPC框架的网络方面是怎么做的

其他的RPC框架有了解的吗?hession,性能

NIO的selector的底层实现 -> epoll的水平触发和边缘触发

从类加载开始说你对JAVA的理解 ,从类加载说到了垃圾回收

线程安全具体说说?什么是线程安全

怎么保证线程安全

锁的实现具体说说

分段锁什么的

Object中的wait和notify

Redis的数据类型?从String到ZSet撸了一遍

蘑菇街二面 3月


自我介绍

项目:

难点:热点动态和名额扣减

原子性怎么保证的,分布式锁怎么做的

乐观锁和悲观锁的区别讲讲,在Java中的体现呢?在MySQL中的体现呢?

LUA脚本是否了解

RPC框架网络、序列化、注册中心

参考开源的框架吗?

算法题:循环队列

中间件了解多少?

SQL题

Keep 一面  4月


自我介绍

项目:

名额扣减,分布式锁

RPC项目的坑点

线程安全的集合介绍一下?ConcurrentHashMap、Vector、CopyOnWriteArrayList

锁聊聊(syn、ren)

聊聊JVM:

JVM运行时内存结构

垃圾回收算法具体说说

为什么要使用分代收集呢

G1垃圾收集器说说

CMS和G1的选择

Spring的动态代理

CGLIB字节码技术除了动态代理还用在了哪里

SpringBoot的自动装配

微服务了解吗?

云原生了解吗?

容器化了解吗?

怎么去学习的?

算法题:求二叉树的最大距离

Keep二面 4月


项目介绍:

Minds项目具体询问,用了Redis的哪些命令

为什么用Redis去实现分布式锁

Redis的多路复用具体讲讲

epoll的就绪链表详细讲讲

用户态和内核态

文件描述符是什么?

RPC调用的流程

HTTP效率为什么没有TCP高?

网络模块怎么去实现的

为什么要自己去处理粘包问题?

RPC项目遇到的坑

算法题:分割链表

哔哩哔哩 一面 5月


自我介绍

项目介绍:

分布式锁介绍一下

分布式锁怎么实现的,原子性怎么保证的啊

LUA脚本为什么能保证原子性

Redis的主从复制

Redis的缓存击穿、穿透、雪崩

如何在代码层面解决雪崩问题

MySQL是如何存储数据的,从索引的角度说说

HTTP1.1和HTTP2的区别

说到了HTTP3,说说QUIC

觉得B站哪里使用了QUIC

算法题:乘积最大子数组

哔哩哔哩 二面 5月


自我介绍

项目介绍:

缓存击穿

分布式锁你怎么做的,时间是设置多久?

即时聊天怎么实现的?

线程池?怎么做的,核心参数

concurrentHashMap说说

JVM的哪个区域不会出现OOM

JAVA中的Future

Spring IOC相关

网络:

路由协议

HTTP吧,HTTP请求头说说

TCP的TIME_WAIT状态

Ping的底层协议是什么

操作系统:

IO多路复用

零拷贝mmap和sendFile

内核态和用户态

数据库:

MYSQL的事务隔离级别

脏读的场景

数据结构:

稳定的排序算法

快排写一个

秋招:

7月的时候,字节的HR突然联系我询问是否想投递提前批,我自然是直接约了面试,因为已经有了实习的经验,面试的题目不再像暑期实习那样的卷了,更多的是询问我实习期间做了什么,怎么做的。然后就计算机网络和操作系统数据库这些老八股了。有份实习秋招真的变得友好多了。

字节跳动 一面 7月


自我介绍

自己做的项目

动态代理

序列化

MySQL:

索引结构,B+树

可以换成红黑树吗?AVL、红黑树、B+树、B树

事务隔离级别:

对于可重复读进行了详细的阐述,MVCC、间隙锁、Next-locks

存储引擎有哪些

INNODB和MYSIAM的区别

聚簇索引和非聚簇索引

表锁、行锁

Redis:

基本数据结构(string(SDS)、list(QUICKLIST)、set、hash(REHASH)、zset(跳跃表))

RDB持久化会拷贝两份内存数据吗,具体是怎么做的?

Redis集群了解多少?

Expire的缓存过期策略,我误以为让我达淘汰策略,面完才发现是要我回答Redis针对设置过期时间的key怎么进行过期淘汰的

场景题:

给你100台服务器如何存储KV数据(一致性Hash)

操作系统:

进程线程的区别

进程通信的方式线程间通信方式

零拷贝机制mmap、sendFile

多路复用select、poll、epoll

做题:

SQL题

二叉树左视图

字节跳动二面 8月


自我介绍

实习项目、实习业务

主播推流的流程、转码的流程

Redis怎么设计的

MySQL在执行插入操作的流程

Buffer Pool

唯一索引和普通二级索引

乐观锁

描述一下CAS使用的场景

为什么MySQL要用B+树去划分页面呢

操作系统的缺页异常,以及缺页调度算法

内核态和用户态、内核态中有什么东西

Reactor模型

算法:字典序的第k大

字节跳动三面 8月


算法:

最小路径和

连续数组的最大和

实习项目

Redis集群,主从复制

几种集群模型

offeset?环形结构具体说说

HTTP和RPC

RPC的几大属性

负载均衡的种类及算法

多级负载均衡

B树和B+树

查看进程信息的linux命令

netstat -an | grep "" 中的 | 是什么意思

进程内存区域 栈、堆、高地址区、低地址区...

总结

我看完我人都啥了,现在面试题说实话还是挺难的,大部分我都已经忘却了,大家说会越来越卷,我想真的是没办法只能硬着头皮学了。

这就是现实呀,各个公司的面经和技术栈讲解,我也维护在我的github了,大家可以去看看。https://github.com/AobingJava/JavaFamily

https://github.com/AobingJava/JavaFamily 我也准备把所有的技术文章导出成一整本pdf,作为一个pdf面试突击版本,不知道大家怎么看?觉得可以的人多,我这周就开始搞起来了。

我是敖丙,你知道的越多,你不知道的越多,我们下期见。

浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报