互聯(lián)網(wǎng)大廠Java面試題——Netty 面試題解析

1.Netty 是什么拌消?

Netty 是一款基于 NIO(Nonblocking I/O挑豌,非阻塞IO)開發(fā)的網(wǎng)絡(luò)通信框架,對比于 BIO(Blocking I/O墩崩,阻塞IO)氓英,他的并發(fā)性能得到了很大提高。難能可貴的是鹦筹,在保證快速和易用性的同時铝阐,并沒有喪失可維護性和性能等優(yōu)勢。


2.Netty 的特點是什么铐拐?

高并發(fā):Netty 是一款基于 NIO(Nonblocking IO徘键,非阻塞IO)開發(fā)的網(wǎng)絡(luò)通信框架,對比于 BIO(Blocking I/O遍蟋,阻塞IO)吹害,他的并發(fā)性能得到了很大提高。

傳輸快:Netty 的傳輸依賴于零拷貝特性虚青,盡量減少不必要的內(nèi)存拷貝它呀,實現(xiàn)了更高效率的傳輸。

封裝好:Netty 封裝了 NIO 操作的很多細節(jié)棒厘,提供了易于使用調(diào)用接口纵穿。


3.什么是 Netty 的零拷貝?

Netty 的零拷貝主要包含三個方面:

Netty 的接收和發(fā)送 ByteBuffer 采用 DIRECT BUFFERS奢人,使用堆外直接內(nèi)存進行 Socket 讀寫政恍,不需要進行字節(jié)緩沖區(qū)的二次拷貝。如果使用傳統(tǒng)的堆內(nèi)存(HEAP BUFFERS)進行 Socket 讀寫达传,JVM 會將堆內(nèi)存 Buffer 拷貝一份到直接內(nèi)存中篙耗,然后才寫入 Socket 中。相比于堆外直接內(nèi)存宪赶,消息在發(fā)送過程中多了一次緩沖區(qū)的內(nèi)存拷貝宗弯。

Netty 提供了組合 Buffer 對象,可以聚合多個 ByteBuffer 對象搂妻,用戶可以像操作一個 Buffer 那樣方便的對組合 Buffer 進行操作蒙保,避免了傳統(tǒng)通過內(nèi)存拷貝的方式將幾個小 Buffer 合并成一個大的 Buffer。

Netty 的文件傳輸采用了 transferTo 方法欲主,它可以直接將文件緩沖區(qū)的數(shù)據(jù)發(fā)送到目標(biāo) Channel邓厕,避免了傳統(tǒng)通過循環(huán) write 方式導(dǎo)致的內(nèi)存拷貝問題逝嚎。


4.Netty 的優(yōu)勢有哪些?

使用簡單:封裝了 NIO 的很多細節(jié)详恼,使用更簡單补君。

功能強大:預(yù)置了多種編解碼功能,支持多種主流協(xié)議昧互。

定制能力強:可以通過 ChannelHandler 對通信框架進行靈活地擴展挽铁。

性能高:通過與其他業(yè)界主流的 NIO 框架對比,Netty 的綜合性能最優(yōu)敞掘。

穩(wěn)定:Netty 修復(fù)了已經(jīng)發(fā)現(xiàn)的所有 NIO 的 bug叽掘,讓開發(fā)人員可以專注于業(yè)務(wù)本身。

社區(qū)活躍:Netty 是活躍的開源項目玖雁,版本迭代周期短更扁,bug 修復(fù)速度快。


5.Netty 的應(yīng)用場景有哪些赫冬?

典型的應(yīng)用有:阿里分布式服務(wù)框架 Dubbo浓镜,默認(rèn)使用 Netty 作為基礎(chǔ)通信組件,還有 RocketMQ 也是使用 Netty 作為通訊的基礎(chǔ)面殖。


6.Netty 高性能表現(xiàn)在哪些方面?

IO 線程模型:同步非阻塞哭廉,用最少的資源做更多的事脊僚。

內(nèi)存零拷貝:盡量減少不必要的內(nèi)存拷貝,實現(xiàn)了更高效率的傳輸遵绰。

內(nèi)存池設(shè)計:申請的內(nèi)存可以重用辽幌,主要指直接內(nèi)存。內(nèi)部實現(xiàn)是用一顆二叉查找樹管理內(nèi)存分配情況椿访。

串形化處理讀寫:避免使用鎖帶來的性能開銷乌企。

高性能序列化協(xié)議:支持 protobuf 等高性能序列化協(xié)議。


7.Netty 和 Tomcat 的區(qū)別成玫?

作用不同:Tomcat 是 Servlet 容器加酵,可以視為 Web 服務(wù)器,而 Netty 是異步事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用程序框架和工具用于簡化網(wǎng)絡(luò)編程哭当,例如TCP和UDP套接字服務(wù)器猪腕。

