当前位置: 首页 > news >正文

挑战Java面试题复习第2天,百折不挠

挑战第 2 天

  • ArrayList和linkedList的区别
  • HashMap和HashTable的区别
  • Collection 与 Collections 的区别
  • Java的四种引用
  • 泛型常用特点

ArrayList和linkedList的区别

  1. 底层数据结构:
  • ArrayList:基于动态数组实现,支持快速随机访问。
  • LinkedList:基于双向链表实现,适合频繁的插入和删除操作。
  1. 随机访问性能:
  • ArrayList:由于是基于数组,随机访问速度快,时间复杂度为O(1)。
  • LinkedList:由于是基于链表,随机访问速度慢,时间复杂度为O(n)。
  1. 插入和删除性能:
  • ArrayList:在数组中间插入或删除元素时,需要移动后续所有元素,效率较低,时间复杂度为O(n)。
  • LinkedList:在链表中插入或删除元素时,只需改变节点的指针,效率高,时间复杂度为O(1)。
  1. 内存占用:
  • ArrayList:每个元素只存储数据,内存利用率高。
  • LinkedList:每个元素除了存储数据外,还需要存储两个指针(指向前一个和后一个元素),内存利用率低。
  1. 容量扩展:
  • ArrayList:动态数组,当容量不足时会自动扩展,但扩展操作涉及复制数组,有额外开销。
  • LinkedList:不需要预先分配容量,可以动态地添加节点,没有扩展容量的开销。
  1. 线程安全:
  • 两者都不是线程安全的,但在多线程环境下,LinkedList的插入和删除操作可能更安全,因为它们通常涉及单个节点的修改。
  1. 使用场景:
  • ArrayList:适用于频繁读取元素的场景,如作为缓存。
  • LinkedList:适用于频繁插入和删除元素的场景,如实现队列或栈。
  1. 其他方法:
  • ArrayList:提供toArray方法将列表转换为数组,asList方法将数组转换为固定大小的列表。
  • LinkedList:除了List接口的方法外,还提供了额外的方法,如addFirst、addLast、removeFirst和removeLast等,用于在链表的头部或尾部进行操作。

HashMap和HashTable的区别

  1. 父类不同:
  • HashMap:继承自AbstractMap类。
  • Hashtable:继承自Dictionary类。
  1. 接口方法不同:
  • Hashtable:提供了elements()和contains()方法,这些方法在Dictionary类中定义。
  • HashMap:没有提供这两个方法。
  1. 对null的支持:
  • Hashtable:不允许key和value为null。
  • HashMap:允许key为null(但只能有一个),允许有多个value为null。
  1. 线程安全性:
  • HashMap:非线程安全,适合单线程环境。
  • Hashtable:线程安全,每个方法都加了synchronized关键字,适合多线程环境。
  1. 性能:
  • HashMap:由于非线程安全,通常比Hashtable性能高。
  • Hashtable:由于线程安全,性能可能不如HashMap。
  1. 替代方案:
  • 当需要线程安全时,可以使用ConcurrentHashMap,它比Hashtable性能更好,因为它使用了分段锁。
  1. 初始容量和扩充容量:
  • 两者都可以设置初始容量和负载因子,但具体实现和默认值可能不同。
  1. 计算hash值的方法:
  • 两者可能使用不同的算法来计算hash值,这会影响元素的分布和冲突解决。

Collection 与 Collections 的区别

  1. Collection:
  • 是一个接口,定义了所有单列集合(即不包含重复元素的集合)的基本操作。
  • 子接口包括Set(不允许重复的集合)、List(有序集合,可以重复)。
  • 实现类包括ArrayList、LinkedList、Vector、Stack等。
  1. Collections:
  • 是一个工具类,提供了一系列静态方法来操作或返回各种集合。
  • 提供的方法包括搜索、排序、线程安全化等操作。
  • 不能被实例化,类似于Java中的其他工具类,如Arrays。
  1. 功能区别:
  • Collection定义了集合的基本操作,如添加、删除、遍历等。
  • Collections提供了对集合的辅助操作,如排序(sort)、搜索(binarySearch)、同步(synchronizedCollection)等。
  1. 使用场景:
  • 当你需要创建一个集合并进行基本操作时,你会使用实现Collection接口的类。
  • 当你需要对集合进行更高级的操作,如排序或搜索时,你会使用Collections类提供的方法。

