当前位置: 首页 > 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放置节点 (控制…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...