Java开发工程师最新面试题库系列——Java基础部分(附答案)

如果你有更好的想法请在评论区留下您的答案,一起交流讨论#

面向对象有哪些特征?

答:继承、封装、多态

JDK与JRE的区别是什么?

答:JDK是java开发时所需环境,它包含了Java开发时需要用到的API,JRE是Java的运行时环境,JDK包含了JRE,他们是包含关系

Java有哪几种基本数据类型?

答:8种,分别是int、byte、short、long、double、flot、char、boolean

== 和equals比较有什么区别?

答:是Java中的操作符,equals是Java中Object对象提供的对象比较Api。它们的区别是比较的是左右两边对象的内存地址,而equals比较的是左右对象的值

public,private,protected,默认的区别什么?

答:它们是java中的权限修饰符,public可以在任何地方访问,private仅仅只能在本类中访问,protected可以在本类以及本类的子类中访问,默认则代表可以在本包中访问

short s1=1; s1+=1;有错吗? s1=s1+1; 有错吗?

答:short在和int类型进行计算的时候会转换为int类型,原因是Java中精度小于int的数值运算的时候都回被自动转换为int后进行计算。计算后的结果也是int,再将int类型赋值给short类型当然会报错,所以s1=s1+1是错误的,然而s1+=1是java底层采用了编译语法糖的形式完成的转换,在编译后依然是转换为int计算只不过最终做了一次强转

float f = 1.9; 有错吗?

答:有错,因为在Java中字面量的小数指的是double类型,double为8个字节float为4个字节,无法完成自动转换。如果需要将字面量的小数转换为float类型需要在小数后面加f或者F

&和&&有什么区别?

答:前者是与符号,后者是短路与符号。前者除了可以做逻辑运算和可以做位运算称为“按位与”,后者只能做逻辑运算,其次再逻辑运算中,这两个符号都需要左右两侧表达式为true时,最后结果才为true

2*8最有效率的计算方法是什么?

答:2 << 3

怎么理解值传递和引用传递?

答:值传递传递的是变量中的数据,应用传递则是传递变量的引用而不是值

Java到底是值传递还是引用传递?

答:Java中8种基本数据类型传递的是值,而引用数据类型传递的是引用

一个".java"源文件的类有什么限制?

答:最多只能有一个public static void mian方法,最少有一个类

final关键字有哪些用法?

答:修饰类:最终类,不可被子类继承,修饰方法:最终方法,不可被子类进行方法覆盖,修饰变量:常量,必须在声明时赋值,且之后的程序中不可改变。

final、finally、finalize有什么区别?

答:除了名称相像,都比相同。final属于java的修饰符,finally是结合Java异常体现中的Try一起使用的标识符用来关闭一些资源,finalize是Object根类中的一个方法,是对象被回收之前执行的方法。

void和Void有什么区别?

答:void是关键字在java中代表返回值为空,Void是类名

为什么byte的取值范围为-128~127?

答:2的8次方,且减去正数的零

char类型可以存储中文汉字吗?

答:可以,char默认为2个字节,不过char采用的是UTF-16BE的编码集,且该编码集支持中文,char可以动态的更具字符内容改变字节,最大可以到4

重载和重写有什么区别?

答:重载是在同一类中,满足重载需要方法名相同,参数列表不同,与返回值和访问修饰符无关。重写是在继承关系中,子类对父类方法的覆盖,需要满足“一同两小一大”(方法名相同,返回值类型小于等于父类方法,声明抛出异常小于等于父类方法,访问权限修饰符大于等于父类方法)

构造器可以被重写和重载吗?

答:构造器可以被重载,但是不能被重写,因为构造器不能被继承

Java中的断言(assert)是什么?

答:用于检测表达式或方法的最终结果是否符合预期

Error和Exception有哪些区别?

答:Error是系统错误,一般由于系统原因或JVM内部错误引起,无法被程序捕获处理,Exception是程序异常,其中又分编译时(检查时)异常和运行时异常,可以被程序捕获处理,一般我们在开发中针对运行时异常进行处理。

Java中常见的异常有哪些?

答:NullPointException空指针异常、Arithmeticexception算数异常、ClassCastException类型转换异常、ClassNotFoundException类为找到异常、illegalargumentexception方法参数错误异常、ArrayIndexOfOutBoundsException数组索引越界异常

