Advertisement

Java面试不通过?这篇文章你看了吗?——Java基础面试题(一)

阅读量:

1.面向对象和面向过程的区别

在这里插入图片描述

面向过程

优点: 在性能方面优于面向对象的方法;由于类在调用时必须进行实例化操作而导致较高的运行开销;资源消耗较大;例如,在单片机、嵌入式开发以及Linux/Unix系统中通常采用的是面向过程式的开发方法。

缺点: 没有面向对象易维护、易复用、易扩展

面向对象

优点:该系统易于维护且具备良好的复用性和扩展性。基于面向对象编程的特点包括封装性、继承性和多态性,可以设计出低耦合的系统从而实现系统的架构更加灵活且维护更为便捷。

缺点: 性能比面向过程低

2. Java 语言有哪些特点

  • 简单易学;
    • 面向对象(信息隐蔽、代码复用、逻辑动态性);
    • 平台无关性(通过Java虚拟机实现跨平台兼容性);
    • 可靠性;
    • 安全性;
    • 多线程支持(C++语言本身不具备多线程支持);
    • 网络编程能力(由于其专为网络编程设计的高效工具特性);
    • 编译与解释并存;

3. 关于 JVM JDK 和 JRE 最详细通俗的解答

JVM

Java虚拟机(JVM)是一种专门用于执行Java字节码的虚拟机环境。它根据不同系统的具体需求提供定制化的实现方案(如Windows、Linux和macOS系统),其目标是确保在这些不同环境下运行相同的字节码时能够得到一致且一致的结果。

什么是字节码?采用字节码的好处是什么?

在 Java 中, JVM 可被解析的代码被称为字节码(即具有扩展名为 .class 的文件),它面向虚拟机而非特定处理器,实现了不同计算机间的通用性.通过字节码机制,Java 语言既保留了传统解释型语言易于移植的优势,又在一定程度上提高了执行效率.同时,由于字节码设计时未专注于单一类型机器,基于该机制开发的应用程序无需重新编译即可在多种计算设备上运行.

Java 程序从源代码到运行一般有下面3步:

**我们需要格外注意的是 .class->机器码 这一步。**在这一步 jvm 类加载器首先 加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对 比较慢。而且,有些方法和代码块是经常需要被调用的,也就是所谓的热点代 码,所以后面引进了 JIT 编译器,JIT 属于运行时编译。当 JIT 编译器完成第 一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我 们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什 么经常会说 Java 是编译与解释共存的语言。

HotSpot采用了惰性评估(Lazy Evaluation)的方式,在基于二八法则的基础上实现了对系统资源的有效管理。它仅限于那些占用了约80%系统资源的关键代码块——即所谓的热点代码,并将其作为JIT(Just-In-Time)编译的对象进行处理。每次程序执行时动态收集相关信息并进行相应的优化处理,在这种持续动态反馈的过程中逐步提高了运行效率。从JDK 9起引入了AOT(Ahead-of-Time Compilation)这一新型编译模式,在这种模式下直接将生成的字节码转换为机器码指令序列以避免传统JIT预热等多方面的开销成本。值得注意的是JDK支持混合式编译策略即可以在同一时间运行多种不同的编译模式包括AOT与传统的JIT编译器之间的协作配合以达到更好的性能表现效果。然而与之相比AOT编译器所保证的质量水平确实无法与专业的JIT编译器相媲美

JDK 和 JRE

JDK是Java Development Kit,它是功能齐全的Java SDK。它拥有JRE所拥有 的一切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编 译程序。
JRE 是 Java运行时环境。它是运行已编译 Java 程序所需的所有内容的集合, 包括 Java虚拟机(JVM),Java类库,java命令和其他的一些基础构件。但 是,它不能用于创建新程序。
如果你只是为了运行一下 Java 程序的话,那么你只需要安装 JRE 就可以了。 如果你需要进行一些 Java 编程方面的工作,那么你就需要安装JDK了。但 是,这不是绝对的。有时,即使您不打算在计算机上进行任何Java开发,仍然
需要安装JDK。例如,如果要使用JSP部署Web应用程序,那么从技术上讲, 您只是在应用程序服务器中运行Java程序。那你为什么需要JDK呢?因为应用 程序服务器会将 JSP 转换为 Java servlet,并且需要使用 JDK 来编译 servlet。

在这里插入图片描述

4. Oracle JDK 和 OpenJDK 的对比

也许在这些问题出现之前, 许多人像我一样既未接触也不曾真正应用过 OpenJDK. 那么 Oracle 与 OpenJDK 之间是否存在着显著的区别?下面我会整理一些资料来为你解答这个一直以来都被许多人忽视的问题.

Java 7没有重要的更新内容。基于Sun公司捐赠的HotSpot源代码开发的Open JDK项目逐渐完善并逐步取代了现有的主流开源项目。另外,在Java 7标准实现中采用了Open JDK,并由 Oracle技术人员负责维护这一技术路线。关于 Java虚拟机(JVM)、 JDK、 JRE 和 Open JDK 的区别,请查看 Oracle 官方博客在2012年发布的一篇详细解答

差异在哪里?OpenJDK源代码库与构建Oracle JDK所需的代码有何不同?

