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

JAVA基础阶段面试题(关键点)必备

1、简述什么是 JDK、JRE 和 JVM?

JDK : 开发工具包

JRE : 运行时环境

JVM : java虚拟机

2、写出Java的四类八种基本数据类?

整数 byte short int long

小数(浮点) float double

布尔 boolean

字符 char

3、& 和 && 的区别 ?

& 符号的左右两边,无论真或假都要执行

&& 符号的左边如果为假,符号的右边不再执行,提高了代码的执行效率

4、 switch的参数可以是什么类型

int 及以下整数包含 字符 char byte short int char

String

枚举

5,简述什么是标识符,及其定义的规则

标识符就是名字

数字不能开头

不能使用关键字起名字

特殊符号只有 _ $

26个大小写英文字母

数字0-9

其他国家的语言文字

6、说出成员变量和局部变量的区别

1, 物理位置

成员变量: 类中方法外

局部变量: 方法中或方法定义的小括号里面

2, 内存位置

成员变量: 在堆内存中

局部变量: 在栈内存中

3, 生命周期

成员变量: 随着对象创建而产生,随着对象的消失而消失

局部变量: 随着方法的调用而产生,随着方法调用结束而消失

4,有无默认值

成员变量: 有默认值, 整数0,小数0.0 字符 ‘\u0000’ 布尔 false 引用数据类型 null

局部变量: 没有默认值,使用的时候,必须先赋值

7、static关键字都能修饰什么? 都有什么特点

1, 修饰成员变量, 叫静态变量 具有共享性,节省内存空间

2, 修饰方法: 静态方法: 可以直接使用类名.进行调用,

3, 修饰代码块: 静态代码块 ,给静态变量进行赋值

4, 修饰类: 静态内部类

8 、什么是封装,为什么要封装

就是将事物的属性和行为 通过 private进行修饰,外界无法直接进行访问,需要提供公共的setter 和 getter 进行间接的访问

提高代码的安全性和复用性

9, 什么是面向对象,请详细说明(分别解释 封装 继承和多态)

面向对象是一种以事物为中心的编程思想,具体分为封装继承和多态

封装: 通过private关键字将事物的属性和行为封装起来,对外通过setter和getter提供公共的访问方式,提高了代码的安全性

继承: 让类与类之间产生子父级的关系,子类可以去使用父类的资源,提高了代码的复用性

多态: 事物的多种形态,发生多态的前提,必须有继承,有方法的重写,有父类的引用指向子类对象

10, overload和override的区别

overload 是重载 要求在同一个类中,方法名相同,参数列表不同与返回值类型无关

参数列表不同表现在: 个数不同, 数据类型顺序不同,数据类型不同

override是重写 要求发生在子父级的继承关系中,方法名相同,参数列表相同,返回值类型是父类返回值类型本身或其子类, 异常等于父类本身异常类型或小于父类本身异常

11, final 和 finally的区别

final 是权限修饰符, 表示最终的, 能修饰 变量, 方法,和类

修饰变量: 变成了常量

修饰方法: 变成了最终的方法,不能被重写,但是可以被正常调用

修饰类: 变成的最终的类,不能有子类,但是可以被正常创建对象

finally 是一个代码块,只能与我们的 try代码块连用,表示无论代码是否发生异常,finally里面的代码都要执行

12, this和super都能用到哪些地方

thissuper

可以区分成员变量与局部变量重名问题,如果本类没有这个成员变量,也可以调用父类的成员变量可以区分本类成员变量与父类成员变量重名问题,只能调用父类的成员变量

可以调用本类的成员方法,如果本类没有这个成员方法,也可以调用父类的成员方法只能调用父类的成员方法

可以通过this() 或 this(参数) 让其本类的构造方法直接相互调用子类通过super() 或 super(参数) 调用父类的构造方法

13, 接口与抽象类的区别

  • 抽象类

  • 接口

  • 有成员变量

  • 没有成员变量,都是常量默认被 public static final修饰

  • 实现方法和抽象方法

  • jdk1.8之前都是抽象方法 jdk1.8之后可以有静态和默认方法

  • 有构造方法

  • 没有构造方法

14, 静态变量与成员变量的区别

内存位置 : 静态变量在方法区中,成员变量在堆内存中

生命周期 : 静态变量随着.class文件加载而产生,随着.class文件结束而结束; 成员变量随着对象的创建而产生,随着对象的结束而结束

调用方式: 静态变量既可以通过 类名.直接进行调用, 也可以通过对象名.进行调用; 成员变量只能通过 对象名.进行访问

15, throw和throws 的区别

throw 是具体抛出一个异常对象,在方法的内部, 后面有且只能有一个异常对象,代码一旦遇到了throw证明出现了问题,代码就会停止

