本博客是纯笔记自用,为马士兵教育B站视频听课笔记
1.基础
1. java面向对象的特征
封装(提高代码复用性)
继承(提高代码复用性)
多态(提高代码的灵活性,可以移植性,继承类、重写方法,父类引用指向子类对象)
2. ArrayList和LinkedList区别
ArrayList 底层结构是数组,查询快增删慢,线程不安全
LinkedList 底层结构是链表,查询慢增删快,线程不安全
线程安全的集合类:HashTable,Vector等
3. 高并发中集合有哪些
java.util.concurrent.*
ConcirretHashMap
CopyOnWriteArrayList
CopyOnWriteArraySet
4. JDK1.8的新特性
接口的默认方法、Lambda表达式、函数式编程、Lambda作用域、访问局部变量、访问对象字段与静态变量、新增如LoaclTime类等。
5.抽象类和接口的差异
相同点:
都不能被实例化
可以将抽象类和接口类型作为引用类型
一个类如果继承了某个抽象类或者实现了某个接口,都需要对其中的抽象方法进行全部实现,否则该类仍然需要被声明为抽象类。
2. JVM面试题
1. 对象在内存中的存储布局
mark word (64位的占8字节,32位的占4字节。存储gc信息、锁信息和hashcode信息)
类型指针 (4字节)
实例数据
对齐 (把总大小补齐为8的倍数)
2. 对象怎么定位
直接定位
间接定位
3. 对象在内存中如何分配
分区模型和分代模型。
jvm中对象处理的两个算法:标记清除法(标记,然后清除,后果是会出现碎片空间);复制算法:把保留的对象复制到另一个区域,然后清空本区域,速度快,不会造成碎片空间。
先进入 伊甸园 区,95%的后来死去,存活的进入幸存区1,清空伊甸园区,新的对象再来,再95%死去,新的对象和幸存区1的对象通过复制算法复制到幸存区2,清空伊甸园区和幸存区1,然后再新对象来,95%死去,新的对象和幸存区2的对象复制到幸存区1,清空幸存区2和伊甸园区。当幸存区某些对象“年龄”够了,复制到永久区。
4. 对象的创建过程
- 申请分配空间,设默认值
- 调构造方法,设初始值
- 建立对象指针和内存之间的连接
5. DCL单例
Double Check Lock
双重检查
6. 程序真的是按“顺序”执行的吗?
为了提高执行效率,CPU指令可能会乱序执行
已看到11集 进度11/146