java常见面试题汇总

在这里插入图片描述
🌏个人博客主页:意疏-CSDN博客
在这里插入图片描述

希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~

阅读指南:

  • 开篇说明
    • 一、封装 继承 多态
      • 1.封装
      • 2.继承
      • 3.多态
    • 二、什么是重载,什么是重写
    • 三、Javafinal、finally、finzlize各有什么区别
    • 四、泛型的概念和作用
    • 五、TCP/IP 协议
    • 六、get和post区别


开篇说明

本面试题集锦旨在为即将参加Java相关职位面试的求职者提供一个全面的复习指南。通过精心挑选和编排的题目,帮助求职者系统地回顾和巩固所学知识,提升面试应对能力。
每一道题目都经过深思熟虑,旨在模拟真实面试场景中的问题,既考察了基础知识的掌握程度,也挑战了应聘者的实际应用能力和创新思维。我们希望通过这些题目,能够激发求职者的思考,帮助他们在面试中展现出最佳的自己。
无论你是初出茅庐的应届生,还是经验丰富的职场老手,本面试题集锦都将是你备战Java面试的宝贵资源。我们期待每一位求职者都能通过这份指南,找到适合自己的职位,开启职业生涯的新篇章。
并且这个文章一直在添加、随时更新,希望可以和你一起进步。
祝你面试顺利,前程似锦!

一、封装 继承 多态

1.封装

  1. 封装是什么:
    封装是一种面向对象编程的概念,指将数据和对数据的操作(方法)打包在一起,形成一个独立的单元。封装的目的是将数据和方法封装在一个对象内部,只暴露必要的接口给外部使用,隐藏对象的内部细节和实现方式。通过封装,可以提高代码的可维护性、可重用性和安全性。封装的关键是将相关的数据和方法进行组织和管理,形成一个统一的整体。

  2. 关键字:private。
    被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
    “get变量名()”方法,用于获取成员变量的值,方法用public修饰。
    “set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰。

  3. this关键字
    构造方法只能调用一次,在创建对象的时候调用。
    在成员方法中:谁调用这个方法,那么this就指向那个对象。
    在构造方法中:this指向新创建的那个对象
    this 关键字主要应用:
    成员变量 成员方法、其它构造方法。

  4. 封装思想
    是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的

  5. 封装原则
    将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
    成员变量private,提供对应的getXxx()/setXxx()方法

  6. 封装好处
    通过方法来控制成员变量的操作,提高了代码的安全性
    把代码用方法进行封装,提高了代码的复用性
    隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。

2.继承

  1. 继承是什么:
    Java中的继承是面向对象编程(AOP)的一个核心概念,它允许新创建的类(统称为子类或者派生类)继承现有类(成为父类或基类)的属性和方法。
    通过继承,子类可以复用、拓展和修改父类的行为,提高了代码的复用性,实现了多态。
    需要注意的是
    Java只支持单继承、即一个父类只能继承一个直接父类。但是通过接口(interface),Java实现了多继承的功能。

3.多态

  • 多态是什么:
    多态是一种抽象行为,它的主要作用是让程序员可以面对抽象编程而不是具体的实现类,这样子写出来的代码拓展性会更强。
    咱们来举个例子:
    YiShu yshu = new School();
    这里YiShu是一个父类,含有一个工作的方法,Student重写工作方法,比如吃饭
