Java必须掌握的包和final(含面试大厂题含源码)

news/2024/4/24 13:12:02/文章来源:https://blog.csdn.net/2302_80314137/article/details/136568394

为了帮助你准备Java面试,我将提供一个常见的面试题目,并解释如何解决它。题目如下:

题目: 设计一个不可变的类,用于表示学生信息,包括学生姓名(name)、学号(id)和分数(score)。要求类的实例一旦创建后,这些属性就不能被修改。

解决方案:

在Java中,要创建一个不可变的类,你需要遵循以下几个原则:

  1. 将类声明为final:这样就不能有子类覆盖它的方法。
  2. 将所有成员变量声明为private:这样就不能直接从类的外部访问它们。
  3. 不提供设置成员变量的方法(例如setter方法):这样就不能修改成员变量的值。
  4. 通过构造函数初始化所有成员变量:这样可以在创建对象的时候设置所有属性的值。
  5. 提供获取成员变量值的方法(例如getter方法):这样可以让外部访问成员变量的值,但不能修改它们。

基于以上原则,我们可以设计如下的不可变类:

public final class Student {private final String name;private final int id;private final double score;public Student(String name, int id, double score) {this.name = name;this.id = id;this.score = score;}public String getName() {return name;}public int getId() {return id;}public double getScore() {return score;}// 你可以添加其他方法来展示学生信息或者执行其他逻辑,但是不允许有任何修改成员变量的方法。
}

通过这种方式,Student类的实例在创建后,其nameidscore属性就不会被改变。这就是所谓的不可变类,它有很多好处,例如简化并发编程、保证对象状态不会被非法改变等。

准备Java面试时,了解如何设计不可变类是非常有用的,因为这不仅仅是关于Java语言的知识,还涉及到了软件设计的原则。希望这个例子能帮助你在面试中取得好成绩。如果有其他编程问题或需要进一步的面试准备帮助,请随时告诉我!为了帮助你更好地准备Java面试,我会提供三个面试常见的题目,这些题目覆盖了基础算法、设计模式及并发编程等方面,每个题目都将包含问题描述和Java源代码解决方案。

题目1:反转链表

问题描述: 实现一个函数来反转一个单链表。

解决方案:

public class ListNode {int val;ListNode next;ListNode(int x) { val = x; }
}public class Solution {public ListNode reverseList(ListNode head) {ListNode prev = null;ListNode curr = head;while (curr != null) {ListNode nextTemp = curr.next;curr.next = prev;prev = curr;curr = nextTemp;}return prev;}
}

题目2:单例模式

问题描述: 实现一个线程安全的单例模式。

解决方案(双重校验锁):

public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

题目3:生产者-消费者问题

问题描述: 使用Java多线程编程实现生产者-消费者模式。

解决方案(使用Objectwait()notify()方法):

import java.util.LinkedList;
import java.util.Queue;public class ProducerConsumerExample {private static final int MAX_SIZE = 10;private final Queue<Integer> queue = new LinkedList<>();public void produce() throws InterruptedException {int value = 0;while (true) {synchronized (this) {while (queue.size() == MAX_SIZE) {wait();}System.out.println("Produced: " + value);queue.add(value++);notify();Thread.sleep(1000);}}}public void consume() throws InterruptedException {while (true) {synchronized (this) {while (queue.isEmpty()) {wait();}int value = queue.poll();System.out.println("Consumed: " + value);notify();Thread.sleep(1000);}}}public static void main(String[] args) {ProducerConsumerExample example = new ProducerConsumerExample();Thread producerThread = new Thread(() -> {try {example.produce();} catch (InterruptedException e) {e.printStackTrace();}});Thread consumerThread = new Thread(() -> {try {example.consume();} catch (InterruptedException e) {e.printStackTrace();}});producerThread.start();consumerThread.start();}
}

这些题目和解决方案覆盖了Java面试中的重要知识点,希望它们能帮助你在面试中展示你的编程能力和对Java核心概念的理解。练习这些题目之外,也不要忘记复习Java的基础知识,以及其他高级概念和最佳实践。祝你面试成功!如果你有任何问题或需要进一步的帮助,请随时联系我。

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

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

相关文章

docker的网络配置

文章目录 1、网络模式1.1、bridge模式(默认模式)1.2、host模式 2、bridge模式3、自定义网络 1、网络模式 Docker在创建容器时有四种网络模式&#xff1a;bridge/host/container/none&#xff0c;bridge为默认不需要用–net去指定&#xff0c;其他三种模式需要在创建容器时使用…

创邻科技获评环紫金港创新生态圈智源创新企业

3月1日&#xff0c;由杭州城西科创大走廊管理委员会指导&#xff0c;中共杭州市西湖区委员会、西湖区人民政府主办的“环紫金港创新生态圈”行动推进大会暨2024年紫金港科技城经济高质量发展大会在杭州举办。凭借重要的生态位置和创新业务成果&#xff0c;创邻科技受邀参会并被…

读《文明之光》第1册总结

人类几千年的文明史和地球的历史相比&#xff0c;实在是太短暂了&#xff0c;大约相当于几分钟和一年的关系。人类已经走过的路&#xff0c;相比今后要走的漫漫长路&#xff0c;只能算是刚刚起步。如果跳出一个个具体事件&#xff0c;站在历史的高度去看&#xff0c;我们会发现…

Qt 简约又简单的加载动画 第七季 音量柱风格

今天和大家分享两个音量柱风格的加载动画,这次的加载动画的最大特点就是简单,只有几行代码. 效果如下: 一共三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc…

滴滴基于 Clickhouse 构建新一代日志存储系统

