基础面试题整理2

1.抽象类与接口区别

语法:

  • 抽象类用abstract定义;接口用interface定义
  • 抽象类被子类继承extends(不可用final修饰);接口被类实现implements
  • 抽象类的属性访问无限制,方法不可用private修饰;接口中的方法只能用public修饰,变量用public static final

语义:

是什么用抽象类(名词),能做什么用接口(动词)

 2.hashcode与equals使用

hashcode用于获取对象的唯一的散列码(整数int)

equals用于比较对象的地址

hashmap是一对一对由key-value组成的数据,hashmap底层是哈希表结构(数组+链表/红黑树),若单一链表的长度大于8个,数组长度大于64个则自动将链表转换为红黑树存储;反之会将红黑树转换为链表存储;

Entry[]数组,Entry对象由hashcode、key、value、下一节点指针组成

put(key,value)原理

  1. key,value封装为node节点
  2. 根据key值生成hashcode
  3. 根据哈希算法算出hashcode在数组中的存放位置(下标),若下标没有数据,则直接将该node节点放在该位置;若下标有链表,则对key与链表的key节点进行比较,若与链表的key都不同,则将该节点放在链表末尾;否则数据value覆盖

get(key)原理 

  1. 根据key值生成hashcode
  2. 根据哈希算法计算出数组的下标,定位到数组位置,若下标没有数据,则返回null;若下标有链表,则拿着key与链表的key节点一一比较,若与链表的key都不同,则返回null;若与链表的某一节点的key值相同,则返回其value值

 哈希表结构如图所示:

3.Java代理方式

 动态代理分为 jdk代理和cglib代理,详情可见 jdk代理 及 cglib代理

jdk代理

代理对象通过实现目标类接口利用反射机制来获取其对应的所有方法,并通过invocationHandler的invoke方法进行调用原生方法及方法增强

cglib代理

代理对象通过继承目标类重写其方法,并通过methodInterceptor的intercept方法进行调用原生方法及方法增强

4.==与equals区别

equals是方法,==是运算符,都是判断是否相等

==:比较的对象若是基本数据类型,则判断数值;若是引用数据类型,则判断对象的地址

equals():判断两个对象的内容是否相等,不可用于基本数据类型变量的比较

5.异常处理机制

异常有抛出异常 throw(方法内部,抛出异常对象)、throws(方法声明);捕获异常try-catch-finally

常见异常

编译异常:ClassNotFoundException、SQLException、IOException

运行异常:NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException

系统错误:OutOfMerroyError

6. 重载与重写

重载与重写都体现了多态性,重载体现了编译多态性,重写是运行时多态性

重载发生在一个类中,只是参数不同

重写发生在父类与子类,只是内容不同

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

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

相关文章

性能分析与调优: Linux 使用ELRepo升级CentOS内核

目录 一、实验 1.环境 2.agent 服务器使用ELRepo升级CentOS内核 二、问题 1. RHEL-7, SL-7 或者 CentOS-7系统如何安装ELRepo 2.RHEL-8或者RHEL-9系统如何安装ELRepo 一、实验 1.环境 (1)主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系…

【uniapp】APP打包上架应用商-注意事项

初雪云-uniapp启动图自定义生成(支持一键生成storyboard) 一、修改App端上传图片/视频 uni.uploadFile let thatthis; uni.chooseImage({count: 1,sourceType: [camera,album],sizeType: [compressed, original],success: rey > {uni.showLoading({ t…

欢乐钓鱼^^

欢迎来到程序小院 欢乐钓鱼 玩法&#xff1a;点击鼠标左键左右晃动的鱼钩&#xff0c;下方左右移动的鱼对准鱼的方向即可进行钓鱼&#xff0c; 不同的鱼不同的分数&#xff0c;快去钓鱼吧^^开始游戏https://www.ormcc.com/play/gameStart/241 html <div id"gamediv&qu…

【深度学习:Embeddings 】机器学习中Embeddings的完整指南

人工智能嵌入提供了生成优质训练数据的潜力&#xff0c;提高了数据质量并最大限度地减少了手动标记要求。通过将输入数据转换为机器可读的格式&#xff0c;企业可以利用人工智能技术来转变工作流程、简化流程并优化性能。 机器学习是一种强大的工具&#xff0c;有潜力改变我们…

时钟的实现(MFC)

文章目录 1.预备知识1.日期和时间类1.概述2.构造3.CTime类主要成员函数3.CTimeSpan类主要成员函数 2.计时器1.创建计时器2.销毁计时器 3.位图类1.构造2.初始化3.属性4.操作 2.实验目的3.实验内容4.代码实现1.准备工作2.基类CClockBaseClockBase.hClockBase.cpp 3.时钟背景类CCl…

【软件测试】学习笔记-测试覆盖率

测试覆盖率通常被用来衡量测试的充分性和完整性&#xff0c;从广义的角度来讲&#xff0c;测试覆盖率主要分为两大类&#xff0c;一类是面向项目的需求覆盖率&#xff0c;另一类是更偏向技术的代码覆盖率。 需求覆盖率 需求覆盖率是指测试对需求的覆盖程度&#xff0c;通常的做…

BetaFlight开源代码之电压校准

BetaFlight开源代码之电压校准 1. 源由2. 分析数据流3. 采样电路3. 原理4. 示例5. 实测&转换数据6. 参考资料 1. 源由 既然复杂的BetaFlight开源代码之电流校准都过了一遍&#xff0c;电压相对来说是比较简单的&#xff0c;一起过一下 2. 分析数据流 电源路径1》采样电路…

Vue3-41-组件- 动态组件 component 标签 和 is 属性 的使用

说明 <component> 标签 有一个 is 属性&#xff0c; 可以给这个 is属性 赋值为一个 组件对象&#xff0c; 这样这个<component> 标签就可以渲染指定的组件对象了。 使用案例 本案例中会 准备两个简单的组件&#xff0c; 在 App.vue 中导入这两个组件&#xff0c;并…

一个命令查看linux系统是Centos还是Ubuntu

目 录 一、 背景介绍 二、一个命令查看linux系统的简单方法 1、 uname -a 2、cat /etc/issue 3、lsb_release -a 4、 dmesg | grep Ubuntu 一、 背景介绍 Linux 系统基本上分为两大类&#xff1a; 1. Red Hat 系列&#xff1a;包括 Red Ha…

Hadoop分布式文件系统(二)

目录 一、Hadoop 1、文件系统 1.1、文件系统定义 1.2、传统常见的文件系统 1.3、文件系统中的重要概念 1.4、海量数据存储遇到的问题 1.5、分布式存储系统的核心属性及功能含义 2、HDFS 2.1、HDFS简介 2.2、HDFS设计目标 2.3、HDFS应用场景 2.4、HDFS重要特性 2.4…

光明源@智慧环卫新标杆,智慧公厕系统全面升级

在城市的喧嚣之中&#xff0c;一个看似不太引人注目但却无法忽视的领域正在经历一场革命性的变革。作为城市基础设施的一部分&#xff0c;公厕一直以来被人们忽略&#xff0c;然而&#xff0c;随着科技的迅速发展&#xff0c;一项前所未有的升级正向我们走来——智慧公厕系统。…

如何通过绘制【学习曲线】来判断模型是否【过拟合】

学习曲线是一种图形化工具&#xff0c;用于展示模型在训练集和验证集&#xff08;或测试集&#xff09;上的性能随着训练样本数量的增加而如何变化。它可以帮助我们理解模型是否受益于更多的训练数据&#xff0c;以及模型是否可能存在过拟合或欠拟合问题。学习曲线的x轴通常是训…