Java中常见的运行时异常有哪些?

答:NoSuchMethodError 为找到方法异常(反射调用方法时),NumberFormatException 数值转换异常,NullPointException空指针异常、Arithmeticexception算数异常、ClassCastException类型转换异常

运行时异常和受检异常有什么区别?

答:

运行时异常包括 RuntimeException 类及其子类,表示 JVM 在运行期间可能出现的异常。Java 编译器不会检查运行时异常。

受检异常是Exception 中除 RuntimeException 及其子类之外的异常。Java 编译器会检查受检异常。

RuntimeException异常和受检异常之间的区别:是否强制要求调用者必须处理此异常,如果强制要求调用者必须进行处理,那么就使用受检异常,否则就选择非受检异常(RuntimeException)。一般来讲,如果没有特殊的要求,我们建议使用RuntimeException异常。

什么时候会发生空指针异常?

答:对值为空的变量进行操作时

你知道有哪些避免空指针异常的方法?

答:对值为空的变量进行操作时先判断是否为空

throw和throws有什么区别?

答:throw用于在方法中抛出异常,throws写在方法名称后面,用于声明抛出的异常类型

try里面return,finally还会执行吗?

答:会的,除了System.exit(0)finally都会执行

int和Integer有什么区别?

答:int是java的基本数据类型,Integer是Java的引用数据类型。Integer是int的包装类,它提供了对int的转换和计算等API,操作起来更加方便

什么是包装类型?有什么用?

答:包装类型是对基本数据类型的封装,底层其实就是对基本数据类型的操作提供了API和语法糖

什么是自动装箱和拆箱?

答:基本数据类型转引用数据类型为自动拆箱,反之为自动装箱

你怎么理解Java中的自动类型转换和强制类型转换?

答:小转大自动转换,拓展变量的内存字节。大转小强制转换,缩小内存字节损失精度

你怎么理解Java中的类型提升?

答:语法糖

你怎么理解强、软、弱、虚引用?

答:这里写图片描述

switch是否能用在long上?

答:可以,switch支持int、byte、short、char以及对应的包装类,和String类型

switch case支持哪几种数据类型?

答:如上

String的底层实现是怎样的?

答:char数组,以及字符串常量池

String是可变的吗?为什么?

答:不可变,java中的字面量字符串都存放在字符串常量池中,无法改变,只能引用

为什么不能用 + 拼接字符串?

答:因为如果用+号拼接字符串JVM编译时会进行优化,转变为StringBuilder拼接。单个表达式使用问题不大,但是如果是多个表达式或者在循环内使用会频繁创建StringBuilder对象大大降低性能

StringBuffer和StringBuilder有什么区别?

答:前者线程安全效率低,后者线程不安全效率高,

StringJoiner有什么用?

答:用于做字符串拼接的工具类

//间隔符是,

StringJoiner joiner1 = new StringJoiner(",");

joiner1.add("1").add("2").add("3");

System.out.println(joiner1.toString());

//1,2,3

//以[开头中间的间隔符是,以]结尾

StringJoiner joiner2 = new StringJoiner(",", "[", "]");

joiner2.add("1").add("2").add("3");

System.out.println(joiner2.toString());

//[1,2,3]

//拼接sql 的in条件的时候, 使用这个就方便很多了

StringJoiner joiner3 = new StringJoiner("','", "'", "'");

joiner3.add("1").add("2");

//'1','2'

普通类和抽象类有什么区别?

答:抽象类被abstract所修饰,

静态内部类和普通内部类有什么区别?

答:普通内部类持有外部外部类的应用,可以调用外部类的属性及方法,而静态内部类没有持有外部内引用,无法调用外部内的方法及属性。静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成 员(方法,属性)。 非静态内部类能够访问外部类的静态和非静态成员。静态内部类不能访问外 部类的非静态成员,只能访问外部类的静态成员。

实例化方式不同:

静态内部类:不依赖于外部类的实例,直接实例化内部类对象

非静态内部类:通过外部类的对象实例生成内部类对象

静态方法可以直接调用非静态方法吗?为什么?

答:不能,因为静态方法的加载顺序优先于非静态方法,且静态方法属于类,无需对象实例,非静态方法则需要类的实例才能调用

静态变量和实力变量有什么区别?

