小林coding面试题笔记(一)

小林coding面试题笔记(一)
Jie1. Java的特点
- 平台无关性: Java的”编写一次,运行无处不在”哲学是其最大的特点之一,Java编译器将源代码编译成字节码。该字节码可以在任何安装了Java虚拟机(JVM)的系统上运行。
- 面向对象: Java是一门严格的面向对象编程语言,几乎一切都是对象。面向对象编程(OOP)特性使得代码更易于维护和重用,包括类(class)、对象(object)、继承(inheritance)、多态(polymorphism)、抽象(abstraction)和封装(encapsulation)。
- 内存管理: Java有自己的垃圾回收机制,自动管理内存和回收不再使用的对象。这样,开发者不需要手动管理内存,从而减少内存泄漏和其他内存相关的问题。
2. Java的优势和劣势是什么?
Java的优势主要体现在跨平台性、成熟的生态和稳定性上,当然,现在市面上的虚拟化技术已经很成熟了,可能跨平台性已经不是最大的优点了,现在用docker很容易就可以实现跨平台,但是它很稳定,例如在金融领域,JVM的稳定性和安全性保障了交易系统的可靠运行。但Java也存在一些挑战,比如GC可能带来的延迟问题,不过通过分代调优和ZGC等技术可以显著改善。此外,语法冗余在Java 8+的函数式特性支持下已大幅减少。总体而言,Java在大型企业级应用中仍是首选,而其劣势可通过技术手段有效规避。
3. Java为什么是跨平台的?
首先,Java是一门编译与解释并存的语言,我们写的Java源码(.java),会先通过javac编译器编译,生成.class文件,即字节码文件,然后再通过不同平台JVM将.class文件翻译为对应的机器码,从而达到运行Java程序的目的,不同平台需要不同的JVM。
4. JVM、JDK、JRE三者关系?
它们之间的关系如下:
- JVM是Java虚拟机,是Java程序运行的环境。它负责将Java字节码(由Java编译器生成)解释或编译成机器码,并执行程序。JVM提供了内存管理、垃圾回收、安全性等功能,使得Java程序具备跨平台性。
- JDK是Java开发工具包,是开发Java程序所需的工具集合。它包含了JVM、编译器(javac)、调试器(jdb)等开发工具,以及一系列的类库(如Java标准库和开发工具库)。JDK提供了开发、编译、调试和运行Java程序所需的全部工具和环境。
- JRE是Java运行时环境,是Java程序运行所需的最小环境。它包含了JVM和一组Java类库,用于支持Java程序的执行。JRE不包含开发工具,只提供Java程序运行所需的运行环境。
5. 为什么说 Java 语言“编译与解释并存”?
Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。
6. 编译型语言和解释型语言的区别?
编译型:编译型语言 会通过编译器将源代码一次性翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低,执行时直接运行编译后的代码,速度快,但跨平台性较差。常见的编译性语言有 C、C++、Go、Rust 等等。
解释型:解释型语言会通过解释器一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言开发效率比较快,执行速度比较慢。常见的解释性语言有 Python、JavaScript、PHP 等等。
7. jvm是什么?
JVM 和操作系统有什么关系?
JVM是 java 虚拟机,主要工作是解释自己的指令集(即字节码)并映射到本地的CPU指令集和OS的系统调用。 通过虚拟化技术JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行,这也是Java能够一次编译,到处运行的
原因,它通过加载字节码、管理内存(如堆的垃圾回收)、执行指令实现跨平台运行。
JVM 的缺点是什么?
JVM 的内存占用较高(如元空间、堆内存),启动时间较长,且对实时性要求极高的场景(如高频交易)可能受 GC 停顿影响。
JVM 如何优化性能?
通过调整堆大小(-Xmx/-Xms)、选择垃圾回收器(如 CMS/G1)、优化 JIT 编译参数(-XX:CompileThreshold)等手段提升性能。
8. Python和Java区别是什么?
- Java是一种已编译的编程语言,Java编译器将源代码编译为字节码,而字节码则由Java虚拟机执行
- python是一种解释语言,翻译时会在执行程序的同时进行翻译。
- Python 以动态类型和简洁语法著称,适合快速开发和数据科学领域,但性能较低且类型安全依赖运行时检查;(Java 8+ 引入 Lambda 表达式、Stream API 简化代码;Spring Boot 的自动配置减少样板配置。)
- Java 通过静态类型和 JVM 实现高性能与强稳定性,广泛用于企业级应用和 Android 开发
实际项目中常结合使用(如用 Java 写后端,Python 做数据分析)
9. Java 和 C++ 的区别?
- Java 不提供指针来直接访问内存,程序内存更加安全
- Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
- Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。
- C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这与 Java 最初的设计思想不符)。