Java面试基础:概念

1. Java的特点

跨平台性:

Java的 "编写一次,运行无处不在" 是其最大的特点之一。Java编译器将源代码编译成字节码(bytecode),该字节码可以在任何安装了Java虚拟机(JVM)的系统上运行。

面向对象:

Java是一门严格的面向对象编程语言,几乎一切都是对象。面向对象编程(0OP)特性使得代码更易于维护和重用,包括类(class)、对象(object)、继承(inheritance)、多态(polymorphism)、抽象(abstraction)和封装(encapsulation)。

内存管理:

Java有自己的垃圾回收机制,自动管理内存和回收不再使用的对象。这样,开发者不需要手动管理内存,从而减少内存泄漏和其他内存相关的问题。

2. Java的优劣势

优势:

  • 跨平台:因为JVM的存在,可以实现一次编写到处运行。
  • 面向对象:虽然现在很多语言都支持面向对象,但是Java的设计从一开始就是OOP的。
  • 生态系统强大:比如Spring框架,Hibernate,各种库和工具,社区支持大,企业应用广泛。
  • 内存管理:自动垃圾回收机制,减少了内存泄漏的问题,对开发者友好。
  • 多线程:内置的线程机制,方便并发编程。
  • 安全性:Java有安全模型,比如沙箱机制,适合网络环境。
  • 稳定性:企业级应用长期使用,版本更新也比较注重向后兼容。

劣势:

  • 性能方面:虽然JVM优化了很多,但相比C++或者Rust这种原生编译语言,还是有一定开销。特别是启动时间,比如微服务场景下,可能不如Go之类的快。
  • 语法方面:比如样板代码多,之前没有lambda的时候更麻烦,现在有了但比起Python还是不够简洁。
  • 内存消耗方面:JVM本身占内存,对于资源有限的环境可能不太友好。
  • 面对对象过于严格:有时候写简单程序反而麻烦,虽然Java8引入了函数式编程,但不如其他语言自然。
  • 开发效率:相比动态语言如Python,Java需要更多代码,编译过程也可能拖慢开发节奏。

3. Java为什么是跨平台的

Java能支持跨平台,和JVM有密不可分的关系

JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。

而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一"中间层",就能在不同平台上运行,真正实现了"一次编译,到处运行"的目的。

所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如.exe),仍然需要JVM的支持。

跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。

4. JVM、JRE、JDK三者的关系

JVM:JVM是Java虚拟机,是Java程序运行的环境。它负责将Java字节码(由Java编译器生成)解释或编译成机器码,并执行程序。JVM提供了内存管理、垃圾回收、安全性等功能,使得Java程序具备跨平台性。

JRE:JRE是Java运行时环境,是Java程序运行所需的最小环境。它包含了JVM和一组Java类库,用于支持Java程序的执行。JRE不包含开发工具,只提供Java程序运行所需的运行环境。

JDK:JDK是Java开发工具包,是开发Java程序所需的工具集合。它包含了JVM、编译器(javac)、调试器(jdb)等开发工具,以及一系列的类库(如Java标准库和开发工具库)。JDK提供了开发、编译、调试和运行Java程序所需的全部工具和环境。

5. Python和Java的区别

python 是一种解释语言,翻译时会在执行程序的同时进行翻译。
Java是一种已编译的编程语言,Java编译器将源代码编译为字节码,而字节码则由Java虚拟机执行

6. 编译型语言和解释型语言的区别

它们的核心区别在于代码执行前是否需要整体翻译为机器码

编译形语言: 在程序运行前,需通过编译器将整个源代码一次性翻译成机器码(可执行文件),然后运行。执行时直接运行编译后的代码,速度快,但跨平台性较差。

解释型语言: 源代码在运行时通过解释器逐行翻译并执行,无需事先编译为机器码。跨平台性好,但执行速度相对较慢。

常见的编译形语言有,C、C++、Rust

常见的解释型语言有,Python、JavaScript

值得注意的是,Java属于混合型语言,Java:先编译为字节码(.class),由 JVM 解释或 JIT 编译执行。

总结一下,编译型语言就像是将整本书翻译成目标语言再出版;解释型语言就像是一边读一边口头翻译。

相关推荐
qq_5298353520 分钟前
ThreadLocal内存泄漏 强引用vs弱引用
java·开发语言·jvm
景彡先生24 分钟前
C++并行计算:OpenMP与MPI全解析
开发语言·c++
落笔画忧愁e25 分钟前
扣子Coze飞书多维表插件添加数据记录
java·服务器·飞书
量子联盟2 小时前
原创-基于 PHP 和 MySQL 的证书管理系统,免费开源
开发语言·mysql·php
秋千码途3 小时前
小架构step系列08:logback.xml的配置
xml·java·logback
飞翔的佩奇3 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
hackchen3 小时前
Go与JS无缝协作:Goja引擎实战之错误处理最佳实践
开发语言·javascript·golang
找不到、了4 小时前
Spring的Bean原型模式下的使用
java·spring·原型模式
阿华的代码王国4 小时前
【Android】搭配安卓环境及设备连接
android·java