Java的四种引用

  1. 强引用(Strong Reference):
  • 最常见的引用类型。
  • 只要强引用还存在,垃圾回收器永远不会回收被引用的对象。
  • 声明方式:Object obj = new Object();
  1. 软引用(Soft Reference):
  • 内存不足时,垃圾回收器会回收软引用指向的对象。
  • 适用于缓存场景,用于内存敏感的高速缓存。
  • 声明方式:SoftReference softRef = new SoftReference<>(new Object());
  1. 弱引用(Weak Reference):
  • 只要垃圾回收器发现了弱引用对象,就会回收该对象,不管当前内存是否充足。
  • 适用于实现缓存、监听器等,其中对象不再使用时可以被自动回收。
  • 声明方式:WeakReference weakRef = new WeakReference<>(new Object());
  1. 虚引用(Phantom Reference):
  • 虚引用对象在垃圾回收时会被放入引用队列(ReferenceQueue)中,但不会阻止对象的回收。
  • 用于跟踪对象被垃圾回收的活动,进行资源释放等操作。
  • 必须与ReferenceQueue一起使用。
  • 声明方式:PhantomReference phantomRef = new PhantomReference<>(new Object(), new ReferenceQueue<>());
  1. 引用队列(ReferenceQueue):
  • 用于跟踪垃圾回收活动,当引用的对象被回收时,相应的引用会被放入队列中。
  1. 使用场景:
  • 强引用:普通对象的引用。
  • 软引用:内存敏感的高速缓存。
  • 弱引用:缓存、监听器等,对象不再使用时可以被自动回收。
  • 虚引用:对象销毁前的操作,如资源释放。
  1. 回收机制:
  • 强引用:不会被回收。
  • 软引用:内存不足时被回收。
  • 弱引用:一旦发现即被回收。
  • 虚引用:在对象被回收前被放入引用队列。
  1. 注意:
  • 引用类型指的是对象的引用,而不是Reference类的子类(如SoftReference)的引用。

泛型常用特点

  1. 泛型定义:
  • 泛型是Java SE 1.5引入的特性。
  • 允许代码与特定的数据类型无关,从而提高代码的重用性。
  1. 泛型概念:
  • 泛型提供了一种方式,使得类、接口和方法可以在不知道具体类型的情况下编写。
  • 可以在代码执行时指定具体的类型。
  1. 泛型使用示例:
  • 例如,ArrayList是一个泛型类,可以存储任何类型的元素。
  • 通过指定类型参数,如List,可以约束集合中元素的类型。
  1. 使用泛型的好处:
  • 类型安全:编译时检查类型,减少运行时错误。
  • 代码重用:一个类可以处理多种数据类型。
  • 减少类型转换:避免了不必要的类型转换,提高代码的可读性和简洁性。
  • 提高性能:避免了类型擦除带来的性能开销。
  1. 类型擦除:
  • Java泛型在编译时会被擦除,即泛型信息不会保留在字节码中。
  • 这意味着运行时泛型不会增加额外的存储开销。
  1. 泛型与集合:
  • 使用泛型可以定义一个集合来存放不同类型的数据,同时保持类型安全。
  • 例如,可以定义一个List来存储整数,而不需要将所有元素都存储为Object类型。
  1. 泛型约束:
  • 可以通过泛型约束(如extends和super关键字)来限制泛型类型。
  • 例如,List<? extends Number>可以存储任何Number子类型的元素。
  1. 泛型通配符:
  • 通配符(如?)允许在泛型中使用未知的类型。
  • 提供了灵活性,允许在不知道具体类型的情况下操作泛型集合。

相关文章:

挑战Java面试题复习第2天,百折不挠

挑战第 2 天 ArrayList和linkedList的区别HashMap和HashTable的区别Collection 与 Collections 的区别Java的四种引用泛型常用特点 ArrayList和linkedList的区别 底层数据结构&#xff1a; ArrayList&#xff1a;基于动态数组实现&#xff0c;支持快速随机访问。LinkedList&a…...

【vue之道】

vue之道 1. 一生二&#xff0c;二生万物思想2. 变化之律3. 变化之实在哪&#xff1f;4.而后学于形乃已&#xff01;4.1 展示之形变4.2 动之气谓之指令4.3 血之养分的载体&#xff0c;于vue之绑定载具4.4 vue之道&#xff08;万法规一篇&#xff09; 1. 一生二&#xff0c;二生万…...

基于麻雀优化算法SSA的CEEMDAN-BiLSTM-Attention的预测模型

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现&#xff08;一&#xff09;EMD-CSDN博客 EMD、EEM…...

