Java基础面试知识路线

  • Java基础语法与数据类型
  • 面向对象编程
  • 异常处理
  • Java内存管理
  • 常用Java库
  • 输入输出(I/O)
  • 基础多线程
  • 基础设计模式

Java基础语法与数据类型

JDK和JRE有什么区别?

JRE指的是Java运行环境,包括JVM,核心类库,和其他支持运行Java程序的文件。

JDK是JRE的超集,是用于开发Java程序的完整开发环境,包含JRE,以及开发、调试和监控Java应用程序的工具。
Java中的基本数据类型和包装数据类型有哪些?

Java提供了八种基本数据类型:byte、short、int、long、double、float、char、boolean。局部变量位于栈上,成员变量位于堆中。占用内存小,效率高,适合频繁操作。当小类型赋值给大类型时,会进行隐式转换,数据不会丢失。当大类型转成小类型时,需显式强制转换,导致精度丢失或溢出。

每个基本数据类型的都对应一个包装类型:Byte、Short、Integer、Long、Double、Float、Character、Boolean。包装数据类型是类,存储在堆中,用于面向对象编程,并且支持null。由于是对象,涉及内存分配和垃圾回收,性能较低。
Java中的StringBuilder是如何实现的?

StringBuilder主要是为了解决String类型对象的不可变性问题。大致的核心实现:内部使用char[]来存储字符序列,通过方法append(),insert()等操作,直接修改内部字符数组,而不是像String那样重新创建对象。每次当数组容量不足时,会通过扩展数组容量来容纳新的字符,按两倍扩容,以减少扩容次数,提高性能。
String和StringBuilder底层都是使用char数组存放,两者有什么区别?

String被final修饰,且内部char[]也是被final修饰,且是immutable类,具有不可变性,保证线程安全。
Java中的final、finally、finalize()各有什么区别?

final是用来修饰类、方法、变量,主要用来设计不可变的类,确保类的安全性、优化性能。(类被final修饰不可继承,方法被final修饰不可重写,变量被final修饰不可重新赋值,常用于定义常量)。

finally与try-catch语句块结合使用,确保无论是否发生异常,finally语句都会执行。一般用于资源的释放,比如数据库连接或文件的关闭。以保证即使发生异常,资源也会正常释放。

finalize()是Object类中的方法,是gc回收资源的一种机制,允许对象在被垃圾回收前进行清理操作。平时使用较少,且不稳定,在JDK9以后该方法已经被标记为废弃。
为什么在Java中编写代码会遇到乱码问题?

主要是因为在字符编码与解码不一致而产生的。如果在编码时使用了一种字符集,而在解码时使用了另一种字符集字符无法显示就会产生乱码。常见的有数据库乱码、默认编码设置、流处理编码问题。

面向对象编程

面向对象的三大特性?

封装:数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。

继承:子类可以继承父类,从而获得父类非private方法和属性。

多态(编译时多态、运行时多态):方法重载和方法重写。
接口与抽象类的区别?

一个子类可以继承一个抽象类,但可以实现多个接口。

接口和抽象类的设计动机不同。接口的设计是自上而下的,我们知晓某一行为,基于这些行为定义接口,一些类需要这些行为,因此实现对应接口。

抽象类的设计是自下而上的,我们写了很多类,发现这些类有共性,有很多代码是重复的,因此我们将相同代码逻辑封装成抽象类,减少代码冗余。

接口用于定义行为规范,表示能做什么,interface关键字,定义一组方法而不提供实现。

抽象类用于定义一个类的公共行为和状态,表示是什么,abstrat关键字,提供部分实现和字段,可以有抽象方法和具体方法。

异常处理

Java中Execption和Error有什么区别?

Execption和Error都是Throwable类的子类。Execption表示可以被处理的程序异常,Execption又分为运行时异常和编译时异常。而Error表示系统级别的不可恢复的错误。
throws和throw的区别?

throws是异常的申明,若方法中存在检查异常,如果不对其捕获,那必须在方法头中显式声明该异常,以便于告诉方法调用者此方法存在异常,需要处理。

throw是异常的抛出。如果代码可能会引发某种错误,可以创建一个合适的异常类实例并抛出它,这就是抛出异常。

Java内存管理

类加载生命周期?

常用Java库

平时常用的开发工具库有哪些?

Apache Common是对JDK的扩展,包含了很多的开源工具。Hutool是一个小而全的Java工具类库。Spring常用工具类。
Lombok工具库用来解决什么问题?

我们通常需要编写大量代码才能使类变得有用。toString()方法hashCode() and equals()方法Getter and Setter 方法构造函数对于这种简单的类,这些方法通常是无聊的、重复的,而且是可以很容易地机械地生成的那种东西(ide通常提供这种功能)。

输入输出(I/O)

基础多线程

基础设计模式

注解和反射

相关推荐
Vitalia40 分钟前
⭐算法OJ⭐二叉树的后序遍历【树的遍历】(C++实现)Binary Tree Postorder Traversal
开发语言·c++·算法·二叉树
日暮南城故里42 分钟前
Java学习------初识JVM体系结构
java·jvm·学习
做一个码农都是奢望1 小时前
MATLAB 调用arduino uno
开发语言·算法·matlab
鱼樱前端1 小时前
Java Jdbc相关知识点汇总
java·后端
dblens 数据库管理和开发工具1 小时前
精挑20题:MySQL 8.0高频面试题深度解析——掌握核心知识点、新特性和优化技巧
数据库·mysql·面试
二进制人工智能2 小时前
【QT5 多线程示例】互斥锁
开发语言·c++·qt
canonical_entropy2 小时前
NopReport示例-动态Sheet和动态列
java·后端·excel
kkk哥2 小时前
基于springboot的母婴商城系统(018)
java·spring boot·后端
沈阳信息学奥赛培训2 小时前
C++语法之命名空间二
开发语言·c++·算法
王者鳜錸2 小时前
四、小白学JAVA-石头剪刀布游戏
java·开发语言·游戏