java基础常用面试题(面向对象/序列化/HashMap/反射/异常等)

1、面向对象都有哪些特性以及你对这些特性的理解 ?
答:面向对象的三大特征:1.继承 2.封装 3.多态性
(1)继承:作用:代码重用、复用,并可以扩展自己的成员 (比如父子关系,现实世界中也是可以继承的,一个父类可以有多个子类,但子类只能有一个父类)
(2)封装:相关的属性数据、方法代码,封装成一个“类” 组件;封装后,可以进一步地隐藏成员,隐藏的好处:方便维护修改 (就像超市仓库一样,把物品分类,一样类型的物品放置在一起打包,写上名字;方便日后查找和上架)
(3)多态:作用:一致的类型,向上转型和向下转型,instanceof识别对象真实类型,调用成员,先找子类,再找父类

2、什么是自动装箱和拆箱?
答:基本类型,自动包装成对象,作为引用类型(对象)来使用
从包装对象中,取出被封装的基本类型值
自动,编译器编译时,自动改写代码,改写成 Integer.valueOf(5),或 a.intValue()

3、什么是 java 序列化,如何实现 java 序列化?
答:对象,被按照固定的格式,转成一串字节序列,可以保存到文件,也可以向网络发送
读取这些字节值,重新创建对象,重新恢复对象中的数据
字节格式:类名、序列化版本号、变量的定义信息、变量的值
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写 操作,也可将流化后的 对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
(理论说的有点绕.我理解的是这样的:比如小王要给小李传送文件,他们这么进行传文件呢?小王把文件(传到)写入磁盘中,在传输中所有数据会弄成统一的二进制格式进行保存,也叫流化.然后小李在把二进制文件读取出来进行还原得到原来文件格式,这个读写的过程就是序列化和反序列化.
把对象转换为字节序列的过程称为对象的序列化;把字节序列恢复为对象的过程就是反序列化---------------我现在也就这点功底了)
序 列 化 的 实 现 : 将 需 要 被 序 列 化 的 类 实 现 Serializable 接 口 , 该 接 口 没 有 需 要 实 现 的 方 法 ,implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如: FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用 ObjectOutputStream 对象的 writeObject(Object obj)方法就可以将参数为 obj 的对象写出(即保存其状态),要恢复的话则用输入流。

4、char 型变量中能不能存储一个中文汉字,为什么?
答:Java的char类型字符是Unicode 编码,Unicode是统一码,万国码,是双字节编码,包含 全球所有常用字符,当然支持中文,Unicode的中文字符顺序是笔画顺序;
如果按拼音排序,可以使用GBK编码

5、List 和 Map、 Set 的区别?
答:List,顺序存放数据,允许重复
Set,不允许重复,子类对象,可以无序,也可以从小到大排序
Map,存放键值对,用来快速查找数据,HashMap无序、键不重复

6、HashMap 和 HashTable 有什么区别?
答: HashMap 是线程不安全的,
HashTable 线程安全

7、谈谈 JVM 的内存结构和内存分配?
a)Java 内存模型
Java 虚拟机将其管辖的内存大致分三个逻辑部分:方法区(Method Area)、 Java 栈和 Java 堆。
(1)、方法区保存类对象、静态变量
(2)、Java Stack 是一个逻辑概念,特点是后进先出。Java 虚拟机每调用一次方法就创建一个方法帧(frame),在栈帧 中,分配局部变量,方法结束值,对应的方法帧被弹出(pop)。每个线程,都会绑定一个自己的栈
(3)、Java 堆分配(heap allocation)意味着以随意的顺序。Java 对象的内存总是在 heap 中分配。
堆的内存结构,划分成新生代和老年代
新生代,分成伊甸园、生存区,生存区分成from和to两部分
b) java 内存分配
方法局部变量,在栈中分配;对象的成员变量,在堆内存对象的内存空间中

8、wait()与sleep()的区别
答:sleep()来自Thread类,wait()来自Object类。调用sleep()方法的过程中,线程不会释放对象锁。而 调用 wait 方法线程会释放对象锁。

9、说说你对 Java 中反射的理解 ?
答:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
获取类的定义信息,反射创建实例,反射调用成员(我理解的反射就像扫描件或者是克隆版一样。很像X战警中会变身任何人的变种人---------自己的理解哈!)

10、写出常见的几个RuntimeException
(1)java.lang.NullPointerException空指针异常,出现原因:调用了空引用
(2)ClassNoFoundException 指定类找不到,出现原因:类的名称和路径加载错误,通常是试图通过字符串来加载某个类 时可能引发异常。
(3)NumberFormatException字符串转换为数字异常,出现原因:字符串数据中包含非数字型字符。
(4)ArrayIndexOutOfBoundsException下标越界异常
(5)IllegalArgumentException 方法传递参数错误
(6)ClassCastException数据类型转换异常
(7)NoClassDefFoundExcetion 未找到类定义错误
(8)SQLException SQL异常
(9)InstantiationException实例化异常
(10)NoSuchMethodExceptioin 方法不存在异常

猜你喜欢

转载自blog.csdn.net/weixin_44458228/article/details/86640851
今日推荐