学妹字节、蘑菇街、阿里、莉莉丝...面经
这次投稿面经的是一位读者,其实我对他印象还是比较深刻的,因为他之前实习是在蘑菇街的,然后因为当时所在团队给他的感觉不是很强他想去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面试突击版本,不知道大家怎么看?觉得可以的人多,我这周就开始搞起来了。
我是敖丙,你知道的越多,你不知道的越多,我们下期见。