答:静态变量属于类,无需创建对象通过类名即可调用,而实例变量需要类创建实例才可以调用。加载角度而言只要JVM加载了静态变量所处的类,静态变量就以及可以使用,为分配了空间。而实例变量需要创建对象之后才会为其分配空间

内部类可以访问其外部类的成员吗?

答:非静态内部类可以,因为它持有者外部内的引用。

接口和抽象类有什么区别?

答:接口没有构造方法,抽象类有。抽象类中可以有普通成员变量;接口中没有普通成员变量。抽象类中可以包含非抽象普通方法;接口中的所有方法必须都是抽象的,不能有非抽象的方法。一个类可以实现多个接口,用逗号隔开,但只能继承一个抽象类;接口不可以实现接口,但可以继承接口,并且可以继承多个接口,用逗号隔开。

接口里面可以写方法实现吗?

答:可以,jdk1.8之后可以写接口的默认方法实现

Java中的UUID是什么?

答:生成一串随机的数字,它保证对在同一时空中的所有机器都是唯一的

Java类初始化顺序是怎样的?

答:如下

img

img

hashCode有什么作用?

答:hashcode在java中用于表示对象的唯一码。hashcode也用在Hash数据结构中,用来计算对象存放在Hash中的位置(存储地址)

hashCode和identityHashCode的区别?

答:

Object类中的hashCode方法会返回一个hash码,只有指向同一个对象的引用变量调用才会返回相同值,而String类中放宽了要求,对象里的值相等也返回相同值

identityHashCode方法是System类中的方法,调用该方法时,不管类中是否重写了Object类中的hashCode方法,都执行Object类中的hashCode方法,返回一个hashCode值。所以只有指向同一个对象的引用变量调用才会返回相同值

什么是Hash冲突?

答:两个对象都放入同一个hash容器中,且计算出的hash值都相同。也称为hash碰撞,此时的解决办法是再hash

Java常用的元注解有哪些?

答:

@Target:描述了注解修饰的对象范围

METHOD:用于描述方法

PACKAGE:用于描述包

PARAMETER:用于描述方法变量

TYPE:用于描述类、接口或enum类型

@Inherited:使被它修饰的注解具有继承性

@Retention:表示注解的运行时期范围

RetentionPolicy.SOURCE -------------注解将被编译器丢弃

RetentionPolicy.CLASS -------------注解在class文件中可用,但会被VM丢弃

RetentionPolicy.RUNTIME ---------VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息

@Documented:使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息

Java泛型中的T、R、K、V、E分别指什么?

答:

? --不确定的Java类型,是一个通配符泛型

T --表示确定的Java类型

K、V --Java中的键值对key、value

E --Element (在集合中使用,因为集合中存放的是元素,也表示Collection容器中的类型)

Java源码中的Class代表这个类型所对应的类,而Class<?>表示类型不确定的类。

Java金额计算怎么避免精度丢失?

答:使用BigDecimal进行与金钱相关的计算

Java语法糖是什么意思?

答:通过提供简单的编写方式在编译时完成对复杂操作的转换。通常是指Java中的简单语法,在编译时期还原成基础语法。

transient关键字有什么作用?

答:将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化

如何实现对象克隆?

答:Java对象克隆又分深拷贝和浅拷贝,浅拷贝调用Object跟对象继承下来的clone,深拷贝可以借助SpringFramework提供的BeanUtils工具或者通过Java的序列化与反序列化实现。

对象克隆浅拷贝和深拷贝有什么区别?

答:浅拷贝与深拷贝的区别,浅拷贝:如果对象中还包括着子对象,浅拷贝只能拷贝一份父对象的内存空间,而子对象则只是拷贝了其引用,值没有进行拷贝。深拷贝则是涉及到这个对象当前所占的所有空间(值)都进行拷贝。

Java反射机制有什么作用?

答:反射可以让程序在运行时具有检测自己和获取当前运行环境的能力。

理解反射机制要了解静态编译和动态编译,静态编译时在程序运行之前编译时期就以及确定的,动态编译则可以才程序运行期间,使程序自己改变自己的行为模式或逻辑,具有高度的灵活性。典型的编程设计模式动态代理就是在运行时期完成的编译

Java反射机制有什么优缺点?

答:

优点:增强程序灵活性和可拓展性,可帮助程序进行解耦合,提高自身的适应能力

缺点:

1、 性能问题。

