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

news2024/11/29 18:16:32

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

面向对象有哪些特征?

答:继承、封装、多态

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.coloradmin.cn/o/2249914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux系统下如何将xz及ISO\img等格式压缩包(系统)烧写到优盘(TF卡)

最近用树莓派做了个NAS&#xff0c;效果一般&#xff0c;缺少监控及UI等&#xff0c;详细见这篇文章&#xff1a; https://blog.csdn.net/bugsycrack/article/details/135344782?spm1001.2014.3001.5501 所以下载了专门的基于树莓派的NAS系统直接使用。这篇文章是顺便复习一…

计算机的错误计算(一百六十八)

摘要 算式“(5^25*(1/25)^(1/5)*3^25(1/25)^(1/5)*5^25*3^(251/5)-(9/25)^(1/5)*3^25*5^25-(1/25)^(1/5)*3^25*5.0^25*(13^(1/5)-3^(2/5.0)))”的值为0。但是&#xff0c;在 MATLAB 中计算它&#xff0c;则输出含有15位整数。 例1. 计算 直接贴图吧&#xff1a; 这样&#x…

Python学习------第十四天

匿名函数 1.函数作为参数来传递 &#xff08;函数的参数中调用另外一个函数&#xff09; #定义一个函数&#xff0c;接受另一个函数作为参数传入 #计算逻辑的传入 def test_func(compute):result compute(1,2)print(result)print(f"{type(result)}")print(f"…

【经典论文阅读】Transformer(多头注意力 编码器-解码器)

Transformer attention is all you need 摘要 完全舍弃循环 recurrence 和卷积 convolutions 只依赖于attention mechanisms 【1】Introduction 完全通过注意力机制&#xff0c;draw global dependencies between input and output 【2】Background 1&#xff1a;self-…

Java——多线程案例

目录 一、单例模式 1.饿汉模式 2.懒汉模式 3.线程安全问题 4.解决线程安全问题(懒汉模式) 二、阻塞式队列 1.什么是阻塞队列 2.生产者消费模型 生产者消费者模型意义&#xff1a; 1.解耦合 2.削峰填谷 3.标准库中的阻塞队列 三、定时器 1.定时器是什么 2.标准库中的…

AI 声音:数字音频、语音识别、TTS 简介与使用示例

在现代 AI 技术的推动下&#xff0c;声音处理领域取得了巨大进展。从语音识别&#xff08;ASR&#xff09;到文本转语音&#xff08;TTS&#xff09;&#xff0c;再到个性化声音克隆&#xff0c;这些技术已经深入到我们的日常生活中&#xff1a;语音助手、自动字幕生成、语音导…

Linux服务器安装mongodb

因为项目需要做评论功能&#xff0c;领导要求使用mongodb&#xff0c;所以趁机多学习一下。 在服务器我们使用docker安装mongodb 1、拉取mongodb镜像 docker pull mongo &#xff08;默认拉取最新的镜像&#xff09; 如果你想指定版本可以这样 docker pull mongo:4.4&#…

Java基础 设计模式——针对实习面试

目录 Java基础 设计模式单例模式工厂模式观察者模式策略模式装饰器模式其他设计模式 Java基础 设计模式 单例模式 单例模式&#xff08;Singleton Pattern&#xff09; 定义&#xff1a;确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个实例。适用场景&…

分布式搜索引擎之elasticsearch单机部署与测试

分布式搜索引擎之elasticsearch单机部署与测试 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的…

【工具】JS解析XML并且转为json对象

【工具】JS解析XML并且转为json对象 <?xml version1.0 encodingGB2312?> <root><head><transcode>hhhhhhh</transcode></head><body><param>ccccccc</param><param>aaaaaaa</param><param>qqqq<…

CSDN设置成黑色背景(谷歌 Edge)

一.谷歌浏览器 浏览器地址输入&#xff1a;Chrome://flags搜索框输入&#xff1a;enable-force-dark将default 改成 enabled&#xff0c;点击重启浏览器 二.Edge浏览器 浏览器地址输入&#xff1a;edge://flags搜索里面输入Auto Dark Mode for Web Contents将default 改成 e…

【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

OGRE 3D----3. OGRE绘制自定义模型

在使用OGRE进行开发时,绘制自定义模型是一个常见的需求。本文将介绍如何使用OGRE的ManualObject类来创建和绘制自定义模型。通过ManualObject,开发者可以直接定义顶点、法线、纹理坐标等,从而灵活地构建各种复杂的几何体。 Ogre::ManualObject 是 Ogre3D 引擎中的一个类,用…

【网络安全 | 漏洞挖掘】绕过SAML认证获得管理员面板访问权限

未经许可,不得转载。 文章目录 什么是SAML认证?SAML是如何工作的?SAML响应结构漏洞结果什么是SAML认证? SAML(安全断言标记语言)用于单点登录(SSO)。它是一种功能,允许用户在多个服务之间切换时无需多次登录。例如,如果你已经登录了facebook.com,就不需要再次输入凭…

AI自动化剪辑工具:可将长视频中精彩部分提取合成短视频

最近&#xff0c;我发现了一款特别适合当下短视频潮流的自动化工具&#xff0c;它能够让我们轻松从长视频中剪辑出精彩片段&#xff0c;并快速生成适合分享的短视频。 这款工具叫 AI Youtube Shorts Generator&#xff0c;是一个开源项目&#xff0c;特别适合那些喜欢制作短视…

Windsurf可以上传图片开发UI了

背景 曾经羡慕Cursor的“画图”开发功能&#xff0c;这不Windsurf安排上了。 Upload Images to Cascade Cascade now supports uploading images on premium models Ask Cascade to build or tweak UI from on image upload New keybindings Keybindings to navigate betwe…

(二)Sping Boot学习——Sping Boot注意事项

1.springboot默认是扫描的类是在启动类的当前包或者下级包。 2.运行报错 ERROR&#xff1a;An incompatible version [1.2.33] of the Apache Tomcat Native library is installed, while Tomcat requires version [1.2.34] 网上试了很多方法&#xff0c;直接重新安装更新版…

Elasticsearch:Retrievers 介绍

检索器&#xff08;retrievers&#xff09;是 Elasticsearch 中搜索 API 中添加的新抽象层。它们提供了在单个 _search API 调用中配置多阶段检索管道的便利。此架构通过消除对复杂搜索查询的多个 Elasticsearch API 调用的需求&#xff0c;简化了应用程序中的搜索逻辑。它还减…

Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成

Ubuntu下的DoxygenVScode实现C/C接口文档自动生成 1、 Doxygen简介 Doxygen 是一个由 C 编写的、开源的、跨平台的文档生成系统。最初主要用于生成 C 库的 API 文档&#xff0c;但目前又添加了对 C、C#、Java、Python、Fortran、PHP 等语言的支持。其从源代码中提取注释&…

Css—实现3D导航栏

一、背景 最近在其他的网页中看到了一个很有趣的3d效果&#xff0c;这个效果就是使用css3中的3D转换实现的&#xff0c;所以今天的内容就是3D的导航栏效果。那么话不多说&#xff0c;直接开始主要内容的讲解。 二、效果展示 三、思路解析 1、首先我们需要将这个导航使用一个大…