學妹字節(jié)、蘑菇街、阿里、莉莉絲...面經(jīng)
這次投稿面經(jīng)的是一位讀者,其實我對他印象還是比較深刻的,因為他之前實習是在蘑菇街的,然后因為當時所在團隊給他的感覺不是很強他想去B站,就有咨詢過我。

說實話他的學校本身在實習生和校招生里面都不算有優(yōu)勢的,能面過字節(jié)還是比較意外的,當然他也比較努力,經(jīng)常問我一些面試題(雖然我不回,主要是溝通成本太大)。

以下就是他的準備心路歷程,和一些面試題了:
我學校是一個雙非本科,在找工作的時候?qū)W歷上其實很不占優(yōu)勢,剛起步找工作的時候很多都是簡歷關都沒有過,字節(jié)這些大廠簡歷投一次掛一次,很幸運的是阿里給了我面試的機會,也是阿里的這一次面試讓我推翻了我原本學習的方式。
之后沉淀了一個月,又重新開始投簡歷,簡歷不斷的修修改改,原本我簡歷上寫了三個項目,但沒有一個能聊的,在面試的過程中面試官很多都是略過項目直接八股和算法,之后重新整理了項目,完成了一個輪子項目,簡歷上的技術(shù)棧也從原來的熟悉Spring、熟悉各種華麗花哨的東西,變成了三行技術(shù)棧,框架這些知識也寫成了了解,熟悉的知識則為計算機網(wǎng)絡、操作系統(tǒng)這些計算機類專業(yè)通識的課程。
作為校招生這些東西真的是唯一能打的。在面試的過程中也總是被打擊,之后陷入一段時間的自閉,又重新?lián)炱鸪霰鹃_始學,真的,一本書第1次看和第n次看感觸很不同,謝希仁老師的計算機網(wǎng)絡寫的真的特別好。
以下就是各種面試了:
2月份的阿里一面是我學習方向的一個轉(zhuǎn)折點,起初我很多東西只停留在八股文階段沒有自己的思考,簡歷上的項目也是自己玩的CRUD業(yè)務項目,阿里的面試官給了我很多的建議,我能感受到面試官是真的喜歡編程。
我原以為我對計算機網(wǎng)絡的了解已經(jīng)很充分了,直到這次面試擊垮了我最后的一點自信心,之后我就買了本書《網(wǎng)絡是怎么連接的》,重新開始學習計算機網(wǎng)絡。
Java的東西面試官問的很深,我提到一個點他就會問為什么,需要對每一個點有自己的思考,并不僅僅背了就可以的。至于項目,面試官也點出了,作為一個雙非學校的學生,在學歷上是不占優(yōu)勢的,所以需要一些有亮點的項目,此后我跟著JavaGuide做了一個RPC的框架,之后的面試很多的面試官也更加的喜歡問這個RPC項目,剛好也能展現(xiàn)我對計算機網(wǎng)絡的了解,可以說是很適合我的面試項目了。
暑期實習:
阿里一面 2月
自我介紹
估計是自己項目太拉垮,面試官直接開始問基礎了
進程和線程?
怎么理解線程安全的?
那在Java中怎么保證線程安全呢?
synchronized的實現(xiàn)?為什么要這么做,和ReentrantLock的差別
你提到了線程間共享的變量每個線程是會創(chuàng)建一個副本嗎,這個副本存儲的位置在哪呢?(后面發(fā)現(xiàn)Java并發(fā)編程書上寫的很清楚)
提到了volatile,可以說一下內(nèi)存屏障嗎?
線程池的線程數(shù)呢會怎么設置呢?如果CPU密集型和IO密集型操作都有呢,你怎么設置呢?
服務發(fā)現(xiàn)了解嗎?(很可惜在2月份的時候自己真沒怎么接觸過分布式)
網(wǎng)絡:
說說你理解的TCP?
在使用TCP傳輸數(shù)據(jù)的時候要注意些什么?(我說了應用層粘包的情況)
那怎么解決粘包呢?(在這里面試官其實引出了Netty,可是我不了解Netty,再此之后我就學習netty了)
SYN泛洪攻擊具體說說?
半連接隊列?了解Linux下TCP相關的配置嗎?
最后就是聊天,面試官很耐心的幫我分析簡歷上的問題,很詳細的指出了我面試過程中知識點的欠缺??梢愿惺艿某觯嬖嚬偈钦娴暮軣釔跩ava,跟我講了很多學習的方式,帶著好奇去探索Java。
富途一面 3月
自我介紹
介紹項目
鎖:synchronized、ReentrantLock、CAS
悲觀鎖、樂觀鎖
MySQL的事務隔離級別?
間隙鎖?
Redis的基本數(shù)據(jù)結(jié)構(gòu),你說說ZSET的實現(xiàn)吧?
你知道層數(shù)是怎么確定的嗎?
聊聊TCP,三次握手?
如果建立連接之后不發(fā)送數(shù)據(jù)會怎么樣?
四次揮手?
如果客戶端直接Closed連接會發(fā)生什么?
WEB后端安全你說幾點?
DDOS的原因?
跨站域名偽造怎么預防?
SQL注入?預編譯
你熟悉的設計模式,單例需要注意些什么?
反序列化會破壞單例,怎么處理呢?
反射破壞又怎么處理呢?
代理模式說說?能做什么呢?
算法題整一道:兩數(shù)組之間的交集,mlogn和n + m這樣的復雜度在什么情況下各自速度更快呢
01背包,沒做出,面試官講了講思路
反問:算法得繼續(xù)加強,部門是統(tǒng)一校招,具體分配到哪個組得看公司分配
富途二面 3月
全程算法題+智力題+概率題
莉莉絲游戲一面 3月
自我介紹
RPC是什么?
如果要你去實現(xiàn)負載均衡你會怎么做?
持久化連接、長連接你怎么做的?
JVM的垃圾回收機制你知道嗎?
MySQL的事務
MySQL的日志
Redis的基本類型
Redis的緩存擊穿、崩潰、穿透
如果要你去實現(xiàn)Redis的LRU淘汰策略你會怎么做?
莉莉絲游戲二面 3月
自我介紹
1億個數(shù)取前100個最大的
https://blog.csdn.net/super828/article/details/108890489
HTTP狀態(tài)碼100、200、301、302
301和302的區(qū)別
HTTPS的TLS的握手過程
粘包問題的原因,怎么解決?
抓過包嗎?wireshark
PING的底層實現(xiàn)?ICMP
同步阻塞、同步非阻塞、多路復用聊聊
select、poll、epoll
莉莉絲游戲的三面又教會了我很多,面試官是一個10年經(jīng)驗的技術(shù)專家,問的問題都很針對,是一個很專業(yè)的面試官。一開始讓我選擇一個聊的項目,面試整個過程其實都是在聊一個項目,從宏觀實現(xiàn)到具體細節(jié),到遇到的問題,會根據(jù)我的項目去詢問相關的知識點,根據(jù)我遇到的問題讓我分析為什么會遇到這樣的,為什么我這么做就能夠解決。最后莉莉絲游戲還是掛在了三面
莉莉絲游戲三面 3月
自我介紹
圍繞著項目展開
項目介紹
網(wǎng)絡模塊怎么做的?
粘包問題怎么解決的?為什么會出現(xiàn)沾包問題?
BIO和NIO的區(qū)別?
性能上的區(qū)別呢,為什么選擇NIO呢?
多路復用select/poll/epoll
你是使用Netty的啊,Netty的線程模型?
零拷貝說說?mmap()系統(tǒng)調(diào)用和sendfile()系統(tǒng)調(diào)用的區(qū)別?
操作系統(tǒng)的內(nèi)核態(tài)緩沖區(qū)存儲什么數(shù)據(jù)呢?
Java哪些操作涉及到了系統(tǒng)調(diào)用呢?
序列化模塊說說?
序列化失敗的坑,具體說說,為什么呢,怎么解決的呢?
JDK原生序列化和JSON序列化的區(qū)別,為什么原生序列化效率低?
Kryo序列化了解嗎?區(qū)別?
服務注冊說說?
Nacos存儲的數(shù)據(jù)是怎么映射的?
負載均衡怎么實現(xiàn)呢?
不使用Redis怎么去實現(xiàn)輪詢負載均衡算法呢?
負載均衡算法說說?
MySQL索引的類型具體說說,有哪些,分別有什么區(qū)別
聯(lián)合索索引什么情況下會出現(xiàn)索引失效的問題
索引字段使用聚合函數(shù)是否會失效
算法題:大數(shù)相乘 https://leetcode-cn.com/problems/multiply-strings/
蘑菇街一面 3月
自我介紹
項目:
熱點動態(tài)的分布式鎖,怎么保證原子性呢?
名額扣減是怎么去做的?怎么保證扣減的原子性
RPC框架的網(wǎng)絡方面是怎么做的
其他的RPC框架有了解的嗎?hession,性能
NIO的selector的底層實現(xiàn) -> epoll的水平觸發(fā)和邊緣觸發(fā)
從類加載開始說你對JAVA的理解 ,從類加載說到了垃圾回收
線程安全具體說說?什么是線程安全
怎么保證線程安全
鎖的實現(xiàn)具體說說
分段鎖什么的
Object中的wait和notify
Redis的數(shù)據(jù)類型?從String到ZSet擼了一遍
蘑菇街二面 3月
自我介紹
項目:
難點:熱點動態(tài)和名額扣減
原子性怎么保證的,分布式鎖怎么做的
樂觀鎖和悲觀鎖的區(qū)別講講,在Java中的體現(xiàn)呢?在MySQL中的體現(xiàn)呢?
LUA腳本是否了解
RPC框架網(wǎng)絡、序列化、注冊中心
參考開源的框架嗎?
算法題:循環(huán)隊列
中間件了解多少?
SQL題
Keep 一面 4月
自我介紹
項目:
名額扣減,分布式鎖
RPC項目的坑點
線程安全的集合介紹一下?ConcurrentHashMap、Vector、CopyOnWriteArrayList
鎖聊聊(syn、ren)
聊聊JVM:
JVM運行時內(nèi)存結(jié)構(gòu)
垃圾回收算法具體說說
為什么要使用分代收集呢
G1垃圾收集器說說
CMS和G1的選擇
Spring的動態(tài)代理
CGLIB字節(jié)碼技術(shù)除了動態(tài)代理還用在了哪里
SpringBoot的自動裝配
微服務了解嗎?
云原生了解嗎?
容器化了解嗎?
怎么去學習的?
算法題:求二叉樹的最大距離
Keep二面 4月
項目介紹:
Minds項目具體詢問,用了Redis的哪些命令
為什么用Redis去實現(xiàn)分布式鎖
Redis的多路復用具體講講
epoll的就緒鏈表詳細講講
用戶態(tài)和內(nèi)核態(tài)
文件描述符是什么?
RPC調(diào)用的流程
HTTP效率為什么沒有TCP高?
網(wǎng)絡模塊怎么去實現(xiàn)的
為什么要自己去處理粘包問題?
RPC項目遇到的坑
算法題:分割鏈表
嗶哩嗶哩 一面 5月
自我介紹
項目介紹:
分布式鎖介紹一下
分布式鎖怎么實現(xiàn)的,原子性怎么保證的啊
LUA腳本為什么能保證原子性
Redis的主從復制
Redis的緩存擊穿、穿透、雪崩
如何在代碼層面解決雪崩問題
MySQL是如何存儲數(shù)據(jù)的,從索引的角度說說
HTTP1.1和HTTP2的區(qū)別
說到了HTTP3,說說QUIC
覺得B站哪里使用了QUIC
算法題:乘積最大子數(shù)組
嗶哩嗶哩 二面 5月
自我介紹
項目介紹:
緩存擊穿
分布式鎖你怎么做的,時間是設置多久?
即時聊天怎么實現(xiàn)的?
線程池?怎么做的,核心參數(shù)
concurrentHashMap說說
JVM的哪個區(qū)域不會出現(xiàn)OOM
JAVA中的Future
Spring IOC相關
網(wǎng)絡:
路由協(xié)議
HTTP吧,HTTP請求頭說說
TCP的TIME_WAIT狀態(tài)
Ping的底層協(xié)議是什么
操作系統(tǒng):
IO多路復用
零拷貝mmap和sendFile
內(nèi)核態(tài)和用戶態(tài)
數(shù)據(jù)庫:
MYSQL的事務隔離級別
臟讀的場景
數(shù)據(jù)結(jié)構(gòu):
穩(wěn)定的排序算法
快排寫一個
秋招:
7月的時候,字節(jié)的HR突然聯(lián)系我詢問是否想投遞提前批,我自然是直接約了面試,因為已經(jīng)有了實習的經(jīng)驗,面試的題目不再像暑期實習那樣的卷了,更多的是詢問我實習期間做了什么,怎么做的。然后就計算機網(wǎng)絡和操作系統(tǒng)數(shù)據(jù)庫這些老八股了。有份實習秋招真的變得友好多了。
字節(jié)跳動 一面 7月
自我介紹
自己做的項目
動態(tài)代理
序列化
MySQL:
索引結(jié)構(gòu),B+樹
可以換成紅黑樹嗎?AVL、紅黑樹、B+樹、B樹
事務隔離級別:
對于可重復讀進行了詳細的闡述,MVCC、間隙鎖、Next-locks
存儲引擎有哪些
INNODB和MYSIAM的區(qū)別
聚簇索引和非聚簇索引
表鎖、行鎖
Redis:
基本數(shù)據(jù)結(jié)構(gòu)(string(SDS)、list(QUICKLIST)、set、hash(REHASH)、zset(跳躍表))
RDB持久化會拷貝兩份內(nèi)存數(shù)據(jù)嗎,具體是怎么做的?
Redis集群了解多少?
Expire的緩存過期策略,我誤以為讓我達淘汰策略,面完才發(fā)現(xiàn)是要我回答Redis針對設置過期時間的key怎么進行過期淘汰的
場景題:
給你100臺服務器如何存儲KV數(shù)據(jù)(一致性Hash)
操作系統(tǒng):
進程線程的區(qū)別
進程通信的方式線程間通信方式
零拷貝機制mmap、sendFile
多路復用select、poll、epoll
做題:
SQL題
二叉樹左視圖
字節(jié)跳動二面 8月
自我介紹
實習項目、實習業(yè)務
主播推流的流程、轉(zhuǎn)碼的流程
Redis怎么設計的
MySQL在執(zhí)行插入操作的流程
Buffer Pool
唯一索引和普通二級索引
樂觀鎖
描述一下CAS使用的場景
為什么MySQL要用B+樹去劃分頁面呢
操作系統(tǒng)的缺頁異常,以及缺頁調(diào)度算法
內(nèi)核態(tài)和用戶態(tài)、內(nèi)核態(tài)中有什么東西
Reactor模型
算法:字典序的第k大
字節(jié)跳動三面 8月
算法:
最小路徑和
連續(xù)數(shù)組的最大和
實習項目
Redis集群,主從復制
幾種集群模型
offeset?環(huán)形結(jié)構(gòu)具體說說
HTTP和RPC
RPC的幾大屬性
負載均衡的種類及算法
多級負載均衡
B樹和B+樹
查看進程信息的linux命令
netstat -an | grep "" 中的 | 是什么意思
進程內(nèi)存區(qū)域 棧、堆、高地址區(qū)、低地址區(qū)...
總結(jié)
我看完我人都啥了,現(xiàn)在面試題說實話還是挺難的,大部分我都已經(jīng)忘卻了,大家說會越來越卷,我想真的是沒辦法只能硬著頭皮學了。
這就是現(xiàn)實呀,各個公司的面經(jīng)和技術(shù)棧講解,我也維護在我的github了,大家可以去看看。https://github.com/AobingJava/JavaFamily

https://github.com/AobingJava/JavaFamily 我也準備把所有的技術(shù)文章導出成一整本pdf,作為一個pdf面試突擊版本,不知道大家怎么看?覺得可以的人多,我這周就開始搞起來了。
我是敖丙,你知道的越多,你不知道的越多,我們下期見。
