阅读量:0
1、相面对象
1、面相对象语言/Java三大特性是什么?
引出封装、继承和多态。
2、多态有哪些形式?多态使用过吗?
重载、重写,接口和抽象类的多个实现。考察工作经验、代码重构经验、习惯。
3、Java接口和抽象类有什么区别?你是如何选择使用的?
考察OOP的理解和工作经验(有没有使用抽象类写过一些模板方法、做过一些个设计等)。
2、Jvm
1、Java如何实现跨平台的?
不了解这个概念的可以换个说法:Java如何实现只需要编写一次代码,就可以在不同的操作系统上运行的?引出Jvm。
2、JVM主要的组成部分,以及每一个部分的作用是什么?
- 1.类加载器(Class Loader):加载类文件到内存。Class loader只管加载,只要符合文件结构就加载,至于能否运行,它不负责,那是有Exectution Engine 负责的。
- 2.执行引擎(Execution Engine):也叫解释器,负责解释命令,交由操作系统执行。
- 3.本地库接口(Native Interface):本地接口的作用是融合不同的语言为java所用
- 4.运行时数据区(Runtime Data Area)
- 5、垃圾回收器。
直接回答运行时数据区的,酌情给分。
3、堆和栈的区别是什么?用来做什么用的?
4、Java内存溢出有哪些情况?
堆内存溢出(Heap Space Overflow): 堆内存是 Java 虚拟机用于存储对象实例的地方。当创建的对象过多,或者单个对象太大以至于堆无法分配足够的内存时,会发生堆内存溢出。可以通过
-Xmx
和-Xms
参数调整堆的最大和初始大小来预防堆内存溢出。栈溢出(Stack Overflow): 每个线程在 Java 虚拟机中都有自己的栈空间,用于存储方法调用及局部变量。如果递归调用层次太深,栈空间溢出,就会导致栈溢出错误。可以通过调整线程栈的大小或优化递归算法来避免栈溢出。
方法区溢出(Method Area Overflow): 方法区用于存储类信息、常量、静态变量等数据。当加载的类过多或者超出了方法区的大小限制时,会发生方法区溢出。可以通过增大方法区的大小来缓解这种情况。
直接内存溢出(Direct Memory Overflow): 直接内存不是 Java 虚拟机堆管理的一部分,而是由操作系统分配和管理的。使用 NIO 类库时&#