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

Java开发八股文之基础篇

目前是准大四生,最近在进行一个求职,于是整理了一些自己背的八股文的题目和参考答案,在求职的小伙伴也可以参考一下我整理的八股文,参考答案仅供参考,要是有什么不合理的地方可以跟我说我再进行一个修改~

1.JVM、JDK、JRE三者关系?

jdk:包括了java运行环境jre,java工具和Java基础类库

jre:是Java程序运行所需的最小环境

JVM:是Java虚拟机,是Java程序运行的环境。它负责将Java字节码(由Java编译器生成)解释或编译成机器码,=并执行程序。JVM提供了内存管理、垃圾回收、安全性等功能,使得Java程序具备跨平台性。

2.八种基本的数据类型

Java支持数据类型分为两类:基本数据类型和引I用数据类型。

基本数据类型共有8种,可以分为三类:

数值型:整数类型(byte、short、int、long)和浮点类型(float、double)

·字符型:char

·布尔型:boolean

Java八种基本数据类型的字节数:1字节(byte、boolean)、2字节(short、char)、4字节(int、float)、8字节(long、double)

3.数据类型转换方式你知道哪些?

自动类型转换(隐式转换):当目标类型的范围大于原类型时候,会自动转化

强制类型转换(显示转换):小于范围时候 long-》int

字符串转换Interger.parseInt()方法,将字符串转换为整型

数值之间的转换:将整型转换为字符型等,使用包装类实现

4.类型互转会出现什么问题吗?

数据丢失:比如当范围较大的数据类型转换为比较小的数据类型时,long-》int转,会导致高位数据丢失

数据溢出:范围小转换为范围大 int-long

精度丢失:float-double转换

数据转换类型不匹配问题

5.装箱和拆箱是什么?

是将基本数据类型和它所对应的包装类之间的转换

6.Java为什么要有Integer?

①在泛型中的应用:泛型只能使用引用类型,而不是使用基本类型

②在转换中的应用:基本类型和引用类型不能直接转换,必须使用包装类来实现,如int转换为String,必须先转换为Integer

③在集合中的应用:集合只能存储对象,而不能存储基本数据类型。

7.说一下 integer的缓存

Java的Integer类内部实现了一个静态缓存池,用于存储特定范围内的整数值对应的Integer对
象。
默认情况下,这个范围是-128至127。当通过Integer.valueOf(int)方法创建一个在这个范围内
的整数对象时,并不会每次都生成新的对象实例,而是复用缓存中的现有对象,会直接从内
存中取出,不需要新建一个对象

 

8.怎么理解面向对象?简单说说封装继承多态

面向对象是一种编程范式,它将现实世界中的事物抽象为对象,对象具有属性(称为宇段或属性)和行为

(称为方法).面向对象编程的设计思想是以对象为中心,通过对象之间的交互来完成程序的功能,具有

灵活性和可扩展性,通过封装和继承可以更好地应对需求变化。

java面向对象的三大特性包括:封装,继承,多态:

封装:封装是指将对象的属性(数据)和行为(方法)结合在一起,对外隐藏对象的内部细节,仅通过对象提供的接口与外界交互。封装的目的是增强安全性和简化编程,使得对象更加独立。

继承:继承是一种可以使得子类自动共享父类数据结构和方法的机制。它是代码复用的重要手段,通过继承可以建立类与类之间的层次关系,使得结构更加清晰。

多态:多态是指允许不同类的对象对同一消息作出响应。 即同一个接口,使用不同的实例而执行不同操作。多态性可以分为编译时多态(重载)和运行时多态 (重写).它使得程序具有良好的灵活性和扩展性。

9.多态体现在哪几个方面?

方法重载:
方法重载是指同一类中可以有多个同名方法,它们具有不同的参数列表(参数类型,数量或顺序不同).虽然方法名相同,但根据传入的参数不同,编译器会在编译时确定调用哪个方法。
示例:对于一个 add 方法,可以定义为 add(int a, int b) 和 add( double a,double b)
方法重写:
方法重写是指子类能够提供对父类中同名方法的具体实现。在运行时,vm会根据对象的实际类型确定调用哪个版本的方法。这是实现多态的主要方式。
示例:在一个动物类中,定义一个 punos 方法,子类 dog 可以重写该方法以实现
bark,而 cat 可以实现 meow .

