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,这会有什么问题?

 

 

 

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