throws 是异常的声明, 在方法定义的小括号后面,后面可以跟多个异常的类型,方法有throws,代码不一定发生异常

16 String,StringBuilder 与 StringBuffer 的区别

String是不可变的字符串序列, StringBuilder和StringBuffer是可变的字符串序列

StringBuilder 是 线程不安全的,从jdk1.5版本开始的,效率高

StringBuffer 是 线程安全的,从jdk1.0开始的,效率低

17, == 和 equals的区别

== 既可以比较基本数据类型,也可以比较引用数据类型,比较基本数据类型,比较的是具体的值,比较引用数据类型比较是地址值

equals只能比较引用数据类型,重写之前比较的是引用数据类型的地址值,重写之后,比较的是引用数据类型的内容

18, 包装类拆箱装箱

基本数据类型转换成对应的引用数据类型,为装箱,把引用数据类型转换为对应的基本数据类型为拆箱,jdk1.5之后可以实现自动拆装箱

19,请说出5个异常类型

数组索引下标越界异常,空指针异常,文件找不到异常,类型转换异常,算数异常

ArithmeticException 算术异常,如除以0

ArrayIndexOutOfBoundsException 数组下标出界

IOException I/O异常的根类

FileNotFoundException 不能找到文件

NullPointerException空指针异常

20, HashSet 的去重原理

不同的对象,地址值肯定不同,地址不同,直接插入数据成功

如果地址值相同,不能证明是同一个对象

需要通过equals 的方法继续比较,比较的是对象中的每一个内容

如果内容相同证明是同一个对象,插入失败

如果内容不同,证明不是同一个对象,数据插入成功

21, jvm内存划分

jvm分为方法区,堆内存,栈内存,本地方法栈,程序计数器,

方法区: 主要存.class字节码文件,静态变量,字符串常量

堆内存: 主要存new出来的对象,数组也在堆内存中

栈内存: 存正在执行的方法,局部变量也在栈内存中

22, 构造方法是否可以被重写?为什么?

构造方法不能被重写,因为构造方法要求,方法名与类名保持一致,

23, Collection 与 Collections 的区别

collection是单列集合的顶层父接口,Collections 是处理集合的工具类

24, 集合与数组的区别

集合与数组都是容器

数组既可以存基本数据类型也可以存引用数据类型,数组的长度固定不能发生改变

集合只能存引用数据类型,可以存任意的引用数据类型,长度可变

25, 多线程的三种实现方式

1, 继承Thread,重写run方法,最后创建Thread 的子类对象,调用start()方法开启线程任务

2, 实现Runnable接口,重写run方法,创建Runnable 的实现类对象,通过Thread 的构造传递,调用start() 方法开启线程任务

3, 实现Callable接口,重写call方法,创建Callable的实现类对象,将Callable 的实现类对象,传递到FutureTask的构造方法中,最后将FutureTask传递到Thread 的构造方法中,通过start()方法开启线程任务

26, 多线程的生命周期

多线程的生命周期有5种状态,分别是 新建态,就绪态,运行态,阻塞态和死亡态

新建态: 刚new出来的时候

就绪态: 已经.start(),没有获取到cpu资源

运行态: 获取到cpu资源进入运行态

阻塞态: 线程遇到sleep(),遇到wait() 或者io流阻塞让cpu资源丢失

死亡态: 线程正常结束,线程任务出现异常

27, TreeSet和HashSet的区别

TreeSet 和 HashSet 一样都有 无序无索引不能重复

TreeSet 可以进行根据一定的排序规则进行排序

HashSet 没有排序的规则

28, TreeMap如何去重

TreeMap去重 是利用key值的 compareTo 方法,compareTo方法为0,就证明是同一个元素,进行去重

29,所学习的io流一共分为几类

IO流根据流向 有输入流和输出流两种

IO流根据类型分类有 字节输入输出流 和 字符输入输出流

字节输入流 InputStream

字节输出流 OutputStream

字符输入流 Reader

字符输出流 Writer

30, 目前学习的最高效的文件复制方式

高效缓冲流+字节数组 字节数组的大小一般是1024的倍数 最高一般不超过8倍

31,String abc = new String("abc")有几个对象

有两个对象,一个对象"abc"在方法区的字符串常量池中,一个在堆内存中,是new String()

32,map的两种遍历方式

map不能直接遍历,想要遍历有两种间接的方式

1, 通过map方法的 keySet() 方法, 将map中的key 取出来,存到set集合里面,之后遍历set集合,通过map中的 get(key key) 方法取出每一个value值

2, 通过map中的 entrySet() 方法, 将map中的key 和 value 存到 map的内部类 entry中,之后将entry对象存到set集合里面,之后通过遍历set集合,通过entry内部类中的 getKey, 和 getValue 获取每一个值

33,HashMap与HashTable 的区别