10.重载与重写有什么区别?

重载(overloading)指的是在同一个类中,可以有多个同名方法,它们具有不同的参数类型,参数个数或参数顺序不同),编译器根据调用时的参数类型来决定调用哪个方法。
重写(overriding)指的是子类可以重新定义父类中的方法名,参数列表和这回类型必须与父类中的方法一致,通过@override注解来明确表示这是对父类方法的重写。
重载是指在同一个类中定义多个同名方法,而重写是指子类重新定义父类中的方法。

11.抽象类能加final修饰吗?

不能,Java中的抽象类是用来被继承的,而final修饰符用于禁止类被继承或方法被重写,因此,抽象类和final修饰符是互斥的,不能同时使用。

12.接口可以包含构造函数吗?

不可以,因为接口不会有自己的实例,不需要有构造函数

13.Java 中 final 作用是什么?

修饰类、方法、变量

类:不能被继承

修饰方法:不能被重写

修饰变量:一旦被赋值不能被改变

14.什么是泛型?

泛型是Java编程语言中的一个重要特性,它允许类、接口和方法在定义时使用一个或多个类
型参数,这些类型参数在使用时可以被指定为具体的类型。
泛型的主要目的是在编译时提供更强的类型检查,并且在编译后能够保留类型信息,避免了
在运行时出现类型转换异常。

15.java创建对象有哪些方式?

(1)new关键字

(2)使用class类的newInstance()方法

(3)使用constructor类的newInstance()方法

(4)使用clone()方法

(5)使用反序列化,通过对象序列化到文件或流中,然后再进行反序列化来创建对象

14.什么是泛型?

泛型是Java编程语言中的一个重要特性,它允许类、接口和方法在定义时使用一个或多个类
型参数,这些类型参数在使用时可以被指定为具体的类型。
泛型的主要目的是在编译时提供更强的类型检查,并且在编译后能够保留类型信息,避免了
在运行时出现类型转换异常。

 

15.java创建对象有哪些方式?

(1)new关键字

(2)使用class类的newInstance()方法

 

(3)使用constructor类的newInstance()方法

 

(4)使用clone()方法

(5)使用反序列化,通过对象序列化到文件或流中,然后再进行反序列化来创建对象

16.如何获取私有对象?

java中,私有的对象通常用private修饰,只能在类内部使用

不过可以通过以下两种方式来简介获取私有对象

第一:使用公共访问器方法(getter方法)

第二:采用反射机制

反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法,对于任意一个对象,都能调用它的任意一个属性和方法。

 

17.反射在你平时写代码或者框架中的应用场景有哪些?

我们项目使用的数据库是MySQL,使用jdbc连接数据库时使用Class.forName()通过加载数据库驱动程序。

18.能讲一讲Java注解的原理吗?

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理
类。
我们通过反射获取注解时,返回的是ava运行时生成的动态代理对象。通过代理对象调用自定
义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从
memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。

 

19.对注解解析的底层实现了解吗?

注解解析的底层实现主要依赖于Java的反射机制和字节码文件的存储。通过@Retention元注解可以控制注解的保留策略,当使用RetentionPolicy.RUNTIME时,可以在运行时通过反射API来解析注解信息。在JVM层面,会从字节码文件中读取注解信息,并创建注解的代理对象来获取注解的属性值。

 

20.Java注解的作用域呢?

类级别作用域(类的访问级别、继承关系、注释)、

方法级别作用域(访问级别、返回类型、异常、注释)、

字段级别作用域(访问级别、默认值、注释)

21.介绍一下Java异常

异常主要基于两大类,throwable类以及子类,throwable有两个比较重要的子类Error和Exception

Error表示环境运行时错误,这个错误是程序无法处理的严重问题

Exception:可以处理的异常,分为两大类:非运行时异常和运行时异常

非运行异常如文件不存在,运行时异常如空指针

22、Java异常处理有哪些?

