面试题—Java基础

1、JDK 和 JRE和JVM 有什么区别?

JDK是Java开发工具包,JRE是Java运行环境,JVM是java虚拟机。
其中JDK包括了JRE和开发工具,JRE又包括了JVM和核心类库,
JVM是一个软件技术模拟出计算机运行的虚拟计算机,可以运行Java字节码文件,是Java实现跨平台的核心,由于每个平台都有对应的JVM,Java字节码文件的运行只依赖于JVM而不是系统平台,因此可以实现跨平台
核心类库是给程序员开发时调用的一些基础代码
开发工具包括了如javac.exe可以将源代码编译成字节码文件,java.exe可以将class文件加载到内存中运行,还有其他一些反编译工具、文档工具等

2、== 和 equals 的区别是什么?

当==比较的是基本数据类型,会比较基本数据类型的值,
当==比较的是引用数据类型,会比较引用类型的引用地址,
equals会比较两个对象内容是否相同,通常会重写equals方法,按照自定义的规则来进行比较

3、两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不一定,如在map中,存在hashcode()值相同,只能说明键值对的哈希值相同,并不能说明键值是相等的。
如果两个对象相等,则hashcode()值一定相同,两个对象分别调用equals方法也都返回true

4、final 在 java 中有什么作用?

final是Java的关键字,可以修饰Java中的类、方法和变量
final修饰的类不可被继承
final修饰的方法不可被重写
final修饰的变量不可被改变
fianl修饰的对象引用不可变,内容可变

5、八大基本数据类型及封装类

基本数据类型byte(8) short(16) char(16) int(32) long(64) float(32) double(64) boolean(1位,会补到8位)
封装类Byte、Short、Character、Integer、Float、Double、Boolean(位数与基本类型相同)

6、访问修饰符有哪些及范围

访问修饰符共有4中,范围由大到小为public、protected、default、private
当由public修饰时,无论是否是同一个包下的同一个类或子类或其他类,都可以访问
当由protected修饰时,只要是同一个包中的类,或不同包中的子类都可以访问
当由default修饰时,不加修饰符默认为default,此时只有同一个包下的类可以访问
当由private修饰时,只有同一个类中可以访问

7、方法重写和重载的区别

重写发生在父子类之间,要求子类方法中的方法名与参数列表相同,返回值小于等于父类,访问修饰符的范围大于等于父类,抛出的异常小于等于父类
重载发生在同一个类中,重载方法的方法名相同,参数列表不同(数量、类型、顺序不同),与返回值和修饰符无关(重载的方法不能通过返回类型区分)

8、String str="i"与 String str=new String(“i”)一样吗?

不一样,他们的内存分配方式不同。第一种,JVM会将其分配到常量池中,栈内存通过地址直接到常量池中取到值,第二种会分配到堆内存中,栈内存通过地址到堆内存中找,堆内存再通过地址到常量池中去找

9、&和&&的区别

&运算符用法有按位与和逻辑与,按位与常是底层数据的运算,开发中常用逻辑与
&&是短路与,与逻辑与用法对应,共同点为要求运算符两边布尔值都是true时表达式才为true,否则为false,不同点为短路与当判断运算符左边为flase时会直接得出表达式为false,右边的表达式会被短路,不再进行计算,但&及时左边为flase,还是会计算右边的值

10、静态变量与普通变量区别

静态变量也称为static变量,与普通变量的区别在于静态变量被所有对象共享,在内存中只有一个副本,当且仅当在类初次加载时会被初始化,静态变量属于类,而非静态变量是对象对拥有的,在创建对象时被初始化,每个不同的对象都拥有一个互不影响的副本
静态变量初始化的顺序按照定义顺序,普通变量初始化顺序按照所属对象被定义的顺序

11、抽象类必须要有抽象方法吗?

不用。抽象类是由abstract修饰的类,类中可以定义由abstract修饰的方法,也可以定义普通方法的具体实现。有抽象方法的一定是抽象类,但抽象类中可以没有抽象方法

12、普通类和抽象类有哪些区别?

首先抽象类被abstract修饰,普通类则不用
普通类是为了实例化一个对象,而抽象类的存在是为了被继承,不能实例化,因此抽象类的子类必须重写抽象类的抽象方法,而普通类可以不重写父类方法,同时抽象类也不能被final、static、private修饰

13、抽象类能使用 final 修饰吗?

不能。抽象类的存在就是为被继承,从而重写里面的抽象方法,final修饰的类将不能被继承,用final修饰抽象类会变得毫无意义

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

