就只说 3 个 Java 面试题

2023-09-20 13:55:15

在面试时,即使是经验丰富的开发人员,也可能会发现这是一些很棘手的问题:

1、Java中“transient”关键字的用途是什么?如何才能实现这一目标?

在 Java 中,“transient”关键字用于指示类的特定字段不应包含在对象的序列化形式中。

这意味着当对象被序列化时,其状态将转换为可以写入文件或通过网络发送的字节序列。

通过将字段标记为瞬态,您就告诉 Java 在序列化对象时不应包含该字段的值。

您可能想要使用“transient”关键字的原因有多种。例如,您可能有一个包含临时值的字段,在序列化对象时不需要保留该临时值。或者,可能有一个字段包含敏感数据,出于安全原因,这些数据不应包含在对象的序列化形式中。

public class MyClass implements Serializable {  
    private int myInt;  
    private transient String myTransientString;  
    // 构造器、getters & setters
    // 其他方法……  
}

在这个例子中,字段“myTransientString”被标记为transient,这意味着当MyClass的实例被序列化时,它的值将不会被包含在内。

2、你能解释一下“继承”和“组合”有何不同吗?举例说明。

继承和组合是在面向对象编程中创建类之间关系的两种基本方法。这两种方法都支持代码重用和抽象,但它们的实现以及在类之间创建的关系类型有所不同。

以下是每种方法的简要概述:

  • 继承:这是一种通过从现有类派生属性和特征来创建新类的机制。新类(称为子类或派生类)继承现有类(称为超类或基类)的方法和字段。子类还可以重写超类的方法以提供自己的实现。继承在超类和子类之间创建了“is-a”关系。
  • 组合:它是一种机制,其中一个类包含另一个类的一个或多个实例作为其字段。所包含的类称为组件或零件类。包含组件类的类称为容器或整个类。该组合在容器类和组件类之间创建了“has-a”关系。

image.png

在图中,我们有两个类:“Vehicle”和“Engine”。 Vehicle 类可以使用继承或组合来合并 Engine 类。

  • 继承示例:Vehicle类扩展了Engine类,这意味着它继承了Engine类的所有字段和方法。这会在 Vehicle 和 Engine 类之间创建“is-a”关系,其中 Vehicle “是一种”类型的 Engine。
public class Vehicle extends Engine {  
  
}
  • 组合示例:Vehicle 类包含 Engine 类的一个实例作为其字段。这在车辆和引擎类之间创建了“有一个”关系,其中车辆“有一个”引擎。
public class Vehicle {  
    private Engine engine;  
    public Vehicle(Engine engine) {  
    this.engine = engine;  
}  
...
}

一般来说,当类之间存在明确的“is-a”关系,并且子类可以被视为超类的专门版本时,继承更合适。当类之间存在“has-a”关系时,以及当容器类需要使用或管理另一个类的一个或多个实例时,组合更为合适。

3、你能解释一下Java中HashSet和TreeSet的区别吗?另外,解释一下数据是如何在内部存储的。

image.png

假设我们有以下整数数据:{7, 3, 9, 4, 1, 8}。

  • 对于HashSet,数据内部存储在哈希表中。哈希表使用每个元素的 hashCode() 方法来确定应存储该元素的唯一索引。

在这里插入图片描述

在上面的示例图中,哈希表有八个桶,标记为“51”到“56”。每个存储桶都是一个集合,其中包含具有映射到该存储桶的哈希码的元素。例如,索引“53”处的集合包含元素 3 和 4,它们的哈希码都是 [197]。索引“56”处的集合包含元素 7、8 和 9,它们都有哈希码 [195]。

  • 对于TreeSet,数据内部存储在红黑树中。树根据元素的自然顺序或传递给 TreeSet 构造函数的自定义比较器定义的顺序进行排序。以下是如何将数据存储在红黑树中的示例:

在这里插入图片描述

在这个例子中,红黑树有六个节点,每个节点包含元素{1,3,4,7,8,9}之一。节点颜色为红色或黑色,红色节点表示发生了违反红黑树属性的情况。元素在树中按排序顺序存储,较小的元素位于左侧,较大的元素位于右侧。例如,元素1是最小的元素,存储在最左边的叶子节点,而元素9是最大的元素,存储在最右边的叶子节点。

更多推荐

一键实现冒泡排序算法,代码质量有保障!

