13个Java基础面试题

Hi,大家好,我是王二蛋。

金三银四求职季,特地为大家整理出13个 Java 基础面试题,希望能为正在准备或即将参与面试的小伙伴们提供些许帮助。

后续还会整理关于线程、IO、JUC等Java相关面试题,敬请各位持续关注。

这13个基础面试题先给大家罗列出来

在这里插入图片描述

1.Java 创建对象有几种方式?

在Java中,创建对象主要有以下几种方式:

  • 使用new关键字创建对象:这是最常见和直接的方式。通过调用类的构造函数,可以使用new关键字创建对象。

  • 使用Class类的newInstance方法:如果类有一个无参数的公共构造函数,可以使用Class对象的newInstance方法创建对象。

  • 使用反序列化创建对象:当从文件、网络或其他IO流中读取对象的序列化表示时,可以使用Java的对象反序列化来创建对象。这通常涉及到ObjectInputStream类。

  • 使用克隆方法创建对象:如果类实现了Cloneable接口并覆盖了Object类的clone方法,那么可以通过调用对象的clone方法来创建该对象的一个副本。

  • 使用工厂方法创建对象:工厂方法是一种设计模式,它封装了对象的创建逻辑,并返回该类型的对象。

  • 使用依赖注入框架创建对象:在大型项目中,通常使用如Spring这样的依赖注入框架来创建和管理对象。

2.有了数组为什么还要ArrayList?

为了方便程序员!!!

数组的大小在创建时是固定的,一旦创建,其大小就不能改变。如果要添加更多的元素,就需要创建一个新的更大的数组,并将旧数组的元素复制到新数组中。ArrayList 提供了add(), remove(), get(), size()等方法可以帮助程序员完成这一切工作,更灵活、更便利。

3.重载和重写的区别

重载发生在一个类中。同一个方法名如果有不同的参数列表(参数类型、个数、顺序不同)则视为重载,是多态的一种表现。

重载

重写发生在父类与子类之间。现象就是在子类中把父类本身有的方法重新写一遍。

如果父类中的某个方法不满足子类的需求,子类就可以在方法名、参数列表、返回类型都相同的情况下,对方法体进行重写。

重写

4.什么是内部类?应用在什么场景?

在一个类或者一个方法里面定义的类,称为内部类

根据它们被定义的位置和方式,内部类可以分为四种类型:成员内部类、静态内部类、局部内部类和匿名内部类

成员内部类

成员内部类定义在类的成员位置,可以访问外部类的所有成员。

通常被用于封装和组合,比如一对一关系的声明。

静态内部类

静态内部类是static修饰的成员内部类,可以直接访问外部类的所有静态成员。

通常用于实现与外部类关联但不依赖于外部类实例的工具类、单例模式或工厂模式等。

局部内部类

局部内部类定义在方法、构造器或初始化块中。它只能访问外部类的final成员,以及它所在方法或构造器的final局部变量。

通常用于提供临时的功能。

匿名内部类

匿名内部类通常是一个接口的实现类对象,它主要用于简化代码和提供临时的实现。

经常使用匿名内部类来实现Runnable接口

5.介绍下Java中的四种引用

强引用

强引用是默认的引用类型,当一个对象具有强引用时,垃圾回收器不会回收该对象,即使系统内存不足也不会回收

强引用通常用于确保对象一直存在,例如在单例模式或缓存中。

软引用

软引用是一种比较灵活的引用类型。在系统内存足够时,软引用的对象不会被垃圾回收器回收。但当内存空间不足时,这些对象就会被回收

软引用主要用于实现内存缓存。

弱引用

弱引用比软引用更弱一些。无论当前内存空间足够与否,只要JVM开始进行垃圾回收,被弱引用关联的对象必定会被回收

虚引用

虚引用是Java中最弱的一种引用类型,它并不会决定对象的生命周期

虚引用主要用于跟踪对象被垃圾回收的情况,例如NIO中的DirectByteBuffer等。通过虚引用,我们可以获取到一个对象是否已经被垃圾回收了。

