1. 程式人生 > >Java工程師內推阿里面試(被拒)來看看我踩過的坑

Java工程師內推阿里面試(被拒)來看看我踩過的坑

到了二輪,被刷了,原因不明,大概是我太菜了(╥_╥)。還記得二面最後問面試官覺得我怎麼樣?面試官說放心吧。

放心吧…

放心吧…

嚶嚶嚶,哭給你看哦

不過總結還是要的,雖然被刷了,但有其他公司的面試還在等著我啊!還是那句話,失敗乃成功之母,我幾乎記下了所有面試官問到的問題,由於不能透露具體題目,這裡列一下大概的知識點(句號後面是我當時回答的思路):

一面

面試時間30分鐘左右。

主要是關於計算機網路 TCP/IP 的知識以及作業系統的知識。

先問了一下在學校裡各科的成績,不提…
全域性唯一有序 ID。 snowflake ,timestamp 加前面,然後後面加上機器 id 等
馮諾依曼體系
shell 命令的執行過程
資訊熵
程式執行中的棧式結構,棧溢位攻擊
TCP/IP 有關知識。TCP 傳輸層加埠號,IP 網路層加 ip 地址;路由器就主要工作在 IP 網路層
同步與阻塞
並行與併發
Java 執行緒的本質,核心執行緒與使用者執行緒,執行緒排程,並行級別
核心態與使用者態,中斷
CPU 與記憶體與磁碟
快取行與偽共享
記憶體分配管理,段頁式。jemalloc
二面

二面時間40分鐘左右。

主要是關於自己寫的專案以及自己的學習生活。

還是先問成績,不提…
Java 程式的執行原理
普通可執行程式的執行原理
快取行與偽共享。兩個面試官都問,可見十分重要,還好都答出來了
從瀏覽器發出請求開始,到服務端應用接受到請求為止的過程
HashMap ,hash 碰撞,hash 演算法的優化
單點登入
正向代理與反向代理
反爬機制,爬蟲模擬瀏覽器行為
cglib 方法攔截
動態代理
依賴注入
Servlet 的本質
TCP 長連線。心跳包,websocket
Netty 百萬級長連線優化
DSL 解析到 AST 。lexer 和 parser
JVM 相關。(你讀過 GC 相關原始碼嗎?)
程式碼規範,包命名規範
大學裡最有成就感的事
讀過的 Java 書籍。(四大名著之類)
面試官貼心地給了我一些建議,讓我在一些方面(比如 Netty 上挖深一點)。後來想想可能已經在發好人卡了
當然面試官還問了許多開放性題目,就不說了。大家從上面的面試知識點中也可以看出來,基礎最重要(專案是用來加分的)。

阿里安排面試的速度相當的快,好評。

頭一天投簡歷,第二天晚上就打來電話一面了,當時我還在唱k;

一面完了第二天二面。

面試官提問的時候一般是按照“鏈式”提問的,一個問題後面可能跟著一連串更深層的問題,比如:

Q:Java 中執行緒的本質?

A:跟核心執行緒1:1,由作業系統排程,底層實現是 pthread。

Q:使用者執行緒跟核心執行緒的區別是什麼?

A:使用者執行緒對 CPU 是透明的,不能被作業系統排程。

Q:並行與併發的區別是什麼?(這個並不對的!只是我當時這麼說!)

A:並行效率更高,在真正的多核機器上實現,

Q:現在流行的執行緒排程演算法是什麼?

A:時間片輪轉法。

Q:可以在 Java 中設定執行緒的併發級別嗎?

A:可以。

Q:這個併發級別可以對應到作業系統嗎?

A:可以。

Q:如何把一個執行緒分配給指定的 CPU 呢?

A:不知道。

Q:這是一個開放性題,你再想想看?

A:(把其他 CPU 拔了)。

一個問題問完接著有下一個問題,最後可能會有開放性題,基本可以問到應試者不會為止。

所以大家準備知識的時候不要“淺嘗輒止”,有些知識挖深一點可能更好。

這些知識點大多數都是很重要的,當然還有鎖、集合、synchronized 等知識點面試官沒問,我也很遺憾。面不過,主要問題還是在自己身上。

當然還有很多發散題,是用於考知識面的,是上面的知識點中沒有的——比如面試官發現我做的B站爬蟲的自動登入是需要輸入驗證碼的,問我如何自動識別。。。如何自動識別。。。如何自動識別。。。我答的深度學習,舉出 dl4j ,是沒辦法強答了,面試官說有影象識別演算法。

我的簡歷很平常,專案有用 netty 從零開始搭建伺服器、普通 ssm 專案之類。
netty 百萬級長連線是真的問了的,不過現在想想有很多方面是我當時沒有答的,比如:
既然是長連線,如果場景像遊戲那般,斷線需要重登的話,那麼不用自己維護一個 session map 了,可以用 Channel#attr()#set() 來實現類似功能;
靜態資源可以提前用 unreleasable buffer(release() 方法永遠返回 true,可以多次傳輸)準備好;
用 PooledByteBufAllocator ,netty 自己用 jemalloc 實現的的引用計數物件管理,不過這個是預設的,應該不算“優化”;
如果不對 io buffer 操作,優先考慮使用 direct buffer 等等等等。。。
我面試的時候居然都沒想到,只答了 aio epoll 、少用狀態 (Handler 可以 @Shared)、調整 bossGroup 和 workerGroup 還有業務執行緒池的執行緒數量(《併發程式設計實戰》有公式可惜忘了)、調整這幾種執行緒優先順序。
其他同學寫的阿里面經我也看了,非同步與 Future (CompletableFuture)、 HashTable 與 ConcurrentHashMap 、volatile 與原子操作、JMM 、GC 為什麼要分代、ArrayList 與 Vector 、synchronized 與 ReentrantLock ,然而我這邊除了 HashMap 都沒問到。
我是第一次被面試,也是第一次被拒,當然也不會是最後一次,下次面試的時候要儘量讓面試官知道你會什麼。
給面試官一點建議,一上來就問 netty 百萬級長連線會“嚇到我的” /(ㄒoㄒ)/~~。如果我問的話,會先問 eventloop handler 模型、request 與 channel 與 eventloop 的關係,接著問一下 ByteBuf 與 jdk ByteBuffer 的關係和區別,direct buffer 與 heap buffer 的優劣;也不要一開始就問 JVM GC 原始碼嘛,感覺自己學的那可憐的一丁點關於 GC 的知識直接被全盤否定,像面經那樣問問為啥分代 gc 多友善。
關注我:私信回覆“架構資料”獲取往期Java高階架構資料、原始碼、筆記、視訊

Dubbo、Redis、設計模式、Netty、zookeeper、Spring cloud、分散式、

高併發等架構技術

話題到這裡就結束了,java學習的可以來我的群,群裡每天都有對應資料學習:813647451,歡迎初學和進階中的小夥伴。
在這裡插入圖片描述