協(xié)議不同:Tomcat 是基于 http 協(xié)議的 Web 服務(wù)器,而 Netty 能通過編程自定義各種協(xié)議钦勘,因為 Netty 本身自己能編碼/解碼字節(jié)流陋葡,所有 Netty 可以實現(xiàn),HTTP 服務(wù)器彻采、FTP 服務(wù)器腐缤、UDP 服務(wù)器捌归、RPC 服務(wù)器、WebSocket 服務(wù)器岭粤、Redis 的 Proxy 服務(wù)器惜索、MySQL 的 Proxy 服務(wù)器等等。

8.Netty 中有那種重要組件绍在?

Channel:Netty 網(wǎng)絡(luò)操作抽象類门扇,它除了包括基本的 I/O 操作,如 bind偿渡、connect臼寄、read、write 等溜宽。

EventLoop:主要是配合 Channel 處理 I/O 操作吉拳,用來處理連接的生命周期中所發(fā)生的事情。

ChannelFuture:Netty 框架中所有的 I/O 操作都為異步的适揉,因此我們需要 ChannelFuture 的 addListener()注冊一個 ChannelFutureListener 監(jiān)聽事件留攒,當(dāng)操作執(zhí)行成功或者失敗時,監(jiān)聽就會自動觸發(fā)返回結(jié)果嫉嘀。

ChannelHandler:充當(dāng)了所有處理入站和出站數(shù)據(jù)的邏輯容器炼邀。ChannelHandler 主要用來處理各種事件,這里的事件很廣泛剪侮,比如可以是連接拭宁、數(shù)據(jù)接收、異常瓣俯、數(shù)據(jù)轉(zhuǎn)換等杰标。

ChannelPipeline:為 ChannelHandler 鏈提供了容器,當(dāng) channel 創(chuàng)建時彩匕,就會被自動分配到它專屬的 ChannelPipeline腔剂,這個關(guān)聯(lián)是永久性的。


9.Netty 發(fā)送消息有幾種方式驼仪?

Netty 有兩種發(fā)送消息的方式:

直接寫入 Channel 中掸犬,消息從 ChannelPipeline 當(dāng)中尾部開始移動;

寫入和 ChannelHandler 綁定的 ChannelHandlerContext 中绪爸,消息從 ChannelPipeline 中的下一個 ChannelHandler 中移動登渣。


10.默認(rèn)情況 Netty 起多少線程?何時啟動毡泻?

Netty 默認(rèn)是 CPU 處理器數(shù)的兩倍胜茧,bind 完之后啟動。


11.Netty 支持哪些心跳類型設(shè)置?

readerIdleTime:為讀超時時間(即測試端一定時間內(nèi)未接受到被測試端消息)呻顽。

writerIdleTime:為寫超時時間(即測試端一定時間內(nèi)向被測試端發(fā)送消息)雹顺。

allIdleTime:所有類型的超時時間。


最后

如果大家想更深入的了解的話廊遍,推薦大家閱讀著這幾篇文章:

3月份福利嬉愧, “0元包郵”贈送程序員技術(shù)開發(fā)書籍!

Java工程師的架構(gòu)技術(shù)進階路線圖喉前,收藏没酣!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卵迂,隨后出現(xiàn)的幾起案子裕便,更是在濱河造成了極大的恐慌,老刑警劉巖见咒,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偿衰,死亡現(xiàn)場離奇詭異,居然都是意外死亡改览,警方通過查閱死者的電腦和手機下翎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宝当,“玉大人视事,你說我怎么就攤上這事∏炜” “怎么了俐东?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盾鳞。 經(jīng)常有香客問我犬性,道長瞻离,這世上最難降的妖魔是什么腾仅? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮套利,結(jié)果婚禮上推励,老公的妹妹穿的比我還像新娘。我一直安慰自己肉迫,他們只是感情好验辞,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著喊衫,像睡著了一般跌造。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天壳贪,我揣著相機與錄音陵珍,去河邊找鬼。 笑死违施,一個胖子當(dāng)著我的面吹牛互纯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播磕蒲,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼留潦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辣往?” 一聲冷哼從身側(cè)響起兔院,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎排吴,沒想到半個月后秆乳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡钻哩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年屹堰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片街氢。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡扯键,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珊肃,到底是詐尸還是另有隱情荣刑,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布伦乔,位于F島的核電站厉亏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏烈和。R本人自食惡果不足惜爱只,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望招刹。 院中可真熱鬧恬试,春花似錦、人聲如沸疯暑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妇拯。三九已至幻馁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仗嗦。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工预麸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人儒将。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓吏祸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钩蚊。 傳聞我的和親對象是個殘疾皇子贡翘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容