面试常见问题:如何判断40亿个无符号整数之中是否存在某个数?这算一个老问题了。一个个遍历效率太低,肯定不是面试官们想要的答案,很多人首先想到的可能是快速排序,然后用二分查找,先不说时间复杂度的问题,这里还存在一个更严重的问题:40亿个数使用的内存空间太大了,假如是32位整数,40亿个整数使用的空间就是16,000,000。
有没有既快速,内存使用又比较小的方案呢?答案是位图。很懵!位图是什么?位图可以认为就是一系列的二进制位,每一位代表一个数字。在这个例子中,二进制位上存储的是1就代表这个数字存在,存储的是0就代表这个数字不存在。这样40亿个整数就是4000000000bit/8=500000000个字节,大约476.8M,一下子压缩了很多。
1、如何判断一个IP地址的网络位和主机位?
一个A类IP地址是指,在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。判断网络位与主机位:通过子网掩码1对应IP地址的部分是网络位,子网掩码0对应IP地址的部分是主机位。即IP32bit网络位+主机位4*ByteIP地址的构成是由网络号加主机号组成的。
IP地址类别:IP地址可以根据第一个字节的范围来确定其网络位和主机位。IP地址子网掩码都是32位的2进制,通过子网掩码来区分网络位和主机位,子网掩码跟IP地址对应,则子网掩码为1的是网络位,为0的是主机位。例如:掩码。一个完整的IP地址是由网络地址和主机地址组成的,网络地址是区分网络段的一个标识。
2、如何判断网络位与主机位?
判断网络位与主机位:通过子网掩码1对应IP地址的部分是网络位,子网掩码0对应IP地址的部分是主机位。即IP32bit网络位+主机位4*ByteIP地址的构成是由网络号加主机号组成的。每个IP地址包括两部分:网络号和主机号。当分配给主机号的二进制位越多,则能标识的主机数就越多,相应地能标识的网络数就越少,反之同理。给出一个IP地址,我们可以通过子网掩码确定这个IP地址的网络号和主机号。
子网掩码又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用,子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。扩展资料:具体的计算方法如下:将IP和子网掩码都转换为32的二进制,进行与运算,得到的结果就是该IP的网络地址或子网地址。