近年来,深度学习和神经语言模型作为提高开发人员生产力的手段,尤其是2022年11月30日,ChatGPT这一现象级热点得出横空出世,在全球范围内形成了热烈的讨论,其中关于自动化代码生成和其它软件工程方面受到了极大的关注。软件开发过程涵盖了各种代码生成任务,包括代码自动生成、代码翻译和程序融合。受到预训练神经语言模型在不

【超实用】2023年,学生上班族如何简单快速,低成本的搭建一个博客网站

文章目录前言实操环节香港虚拟机购买博客搭建ssl证书配置备份设置总结前言因为工作和生活的需要,我一直有博客的搭建需求。我将总结下来,为读者提供参考。起初,我采用的是香港云虚拟主机,这种虚拟机极其便宜(一个月几块钱),域名免备案。这非常好,我用了一段时间发现,香港虚拟机的内地访问速度比较慢,并且服务商可能过一两年就会跑路

紫光展锐5G芯T820 解锁全新应用场景,让机器人更智能

数字经济的持续发展正推动机器人产业成为风口赛道。工信部数据显示,2023年上半年,我国工业机器人产量达22.2万套,同比增长5.4%;服务机器人产量为353万套,同比增长9.6%。作为国内商用服务机器人领先企业,云迹科技近日在“云迹UP服务平台全球首发”发布会上表示,机器人正迎来3.0时代,从原来单纯只能执行单一功能的

计算机网络 套接字函数 | socket、bind、listen、accept、connect

欢迎关注博主Mindtechnist或加入【LinuxC/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。socket、bind、listen、accept、co

【AI视野·今日Robot 机器人论文速览 第三十六期】Tue, 19 Sep 2023

AI视野·今日CS.Robotics机器人学论文速览Tue,19Sep2023(showingfirst100of112entries)Totally112papers👉上期速览✈更多精彩请移步主页DailyRoboticsPapersGeneralIn-HandObjectRotationwithVisionand

基于SpringBoot+Vue的宠物领养饲养交流管理平台设计与实现

前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗👇🏻精彩专栏推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选

游戏初步——发牌程序(控制台版)以及一些扩展(python)

目录题目要求:初始代码:实际上,如果pocker直接存储扑克牌,而不是扑克牌的编号,则程序更加简单,但是pocker列表创建书写麻烦一些。修改后代码如下:算法描述或实验步骤最终代码:代码详解:技能1:查找对子技能2:查找数量最多的花色技能3:查找最长连续顺子题目要求:请完成《4.6游戏初步——发牌程序(控制台版)》,并

人脸图像数据增强

为什么要做数据增强在计算机视觉相关任务中,数据增强(DataAugmentation)是一种常用的技术,用于扩展训练数据集的多样性。它包括对原始图像进行一系列随机或有规律的变换,以生成新的训练样本。数据增强的主要目的是增加模型的泛化能力、提高模型的鲁棒性,并减轻过拟合的风险。以下是进行数据增强的几个重要原因:增加数据样

学习笔记|外部中断|INT0|中断列表|STC32G单片机视频开发教程(冲哥)|第十五集:中断系统和外部中断

文章目录1.中断和中断系统1.1什么是中断?1.2什么是中断系统1.3中断系统的优点1.4中断系统包含哪些中断源1.5.中断次序2.什么是外部中断3.外部中断的用法4.外部中断的用法新的测试场景完整代码总结课后练习:上节课我们学完了GPIO的矩阵按键,已经把这个GPIO的一个外设全都已经学完了今天开始我们要学习这个单片

COVID疫苗加强针来袭,是否该接种?

Sience子刊新研究揭示:COVID-19病毒影响人体线粒体功能,或成治疗新途径NatureMedicine:脑雾、记忆和注意力不集中可能是新冠感染引发的血栓导致的Nature揭秘--为什么有些白人感染新冠病毒后不会生病SARS-CoV-2重复感染将为常态整个北半球,公卫人员正在紧锣密鼓地推进秋季COVID-19疫苗

NLP进阶,使用TextRNN和TextRNN_ATT实现文本分类

TextRNNTextRNN仅仅是将WordEmbedding后,输入到双向LSTM中,然后对最后一位的输出输入到全连接层中,在对其进行softmax分类即可,模型如下图:代码:classRNN(nn.Module):def__init__(self,vocab_size,embedding_dim,hidden_di

热文推荐