回答:非常接近 - 我们的 Oracle JDK 版本构建过程基于 OpenJDK 7 构建,并且仅添加了一些关键环节。其中一项便是部署步骤——其中包括 Oracle 的 Java 插件以及 Java WebStart 的实现方案——此外还包含封闭源代码派对组件中的图形光栅化器等具体内容。值得注意的是我们还有一些开源的第三方组件 Rhin 和一些零散的内容包括附加文档以及第三方字体等细节均得到了妥善处理与整合展望未来我们希望最终能够开源 Oracle JDK 的全部组成部分

总结:

  1. Oracle JDK版本每隔两年就会发布一次新版本;而OpenJDK则每月都会推出新的版本。
  2. OpenJDK基于一个开放的标准框架设计,并且完全是开源的;然而Oracle JDK则是基于这一开放基准框架的一个商业实现版本,并不完全开源。
  3. Oracle JDK相较于OpenJDK更加稳定可靠。两者的代码基础基本相同;但Oracle JDK增加了更多的功能模块以及一些关键问题修复工作。因此,在企业软件开发方面建议选择经过全面测试验证并拥有丰富功能支持的Oracle JDK;因为部分用户反馈在使用OpenJDK时可能会遇到应用程序崩溃等问题;但通过升级至Oracle JDK即可轻松解决这些问题。
  4. 高端企业正在采用Oracle JDK作为其软件开发平台;其中包括Android Studio、Minecraft以及IntelliJ IDEA等多个知名开发工具;相比之下OpenJDK并不受青睐。
  5. 在性能表现方面 Oracle JDK在响应速度与Java虚拟机(JVM)优化方面优于OpenJDK;
  6. Oracle JDK不会提供针对即将推出的版本的支持服务;用户必须定期更新至最新版本才能获得技术支持;
  7. Oracle JDK软件根据二进制代码许可协议( CDDL )进行授权;而OpenJDK则采用GPL v2许可证进行授权。

5.Java和C++的区别

我知道许多人未曾学习过C++。但是面试官总是不着边际地热衷于将Java与之相比试。实在没有办法啊!!!即使未曾学习过C++也必须要记住它。

基于面向对象的编程范式(OOOP),各种编程语言都具备封装性、继承性和多态性特性  Java语言通过虚拟机机制实现了对内存资源的有效管理,在不提供指针操作的情况下实现了对内存资源的安全保护

尽管 Java 的类遵循单一 inheritance 原则;然而 C++ 提供了多重 inheritance 能力;尽管 Java 的 class 无法实现多重 inheritance;但 interface 却具备这一特性

3.Java 有自动内存管理机制,不需要程序员手动释放无用内存

6. 什么是 Java 程序的主类 应用程序和小程序的主 类有何不同

在一个程序中可以定义多个不同的类别但在这种情况下只有一个类别会被指定为主类别对于Java应用程序来说该主类别通常包含一个名为main()的方法而这一特点同样适用于Java小程序只不过对于后者来说该主类别会继承自JApplet或Applet这样的标准父类别然而在这种情况下默认情况下不一定是public类型的而该主要执行入口则由该主类别来承担

7.Java 应用程序与小程序之间有那些差别

程序通常由主线程发起运行;某些程序如applet则不具备main方法这一要求。这些小程序通过创建一个独立的线程来实现启动功能;这与网页上的Flash小游戏开发思路相似

8… 字符型常量和字符串常量的区别

在形式上: 字符常量由单引号表示一个字符 字符串常量由双引号表示若干个字符

含义上: 字符型变量对应于一个整数值(ASCII码值),能够参与算术运算;而字符串型变量则表示为一个内存地址(即该字符串在内存中的具体存储位置)。

内存占用情况 字符类型的常量占用两个字节空间 而字符串类型的常量则占用多个字节 并且每个字符串末尾都有一个字符作为结束标志 注意到在Java语言中单个字符占用两个字节的空间

9.构造器 Constructor 是否可被 override

当我们讨论继承时会明白,父类的私有属性与构造方法无法被继承;因此,在同一个类中通常会定义多个构造函数吗?然而,在这种情况下Constructors是可以实现overload的功能而不是override的功能。

10. 重载和重写的区别

overloaded : It occurs within the same class, where method names must be identical, parameter types, numbers, and order are all different. Return types and access modifiers can vary, determined during compilation.

在父-子类体系结构中定义一个新方法时,必须确保以下条件:一是该方法的名称及参数列表与原方法完全一致;二是该新方法的返回值类型必须继承自原方法;三是该新方法可能抛出的所有异常也必须是原方法可能抛出的所有异常;四是该新方法对访问权限的要求不得低于原方法(即允许的操作数目不小于原操作);五是若原(父)层所定义的方法为私有,则子层无法重写该上位层的方法

欢迎关注我,在聊天记录底部发送消息 “学习” 即可免费获取这三份资料:一线大厂Java面试题总结、Java知识点学习思维导图以及一份286页Java核心知识点pdf文档总结!让我们一起交流学习吧!觉得有帮助的朋友记得点赞并转发哦,感谢您的支持!

全部评论 (0)

还没有任何评论哟~