1
【Q】:序列化和反序列化
【A】:
- 序列化是将Java对象转化为字节流,用于网络传输,持久化或缓存。Java提供了
java.io.Serializable
接口实现序列化。 - 反序列化是将字节流转为为对象。
2
【Q】: Java中Exception和Error有什么区别?
【A】:
- 都是
Throwable
类的子类,在java中只有集成了Throwable
类的实例才可以被throw
或catch
。 - Exception是程序可以处理的异常情况,分为编译时异常(在编译时必须显示处理,使用try-catche或throws声音异常抛出)和运行时异常(集成RuntimeException)。
- Error是严重的错误,通常为JVM层次系统级的,无法预料的错误。如内存耗尽或栈溢出。
3
【Q】:Java的优势是什么?
【A】:
- 跨平台:java中加了一层中间件JVM,可以做到一次编译多次运行。首先Java源代码编译成字节码,字节码再由JVM解释或JIT编译执行,业务JIT编译需要预热,所有还提供了AIT,将字节码转为机器码。
- 垃圾回收:在内存充裕的情况下将内存管理交给GC来做。减轻编程效率。
- 生态:网上各种资料多。
- 面向对象:有明确 清晰的类,对象,继承,接口等概念,支持封装,继承,多态等OOP特性。
4
【Q】:什么是java的多态?
【A】:
- 多态是指同一个接口或父类引用的变量可以指向不同的对象实例。它允许同一方法在不同对象上表现出不一样的行为。
- 通过多态可以减低代码耦合度,增加系统可扩展性。
5
【Q】:java中的参数传递是按值还是引用?
【A】:
- Java中,参数传递只有按值传递,不论是基本还是引用类型。
- 基础数据类型:传递的是值的副本,即基础类型的数值本身。
- 引用数据类型:传递的是引用的副本,即对象引用的内存地址。
6
【Q】:面向对象和面向过程的区别是什么?
【A】:
- 面向对象是把类或对象本身作为基本单元来组织代码。
- 面向过程是把函数作为作为基本单元。
7
【Q】:Java中方法重载和方法重写的区别?
【A】:
- 方法重载:一个类中运行用有多个同名方法,只要它们的参数列表不一样。
- 方法重写:子类在集成父类时,可以重写父类的某个方法(参数列表,方法名都必须一样)。
8
【Q】:什么是Java的内部类?
【A】:
- 是指在一个类的内部定义的类,Java支持多种类型的内部类,包括成员内部类、局部内部类、匿名内部类、静态内部类。内部类可以访问外部类的成员变量和方法,包括私有的成员。
9
【Q】:String、StringBuffer、StringBuilder的区别?
【A】:
- String:是不可变的类,一旦被创建无法修改,每次对String进行操作都会创建新的String对象。使用于少量字符串操作。
- StringBuffer:是可变的,可以进行字符串的追加,删除,插入等。其是线程安全的,内部使用
synchronized
关键字保证多线程下的安全性。适用多线程环境的频繁字符串修改。 - StringBuilder:是可变的。不保证线程安全,但性能更高。使用于单线程环境中的高性能字符串处理。
10
【Q】:StringBuilder是怎么实现的?
【A】:
- 主要是为了解决String对象的不可变性问题,提供高效动态的字符串拼接和修改操作。
- 大概核心实现如下:内部使用字符数组来存储字符序列;提供append、insert等操作直接修改内部的字符数组;每次进行字符操作时,如果内存不足,它会通过扩展数组容量(一般为2倍),减少扩展次数,提高性能。