主题
面试速答(先看这里)
**一句话结论:**位图(BitMap),基本思想就是用一个bit来标记元素,bit是计算机中最小的单位,也就是我们常说的计算机中的0和1,这种就是用一个位来表示的。
60秒标准回答:
位图(BitMap),基本思想就是用一个bit来标记元素,bit是计算机中最小的单位,也就是我们常说的计算机中的0和1,这种就是用一个位来表示的
所谓位图,其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1
像上面的这个位图,可以用来表示1,,4,6
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**所谓位图,其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1
- **要点2:**像上面的这个位图,可以用来表示1,,4,6:
- **要点3:**如果不用位图的话,我们想要记录1,4,,6 这三个整型的话,就需要用三个unsigned int,已知每个unsigned int占4个字节,那么就是3*4 = 12个字节,一个字节有8 bit,那么就是 12*8 = 96 个bit。
- **要点4:**位图有很多种用途,特别适合用在去重、排序等场景中,著名的布隆过滤器就是基于位图实现的。
- **要点5:**但是位图也有着一定的限制,那就是他只能表示0和1,无法存储其他的数字。
**记忆锚点:**bit → unsigned → BitMap → int → BitSet → false
关键取舍:
- 但是位图也有着一定的限制,那就是他只能表示0和1,无法存储其他的数字。
加分表达:
- 位图有很多种用途,特别适合用在去重、排序等场景中,著名的布隆过滤器就是基于位图实现的。
- 所以他只适合这种能表示true or false的场景。
- 所谓位图,其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1 像上面的这个位图,可以用来表示1,,4,6: 如果不用位图的话,我们想要记录1,4,,6 这三个整型的话,就需要用三个unsigned int,已知每个unsigned int占4个字节,那么就是3*4 = 12个字节,一个字节有8 bit,那么就是 12*8 = 96…
追问准备:
- 围绕「bit」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「unsigned」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「BitMap」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
位图(BitMap),基本思想就是用一个bit来标记元素,bit是计算机中最小的单位,也就是我们常说的计算机中的0和1,这种就是用一个位来表示的。
所谓位图,其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1

像上面的这个位图,可以用来表示1,,4,6:

如果不用位图的话,我们想要记录1,4,,6 这三个整型的话,就需要用三个unsigned int,已知每个unsigned int占4个字节,那么就是3*4 = 12个字节,一个字节有8 bit,那么就是 12*8 = 96 个bit。
所以,位图最大的好处就是节省空间。
位图有很多种用途,特别适合用在去重、排序等场景中,著名的布隆过滤器就是基于位图实现的。
但是位图也有着一定的限制,那就是他只能表示0和1,无法存储其他的数字。所以他只适合这种能表示true or false的场景。