HashMap 是线程不安全的,允许有空的键值对

Hashtable 是线程安全的,不允许有空的键值对

34,什么是反射?

反射就是在程序运行时期,动态的获取类中成员信息(构造方法,成员变量,成员方法)的过程!

35, 字节流与字符流有什么区别

字节流是万能流,可以处理任意的文件

字符流不是万能流,只能处理纯文本文件

扩展:

1, Java的线程池有哪些?那你最常用的线程池是哪个?

newCachedTheadPool 动态的线程池

newFixedThreadPool 固定线程数的线程池

newSingleThreadExecutorPool 固定只有一条线程的线程池

newSCheduledThreadPool 以固定频率执行的线程池

一般来说,这四种线程池都不使用,一般使用ThreadPoolExecutor来自定义线程池

2, sleep wait notify notifyAll的作用

sleep方法是Thread类的静态方法

调用sleep方法可以让当前正在运行的线程进入睡眠状态,即暂时停止运行指定的单位时间。并且该线程在睡眠期间不会释放对象锁。

wait是Object提供的一个方法

调用wait方法可以让当前线程进入等待唤醒状态,并释放锁。该线程会处于等待唤醒状态直到另一个线程调用了object对象的notify方法或者notifyAll方法。

notify也是Object提供的一个方法