ClickHouse 是2016年开源的用于实时数据分析的一款高性能列式分布式数据库&#xff0c;支持向量化计算引擎、多核并行计算、高压缩比等功能&#xff0c;在分析型数据库中单表查询速度是最快的。2020年开始在滴滴内部大规模地推广和应用&#xff0c;服务网约车和日志检索等核心平…

#QT(智能家居界面-界面切换)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 &#xff08;1&#xff09;创建一个新界面&#xff08;UI界面&#xff09; &#xff08;2&#xff09;可以看到新加入一个ui文件&#xff0c;双击打开&#xff0c;设置窗口大小与登录界面一致 &#xff08;3&#xff09;加入几个PUS…

C++面向对象程序设计-北京大学-郭炜【课程笔记(五)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;五&#xff09;】 1、常量对象、常量成员函数1.1、常量对象1.2、常量成员函数1.3、常引用 2、友元&#xff08;friends&#xff09;2.1、友元函数2.2、友元类 3、运算符重载的基本概念3.1、运算符重载 4、赋值运算符的重…

Apache SeaTunnel 2.3.4 版本发布:功能升级,性能提升

​Apache SeaTunnel团队自豪地宣布2.3.4版本正式发布&#xff01;本次更新聚焦于增强核心功能&#xff0c;改善用户体验&#xff0c;并进一步优化文档质量。 此次版本发布带来了多项重要更新和功能增强&#xff0c;包括核心与API的修复、文档的全面优化、Catalog支持的引入&…

基于SSH的点餐服务管理系统的设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 开发工具相关技术 3 1.1 SSH框架 3 1.1.1 Spring 3 1.1.2 Spring MVC 3 1.1.3 Hibernate 4 1.2 前端技术 4 1.2.1 jQuery 5 1.2.2 Bootstrap 5 1.3 数据库技术 5 1.4 本章小结 6 2 系统分析 7 2.1 需求分析 7 2.2 系统工作流程 8 2.3 用例…

js【详解】原型 vs 原型链

原型 每个 class 都有显示原型 prototype每个实例都有隐式原型_proto_实例的_proto_指向对应 class 的 prototype 如下范例&#xff1a; class Student 创建了 实例 xialuo 获取属性 xialuo.name 或执行方法 xialuo.sayhi()时&#xff0c;先在自身属性和方法寻找&#xff0…

灵魂指针,教给(二)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组…

包含字母数字及特殊字符 三种组合的正则两种写法

//长度8~16位&#xff1b;包含字母、数字及特殊字符 #$%^&*_-//正则1 写法&#xff1a;let reg_1 /^(?![A-Za-z0-9]$)^(?![A-Za-z#$\%^&*_\-]$)^(?![0-9#$\%^&_*\-]$)([A-Za-z0-9#$\%^&*_\-]{8,16})$///正则2 写法&#xff1a;let reg_2 /^(?![A-Za-z#$%…

CodeSys通过C函数接口调用Qt

建议先查看之前的文章【CodeSys中调用C语言写的动态库】&#xff0c;了解如何创建一个能够被codesys调用的动态库。 假如想要在函数中使用Qt或者第三方库&#xff08;比如opencv等&#xff09;&#xff0c;可以在其自动生成的makefile文件中设置好相应的参数。 比如我这里就是…

(十六)【Jmeter】取样器(Sampler)之测试活动(Test Action)

简述 操作路径如下: JMeter中的测试活动取样器实际上并不是一个具体的取样器类型,而是一种对测试计划中的多个取样器进行组合和执行的活动。常常被用作定时器,在某个请求之后等待多长时间。 参数说明 Logical Action on Thread(在线程上的逻辑操作) Pause Duration(mil…

Python爬虫——Scrapy-1

目录 简介 安装 基本使用 1. 创建爬虫的项目 2. 创建爬虫文件 3. 运行爬虫代码 scrapy项目组成 scrapy工作原理 ​编辑 58同城 scrapy架构组成 汽车之家 总结 简介 Scrapy 是一个基于 Python 的开源网络爬虫框架&#xff0c;它可以帮助开发者快速、高效地构…

nginx代理访问Kuboard, 解决日志无法查看问题

错误方式 这种代理方式在点击追踪日志按钮, 会无法查看日志, 因为日志是通过weboscket传输 worker_processes 1; #设置 Nginx 启动的工作进程数为 1。events {worker_connections 1024; ##设置每个工作进程的最大并发连接数为 1024。 }http {include mime.types; #该…

kafka如何保证消息顺序性?

kafka架构如下&#xff1a; Kafka 保证消息顺序性的关键在于其分区&#xff08;Partition&#xff09;机制。在 Kafka 中&#xff0c;每个主题&#xff08;Topic&#xff09;可以被分割成多个分区&#xff0c;消息被追加到每个分区中&#xff0c;并且在每个分区内部&#xff0c…

【C++】C++模板基础知识篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化…

3DES算法的起源与演进:保障信息安全的重要里程碑

title: 3DES算法的起源与演进&#xff1a;保障信息安全的重要里程碑 date: 2024/3/8 21:25:19 updated: 2024/3/8 21:25:19 tags: 3DES算法起源安全性增强三次迭代加密密钥管理复杂效率对比AES应用场景广泛Python实现示例 一、3DES算法的起源与演进 3DES算法是DES算法的增强版…

目标检测论文模型笔记——YOLO系列

1. YOLOv1的核心思想&#xff1a; YOLOv1&#xff1a;使用整张图作为输入&#xff0c;直接在输出层回归bounding box和类别&#xff1b;&#xff08;one-stage&#xff09;Faster RCNN&#xff1a;使用用整张图作为输入&#xff0c;但整体采用了RCNN&#xff1a; proposalclas…