class YiShu {void eat() {System.out.println("日常工作");}
}class Student extends YiShu {@Overridevoid eat() {System.out.println("吃饭");}
}public class Test {public static void main(String[] args) {YiShu yiShu = new Student();yiShu.eat(); // 输出 "吃饭"}
}
  • 在使用时,对象都是YiShu,但是new不同的实现类,表现的形式不同,这也就从字面上解释了什么是多态。
    这里我们定义了基类 YiShu:
    包含一个名为 eat 的空方法,该方法打印出 “日常工作”。
    定义了派生类 Student:
    Student 类继承自 YiShu。
    重写了 eat 方法,并在其中打印 “吃饭”。
    Test 类中的 main 方法:
    创建了一个 YiShu 类型的引用变量 yiShu。
    实际上,通过这个引用变量指向的是 Student 类的一个新实例。
    调用 eat 方法时,Java 会查找实际对象类型 (Student) 中的方法实现,而不是引用类型 (YiShu) 的实现。
    因此,当调用 yiShu.eat() 时,尽管是通过 YiShu 类型的引用调用的,但由于多态的特性,实际上执行的是 Student 类中的 eat 方法,所以输出为 “吃饭”。
    这是 Java 多态性的典型例子,即子类可以覆盖父类的方法来改变行为。

形成多态的三个条件:

  1. 继承:必须存在有继承关系的子类和父类。这是实现多态的基础,因为多态依赖于不同类之间的相似性,即它们共享一个共同的超类(父类)。
  2. 方法重写:子类需要重写父类中的方法。这意味着子类提供了与父类中同名方法不同的实现,从而使得在运行时能够根据对象的实际类型选择合适的方法版本。
  3. 父类引用指向子类对象:使用父类类型的引用变量指向子类对象。这样,在调用方法时,会根据实际对象的类型决定调用哪个版本的方法,这就是动态绑定或多态性的体现

二、什么是重载,什么是重写

  1. 重载
    重载是指在同一个类中定义多个方法,它们具有相同的名字但参数列表有所不同。主要用于提供相同功能的不同实现。
    注意的是 和返回值没有关系,
    方法的签名是名字是名字和参数列表,不包括返回值。
    重载通常用于提供同一操作的不同实现,例如构造函数的重载,不同类型输入的处理等。

  2. 重写
    在子类中定义一个与父类方法具有相同签名(方法名、参数列表)的方法,方法返回类型与父类一直,或者是其子类。
    且子类方法定义的访问修饰符,不能比父类更严格。例如父类方法是protected那么子类方法不能是private,但可以是public
    子类方法抛出的异常必须与父类一致,或者是其父类异常的子类。

重写通常用于在子类中提供的父类方法的具体实现,以实现多态性。例如,子类对父类方法进行拓展或修改以适应特定需求。

class YiShu {public void eat() {System.out.println("日常工作");}
}class Student extends YiShu {@Overridepublic void eat() {System.out.println("吃饭");}
}public class Test {public static void main(String[] args) {YiShu yiShu = new Student();yiShu.eat(); // 输出 "吃饭"}
}

这里@Override 注解的主要作用是帮助确保正确实现了方法覆盖,并提高了代码的可读性和健壮性。表明 Child 类中的 display() 方法是为了覆盖 Parent 类中的相应方法。


三、Javafinal、finally、finzlize各有什么区别

  • final:用于类、方法和变量,表示不可改变或者不可继承
  • final是一个关键字,其可以用来修饰变量,方法以及类等,被修饰之后的部分
  • finally:用于try-catch块中,无论是否抛出异常,finally块中的代码总会被执行。
  • finalize:是Object类中的方法,供垃圾收集器在回收对象之前调用,但由于自身的局限以及不确定性,不推荐使用。

四、泛型的概念和作用

泛型可以把类型当作参数一样传递,使得像一些集合类可以明确存储的对象类型,不用显示地强制转化(在没泛型之前只能是Object,然后强制转换)。


五、TCP/IP 协议

首先
TCP协议是一个面向连接的、可靠的传输协议,它提供一种可靠的字节流,能保证数据完整、无损并且按顺序到达。
TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外,TCP试图将数据按照规定的顺序发送。
面向连接:数据传输之前客户端和服务器端必须建立连接
可靠的:数据传输是有序的 要对数据进行校验
TCP三次握手
为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。

最开始的时候客户端和服务器都是处于CLOSED关闭状态。主动打开连接的为客户端,被动打开连接的是服务器。
TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了 LISTEN 监听状态
第一次握手 TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT 同步已发送状态
第二次握手 TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了 SYN-RCVD 同步收到状态
第三次握手 TCP客户端收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态 触发三次握手
简单解释:
第一次握手: 客户端向服务器端发送报文,证明客户端的发送能力正常
第二次握手:服务器端接收到报文并向客户端发送报文,证明服务器端的接收能力、发送能力正常
第三次握手:客户端向服务器发送报文,证明客户端的接收能力正常
通俗解释:
以电话通联为例:老王给老汪打电话建立通信
老王:老汪老汪,听到请回答。
老汪:老王收到,声音接受正常。
老王:受到收到,保持通联。
必须触发三次握手的主要原因是防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

TCP的四次挥手
数据传输完毕后,终止TCP连接,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。
第一次挥手 客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态
第二次挥手 服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态
第三次挥手 客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成
客户端等待2MSL主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。

六、get和post区别

1.get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);
post请求一般是去提交数据。
2.get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,
不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;
post请求是没有的长度限制,请求数据是放在body中;
3.get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。
4.get请求可以被缓存,post请求不会被缓存。
5.get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。
6.get请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。

深入理解
1.GET 和 POST都是http请求方式, 底层都是 TCP/IP协议;通常GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包(但firefox是发送一个数据包),
2.对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200
(返回数据)表示成功;
对于 POST,浏览器先发送 header,服务器响应 100, 浏览器再继续发送 data,服
务器响应 200 (返回数据)。

在这里插入图片描述


意气风发,漫卷疏狂
学习是成长的阶梯,每一次`的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中

如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!

愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
logo
我是意疏 下次见!

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

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

相关文章

【前端】VUE 在线运行 模拟器 通过字符串动态渲染页面 可以灵活使用

【前端】VUE2 在线运行 模拟器 通过字符串动态渲染页面 可以灵活使用 <template><div><!-- 这里是动态组件--><component :is"component"></component><!-- 这里是动态组件--><br /><br /><br />可…

Gitlab添加ssh秘钥download项目

1. 查看 、设置 git 用户名和邮箱 git config user.namegit config user.email git config --global user.name 用户名git config --global user.email 邮箱 2. 查看本地是否有ssh秘钥 秘钥默认放在C:\Users\用户\.ssh\目录下&#xff0c;进入这个目录&#xff0c;如果有 …

elasticsearch的高亮查询三种模式查询及可能存在的问题

目录 高亮查询使用介绍 高亮参数 三种分析器 可能存在的查询问题 fvh查询时出现StringIndexOutOfBoundsException越界 检索高亮不正确 参考文档 高亮查询使用介绍 Elasticsearch 的高亮&#xff08;highlight&#xff09;可以从搜索结果中的一个或多个字段中获取突出显…

社区维修平台

TOC springboot0751社区维修平台 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于社区维修平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管…

谁将解锁储能的未来?迈威通信邀您共探EESA储能展的秘密

九月金秋&#xff0c;硕果盈枝&#xff0c;迈威通信诚挚邀请您共赴一场科技盛宴——第三届EESA储能展&#xff0c;时间锁定9月2日至4日&#xff0c;地点&#xff1a;国家会展中心(上海)&#xff0c;一场关于绿色能源、智慧储能的梦幻之旅即将启航&#xff01; 您准备好迎接未来…

利用大型语言模型协作提升甲状腺结节超声诊断的一致性和准确性| 文献速递-基于深度学习的癌症风险预测与疾病预后应用

Title 题目 Collaborative Enhancement of Consistency and Accuracy in US Diagnosis of Thyroid Nodules Using Large Language Models 利用大型语言模型协作提升甲状腺结节超声诊断的一致性和准确性 Background 背景 Large language models (LLMs) hold substantial …

Redis内存管理

Redis使用Jemalloc(默认编译)来进行内存的管理&#xff1a; Jemalloc将内存分成许多不同的区域&#xff0c;每个区域成为arena&#xff0c;areana之间相互独立。Jemalloc通过创建多个arena来减少线程申请内存的操作冲突。一般arena数量为cpu数量*4. arena以chunk为单位向操作…

FPGA 综合笔记

仿真时阻塞赋值和非阻塞赋值 Use of Non-Blocking Assignment in Testbench : Verilog Use of Non-Blocking Assignment in Testbench : Verilog - Stack Overflow non-blocking assignment does not work as expected in Verilog non-blocking assignment does not work a…

Python使用QtSide6(PyQt)编写界面

1、安装QtSide6 开始菜单cmd 创建虚拟环境 python -m venv env2 进入虚拟环境 call env2/scripts/activate 安装Pyside6 pip install Pyside6 2、设计Qt界面 打开designer.exe&#xff0c;设计界面 点击菜单【窗体】【View Python Code...】&#xff0c;点击【全部复制】…

HarmonyOs透明弹窗(选择照片弹窗样式)

1.鸿蒙中需要实现一个如下图的弹窗 2.由上图中可以得出&#xff0c;只需要三个Text组件依次向下排列&#xff0c;弹窗背景设置透明即可&#xff0c;弹窗代码如下(仅展示弹窗样式)&#xff1a; /**** 自定义选择图片弹窗** 外部定义需要导出*/ CustomDialog //自定义弹窗 export…

android13顶部状态栏里面调节背光,不隐藏状态栏面板

总纲 android13 rom 开发总纲说明 目录 1.前言 2.代码分析 3.修改方法 4.编译运行 5.彩蛋 1.前言 android13顶部状态栏里面调节背光,这个时候状态栏面板会被隐藏掉,有些需求就需要不隐藏这个面板。 2.代码分析 查找亮度条属性 id/brightness_slider ./frameworks/b…

TOMCAT入门到精通

目录 一 WEB技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 1.2.3 JavaScript 二 WEB框架 2.2后台应用架构 2.2.1单体架构 2.2.2微服务 2.2.3单体架构和微服务比较 三 tomcat的…

2024Go语言面试宝典Golang零基础实战项目面试八股力扣算法笔记等

2024最新Golang面试八股文&#xff0c;以及各种零基础全套实战项目&#xff0c;经典力扣算法题以及常见的面试题型&#xff0c;大厂面试题。go语言面试必备。包括GO基础类、GO并发编程、GO RUNTIME、微服务、容器技术、Redis、MySQL、Linux、缓存、网络和操作系统、消息队列、分…

房产系统架构开发小程序分析

房产系统架构开发小程序在当前市场中具有显著的优势和潜力。以下是对房产小程序的分析&#xff1a; 用户需求满足&#xff1a;房产小程序通过提供楼盘信息查询、VR看房体验、购房流程指南等功能&#xff0c;满足用户对房产信息的需求&#xff0c;并提供更加便捷的用户体验 。…

NSSCTF练习记录:[SWPUCTF 2021 新生赛]crypto6

题目&#xff1a; 先转为base16 JZLVK6CNKRATKT2ENN2FUR2NGBGXSMDYLFWVC6SMKRAXOWLKKF2E6VCBO5HVISLXJZVEKMKPI5NGY再转base32 NWUxMTA5ODktZGM0My0xYmQzLTAwYjQtOTAwOTIwNjE1OGZl再转base64&#xff0c;得到答案 5e110989-dc43-1bd3-00b4-9009206158fe

如何使用GPT-SoVITSS生成各种角色的语言

百度网盘 请输入提取码 项目来自b站UP主花儿不哭 一&#xff0c;先除去背景声音————人生伴奏出去背景声音 1.下载后&#xff0c;按下面路径打开&#xff0c;打开文件beta&#xff0c;打开go-webui程序 回车&#xff0c;然后稍等一下&#xff0c;等待网页打开 2.勾选如下…

day6JS-DOM(文档对象模型)

DOM树 DOM 操作 1. 获取元素 1.1 根据id名获取元素 document.getElementById("id名"); 案例&#xff1a; <body><div id"box">div盒子</div><h1>一级标题</h1><script>console.log(document.getElementById(&quo…

群晖NAS万兆网卡跑不满的真正原因

公司有几台群晖NAS,型号有DS2419+,和RS2418+,DS1821+,阵列都做了RAID6。当年都是花了大价钱买的存储,都上了万兆网卡,前面两个型号的速度速度始终在300MB左右徘徊,始终跑不满万兆,尤其大容量迁移的时候非常痛苦,之前200TB的数据迁移,整整用了一个月。 今天特意拿了群…

vue vite创建项目步骤

1. 创建vue项目 node版本需18以上 不然报错 npm init vuelatest2. 项目配置 配置项目的icon配置项目的标题配置jsconfig.json 3. 项目目录结构划分 4.css样式的重置 npm install normalize.cssreset.css html {line-height: 1.2; }body, h1, h2, h3, h4, ul, li {padding…

SpringBoot教程(二十五) | SpringBoot整合Sharding-JDBC分库分表

SpringBoot整合Sharding-JDBC分库分表 前言1. 什么是Sharding&#xff1f;2. 什么是Sharding-JDBC&#xff1f; 所需的maven依赖注意点&#xff08;关于shardingsphere的配置情况&#xff09;实操一&#xff1a;如何水平分表1. 步骤说明2. 创建数据库和表3.配置application.pro…