6.static都有哪些用法?

在Java中,static是一个关键字,用于声明属性和方法成员方法,以及内部类。

静态变量

静态变量是类级别的变量,它不属于任何对象实例。静态变量在类加载时初始化,并且只有一个副本存在于内存中,不管创建了多少个对象。所有的对象实例共享同一个静态变量的值。

静态方法

静态方法也是类级别的,不依赖于任何对象实例。静态方法只能访问静态成员变量或调用其他静态方法,因为它们没有与任何对象实例关联

静态块

静态块是在类加载时执行的代码块。它们通常用于初始化静态变量只需要执行一次的类级别的操作

静态内部类

静态内部类是一个定义在另一个类内部的类,但它不需要外部类的实例即可创建。静态内部类只能访问外部类的静态成员变量和静态方法。

7.HashCode在集合中的作用

hashCode()在集合中的作用主要是用来快速定位元素在哈希表(如HashMap和HashSet)中的位置。

Java的集合有两类,一类是List,还有一类是Set。前者有序可重复,后者无序不重复

**在set中插入的时候怎么判断该元素已存在呢?**可以通过equals方法。但是如果元素太多,一个个equals,效率就会相当低下了。

当向集合添加元素时,集合会使用元素的hashCode()方法计算出一个哈希码,然后根据这个哈希码找到元素应该存放的位置。这样,当需要查找或操作某个元素时,集合可以直接定位到该位置,无需遍历整个集合,从而大大提高了效率。

8.Hash冲突怎么处理?

Hash冲突是指在哈希表中,两个不同的key经过哈希函数处理后得到了相同的哈希值,从而产生了冲突。处理Hash冲突的方法主要有以下几种:

  • 链地址法:当发生冲突时,将具有相同哈希值的元素存储在一个链表中。
  • 开放地址法:当发生冲突时,通过一定的探测方法在哈希表中寻找下一个可用的空槽位来存储元素。
    • 线性探测:按顺序查找下一个空槽位。
    • 二次探测:通过二次方的方式查找下一个空槽位。
    • 双重哈希:使用另一个哈希函数来确定步长,从而查找下一个空槽位。
  • 再哈希:当发生冲突时,使用不同的哈希函数再次计算键的哈希值,找到一个新的位置来存储元素。
  • 建立公共溢出区:将哈希表分为基本表和溢出表两部分。当基本表发生冲突时,就把该元素存入溢出表。

9.深拷贝和浅拷贝的区别是什么?

深拷贝和浅拷贝在复制对象时的主要区别在于它们处理对象内部元素的方式

深拷贝在复制对象时,会递归地复制原始对象及其所有子对象,包括对象的属性、嵌套对象、引用等。这意味着深拷贝会创建一个完全独立的新对象,修改原始对象不会影响复制对象

浅拷贝在复制对象时,只复制最外层对象,对于内部的嵌套对象,仅仅是引用而已。意味着原始对象和浅拷贝对象之间共享内部对象,修改其中一个对象的内部对象会影响到另一个对象

10. 你知道什么是fail-fast吗?

fail-fast是软件开发中的一种设计原则或模式。它指的是在程序执行过程中,一旦检测到异常或错误,就立即抛出异常并停止执行,以避免后续代码产生更严重的问题。这种策略被设计用来提高软件的可靠性和稳定性,防止问题持续扩散并造成更严重的后果。

在Java中,fail-fast是java.util包下的所有集合类的一种错误检测机制。当在多线程环境下,一个线程修改了集合,而另一个线程正在迭代该集合时,fail-fast行为会抛出ConcurrentModificationException异常。

下面是一个直观的fail-fast示例,它涉及两个线程:一个线程迭代集合,另一个线程修改集合。

11.介绍下你对红黑树的理解

请移步至《》

12.异常处理影响性能吗?

Java异常处理确实会对程序运行的速度产生一点影响。

