面试题集1
1.观察者模式(发布/订阅模式)
2.GC
“地球人都知道,Java有个东西叫垃圾收集器,它让创建的对象不需要像c/cpp那样delete、free掉,你能不能谈谈,GC是在什么时候,对什么东西,做了什么事情?”
- 什么时候:系统自身决定,不可预测的时间/调用System.gc()的时候。eden满了minor gc,升到老年代的对象大于老年代剩余空间majorGc,full gc
- 对什么东西:从root搜索不到,而且经过第一次标记、清理后,仍然没有复活的对象
- 做什么事情:能说出诸如新生代做的是复制清理、from survivor、to survivor是干啥用的、老年代做的是标记清理、标记清理后碎片要不要整理、复制清理和标记清理有有什么优劣势等
3.树结构的作用
- 首先,很多东西本身的结构就是树形的,如xml,html等,那么编写这些东西的解析器的时候,不可避免用到树
- 树有个好处,就是当节点有序的时候(即有序树),那么在这个树上搜索一个节点是很快的(log级别),所以,现在的索引一般都是用各种树(数据库如mysql大多用B+树)
- 在处理语法解析的时候,树也是不可或缺的数据结构,各种语言解析之后都是得到语法树,再做后续处理
- 思考:树在索引、查找、排序中的作用
树的遍历:
- 先序遍历:根、左、右
- 中序遍历:左、根、右
- 后续遍历:左、右、根
4.进程和线程的状态
- 进程的状态有:运行、就绪、阻塞
- 线程的状态有:New,Runnable,Running,Blocked(等待阻塞:如wait(); 同步阻塞: 如synchronized; 其它阻塞:sleep()或者join()),Dead
5.网段:
A: 1.0.0.0 ~ 126.0.0.0
B: 128.0.0.0 ~ 191.255.255.255
C: 192.0.0.0 ~ 223.255.255.255
D: 1110开始
E: 11110
6.int和Integer区别
- int是java8种基本数据类型之一,作为对象属性默认值是0,而Integer默认值是null,由此可见int无法区分未赋值和赋值0的区别,而Integer可以
- int是基本数据类型,在使用的时候是值传递,而Integer是引用,but他是不可变的,被final修饰
- int只能用来运算,而Integer还有其它方法
- List OK List wrong
7.一个有十亿条记录的文本文件,已按照关键字排序存储,请设计一个算法,可以从文件中快速查找指定关键字的记录
- 10亿条记录对应的数据量达到GB量级,普通计算机没有这么大内存空间供使用,无法一次性将全部数据信息读到内存中。所以需要对数据分成100分。每一份就可以达到10MB量级。酱紫可以一次性读取到内存。这样对于指定的查找关键字可以快读定位到对应的记录块(100块的其中之一),然后再用二分查找法。
8.大数相加
- BigInteger
- 字符串模拟相加
9.给定a、b两个文件,各存放50亿个文件url,每个url各占64B,内存限制是4GB,请找出文件a与文件b中的共同url
- Hash法
![]()
- Bloom filter法
![]()
10.ConcurrentHashMap
- 结构
![]()
- 向 ConcurrentHashMap 中插入数据或者读取数据,首先都要讲相应的 Key 映射到对应的 Segment,因此不用锁定整个类, 只要对单个的 Segment 操作进行上锁操作就可以了。理论上如果有 n 个 Segment,那么最多可以同时支持 n 个线程的并发访问,从而大大提高了并发访问的效率。另外 rehash() 操作也是对单个的 Segment 进行的,所以由 Map 中的数据量增加导致的 rehash 的成本也是比较低的。
11.网络模型
12.合并两个有序链表