Java反射机制中包含了一些动态类型,所以Java虚拟机不能够对这些动态代码进行优化。因此,反射操作的效率要比正常操作效率低很多。我们应该避免在对性能要求很高的程序或经常被执行的代码中使用反射。而且,如何使用反射决定了性能的高低。如果它作为程序中较少运行的部分,性能将不会成为一个问题。

2、安全限制。

使用反射通常需要程序的运行没有安全方面的限制。如果一个程序对安全性提出要求,则最好不要使用反射。

3、程序健壮性。

反射允许代码执行一些通常不被允许的操作,所以使用反射有可能会导致意想不到的后果。反射代码破坏了Java程序结构的抽象性,所以当程序运行的平台发生变化的时候,由于抽象的逻辑结构不能被识别,代码产生的效果与之前会产生差异。

USB Microphone https://www.soft-voice.com/

Wooden Speakers  https://www.zeshuiplatform.com/

亚马逊测评 www.yisuping.cn

深圳网站建设www.sz886.com



喜欢的朋友记得点赞、收藏、关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/480170.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DICOM医学影像应用篇——窗宽窗位概念、原理及实现详解

目录 窗宽窗位调整&#xff08;Windowing&#xff09;在DICOM医学影像中的应用 窗宽窗位的基本概念 窗宽&#xff08;Window Width, WW&#xff09; 窗位&#xff08;Window Level, WL&#xff09; 窗宽窗位调整的基本原理 映射逻辑 数学公式 窗宽窗位调整的C实现 代码…

尚硅谷学习笔记——Java设计模式(一)设计模式七大原则

一、介绍 在软件工程中&#xff0c;设计模式&#xff08;design pattern&#xff09;是对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;提出的解决方案。我们希望我们的软件能够实现复用性、高稳定性、扩展性、维护性、代码重用性&#xff0c;所以…

网络原理->DNS协议和NAT协议解

前言 大家好我是小帅&#xff0c;今天我们来了解应用层的DNS协议和NAT技术 个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G 文章目录 1.重要应⽤层协议DNS(Domain Name System)1.1 DNS背景 2. NAT技术3. 总结 1.重要应⽤层协议DNS(Domain Name System) DNS是⼀整套从域…

虚拟机ubuntu-20.04.6-live-server搭建OpenStack:Victoria(一:工具、环境准备-controller node)

文章目录 一、软件准备A. 下载ubuntu-live-server&#xff1a;B. 下载并安装Xshell&#xff1a; 二、安装Ubuntu&#xff08;控制节点主机&#xff09;A. 开启服务B. 先预安装C. 虚拟机设置D. 安装系统 三、连接XshellA. 配置网络接口B. 连接 Xshell 一、软件准备 温馨提示&…

面试——HashMap的并发问题

HashMap是线程不安全&#xff0c;在并发使用HashMap时会发生下列问题&#xff1a; 数据丢失 HashMap底层数据结构为数组&#xff0c;之后如果发送了哈希冲突&#xff0c;那么数据会以列表的形式保存在这个下标下&#xff0c;当数据长度大于8时&#xff0c;则会转为红黑树。 存…

Vue+Elementui el-tree树只能选择子节点并且支持检索

效果&#xff1a; 只能选择子节点 添加配置添加检索代码 源码&#xff1a; <template><div><el-button size"small" type"primary" clearable :disabled"disabled" click"showSign">危险点评估</el-button>…

Pod 动态分配存储空间实现持久化存储

配置 Pod 以使用 PersistentVolume 作为存储 ​ 关于持久卷的介绍&#xff0c;可以看官方文档 https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/ ​ 持久卷根据存储位置&#xff0c;可以使用本地存储和云存储&#xff0c;如果有云服务平台&#xff0c…

AIGC引领金融大模型革命:未来已来

文章目录 金融大模型的应用场景1. **金融风险管理**2. **量化交易**3. **个性化投资建议**4. **金融欺诈检测和预防**5. **智能客户服务** 金融大模型开发面临的挑战应对策略《金融大模型开发基础与实践》亮点内容简介作者简介获取方式 在AIGC&#xff08;Artificial Intellige…

数据库(MySQL黑马)

基础篇 MySQL概述 数据库概述 数据库相关概念 主流的关系型数据库管理系统 MySQL数据库的安装与启动 下载&#xff1a;MySQL :: MySQL Community Downloads 安装步骤 MySQL―8.0.40超详细保姆级安装教程_mysql8.0.40安装教程-CSDN博客文章浏览阅读1k次。_mysql8.0.40安装教…

