Java技术面试(一面)

济南大飞哥 2024-08-23 11:05:12 阅读 87

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 类库时&#



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。