接口是对行为的抽象,是行为的规范,是like a的关系,抽象类是对类的抽象,是一种模版设计,是is a的关系。
接口中一般不能做方法的实现,在jdk1.8之后可以用default修饰来实现,抽象类可以做方法实现
接口没有构造方法,而抽象类有,一般给子类使用
接口可以继承接口(抽象类也可以继承抽象类),可以多继承,类只能单根继承

15、java 中 IO 流分为几种?

按照流的方向可以分为输入流和输出流
按照流处理数据的单位可以分为字节流和字符流

16、BIO、NIO、AIO 有什么区别?

BIO,NIO和AIO是java网络编程的三种模型。
BIO(同步阻塞):服务端对客户端的每个请求处理完成后,才会继续接受客户端的请求,客户端也会等待服务端处理完请求后才会发送请求,通常会使用多线程去处理,因为BIO每个连接都是一个单独的线程
NIO(同步非阻塞):NIO使用单线程或者只使用少量的多线程,一个请求一个线程,多个连接共用一个线程(即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。)
AIO(异步非阻塞):AIO的读写方法都是异步的,完成后会主动调用回调函数。
如:
假设有这么一个场景,有一排水壶(客户)在烧水。
AIO的做法是,每个水壶上装一个开关,当水开了以后会提醒对应的线程去处理。
NIO的做法是,叫一个线程不停的循环观察每一个水壶,根据每个水壶当前的状态去处理。
BIO的做法是,叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。

17、 break continue return 的区别

break跳出上一层循环,不再执行循环(结束当前循环体)
continue跳出本次循环,依然执行下次循环
return程序返回,不再执行下面的代码(结束当前的方法,直接返回)

18、什么是反射?

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

19、什么是 java 序列化?什么情况下需要序列化?

将Java对象转换成二进制序列的过程就是序列化,类实现Serializable接口来实现;
当java对象需要在网络上传输或者持久化存储到文件中,就需要对Java对象进行序列化;
此外,将二进制序列转换成Java对象的过程是反序列化,声明为static和transient的成员变量不能被序列化

20、动态代理是什么?有哪些应用?

动态代理创建一个新的代理类,这个代理类不仅继承了原有类的方法功能,还能够在执行这些方法时插入额外的逻辑。这个代理类是在运行时动态生成的,而不是在编译时定义的,从而提供了解耦、灵活和可扩展的解决方案。当需要为实现了某个接口的类中的方法添加额外处理(如日志记录、事务管理等)时,可以通过动态代理来实现。动态代理的应用包括 Spring AOP、事务管理、权限控制和日志记录等场景。

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

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

相关文章

静态标注rtk文件参数解析

目录 在静态标注中,rtk(Real-Time Kinematic)文件的主要作用 rtk文件包含几种类型数据 具体作用 具体示例 %RAWIMUSA #INSPVAXA $GPRMC 背景: 最近工作中涉及到静态标注 slam相关,因为初入门,对于rtk文件中有很多参数&…

Vue实现自定义进度条占比功能 Vue自定义进度条功能

在不使用echarts等第三方插件的情况下,使用Vue实现自定义的进度条占比功能,并且是多数据可选循环的 预览图效果 首先看一下获取的后端返回的数据结构,其中每一组加起来等于 22 ,也就是说如果你自己算的话也是同理,根据 占比的数值 除以 总和 =的百分比再去渲染对应占比…

Linux连接阿里云服务器的一系列命令教程

**-p:**连同文件的属性一起复制过去,而非使用默认属性(备份常用); **-d:**若来源档为连结档的属性(link file),则复制连结档属性而非文件本身; **-r:**递归持续复制,用於目录的复制…

神经处理单元(NPU)小知识

"40 TOPS"(Tera Operations Per Second)是一个衡量计算性能的单位,表示每秒可以执行40万亿次操作。在显卡(GPU)和神经处理单元(NPU)的背景下,这个指标通常用来描述它们在执…

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序) RabbitMQ常见问题解决方案问题一:消息丢失的解决方案(1)生成者丢失消息丢失的情景解决方案1&#xf…

记一次Hiveserver2连接异常的解决-腾讯云-emr

原文阅读:【巨人肩膀社区博客分享】记一次Hiveserver2连接异常的解决-腾讯云-emr 离线任务跑的好好的,忽然有一天失败了,查看海豚上的任务执行日志发现是hiveserver2连接超时了。 查看监控发现了几个问题一个是GC变得频繁,另一个…

【LabVIEW学习篇 - 19】:人机界面交互设计03

文章目录 运行菜单主菜单右键快捷菜单 运行菜单 菜单是人机交互非常重要的一个途径,它的好处是把需要的操作隐藏起来,当用户需要的时候才激活,因此相对于把所有的操作以按钮的形式放在界面上,可以节省很大的空间。 菜单有两种&a…

苹果账号登录后端验证两种方式 python2

