面试题集1

来源:互联网 发布:蓝色星球软件 编辑:程序博客网 时间:2024/05/01 10:42

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.合并两个有序链表
这里写图片描述

原创粉丝点击