1. 程式人生 > >阿里實習內推面試(被拒)

阿里實習內推面試(被拒)

面試職位: 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;

一面完了第二天二面。

================== 更新 ==================

500+收藏了,各位別這樣啊?,這只是個總結,並不是什麼面經。

既然大家這麼有興趣,我再多寫點好了。

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

Q:Java 中執行緒的本質?

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

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

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

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

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

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

A:時間片輪轉法。

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

A:可以。

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

A:可以。

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

A:不知道。

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

A:(把其他 CPU 拔了)。

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

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

================== 更新 ==================

晚上回來看看,已經800+收藏了。。。

評論中很多同學說難,應該是由我應試的崗位和麵對的面試官決定的,不具備普適性。

這些知識點大多數都是很重要的,當然還有鎖、集合、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 多友善。

================== 最後更一次 ==================

已經找到實習了哈,十分感謝推薦我的各位。

是啦是啦,我是本科大三,我的簡歷真的沒寫啥厲害的,別叫我大佬,擔不起?。

評論和私信沒想到這麼多,這幾天很少上知乎,不能一一回復,望諒解。

我對知識的愛好比較廣泛,但沒有在哪一方面挖得很深,是我的弱點,大家學習的時候可以“有偏向”地學。

ps. 沒有找到實習的同學,請看評論區,應該能找到你想要的。