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

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 编译执行。

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

http://www.lryc.cn/news/582936.html

相关文章:

  • 部署并运行Vim/Vmamba在ImageNet上的训练与测试
  • JavaScript之数组方法详解
  • (C++)list列表相关基础用法(C++教程)(STL库基础教程)
  • HTTP/3.x协议详解:基于QUIC的下一代Web传输协议
  • 音频被动降噪技术
  • nng库使用
  • Android Handler机制与底层原理详解
  • Java 阻塞队列:7种类型全解析
  • 华为eNSP防火墙实验(包含详细步骤)
  • AR 双缝干涉实验亮相:创新科技实验范式,开拓 AR 技术新局​
  • Kafka多组消费:同一Topic,不同Group ID
  • 如何用Python编程计算权重?
  • 常见的网络攻击方式及防御措施
  • 分布式接口幂等性的演进和最佳实践,含springBoot 实现(Java版本)
  • 【c++学习记录】状态模式,实现一个登陆功能
  • 【ES实战】ES客户端线程量分析
  • 从 .proto 到 Python:使用 Protocol Buffers 的完整实践指南
  • 实战Linux进程状态观察:R、S、D、T、Z状态详解与实验模拟
  • 蓝桥杯 第十六届(2025)真题思路复盘解析
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | StickyNavbar(粘性导航栏)
  • SPI / I2C / UART 哪个更适合初学者?
  • 【C++】AVL树底层思想 and 大厂面试
  • 27.移除元素(快慢指针)
  • AI大模型应用-Ollama本地千问大模型stream流乱码
  • HDLBits刷题笔记和一些拓展知识(十一)
  • 学习设计模式《十七》——状态模式
  • 美团Java面试分享
  • 基于模板设计模式开发优惠券推送功能以及对过期优惠卷进行定时清理
  • 在Docker中安装nexus3(作为maven私服)
  • [创业之路-489]:企业经营层 - 营销 - 如何将缺点转化为特点、再将特点转化为卖点