Linux:指令再认识

文章目录 前言一、知识点1. Linux下一切皆文件&#xff0c;也就是说显示器也是一种文件2. 指令是什么&#xff1f;3. ll 与 ls -l4. 日志5. 管道6. 时间戳 二、基本指令1. man指令2. cp指令3. mv指令4. 查看文件1&#xff09;cat/tac指令——看小文件2&#xff09;more/less指令…...

PHP如何抛出和接收错误

在PHP中&#xff0c;抛出和接收错误通常涉及异常处理机制&#xff0c;以及错误和异常的处理函数。以下是如何在PHP中抛出和接收错误的详细指南&#xff1a; 抛出错误&#xff08;异常&#xff09; 在PHP中&#xff0c;你可以使用throw关键字来抛出一个异常。这通常在你检测到…...

计算机网络:网络层 —— IPv4 地址的应用规划

文章目录 IPv4地址的应用规划定长的子网掩码变长的子网掩码 IPv4地址的应用规划 IPv4地址的应用规划是指将给定的 IPv4地址块 (或分类网络)划分成若干个更小的地址块(或子网)&#xff0c;并将这些地址块(或子网)分配给互联网中的不同网络&#xff0c;进而可以给各网络中的主机…...

Mongodb命令大全

Mongodb命令大全 一、数据库相关命令二、集合相关命令三、文档(数据)相关命令1、_id 字段说明2、查询2.1、 查询操作符2.2、内嵌文档查询2.3、数组文档查询2.4、去重查询2.5、查询排序 sort2.6、分页查询2.7、指定列投影查询返回2.8、查询统计个数 count 3、聚合查询3.1、查询用…...

宇视设备视频平台EasyCVR视频融合平台果园/鱼塘/养殖场/菜园有电没网视频监控方案

在那些有电无网的偏远地区&#xff0c;如果园、鱼塘、养殖场或菜园&#xff0c;视频监控的实现面临着独特的挑战。宇视设备视频平台EasyCVR提供了一种创新的解决方案&#xff0c;通过结合太阳能供电和4G摄像头技术&#xff0c;有效地解决了这些场景下的监控需求。 在有电没网的…...

面试题:ABCD四个线程,A线程最后执行

我觉得是一个很高频的面试题&#xff0c;ABCD四个线程&#xff0c;A线程要等到BCD线程执行完再执行&#xff0c;怎么做 因为我刚复习完AQS&#xff0c;所以立马想到了CountDownLatch&#xff0c;但是看面试官反应他最想听到的应该是join方法&#xff0c;所以面试后就总结了几种…...

代码随想录算法训练营第46期Day43

