当前位置: 首页 > news >正文

java八股文面试题

Java八股文面试题通常涵盖了Java语言的基础知识、高级特性、框架应用、数据库操作等多个方面。以下是一些常见的Java面试题及其详细回答,按照不同的主题进行分类:

一、Java基础

  1. 面向对象的特征有哪些?
    • 抽象:忽略与当前目标无关的细节,只关注与当前目标相关的方面。
    • 继承:允许新类继承现有类的属性和方法,实现代码的重用。
    • 封装:将对象的状态信息隐藏在对象内部,不允许外部直接访问,而是通过该对象提供的方法来实现对内部状态的访问和操作。
    • 多态性:允许不同类的对象对同一消息作出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式。
  2. 重载(Overload)与重写(Override)的区别?
    • 重载:发生在同一个类中,方法名相同但参数列表不同(参数类型、个数、顺序至少有一个不同),返回类型可以不同,但不能通过返回类型来区分重载。
    • 重写:发生在有继承关系的子类与父类之间,方法名、参数列表必须完全相同,返回类型可以相同或更小的范围(协变返回类型),访问权限不能比父类中被重写的方法的访问权限更低。
  3. 接口(Interface)与抽象类(Abstract Class)的区别?
    • 接口:一种引用类型,是一种抽象的类型,它是一种特殊的类,它是完全抽象的,没有具体实现的方法,不能被实例化。接口中的方法默认是public abstract的,接口中定义的变量默认是public static final的。
    • 抽象类:是一种特殊的类,不能被实例化,只能被继承。抽象类中可以包含抽象方法(没有具体实现的方法)和具体方法(有具体实现的方法)。
  4. 深拷贝(Deep Copy)与浅拷贝(Shallow Copy)的区别?
    • 浅拷贝:仅仅复制对象本身(包括对象中的基本数据类型变量和对象的引用变量),但不复制对象引用的其他对象。
    • 深拷贝:不仅复制对象本身,还复制对象引用的其他对象,使得新对象和原对象完全独立。
  5. sleep()和wait()的区别?
    • sleep()是Thread类的方法,导致当前线程暂停执行指定时间,不会释放锁。
    • wait()是Object类的方法,用于线程间的通信,导致当前线程等待直到另一个线程调用此对象的notify()方法或notifyAll()方法,会释放锁。

二、Java高级

  1. JVM内存结构及其作用?
    • 方法区(Method Area):存储每个类的结构信息,如运行时常量池、字段和方法数据、构造函数和普通方法的字节码内容等。
    • 堆(Heap):所有对象实例以及数组都要在堆上分配,是垃圾收集器管理的主要区域。
    • 栈(Stack):每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个栈帧(Stack Frame),对应着一次次方法的调用。
    • 程序计数器(Program Counter Register):是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。
    • 本地方法栈(Native Method Stacks):与虚拟机栈所发挥的作用非常相似,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。
  2. Java中的垃圾收集算法有哪些?
    • 标记-清除(Mark-Sweep):首先标记出所有需要回收的对象,然后统一回收被标记的对象。
    • 复制(Copying):将内存分为大小相等的两块,每次只使用其中一块,当这一块内存用完时,就将还存活的对象复制到另一块上面,然后再把已使用的内存空间一次清理掉。
    • 标记-整理(Mark-Compact):标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
    • 分代收集(Generational Collection):根据对象的存活周期的不同,将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。
  3. synchronized和volatile的区别?
    • synchronized:是Java中的一个关键字,用于控制多个线程对共享资源的访问,保证同一时刻只有一个线程能够访问该资源。synchronized既可以修饰方法,也可以修饰代码块。
    • volatile:是Java中的一个修饰符,用于保证变量的可见性和有序性,但不保证原子性。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,每次使用都会直接从主存中读取。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智能家居装修怎么布线?智能家居网络与开关插座布置
  • java设计模式之:策略模式+工厂模式整合案例实战(一)
  • 【C++深入学习】类和对象(一)
  • QT5.12.9 通过MinGW64 / MinGW32 cmake编译Opencv4.5.1
  • [笔试题] 笔试题面试题
  • 218.贪心算法:分发糖果(力扣)
  • python如何与前端交互
  • Qt之元对象系统
  • 计算机课程名,汇总
  • Windows系统网络配置命令详细指南
  • 编程题目积累(day5)
  • CSS技巧专栏:一日一例 2.纯CSS实现 多彩边框按钮特效
  • 296个地级市GDP相关数据(2000-2023年)
  • 右键连点器
  • 支持向量机 (support vector machine,SVM)
  • CODING 缺陷管理功能正式开始公测
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • docker-consul
  • java8-模拟hadoop
  • Java超时控制的实现
  • Java多态
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • magento2项目上线注意事项
  • 闭包,sync使用细节
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 网络应用优化——时延与带宽
  • 为什么要用IPython/Jupyter?
  • 小程序button引导用户授权
  • 用jQuery怎么做到前后端分离
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 仓管云——企业云erp功能有哪些?
  • 容器镜像
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​flutter 代码混淆
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # Panda3d 碰撞检测系统介绍
  • (21)起落架/可伸缩相机支架
  • (3)选择元素——(17)练习(Exercises)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (七)Activiti-modeler中文支持
  • (算法)硬币问题
  • (转)大型网站的系统架构
  • (转)可以带来幸福的一本书
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)深入super,看Python如何解决钻石继承难题
  • .NET 回调、接口回调、 委托
  • .netcore如何运行环境安装到Linux服务器
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .net中的Queue和Stack
  • .net专家(高海东的专栏)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [.net] 如何在mail的加入正文显示图片