当其它线程调用该对象的notifyAll()方法(唤醒所有wait线程)或notify()方法(只随机唤醒一个wait线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去公平竞争该对象锁。

3,HashMap的底层数据结构是什么?那什么时候变为红黑树呢?

在JDK1.7的时候是数组+链表;

在JDK1.8的时候是数组+链表+红黑树;

当链表的长度大于8的时候,就会变成红黑树

4, final,finally,finalize有什么区别?

final用于修饰类,变量,方法

1.final修饰类,类不能被继承了。

2.final可以修饰方法,方法就不能被重写了。

3.final修饰变量总规则:变量有且仅能被赋值一次。

finally用于try-catch捕获异常,无论代码是否发生异常,finally中的代码一定会被执行,通常用来关闭资源

finalize属于Object类中的一个方法,当对象被回收的时候,会调用此方法

相关文章:

JAVA基础阶段面试题(关键点)必备

1、简述什么是 JDK、JRE 和 JVM? JDK : 开发工具包JRE : 运行时环境JVM : java虚拟机2、写出Java的四类八种基本数据类?整数 byte short int long小数(浮点) float double布尔 boolean字符 char3、& 和 && 的区别 ?& 符号的左右两边,无…...

Shiro简介

介绍 ApacheShiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完成:认证、授权、加密、会话管理、与 Web集成、缓存等。借助Shiro 您可以快速轻松地保护任何应用程序一一从最小的移动应用程序到最大的 Web 和企业应用程序。 1.2:为什么要用 shiro 自2003年以…...

cmu 445 poject 3笔记

2022年的任务 https://15445.courses.cs.cmu.edu/fall2022/project3/ task1, 从磁盘读取数据的算子 task2, 聚合和join算子 task3, sort,limit,topn算子,以及sortlimit->TopN优化 leaderboard没做 本文不写代码,只记录遇到的一些思维盲点 Task1 scan…...

CHAPTER 2 Zabbix界面操作

Zabbix界面操作2.1 Zabbix界面操作1.zabbix的web界面安装2.添加监控信息3.查看监控内容4.查看图像2.2 自定义监控与监控报警1.自定义监控1.1 说明1.2 预备知识2.实现自定义监控2.1 自定义语法2.2 agent注册2.3 在server端注册(web操作)2.4 查看监控图形2.3 监控报警1.第三方报警…...

keep-alive的使用-及遇到的问题

被keep-alive包括的的组件&#xff0c;当组件切换是不是走销毁流程&#xff0c;而是缓存起来 keep-alive有三个参数include匹配name名被缓存&#xff0c;exclude匹配name名不会被缓存&#xff0c;max被缓存组件数量 不写&#xff0c;组件默认全部缓存 <keep-alive ><…...

华为OD面试经验分享,尤其注意机试题部分

文章目录招聘流程和背景介绍面试准备机试题目类型和解答技巧在算法部分在操作系统部分面试官提问和答题技巧面试总结和建议推荐一些华为 od 常见的机试题题目&#xff1a;两数之和题目&#xff1a;二叉树的遍历题目&#xff1a;链表反转题目&#xff1a;最大子序和招聘流程和背…...

【Java】String、StringBuffer、StringBuilder的区别

一、String 由 char[] 数组构成&#xff0c;使用了 final 修饰&#xff0c;String的值是不可变的&#xff0c;这就导致每次对String的操作都会生成新的String对象&#xff0c;然后把指针指向新的引用对象&#xff0c;不仅效率低下&#xff0c;而且浪费大量优先的内存空间。 二…...

iOS开发:对Block使用的一次研究总结

在开发中Block是经常使用的,那我们就得知其然,知其所以然。 Block是什么? Block可以封装一个匿名函数为对象,并捕获上下文所需的数据,并传给目标对象在适当的时候回调。我们使用Block的目的其实就是回调传值,那我们去看看Block的底层,再深入了解一下Block。 Block的底…...

Spark 3.1.1 shuffle fetch 导致shuffle错位的问题

背景 最近从数据仓库小组那边反馈了一个问题,一个SQL任务出来的结果不正确&#xff0c;重新运行一次之后就没问题了&#xff0c;具体的SQL如下&#xff1a; select col1,count(1) as cnt from table1 where dt 20230202 group by col1 having count(1) > 1这个问题是偶发…...

2月第2周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年2月6日-2月12日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B站…...

Jdk19 动态编译 Java源码为 Class 文件

动态编译 Java 源码为 Class一.背景1.Jdk 版本2.需求二.Java 源码动态编译实现1.Maven 依赖2.源码包装类3.Java 文件对象封装类4.文件管理器封装类5.类加载器6.类编译器三.动态编译测试1.普通测试类2.接口实现类3.测试四.用动态编译 Class 替换 SpringBoot 的 Bean&#xff08;…...

安装 GPU 版本的 tensorflow 完整版本

前言&#xff1a; 之前安装的 CPU 版本的 tensorflow 一直出问题&#xff0c;索性就直接安装 GPU 版本的 tensorflow 了&#xff08;有了GPU 就不能浪费&#xff09;。 安装过程&#xff1a; 1&#xff09;看自己有无 GPU&#xff0c;找到对应 GPU 的版本&#xff1a;任务管理…...

BOM编程-设置地址栏上的URL

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>设置地址栏上的URL</title> </head> <body> <script> function go(){ // 获…...

设计模式之原型模式与建造者模式详解和应用

目录1 原型模式1.1 原型模式定义1.2 原型模式的应用场景1.3 原型模式的通用写法&#xff08;浅拷贝&#xff09;1.4 使用序列化实现深度克隆1.5 克隆破坏单例模式1.6 原型模式在源码中的应用1.7 原型模式的优缺点1.8 总结2 建造者模式2.1 建造者模式定义2.2 建造者模式的应用场…...

C语言(函数和递归)

函数是完成特定任务的独立程序代码单元。 目录 一.函数 1.创建一个简单的函数 2.定义带形式参数的函数 3.使用return从函数中返回值 二.递归 一.函数 1.创建一个简单的函数 #include <stdio.h> void print(void); //函数原型 int main(){ print(); //函…...

快乐的shell命令行

快乐的shell命令行 PART1——基础 1.权限 #超级用户权限$普通用户 2.复制粘贴 复制&#xff1a;鼠标左键沿着文本拖动高亮的文本被复制到X管理的缓冲区&#xff08;或者双击一个单词&#xff09;粘贴&#xff1a;鼠标中键 3.简单命令 时间和日期date当前月份的日历cal磁…...

大数据面试题flume篇

1.Flume 的Source&#xff0c;Sink&#xff0c;Channel 的作用&#xff1f;你们Source 是什么类型&#xff1f; 1. 作用 &#xff08;1&#xff09;Source组件是专门用来收集数据的&#xff0c;可以处理各种类型、各种格式的日志数据&#xff0c;包括 avro、thrift、exec、jm…...

零信任-深信服零信任aTrust介绍(5)

​深信服零信任aTrust介绍 深信服是国内领先的互联网信任服务提供商&#xff0c;也是国内首家通过认证的全球信任服务商。深信服零信任是其中一项核心的信任技术&#xff0c;主要针对身份认证、数字签名、数字证书等方面的信任问题。 深信服零信任提供了一种新的安全保护模式…...

UVa 1343 The Rotation Game 旋转游戏 IDA* BFS 路径还原

题目链接&#xff1a;The Rotation Game 题目描述&#xff1a; 给定二十四个整数&#xff0c;这二十四个整数由八个一&#xff0c;八个二&#xff0c;八个三组成&#xff0c;从左到右&#xff0c;从上到下依次描述下图方格中的数字&#xff1a; 例如上图左边对应的输入就是[1,…...

硬件学习 软件Cadence day02 画原理图的基本操作 (键盘快捷键 , 原理图设计流程 , 从开始到导出网表流程)

1. ORCAD Capture cls 界面的快捷键 键盘 按键对应的操作I放大 &#xff08;可以滚轮操作&#xff09;O缩小 &#xff08;可以滚轮操作&#xff09;W画线Esc退出现在的状态 &#xff08;画图界面 右键 End xxx&#xff09;N放置网络标号J放置节点 (控制…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...