leetcode.322零钱兑换 class Solution { public: //无限个硬币->完全背包int coinChange(vector<int>& coins, int amount) {vector<int> dp(10010,INT_MAX);//dp代表的在某个数值下最小的硬币数&#xff0c;要求是最小的硬币数&#xff0c;所以初始值要尽可…...

前端处理API接口故障:多接口自动切换的实现方案

因为在开发APP&#xff0c;一个接口如果不通&#xff08;被挂了&#xff09;又不能改了重新打包让用户再下载软件更新&#xff0c;所以避免这种情况&#xff0c;跟后端讨论多备用接口地址自动切换的方案&#xff0c;自动切换到备用的接口地址&#xff0c;并保证后续所有的请求都…...

多租户架构的全景分析(是什么?基本概念、实现策略、资源管理和隔离、数据安全与隔离、性能优化、扩展性与升级、案例研究)

文章目录 1. 多租户的基本概念2. 多租户的实现策略2.1 独立数据库模式2.2 共享数据库-独立Schema模式2.3 共享数据库-共享Schema模式 3. 资源管理和隔离4. 数据安全与隔离5. 性能优化6. 扩展性与升级7. 案例研究总结 多租户架构在云计算和SaaS应用中越来越流行&#xff0c;因为…...

Git使用问题汇总附带解决方法(持续更新)

Git使用问题汇总附带解决方法 一 git pull 代码时报错&#xff1a; Auto packing the repository in background for optimum performance. See “git help gc“ 一 git pull 代码时报错&#xff1a; Auto packing the repository in background for optimum performance. See …...

Spring Boot驱动的植物健康监测革命

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理植物健康系统的相关信息成为必然。开发合适…...

element 中 el-dialog 在不同的文件中使用

在实际中工作&#xff0c;我们经常需要使用 el-dialog 来做一个弹框的功能。最常见的就是在父组件中点击一个按纽&#xff0c;然后弹出一个框。而这个框就是子组件。同时&#xff0c;父子组件是分布在不同的文件中。 <!--父组件--> <template> <div> <…...

QT中采用QCustomPlot 实现将buffer中的数据绘制成折线图,并且图形随着数据更新而更新

QT中采用QCustomPlot 实现将buffer中的数据绘制成折线图,并且图形随着数据更新而更新 为了在 Qt 中将缓冲区的数据动态绘制成折线图,并随着数据的更新而实时更新,可以使用 QCustomPlot 或 Qt 自带的绘图功能,比如 QGraphicsView,或者在更简单的情况下使用 QPainter 在 QW…...

1688API商品详情接口如何获取

获取 1688API商品详情接口主要有以下步骤&#xff1a; 一、注册开发者账号&#xff1a; 访问 1688 开放平台&#xff0c;进行开发者账号注册。这是获取 API 接口使用权限的第一步&#xff0c;注册信息要确保真实准确。 二、了解接口规范和政策&#xff1a; 在 1688 开放平台…...

pytorch + d2l环境配置

文章目录 前言一、安装软件二、配置具体环境 前言 一直想写一篇 pytorch d2l的深度学习环境配置。但一直都不是很顺利&#xff0c;配置过很多次&#xff0c;都会遇到一些各种依赖项的兼容性问题。但这个是没有办法的&#xff0c;各种开源包都在不断维护过程中&#xff0c;版本…...

Go使用exec.Command() 执行脚本时出现:file or directory not found

使用 Go 提供的 exec.Command() 执行脚本时出现了未找到脚本的 bug&#xff0c;三个排查思路 &#xff1a; exec.Command(execName, args…) 脚本名字不允许相对路径 exec.Command(execName, args…) execName 只能有脚本名&#xff0c;不允许出现参数 如果你是使用 Windows …...

细节性知识(宏定义解析与宏的外部引用)

目录 一、问&#xff1a;#define N 50 中的N可以用来做运算比较吗&#xff1f; 二、宏定义怎么外部引用&#xff1f; 例子 总结 一、问&#xff1a;#define N 50 中的N可以用来做运算比较吗&#xff1f; 解析&#xff1a;在C语言中&#xff0c;#define N 50 是一个预处理指…...

面试中的JVM:结合经典书籍的深度解读

写在前面 &#x1f525;我把后端Java面试题做了一个汇总&#xff0c;有兴趣大家可以看看&#xff01;这里&#x1f449; ⭐️在无数次的复习巩固中&#xff0c;我逐渐意识到一个问题&#xff1a;面对同样的面试题目&#xff0c;不同的资料来源往往给出了五花八门的解释&#…...

使用语音模块的开发智能家居产品(使用雷龙LSYT201B 语音模块)

在这篇博客中&#xff0c;我们将探讨如何使用 LSYT201B 语音模块 进行智能设备的语音交互开发。通过这个模块&#xff0c;我们可以实现智能设备的语音识别和控制功能&#xff0c;为用户带来更为便捷和现代的交互体验。 1. 语音模块介绍 LSYT201B 是一个基于“芯片算法”的语音…...

深入理解支持向量机:从基本原理到实际应用

第6章 支持向量机 在本章中&#xff0c;我们将深入探讨支持向量机&#xff08;SVM&#xff09;这一强大的分类算法。SVM在模式识别和机器学习领域广泛应用&#xff0c;尤其在处理高维数据时表现出色。我们将依次讨论间隔与支持向量、对偶问题、核函数、间隔与正则化、支持向量…...

每天一题:洛谷P2041分裂游戏

题目描述 有一个无限大的棋盘&#xff0c;棋盘左下角有一个大小为 n 的阶梯形区域&#xff0c;其中最左下角的那个格子里有一枚棋子。你每次可以把一枚棋子“分裂”成两枚棋子&#xff0c;分别放在原位置的上边一格和右边一格。&#xff08;但如果目标位置已有棋子&#xff0c…...

简单的 curl HTTP的POSTGET请求以及ip port连通性测试

简单的 curl HTTP的POST&GET请求以及ip port连通性测试 1. 需求 我们公司有一个演示项目&#xff0c;需要到客户那边进行项目部署&#xff0c;项目部署完成后我们需要进行项目后端接口的测试功能&#xff0c;但是由于客户那边么有条件安装类似于postman这种的测试工具&am…...

ubuntu下快捷键启动程序

背景&#xff1a;公司自开发的软件&#xff0c;经常需要启动&#xff0c;每次去找目录启动很麻烦&#xff0c;所以想快捷启动 方法1&#xff1a; 通过编辑.baserc启动 例如启动程序是toolA, 放在/home/user/software/目录下&#xff0c;那么在~/.baserc里面加入一行代码 al…...

Yii2 init 初始化脚本分析

脚本目的&#xff1a; init 脚本主要的作用是&#xff1a;从 environments 目录中复制配置文件&#xff0c;确保应用适配不同环境&#xff08;例如开发、生产环境等&#xff09;。 工作流程&#xff1a; 获取 $_SERVER 的 argv 参数 加载 environments/index.php 文件&#…...

深入理解gPTP时间同步过程

泛化精确时间协议(gPTP)是一个用于实现精确时间同步的协议,特别适用于分布式系统中需要高度协调的操作,比如汽车电子、工业自动化等。 gPTP通过同步主节点(Time Master)和从节点(Time Slave)的时钟,实现全局一致的时间参考。 以下是gPTP实现主从时间同步的详细过程:…...

基于阿里云服务的移动应用日志管理方案—日志的上传、下载、存档等

前言 如题&#xff0c;基于阿里云服务&#xff08;ECS、OSS&#xff09;实现 APP 的用户日志上传以及日志下载的功能&#xff0c;提高用户反馈问题到研发去分析、定位、解决问题的整个工作流的效率。 术语 ECS: 云服务器ECS&#xff08;Elastic Compute Service&#xff09;…...

Python浪漫之画星星

效果图&#xff08;动态的哦&#xff01;&#xff09;&#xff1a; 完整代码&#xff08;上教程&#xff09;&#xff1a; import turtle import random import time # 导入time模块# 创建一个画布 screen turtle.Screen() screen.bgcolor("red")# 创建一个海龟&a…...

棋牌app开发价格表/seo技术服务外包公司

战舰少女R经验怎么计算呢?新版经验计算要注意些什么呢?下面小编为大家带来战舰少女R新版经验计算攻略,一起看看吧.我们以7-5~8-3(非航空战点)为基准&#xff0c;消耗20%油20%弹&#xff0c;S胜720经验。天国的 E6A E6B&#xff0c;消耗10%弹&#xff0c;S胜396经验。8-2B&…...

网站建设服务器配置/2345网址导航桌面版

Java基础&#xff08;对象线程字符接口变量异常方法&#xff09; 面向对象和面向过程的区别&#xff1f;Java 语言有哪些特点&#xff1f;关于 JVM JDK 和 JRE 最详细通俗的解答Oracle JDK 和 OpenJDK 的对比Java 和 C的区别&#xff1f;什么是 Java 程序的主类&#xff1f;应…...

如何规避电子政务门户网站建设教训/企业营销策划及推广

ssh工具下载地址&#xff1a; ssh secure file transfer http://download.csdn.net/detail/wyx100/9591076问题&#xff1a; ssh连接ubunt16.04系统出现错误&#xff1a; server responded “Algorithm negotiation failes” 原因&#xff1a; 服务器响应通过失败 解决方法&…...

企业网站的形式有哪些/互联网广告代理

前言&#xff1a;为啥要用无人值守安装系统&#xff1f;很简单的答案&#xff01;就两个&#xff01;一个是方便日常工作&#xff0c;另一个就是可以用来装逼&#xff01;常规装系统的办法有哪些&#xff1f;光盘安装系统>一个服务器DVD内置光驱百千块&#xff0c;百台服务器…...

网络用户提要求找人帮忙做的网站/百度搜索官网

&#x1f4e2;前言&#x1f332;原题样例&#xff1a;旋转字符串&#x1f33b;C#方法&#xff1a;判断子串&#x1f33b;Java 方法&#xff1a;判断子串&#x1f4ac;总结&#x1f4e2;前言 &#x1f680; 算法题 &#x1f680; &#x1f332; 每天打卡一道算法题&#xff0c;…...

东莞网站建设服务/营销新闻

在函数内部&#xff0c;可以调用其他函数。如果一个函数在内部调用自身本身&#xff0c;这个函数就是递归函数。举个例子&#xff0c;我们来计算阶乘n! 1 * 2 * 3 * ... * n&#xff0c;用函数fact(n)表示&#xff0c;可以看出&#xff1a;fact(n) n! 1 x 2 x 3 x ... x (n-…...