A plan

一個關於byte數組的解析:

因爲是String類型
圖形a對應的的十進制是97,二進制是0110 0001

圖形1對應的的十進制是49,二進制是0011 0001

圖形2對應的的十進制是50,二進制是0011 0010

圖形3對應的的十進制是51,二進制是0011 0011

圖形4對應的的十進制是52,二進制是0011 0100

圖形c對應的的十進制是99,二進制是0110 0011

buffer.get():讀取一個字節,是0110 0001,對應97,讀取後,buffer的position後移一位

buffer.getShort():讀取兩個字節,是讀取到圖形1、2,爲二進制:0011 0001 0011 0010,轉換成十進制是:2的13次方+2的12次方+2的8次方+2的5次方+2的4次方+2=12594

 

一個關於ByteBuffer解析:

buffer.putShort((short) 1):因爲short是兩個字節,當前buffer是:00000000 00000001
buffer.putInt(2):因爲int是四個字節,當前buffer是:00000000 00000001 00000000 00000000 00000000 00000010
以此類推
buffer.get()從buffer讀取一個字節,即8位,00000000=十進制0,
讀取後,當前buffer是:00000001  00000000 00000000 00000000 00000010
buffer.getShort()從buffer讀取兩個字節,即16位,00000001 00000000=十進制2的8次方=256
以此類推

計算機裏面的數據,很難讀懂。

一道面試題:

變量a是一個64位有符號的整數,初始值用16進製表示爲:0x7FFFFFFFFFFFFFFF
變量b是一個64位有符號的整數,初始值用16進製表示爲:0x8000000000000000
則a+b的結果用10進製表示爲多少:

答:a+b=0xFFFFFFFFFFFFFFFF,轉換爲二進制爲:11111....111111(64位1),有符號數,第一位是符號位,1開頭代表負數,計算機中負數以補碼的形式保存,對於負數:將除符號位之外按位取反,末尾加1,即得到原碼:11111....111111取反得到100....00000,加1,100....00001,即爲10進制-1

 

一個關於不恰當使用netty導致內存泄漏問題的排查:

項目介紹:假設A是一個明星,每次A來上海,都會啓動一個ServerBootstrap:
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(group);
當A啓動後,會有大量的粉絲與之建立tcp長連接,A需要離開上海了,會直接斷開自己的serverchannel
現在項目運行後,存在嚴重的內存泄漏問題

第一次調整:A需要離開上海了,會直接斷開自己的serverchannel(但A之前維護了每個粉絲與之建立tcp長連接),現在呢,直接斷開自己的serverchannel,先close所有的粉絲的tcp長連接,再斷開自己。

第一次調整結果:毛用沒有

第二次調整:ServerBootstrap bootstrap = new ServerBootstrap(); bootstrap.group(group);項目中,這個EventLoopGroup group是多個明星都共享的,且由於parentGroup、childGroup都用的是同一個group,這會有什麼問題?

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章