java面经——基础篇(3)

目录

 

哈喽,大家好丫,你们的小郭子又来啦 ~

1. 什么情况下需要序列化?

2. Java 的泛型是如何工作的 ? 什么是类型擦除 ?

3. Java 中的反射是什么意思?有哪些应用场景?

4. Java 中的动态代理是什么?有哪些应用?

5. super 关键字的作用?

6. transient 关键字的作用?

7. 字节和字符的区别?

8. String、StringBuilder、StringBuffer 的区别?

9. String 字符串修改实现的原理?

10. String 类的常用方法都有那些?


哈喽,大家好丫,你们的小郭子又来啦 ~

话不多说,直接上干货,嘻嘻嘻 ~

                                java面经——基础篇(3)_第1张图片

1. 什么情况下需要序列化?

(1)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;

(2)当你想用套接字在网络上传送对象的时候;

(3)当你想通过 RMI 传输对象的时候。

2. Java 的泛型是如何工作的 ? 什么是类型擦除 ?

泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如:List\ 在运行时仅用一个 List 来表示。这样做的目的,是确保能和 Java 5 之前的版本开发二进制类库进行兼容。

类型擦除:泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。在泛型类被类型擦除的时候,之前泛型类中的类型参数部分如果没有指定上限,如 < T > 则会被转译成普通的 Object 类型,如果指定了上限如 < T extends String > 则类型参数就被替换成类型上限。

3. Java 中的反射是什么意思?有哪些应用场景?

反射可以提供运行时的类信息,并且这个类可以在运行时才加载进来,甚至在编译时期该类的 .class 不存在也可以加载进来

Class 和 java.lang.reflect 一起对反射提供了支持,java.lang.reflect 类库主要包含了以下三个类:

(1)Field :可以使用 get() 和 set() 方法读取和修改 Field 对象关联的字段;

(2)Method :可以使用 invoke() 方法调用与 Method 对象关联的方法;

(3)Constructor :可以用 Constructor 创建新的对象。

应用举例:工厂模式,使用反射机制,根据全限定类名获得某个类的 Class 实例

4. Java 中的动态代理是什么?有哪些应用?

动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等。可以给这个类创建一个代理,故名思议就是创建一个新的类,这个类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新功能。这个代理类并不是定义好的,是动态生成的。具有解耦意义,灵活,扩展性强。

动态代理的应用:Spring 的 AOP 、加事务、加权限、加日志。

5. super 关键字的作用?

(1)访问父类的构造函数:可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作。

(2)访问父类的成员:如果子类重写了父类的某个方法,可以通过使用 super 关键字来引用父类的方法实现。

(3)this 和 super 不能同时出现在一个构造函数里面,因为 this 必然会调用其它的构造函数,其它的构造函数必然也会有 super 语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

6. transient 关键字的作用?

对于不想进行序列化的变量,使用 transient 关键字修饰。

transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化。当对象被反序列化时,被 transient 修饰的变量值不会被持久化和恢复。transient 只能修饰变量,不能修饰类和方法。

7. 字节和字符的区别?

字节是存储容量的基本单位;

字符是数字、字母、汉字以及其他语言的各种符号;

1 字节 = 8 个二进制单位,一个字符由一个字节或多个字节的二进制单位组成

8. String、StringBuilder、StringBuffer 的区别?

String:用于字符串操作,属于不可变类;【补充:String 不是基本数据类型,是引用类型,底层用 char 数组实现的】

StringBuilder:与 StringBuffer 类似,都是字符串缓冲区,但线程不安全;

StringBuffer:也用于字符串操作,不同之处是 StringBuffer 属于可变类,对方法加了同步锁,线程安全

9. String 字符串修改实现的原理?

当用 String 类型来对字符串进行修改时,其实现方法是首先创建一个 StringBuilder,其次调用 StringBuilder 的 append() 方法,最后调用 StringBuilder 的 toString() 方法把结果返回。

10. String 类的常用方法都有那些?

indexOf():返回指定字符的索引。

charAt():返回指定索引处的字符。

replace():字符串替换。

trim():去除字符串两端空白。

split():分割字符串,返回一个分割后的字符串数组。

getBytes():返回字符串的 byte 类型数组。

length():返回字符串长度。

toLowerCase():将字符串转成小写字母。

toUpperCase():将字符串转成大写字符。

substring():截取字符串。

equals():字符串比较。

好啦,今天的分享到这里就结束啦 ~

觉得我分享的文章不错的话,可以关注一下哦,嘻嘻嘻

你可能感兴趣的:(java,服务器,jvm)