写点什么

【Java 面试题】常见 Java 面试知识点总结

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:2397 字

    阅读完需:约 8 分钟

java 虚拟机是执行字节码文件(.class)的虚拟机进程。。java 源程序(.java)被编译器编译成字节码文件(.class)。然后字节码文件,将由 java 虚拟机,解释成机器码(不同平台的机器码不同)。利用机器码操作硬件和操作系统。


因为不同的平台装有不同的 JVM,它们能够将相同的.class 文件,解释成不同平台所需要的机器码。正是因为有 JVM 的存在,java 被称为平台无关的编程语言。


2.JDK 和 JRE 的区别是什么?




Java 开发工具包(JDK)是完整的 Java 软件开发包,包含了 JRE,编译器和其他的工具(比如:JavaDoc,Java 调试器),可以让开发者开发、编译、执行 Java 应用程序。


Java 运行时环境(JRE)。它包括 Java 虚拟机、Java 核心类库和支持文件。它不包含开发工具(JDK)、编译器、调试器和其他工具。


3.”static”关键字是什么意思?Java 中是否可以覆盖(override)一个 private 或者是 static 的方法?




“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。


java 中也不可以覆盖 private 的方法,因为 private 修饰的变量和方法只能在当前类中使用,如果是其他的类继承当前类是不能访问到 private 变量或方法的,当然也不能覆盖。


需要更多大厂面试资料的话也可以点击直接进入,免费获取!暗号:CSDN


4.是否可以在 static 环境中访问非 static 变量?




static 变量在 Java 中是属于类的,它在所有的实例中的值是一样的。当类被 Java 虚拟机载入的时候,会对 static 变量进行初始化。如果你的代码尝试不用实例来访问非 static 的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。


5.Java 支持的数据类型有哪些?什么是自动拆装箱?




Java 支持的数据类型包括两种:一种是基本数据类型,包含 byte,char, short, boolean ,int, long, float, double;另一种是引用类型:如 String 等,其实是对象的引用,JVM 中虚拟栈中存的是对象的地址,创建的对象实质在堆中,通过地址来找到堆中的对象的过程,即为引用类型。


自动装箱就是 Java 编译器在基本数据类型和对应的对象包装类型间的转化,即 int 转化为 Integer,自动拆箱是 Integer 调用其方法将其转化为 int 的过程。


6.Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?




Java 中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。重载 Override 是一个类中多态性的一种表现。


方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。在 java 中,子类可继承父类的方法,则不需要重新编写相同的方法。但有时子类并不想原封不动继承父类的方法,而是想做一定的修改,这就采用方法重写。方法重写又称方法覆盖。


7.Java 中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?




当新对象被创建的时候,构造方法会被调用。每一个类都有构造方法。在程序员没有给类提供构造方法的情况下,Java 编译器会为这个类创建一个默认的构造方法。


Java 中构造方法重载和方法重载很相似。可以为一个类创建多个构造方法。每一个构造方法必须有它自己唯一的参数列表。


Java 不支持复制构造方法,如果你不自己写构造方法的情况下,Java 不会创建默认的复制构造方法。


8. Java 支持多继承么?




Java 中类不支持多继承,只支持单继承(即一个类只有一个父类)。但是 java 中的接口支持多继承,,即一个子接口可以有多个父接口。(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能)。


9. 什么是值传递和引用传递?




一般认为,java 内的传递都是值传递,java 中实例对象的传递是引用传递。


值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量;


引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身。


10. 在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?




监视器和锁在 Java 虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。


11.什么是死锁(deadlock)?




【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码




所谓死锁是指多个进 程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。死锁产生的 4 个必要条件:


互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。


不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。


请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。


循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。


12. 如何确保 N 个线程可以访问 N 个资源同时又不导致死锁?




使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。


13.Java 集合类框架的基本接口有哪些?




集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序。有的集合类允许重复的键,有些不允许。


Java 集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java 集合类里面最基本的接口有:

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
【Java面试题】常见Java面试知识点总结