想象一下,每次程序遇到异常,Java就会停下来,去创建一个记录异常的对象,并且还得记下当时程序正在做什么(调用栈信息)。这个过程需要花费一些时间,还可能占用一些额外的内存。

而且,当异常被抛出后,还需要暂停当前的程序执行,去找能处理这个异常的代码。这个查找过程涉及到对方法调用栈的遍历,是一个相对耗时的操作。

13.介绍下try-with-resource语法

try-with-resources 是 Java 7 引入的一个特性,它用于自动管理资源。这些资源通常需要在使用完毕后显式关闭,比如文件流、数据库连接等。

使用 try-with-resources 语句可以确保这些资源在 try 代码块执行完毕后被关闭,即使发生了异常也是如此。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】主从复制

文章目录 一、主从复制之一主二仆二、主从复制之薪火相传三、主从复制之反客为主四、总结4.1、复制原理和工作流程4.2、复制的缺点 主从复制指的是当主机数据变化时,自动将新的数据异步同步到其他备用机。主从复制的功能主要有 读写分离容灾恢复数据备份水平扩容支…

YOLO算法改进Backbone系列之:HorNet

在基于点积自注意的新空间建模机制的推动下,视觉变形器的最新进展在各种任务中取得了巨大成功。在本文中,我们展示了视觉变形器背后的关键要素,即输入自适应、长距离和高阶空间交互,也可以通过基于卷积的框架有效实现。我们提出了…

2024Spring> HNU-计算机系统-实验3-Bomblab-导引/答疑

前言 BombLab一定要花时间完成哦,对于期末卷面的提升和计算机系统的理解都非常重要。 导引 ①文件目录概览 助教下发一个文件包,打开之后是这样的几个文件。 这几个文件解释如下 bomb:可执行文件,无法打开,我们主要…

MySQL中的存储过程详解(下篇)

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法,看完代码自己敲一遍,十分有用 拖动表名到查询文件中就可以直接把名字拉进来中括号,就代表可写可不写 目录 1. 查看存储过程 1.1 查看存储过程的状态 1.1.1 基础…

数据结构学习之路--深入探索栈的核心要点(附C源码)

哈喽~大家!今天我们来学习栈的特别节目,精彩马上开始~ 目录 前言 一、栈 1 栈的概念 2 栈的结构 3 栈的实现 3.1 栈的定义 3.2 栈的初始化 3.3 入栈 3.4 出栈 3.5 取栈顶元素 3.6 判断栈是否为空 3.7 栈的大小 3.8 栈的销毁 二、源代…

InnoDB架构:磁盘篇

InnoDB架构:磁盘篇 InnoDB是MySQL数据库中默认的存储引擎,它为数据库提供了事务安全型(ACID兼容)、行级锁定和外键支持等功能。InnoDB的架构设计优化了对于读取密集和写入密集型应用的性能表现,是一个高度优化的存储系…

ctf.show_web13

上传一句话木马 1.php文件&#xff0c;显示 再改后缀为.jpg&#xff0c;显示错误文件大小 用dirsearch扫一下 备份文件.bak 下载文件源码 <?php header("content-type:text/html;charsetutf-8");$filename $_FILES[file][name];$temp_name $_FILES[file][tm…

C++项目 -- 负载均衡OJ(一)comm

C项目 – 负载均衡OJ&#xff08;一&#xff09;comm 文章目录 C项目 -- 负载均衡OJ&#xff08;一&#xff09;comm一、项目宏观结构1.项目功能2.项目结构 二、comm公共模块1.util.hpp2.log.hpp 一、项目宏观结构 1.项目功能 本项目的功能为一个在线的OJ&#xff0c;实现类似…

普通人做抖音小店真的能赚钱吗?可以,但更取决于个人

大家好&#xff0c;我是电商花花。 现在做抖音小店的基本上都是一些新商家&#xff0c;对于我们众多零基础的朋友来说&#xff0c;是期待也是一份挑战。 抖音小店作为一个充满机会的新兴平台&#xff0c;许多人都欣喜的投入其中&#xff0c;期望能够借此来改变自己的命运&…