try-catch,将觉得有异常的代码写在try里面,catch用于捕获并处理异常

throw语句:手动抛出异常,在代码中使用

throw new ExceptionType("Exception message");

throws关键字:在方法声明中声明可能抛出的异常

public void methodName() throws ExceptionType {//方法体}

finally块:无论异常是否发生都会执行这边,通常用于释放资源

23.== 与 equals 有什么区别?

==比较的是两个字符串内存地址(堆内存)的数值是否相等,属于数值比较;
equals(:比较的是两个字符串的内容,属于内容比较。

24.hashcode和equals方法有什么关系?

假如重写了equals方法则必须重写hashcode,以保证在使用哈希表等数据结构时,对象的相等性判断和存储查找操作能够正常工作。

23.String、StringBuffer、StringBuilder的区别和联系

都是Java中处理字符串常用的类

  • String:不可变的字符串,线程安全,适合固定内容的场景。
  • StringBuffer:可变的字符串,线程安全,适合多线程下的频繁修改。
  • StringBuilder:可变的字符串,非线程安全,适合单线程下的高性能操作。

24.怎么把一个对象从一个jvm转移到另一个jvm?

这个可以使用序列化和反序列化来实现,将对象序列化为字节流,并将其发送到另一个jvm,然后在另一个jvm中反序列化字节流回复对象,这个可以通过java的objectOutStream和objectInputStream来实现

还有一种方法就是使用消息中间件,将对象序列化为消息,通过消息队列进行传输,步骤主要是先将对象转换为通用格式,然后发送消息到中间件,最后目标JVM订阅消息并反序列化

25.将对象转为二进制字节流具体怎么实现?

在Java中通过序列化对象流来完成序列化和反序列化:

首先让类实现serializable接口

创建输出流并写入对象,通过ObjectOutputStream里的writeObject()方法做序列化操作

创建输入流并读取对象,通过ObjectInputStrean里的readObject()方法做反序列化操作。

 

 

http://www.dtcms.com/a/275893.html

相关文章:

  • qt 正则表达式
  • [面试] 手写题-二分查找
  • linux学习第30天(线程同步和锁)
  • WordPress Ads Pro Plugin本地文件包含漏洞(CVE-2025-4380)
  • 计算机毕业设计springboot服装工厂移动报表软件设计 基于SpringBoot的服装企业移动端数据可视化系统 面向服装制造行业的移动报表与公告发布平台
  • 微服务环境下的灰度发布与金丝雀发布实战经验分享
  • 多路选择器的学习
  • 《Java Web程序设计》实验报告六 JSP+JDBC+MySQL实现登录注册
  • 【飞算JavaAI】一站式智能开发,驱动Java开发全流程革新
  • 20250712-1-Kubernetes 监控与日志管理-K8s日志管理与维护_笔记
  • Go语言中的Options模式
  • 【Go + Gin 实现「双 Token」管理员登录】
  • Linux驱动08 --- 数据库
  • MCU芯片的功能安全机制E2E的基本原理和应用实现
  • 解锁C++数据结构:开启高效编程之旅
  • IDEA+Eclipse+Lombok无效问题排查
  • Java 之字符串 --- String 类
  • 电脑上如何查看WiFi密码
  • 什么是Jaccard 相似度(Jaccard Similarity)
  • 蓝牙调试抓包工具--nRF Connect移动端 使用详细总结
  • 日志不再孤立!用 Jaeger + TraceId 实现链路级定位
  • 程序在计算机中如何运行?——写给编程初学者的指南
  • 12.使用VGG网络进行Fashion-Mnist分类
  • Jenkins+Gitee+Docker容器化部署
  • 三步定位 Git Push 403:从日志到解决
  • 【深度剖析】致力“四个最”的君乐宝数字化转型(下篇:转型成效5-打造数字化生存能力探索可持续发展路径)
  • 【Datawhale AI夏令营】mcp-server
  • LeetCode 每日一题 2025/7/7-2025/7/13
  • 1. 好的设计原则
  • XCTF-Mary_Morton双漏洞交响曲:格式化字符串漏洞泄露Canary与栈溢出劫持的完美配合