MySQL8 CTE解决不定层级树形迭代问题

MySQL Common Table Expressions&#xff08;CTE&#xff0c;公用表表达式&#xff09;是在MySQL 8.0及更高版本中引入的一种高级SQL构造&#xff0c;它允许用户定义一个临时的结果集&#xff0c;这个结果集可以在同一个查询中被多次引用&#xff0c;从而简化复杂的查询逻辑和提…

第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议(ITCA 2024)

重要信息 会议官网&#xff1a;itca2024.iaecst.org 会议时间&#xff1a;2024年12月06-08日 会议地点&#xff1a;中国-广州&#xff08;越秀国际会议中心&#xff09; 会议简介 第六届信息技术与计算机应用学术会议(ITCA 2024) 依旧作为第六届国际科技创新学术交流大会…

详解MVC架构与三层架构以及DO、VO、DTO、BO、PO | SpringBoot基础概念

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 今天毛毛张分享的是SpeingBoot框架学习中的一些基础概念性的东西&#xff1a;MVC结构、三层架构、POJO、Entity、PO、VO、DO、BO、DTO、DAO 文章目录 1.架构1.1 基本…

golang debug调试

1. 本地调试 1&#xff1a;Add Configurations 添加配置文件&#xff08;Run kind &#xff1a;Directory&#xff09; 2&#xff1a;进入run运行窗口 3&#xff1a;debug断点调试模式 1. Resume Program (继续运行) 图标: ▶️ 或 ► 快捷键: F9&#xff08;Windows/Linux&a…

单点登录深入详解之技术方案总结

技术方案之CAS认证 概述 CAS 是耶鲁大学的开源项目&#xff0c;宗旨是为 web 应用系统提供一种可靠的单点登录解决方案。 CAS 从安全性角度来考虑设计&#xff0c;用户在 CAS 输入用户名和密码之后通过ticket进行认证&#xff0c;能够有效防止密码泄露。 CAS 广泛使用于传统应…

redis大key和热key

redis中大key、热key 什么是大key大key可能产生的原因大key可能会造成什么影响如何检测大key如何优化删除大key时可能的问题删除大key的策略 热key热key可能导致的问题解决热key的方法 什么是大key 大key通常是指占用内存空间过大或包含大量元素的键值对。 数据量大&#xff…

vue3实现自定义导航菜单

一、创建项目 1. 打开HBuilder X 图1 2. 新建一个空项目 文件->新建->项目->uni-app 填写项目名称&#xff1a;vue3demo 选择项目存放目录&#xff1a;D:/HBuilderProjects 一定要注意vue的版本&#xff0c;当前选择的版本为vue3 图2 点击“创建”之后进入项目界面 图…

Windows Qtcreator不能debug 调试 qt5 程序

Windows下 Qt Creator 14.0.2 与Qt5.15.2 正常release打包都是没有问题的&#xff0c;就是不能debug&#xff0c;最后发现是两者不兼容导致的&#xff1b; 我使用的是 编译器是 MinGW8.1.0 &#xff0c;这个版本是有问题的&#xff0c;需要更新到最新&#xff0c;我更新的是Mi…

ubuntu20.04更换安装高版本CUDA以及多个CUDA版本管理

Ubuntu 20.04下多版本CUDA的安装与切换 CUDA安装配置环境变量软连接附上参考博客CUDA安装 cuda官方下载地址 因为我需要安装的是11.1版本的,所以这里按着11.1举例安装 安装命令如下: wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cu…

vue实现滚动条滑动到底部分页调取后端接口加载数据

一、案例效果 二、前提条件 接口返回数据 三、案例代码 子组件 const $emit defineEmits([cloneItem, updateList]);const props defineProps({rightList: {type: Array,},chartTableData: {type: Array as () > ChartListType[],},deleteChartInfo: {type: Object,}…

路面交通工具和个数识别,支持YOLO,COCO,VOC三种格式,带标注可识别自行车,摩的,公共汽车,装载机,面包车,卡车,轿车等

预处理 自动定向&#xff1a; 已应用 调整大小&#xff1a; 拉伸至 640x640 增强 每个训练示例的输出&#xff1a; 3 翻转&#xff1a; 水平 自行车 公交车