我会每天花两小时来背一些关于Java的八股文,应对以后的面试,这里看的是小林Coding
Java的特点:
平台无关性: Java会把所有的源代码都编译成字节码文件,在所有安装了Java虚拟机(JVM)的系统上都可以运行
面向对象: Java是严格按照面向对象编程(OOP)的语言,几乎一切都是面向对象,oop使得代码更容易开发和维护,oop包括类、对象、抽象、封装、继承、多态;
内存管理: Java有自己的内存回收机制,Java会自动回收不用的对象,避免内存泄漏和一些其他的内存相关的问题
Java的优势和劣势
优势
1.跨平台: 只要有JVM就可以在任何地方运行
2.面向对象: 让代码容易开发和维护
3.内存管理:有自带的内存回收机制,避免内存泄漏和内存相关问题
4.强大的生态系统: 比如有Spring框架,各种库和工具,应用广泛
5. 高并发支持:有多线程、并发工具包(java.util.concurrent)也就是JUC的支持,能够应付高并发的后端服务(如秒杀系统、电商订单系统)
6.安全性和稳定性: 有Java安全模型比如沙箱机制,适合网络环境,企业长期使用,版本更新也重视逻辑兼容
劣势
1.性能方面:虽然JVM做了很多优化,但对比C++和Rust这种刚编译的语言,开销还是比较大,尤其是启动服务的时间比较长
2.语法繁琐:样板代码多,有了lambda表达式后会好一些,对于Python来说就不够简洁,对于对象比较严格,在编写一些简单的程序时耗费的时间就比较多
3.内存消耗:JVM本身占内存,对于有限资源的环境来说不太友好
4.开发效率:对比动态语言Python来说,编译过程也可能拖慢开发速度
Java为什么是跨平台的
依赖于JVM,JVM是一个软件由C/C++开发,在不同平台下编译出来的字节码文件(.class)在不同平台版本的JVM翻译成对应平台的机器码,实现了跨平台,编译后的机器码不能跨平台

JVM、JDK、JRE三者关系?

JVM: 是Java程序的运行环境,负责编译字节码文件,提供内存管理、垃圾回收、安全性等功能,并且使Java具有跨平台性
JRE:是Java运行时环境,是Java所需运行的最小环境,包含JVM和一组运行类库,用于支持Java程序的执行。JRE不包含开发工具,只提供Java程序运行所需的运行环境
JDK: 包含了Java运行的所有工具和库,调试器(jdb),编译器(javac),JVM等所有开发工具,JDK提供了开发、编译、调试和运行Java程序所需的全部工具和环境。
所以JDK大于JRE大于JVM
JVM和Java有什么区别?
JVM是运行环境,Java是编程语言
二者相互配合,Java通过编译器编译成字节码文件,再由JVM把字节码翻译成不同平台的机器码文件,在不同平台运行实现跨平台性
JVM还可以编译Kotlin、Scala这类语言编译生成后的Java字节码文件,所以JVM不仅是跑Java的平台,更是整个JVM语言生态的基础平台
JVM是什么
JVM是Java虚拟机,负责解释自己的指令集(字节码)并映射到本地的CPU指令集和OS的系统调用
编译型语言和解释型语言的区别
编译型语言:在整个程序执行时,会被编译成字节码文件或成机器码,生成执行文件,速度快,跨平台性差,比如C/C++
解释型语言:在编译时逐行解释源代码,不生成执行文件,但速度慢,跨平台性差比如Python/JavaScript
Java 既是编译型语言,也是解释型语言。它是一种混合型语言。编译成字节码体现编译型语言、JVM解释字节码体现解释型语言、跨平台性好
Python和Java的区别
python是解释型语言,翻译的同时会执行程序
Java是已编译的编译语言,java编译器会把程序编译成字节码文件,再由JVM执行翻译成机器码
价值交付和引用交付的区别
所有的参数传递都是值传递,不存在真正的"引用传递"
对于基础类型如int 若只修改副本的值不会影响本身的值

对于引用类型,若只修改副本的值会影响本身的值因为此时副本和原引用指向同一个对象,但是副本修改的值指向新的副本,就不会修改原本的值,因为此时副本指向了新的对象
网硕互联帮助中心



评论前必须登录!
注册