import time import jwt import requests import json import base64def decode_jwt(jwt_token):try:h,p,s jwt_token.split(.)except:return {},{},{},"","",""header json.loads(base64.urlsafe_b64decode(h )) # 可能需要调整填充pa…

Learn OpenGL In Qt之着色器

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 公众号: C学习与探索 | 个人主页: rainInSunny | 个人专栏: Learn OpenGL In Qt 文章目录 写在前面GLSL变量输入输出顶点着色器片段着色器 Uniform更多属性 自己的着色器类 关注公众号:…

TCP通信实现

前言 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于流的通信协议。它是互联网协议栈(TCP/IP)中的核心协议之一,主要用于保证在计算机网络中可靠地传输数据。 TCP通信的基…

梧桐数据库(WuTongDB):唯一索引(Unique Index)的实现原理、应用场景

唯一索引(Unique Index)的实现原理 唯一索引是一种数据库索引,其保证每一行中的一组列组合是唯一的,不允许重复值。唯一索引通常用于确保数据完整性,防止重复数据的插入。 1. 实现原理: 数据结构&#x…

Android视频编辑:利用FFmpeg实现高级功能

在移动设备上进行视频编辑的需求日益增长,用户期望能够在智能手机或平板电脑上轻松地编辑视频,以满足社交媒体分享或个人存档的需求。Android平台因其广泛的用户基础和开放的生态系统,成为视频编辑应用的理想选择。FFmpeg,作为一个…

Leetcode面试经典150题-55.跳跃游戏

解法都在代码里,不懂就留言或者私信 class Solution {public boolean canJump(int[] nums) {/**如果就一个位置,你本来就在这,肯定可以跳到*/if(nums.length 1) {return true;}/**这个题的解题思路是遍历数组,如果当前位置不在之…

Golang | Leetcode Golang题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; const mask1, mask2 1 << 7, 1<<7 | 1<<6func getBytes(num int) int {if num&mask1 0 {return 1}n : 0for mask : mask1; num&mask ! 0; mask >> 1 {nif n > 4 {return -1}}if n > 2 {return n}r…

12寸厂甲方PM在启动会上宣贯的项目日常管理制度

项目日常管理制度 XXXX信息执行系统项目日常管理制度 一、总则 1. 目的: 规范项目日常管理,确保项目顺利进行,提高工作效率和质量。 2. 适用范围: 本制度适用于参与本项目的甲方和乙方所有成员。 二、日常沟通 1. 沟通原则: 保持开放和透明的沟通环境。 及时响应,确保信息…

AI大模型零基础学习到精通:jieba分词用法及原理

2.jieba分词用法及原理 1.概述 上篇文章分析了自然语言处理&#xff0c;特别是中文处理中&#xff0c;分词的几个主要难点。为了解决这些难点&#xff0c;提出了基于字符串匹配的算法和基于统计的分词算法。针对当前的几种分词引擎&#xff0c;对其分词准确度和速度进行了评估…

实时监控视频接入到AS-VJ900拼接系统中,发现服务器的英伟达GPU 驱动状态不对 导致拼接后实时视频请求失败的问题解决

目录 一.问题背景 1.1拼接平台简介 1.2问题描述 二.问题解决过程 2.1查看拼接前视频流 2.2查看GPU驱动 2.3重新安装GPU驱动 2.3.1确认驱动版本 2.3.2卸载不正常驱动 2.3.3重新安装驱动 三.问题解决结果 3.1查看解决结果 3.2nvidia-smi的补充 一.问题背景 1.1拼接…

NLP基础及其代码-tokenizer

基础知识 NLP-分词器&#xff1a;SentencePiece【参考Chinese-LLaMA-Alpaca在通用中文语料上训练的20K中文词表并与原版LLaMA模型的32K词表进行合并的代码】_sentencepiece 中文训练-CSDN博客 【OpenLLM 008】大模型基础组件之分词器-万字长文全面解读LLM中的分词算法与分词器…

TCP通信三次握手、四次挥手

前言 前面我说到了&#xff0c;UDP通信的实现&#xff0c;但我们经常说UDP通信不可靠&#xff0c;是因为他只会接收和发送&#xff0c;并不会去验证对方收到没有&#xff0c;那么我们说TCP通信可靠&#xff0c;就是因为他会进行验证接收端是否能够接收和发送&#xff0c;并且只…

使用Python通过字节串或字节数组加载和保存PDF文档

处理PDF文件的可以直接读取和写入文件系统中的PDF文件&#xff0c;然而&#xff0c;通过字节串&#xff08;byte string&#xff09;或字节数组&#xff08;byte array&#xff09;来加载和保存PDF文档在某些情况下更高效。这种方法不仅可以提高数据处理的灵活性&#xff0c;允…