1. 语法基础
1. 面向对象特性?
- 封装
- 减少耦合
- 减轻运维负担
- 有效地调节效能
- 提高软件的可重用性
- 降低了构建大型系统的风险
- 继承
- 多态
- 编译时多态-方法的重载
- 运行时多态-程序中定义的对象引用所指向的具体类型在运行期间才确定
- 继承
- 覆盖
- 向上转型
2. a = a + b 与 a += b 的区别
+= 隐式的将加操作的结果类型强制转换为持有结果的类型
3. 3*0.1 == 0.3 将会返回什么? true 还是 false?
false,因为有些浮点数不能完全精确的表示出来。
4. 能在Switch 中使用String吗?
从 Java 7 开始,我们可以在 switch case 中使用字符串,但这仅仅是一个语法糖。内部实现在 switch 中使用字符串的 hash code。
5. 对equals()和hashCode()理解
6. final、finalize和finally的不同之处
- final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该变量的值在初始化后不能被改变。
- Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的,但是什么时候调用 finalize 没有保证。
- finally 是一个关键字,与 try 和 catch 一起用于异常的处理。finally 块一定会被执行,无论在 try 块中是否有发生异常。
- finally一定会执行吗?
7. String、StringBuffer、StringBuilder的区别?
- 第一点: 可变和适用范围。String对象是不可变的,而StringBuffer和StringBuilder是可变字符序列。每次对String的操作相当于生成一个新的String对象,而对StringBuffer和StringBuilder的操作是对对象本身的操作,而不会生成新的对象,所以对于频繁改变内容的字符串避免使用String,因为频繁的生成对象将会对系统性能产生影响。
- 第二点: 线程安全。String由于有final修饰,是immutable的,安全性是简单而纯粹的。StringBuilder和StringBuffer的区别在于StringBuilder不保证同步,也就是说如果需要线程安全需要使用StringBuffer,不需要同步的StringBuilder效率更高。
8. 接口与抽象类的区别?
9. this() & super() 在构造方法中的区别?
10. java移位运算符?
<<
:左移运算符,x << 1,相当于x乘以2(不溢出的情况下),低位补0>>
:带符号右移,x >> 1,相当于x除以2,正数高位补0,负数高位补1>>>
:无符号右移,忽略符号位,空位都以0补齐
11. 单例模式
- 单例模式有几种写法?
- 哪些情况下会破坏单例对象?
12. fail-safe机制与fail-fast机制分别有什么作用?
13. 为什么jdk动态代理只能代理有接口的类?
14. new String(“abc”)创建了几个对象?
2. 泛型
1. 为什么需要泛型
2. 泛型如何使用?
- 泛型类如何定义和使用?
- 泛型接口何如定义和使用?
- 泛型方法如何定义和使用?
3. 泛型的上限和下限
4. 如何理解java中的泛型是伪泛型?
3. 注解
1. 注解的作用
2. 注解的常见分类
- java自带的标准注解
- 元注解
- 自定义注解
4. 异常
1. 异常类的层次结构
- 运行时异常
- 非运行时异常
- 可查异常
- 不可查异常
2. throw和throws的区别?
- 异常的申明
- 异常的抛出