【Java八股 | 基础篇 | 概念类】
前言
Java八股时后端面试的核心敲门砖,因为在校生普遍实战经验偏弱,所以八股就是我们必须要增强的一方面,在面试中,面试官经常会通过八股来判断我们的基础和理论知识。
八股不能只靠死记硬背,更多的是要用你自己的话表达出来,今天主要学习Java基础八股中概念有关的题目。
题目主要由本人理解来回答,希望大家在评论区共同讨论改善
一、Java的特点
1.首先就是Java的平台无关性,Java有“一次编译,运行无处不在”的一个特性,只要操作系统中安装有JVM,就可以运行编译过的Java代码。
2.Java是面向对象编程(OOP)的语言,面向对象编程(OOP)的特性使得Java代码更利于维护和复用,包括类,对象,继承,多态,抽象和封装。
3.Java的内存管理方面,Java有自己的垃圾回收系统,可自行管理和回收无用的内存,减轻的开发人员的压力,提升了开发效率,同时减少了内存泄漏和内存爆满等问题
二、Java的优势和劣势
优势:
1.可跨平台的,因为JVM的存在使得Java代码一次编译到处运行。
2.面向对象编程(OOP),虽然现在很多语言都支持面向对象编程(OOP),但Java从最开始就是这条路子。
3.内存管理好,因为Java垃圾自动回收的机制使得Java的内存泄露等问题发生的概率降低,同时有利于提升开发者工作效率。
4.生态完善,例如后端主流框架springboot,mybatis,netty等,以及中间件redis,mq,nginx等,工具类apache等都对Java适配。且社区支持大,企业应用广泛,Java生态不断完善。
5.支持多线程、并发编程,Java内置完整的多线程API(thread,线程池,锁机制)且支持并发编程
6.安全性高,Java的类加载器机制,沙箱机制,让程序运行更安全。
劣势:
在回答劣势时最好说明为了哪些好的地方而导致了不好的地方
1.Java语法繁琐,模板代码多。为了保证语法严谨性和规范性导致。
2.启动慢,内存占用高。JVM启动以及后续的运行时环境初始化,加上项目类的加载和初始化(主要)以及字节码编译(最次)导致。为了规避手动管理内存的泄露风险,换取稳定性。
3.即使JVM不断优化,运行性能与C和C++相比还是较低。因为字节码需要技术编译器(JIT)编译为机器码来实现跨平台性
4.保留了老旧API。为了极致的向下兼容
5.面向对象过于严格。导致有时简单代码反而需要不少操作,主要是为了严格的规范性。
6.无原生分布式/微服务能力。
7.底层操作能力弱。无法调用系统API,JVM屏蔽系统差异的必然结果,为了统一不同平台运行标准。
三、Java为什么是跨平台的
Java是跨平台的主要原因是JVM的存在,Java被编译为字节码文件(.class文件)后,JVM可将这些字节码文件编译为机器码然后运行。
四、JVM、JRE和JDK三者的关系
JVM是Java虚拟机,是Java跨平台的基础,负责将字节码文件编译为机器码执行,仅提供运行字节码的核心能力,无法单独运行Java程序。
JRE是Java运行时环境,包括JVM和核心类库以及运行时支持工具,时Java程序的最小运行环境。
JDK是Java开发工具包,包括JRE和开发、编译工具(如javac编译器,java运行命令等),是开发和运行的完整环境。
五、编译型语言和解释型语言
编译型语言(代表:C、C++、Go、Rust):源码通过编译器一次性编译成机器码(二进制文件),运行时直接执行机器码,无需再次编译。
优点:运行效率高,因为机器码直接和硬件交互。
缺点:无法跨平台,开发周期中多了编译环节。
解释型语言(代表:Python、JavaScript、PHP):源码无需预先编译,运行时由解释器逐行解释成机器码并立即执行
优点:跨平台性好,开发效率高
缺点:运行效率低,因为每次运行都需要重新解释。
六、为什么Java编译型和解释型都有
1.编译型:Java通过javac命令将程序编译为字节码文件(.class文件)
2.解释型:运行时由JVM解释或即时编译器(JIT)即使编译为机器码。
七、值传递和引用传递的区别
Java没有引用传递,只有值传递!!! Java没有引用传递,只有值传递!!! Java没有引用传递,只有值传递!!!,重要的事情说三遍。
值传递就是表面意思,而所谓的引用传递不过是传的对象在内存中的地址的值。