【教程】ubuntu20.04 下配置 Charm-crypto 0.5 实验环境

目录 前言先决条件基本依赖安装准备好 gcc&#xff0c;make 和 perl准备好 m4&#xff0c;flex&#xff0c;bison 和 libssl-dev安装 Python3.x&#xff0c;pip3 和 pyparsing 安装 OpenSSL安装 GMP5.x安装 PBC安装 Charm-crypto5.0安装开发环境检验 Charm-crypto5.0 安装成功参…

跨国公司网络优化新选择:SD-WAN解决方案

随着全球化的加速推进&#xff0c;跨国企业纷纷实施跨国战略&#xff0c;然而&#xff0c;在各地建立分支机构、数据中心的过程中&#xff0c;往往面临网络性能差异大、数据传输效率低下等问题。在这样的背景下&#xff0c;SD-WAN成为跨国公司网络解决方案的优选。 跨国企业对于…

IO、存储、硬盘、文件系统相关常识

目录 IO 文件系统 文件在硬盘上的存储 IO IO&#xff0c;就是Input和Output&#xff0c;即输入和输出操作。我们的电脑可以通过网络下载文件&#xff0c;也可以通过网络上传文件。通过网络下载文件就是输入操作&#xff0c;上传文件就是输出。如何区分输入和输出呢&#xf…

imgcat 工具

如果经常在远程服务器或嵌入式设备中操作图片&#xff0c;要查看图片效果&#xff0c;就要先把图片dump到本地&#xff0c;比较麻烦。可以使用这个工具&#xff0c;直接在终端上显示。类似于这种效果。 imgcat 是一个终端工具&#xff0c;使用 iTerm2 内置的特性&#xff0c;允…

精益思维驱动人工智能革新:理论到实践的跃迁之旅

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已成为引领未来的关键力量。在这个变革的时代&#xff0c;如何将精益思维与人工智能相结合&#xff0c;推动AI从理论走向实践&#xff0c;成为行业内外关注的焦点。本文&#xff0c;天行健精益生产顾问将分享…

陇剑杯 流量分析 webshell CTF writeup

陇剑杯 流量分析 链接&#xff1a;https://pan.baidu.com/s/1KSSXOVNPC5hu_Mf60uKM2A?pwdhaek 提取码&#xff1a;haek目录结构 LearnCTF ├───LogAnalize │ ├───linux简单日志分析 │ │ linux-log_2.zip │ │ │ ├───misc日志分析 │ │ …

阿里云优惠券种类介绍及领取教程详解

随着互联网技术的快速发展&#xff0c;越来越多的企业和个人开始将业务和数据迁移到云端。阿里云作为国内领先的云服务提供商&#xff0c;为广大用户提供了丰富多样的云产品和服务。为了回馈用户&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中优惠券就是其中一种常见…

记录一下我hive连不上DataGrip的问题

用户名和密码都没问题&#xff0c;但报如下这个错误 原因&#xff1a;是因为我在linux上没启hiveserver2服务 解决&#xff1a; [atguiguhadoop102 hadoop]$ hiveserver2 which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8…

第19天:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构

第十九天 本课意义 1.如何获取到目标小程序信息 2.如何从小程序中提取资产信息 一、Web&备案信息&单位名称中发现小程序 1.国内主流小程序平台 微信 百度 支付宝 抖音头条 2.小程序结构 1.主体结构 小程序包含一个描述整体程序的app和多个描述各自页面的page …

RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升

CodeGeeX在升级到第三代模型时&#xff0c;就引入了RAG检索增强生成的能力。即模型会根据检索到的相关背景知识生成回答&#xff0c;大幅减轻生成内容的幻觉性。在CodeGeeX插件中&#xff0c;是通过侧边栏对话框中输入“repo”触发 RAG 技术。用户可以对开源代码仓库进行提问&a…