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

java面试题-集合篇

Collection

1.Collection有哪些类?

Java集合框架中的Collection接口是所有集合类的基础接口,定义了一些基本的集合操作,如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。

List

List接口定义了按照索引访问和操作元素的方法。它允许元素重复,并且有序。在List中可以使用get()和set()方法访问指定位置的元素,使用add()和remove()方法添加和删除元素。

常见的List实现类有:

  • ArrayList:ArrayList 是一个基于动态数组的实现,支持随机访问,插入和删除操作效率低。

  • LinkedList:底层使用双向链表实现,插入和删除操作效率高,但随机访问效率低。

  • Vector:与ArrayList类似,但是线程安全,效率较低。

Set

Set接口表示一个不允许有重复元素的集合,实现类必须重写equals()方法和hashCode()方法。常见的Set实现类有:

  • HashSet:底层使用哈希表实现,无序,元素唯一。

  • LinkedHashSet:底层使用哈希表和链表实现,有序,元素唯一。

  • TreeSet:底层使用红黑树实现,有序,元素唯一。

Queue

Queue接口表示一个先进先出(FIFO)的队列。常见的Queue实现类有:

  • LinkedList:底层使用链表实现,效率较高,LinkedList实现了Queue接口,它支持在队列的头部和尾部进行元素的添加和删除操作,因此可以被用作栈、队列和双端队列。。

  • PriorityQueue:是一种基于优先级堆的Queue,它保证了每次取出的元素都是队列中优先级最高的元素。。

需要注意的是,这些集合类都是基于Object的,如果需要在集合中存储特定类型的元素,需要使用泛型。例如,List表示一个只包含字符串元素的List。

2.讲一下ArrayList的底层实现?

ArrayList 的底层实现基于数组,它继承了 AbstractList 抽象类并实现了 List 接口。下面是一些关于 ArrayList 的底层实现的细节:

  1. 数组:ArrayList 的内部实现是一个数组,使用数组实现可以方便地进行随机访问,根据索引直接访问指定位置的元素。

  2. 自动扩容:ArrayList 可以自动扩容以适应动态变化的容量需求,每次扩容会增加 50% 的容量。

  3. 元素的添加:ArrayList 中的 add(E e) 方法会在末尾添加一个元素,如果当前容量不足,则会进行扩容。

  4. 元素的删除:ArrayList 中的 remove(int index) 方法会删除指定索引位置的元素,将该位置后面的元素向前移动一位。

3.ArrayList自动扩容的具体实现?

当调用ArrayList的add方法时,如果当前列表中的元素数量已经达到容量的极限,那么就需要自动扩容。扩容的过程就是创建一个新的数组,并将原来数组中的元素复制到新数组中。

默认情况下,ArrayList的容量是10。当第一个元素被添加时,内部数组会被初始化为长度为10的数组。当添加第11个元素时,原始数组将会被复制到一个新的长度为15的数组中,容量增加了50%。如果再添加元素,当超过了15个元素时,内部数组将再次扩容到新的长度为22的数组中。

当使用ensureCapacity方法增加数组容量时,ArrayList使用给定参数的最大值和当前容量的大小来决定新的容量大小。

private void ensureCapacityInternal(int minCapacity) {// 判断是否需要扩容if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);}ensureExplicitCapacity(minCapacity);
}private void ensureExplicitCapacity(int minCapacity) {modCount++;// 判断是否需要扩容if (minCapacity - elementData.length > 0) {grow(minCapacity);}
}private void grow(int minCapacity) {int oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1);if (newCapacity - minCapacity < 0) {newCapacity = minCapacity;}if (newCapacity - MAX_ARRAY_SIZE > 0) {newCapacity = hugeCapacity(minCapacity);}elementData = Arrays.copyOf(elementData, newCapacity);
}

扩容操作的代价是很高的,因此在实际使用时,我们应该尽量避免数组容量的扩张。当我们可预知要保存的元素的多少时,要在构造ArrayList实例时,就指定其容量,以避免数组扩容的发生。或者根据实际需求,通过调用ensureCapacity方法来手动增加ArrayList实例的容量。

4.ArrayList的Fail-Fast机制?

在 Java 中,如果使用集合类的迭代器来遍历集合元素,而同时修改了集合中的元素,就有可能会发生 ConcurrentModificationException 异常。这是因为 Java 集合类的迭代器是快速失败(fail-fast)机制,如果在迭代集合时集合发生了结构性变化(例如添加或删除元素),迭代器就会立即抛出异常,而不是等到迭代完成再抛出异常。

ArrayList 是一个支持随机访问的序列容器,底层使用数组实现,所以在对 ArrayList 进行并发操作时,可能会出现不同步的问题,因此 ArrayList 也使用了快速失败机制来保证线程安全。

具体来说,如果在对 ArrayList 进行迭代操作的同时,对其进行增删改操作,会导致 ArrayList 的 modCount(修改次数)和迭代器的 expectedModCount(预期的修改次数)不一致,迭代器会立即抛出 ConcurrentModificationException 异常。

以下是一个简单的示例代码,用来演示 ArrayList 快速失败机制的工作原理:

List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {Integer element = iterator.next();if (element == 2) {list.remove(element);}
}

在上面的示例代码中,我们在迭代过程中删除了元素 2,这会导致 ConcurrentModificationException 异常的抛出。为了避免出现这种情况,我们可以使用 Iterator 的 remove() 方法来进行元素的删除,或者使用线程安全的集合类,例如 CopyOnWriteArrayList。


MAP

1.Map有哪些实现类?

Java中的Map接口定义了一个键值对映射的数据结构,可以通过给定的键快速查找对应的值。Map接口有很多实现类,常见的有以下几种:

  1. HashMap:基于哈希表实现的Map,支持null键和null值,非线程安全的。

  2. LinkedHashMap:基于哈希表和双向链表实现的Map,可以按照插入顺序或者访问顺序遍历键值对,非线程安全的。

  3. TreeMap:基于红黑树实现的Map,键值对按照自然顺序或者自定义顺序排序,非线程安全的。

  4. ConcurrentHashMap:线程安全的HashMap,使用分离锁来控制并发访问,支持高并发,可以通过一定的控制减小锁的竞争。

  5. Hashtable:早期Java版本中提供的线程安全的哈希表,支持null键和null值,但是效率较低,已经被ConcurrentHashMap取代。

  6. Properties:Hashtable的子类,用来读取和写入属性文件,通常用于读取配置文件。

除了以上这些常见的实现类,还有一些其他的实现类,比如WeakHashMap、IdentityHashMap、EnumMap等,不过它们使用的较少,一般只在特定场景下使用。

2.HashMap的底层实现(jdk7&jdk8)?

JDK7 的底层实现

在 JDK7 中,HashMap 是通过数组和链表的结合来实现的。其基本思路是:将 key 通过哈希函数映射为数组下标,将 value 存储在对应的数组元素中。如果不同的 key 映射到了同一个数组下标,就会以链表的形式存储在该数组元素中。

HashMap 在 JDK7 中的底层结构主要由两部分组成:一个 Entry 数组和一个链表。其中,Entry 是 HashMap 的基本单元,它包含了 key、value 和指向下一个 Entry 的指针。当使用 put() 方法向 HashMap 中添加元素时,会根据 key 的哈希值计算出在数组中的位置,然后将 Entry 添加到该位置的链表中。如果两个不同的 key 哈希值相同,那么它们会被放到同一个链表中,形成一个链表结构。这就是 JDK7 中 HashMap 的基本实现原理。

然而,这种实现方式有一个严重的问题:当链表过长时,查询效率会大大降低,因为需要遍历整个链表才能找到对应的元素。在极端情况下,当所有的元素都映射到了同一个数组下标,HashMap 的时间复杂度就会退化到 O(n),这就是所谓的哈希冲突问题。

JDK8 的底层实现

JDK8 中的 HashMap 对 JDK7 中的实现进行了优化,主要是通过引入红黑树来解决链表过长的问题。当链表长度超过一定阈值时(默认为 8),链表就会转换为红黑树。这样,在查询时,如果在链表中需要遍历的节点数量超过了阈值,就会使用红黑树进行快速查找,从而提高了查询的效率。

在 JDK8 中,HashMap 的底层结构主要由三部分组成:一个数组、一个链表和一个红黑树。当使用 put() 方法向 HashMap 中添加元素时,如果对应数组下标上已经存在元素,就会进行以下操作:

  • 如果该元素是一个链表,就将新元素追加到链表的末尾。

  • 如果该元素是一个红黑树,就在树中查找 key 对应的节点,然后将节点的 value 替换成新的 value。如果树中不存在对应的节点,就将新元素添加到树中。

  • 如果该元素为 null,就直接在该数组的位置插入新的 Entry。

在 JDK8 中,HashMap 的 get() 方法的实现方式也发生了变化。在查询时,先根据 key 的哈希值计算出在数组中的位置,然后判断该位置上的元素是否为 null。如果为 null,则返回 null;如果不为 null,则判断该元素是链表还是红黑树。如果是链表,则遍历链表寻找对应的元素;如果是红黑树,则在树中进行查找。

JDK8 中 HashMap 的优化主要体现在两个方面:

  1. 引入红黑树,解决链表过长的问题,提高了查询效率。当链表长度超过一定阈值时,将链表转换为红黑树,避免了链表过长时查询效率下降的问题。

  2. 除了对链表和红黑树的优化之外,JDK 8 还对哈希函数进行了改进。在 JDK 8 中,对于 key 的 hash 值,不再采用传统的取模运算(%)计算哈希桶的索引,而是采用了一种新的方式,使用 key 的 hash 值高位和低位进行异或运算,以此来增加哈希桶的分布性。这种新的方式能够更好地抵抗哈希冲突,从而提高了 HashMap 的性能。

  3. HashMap 将插入元素时使用的方式从头插法改为了尾插法,更好地支持并发操作。在多线程环境下,头插法容易导致多线程竞争同一个桶位,从而导致链表成环。成环后会导致链表转换成红黑树的操作失败,进而影响整个 HashMap 的性能。而尾插法不会导致链表成环,因此在多线程环境下更为安全。

总的来说,JDK8 中 HashMap 的底层实现相比于 JDK7 发生了较大的变化,通过引入红黑树和优化哈希算法,提高了 HashMap 的性能和稳定性。

3.HashSet的底层实现?

HashSet 是基于 HashMap 实现的,底层是一个 HashMap 对象。在 HashSet 中,所有元素都是存储在一个 HashMap 的键上,而这个键的值则是一个静态的 Object 常量(通常是一个 dummy Object)。因此,HashSet 的实现过程可以简单概括为将所有元素作为 HashMap 的 key 存储,而 value 为一个静态的 Object 对象。

具体来说,HashSet 就是在 HashMap 的基础上去掉了 value,只保留了 key。在使用 HashSet 时,我们只需要调用 HashMap 的 put() 方法,把元素作为 key 插入 HashMap 中,value 则使用一个常量对象(例如 private static final Object PRESENT = new Object())来占位即可。

相比于 HashMap,HashSet 的实现过程更为简单,因为它只需要存储键而不需要存储值。因此,HashSet 在大多数情况下比 HashMap 更加高效。同时,由于 HashSet 也是基于 HashMap 实现的,因此它们的底层实现也非常相似,可以复用 HashMap 的很多特性。

以下是 HashSet 的部分源码:

public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serializable
{// HashSet 底层就是一个 HashMap,所有元素作为 key 存储在 HashMap 中private transient HashMap<E,Object> map;// 常量对象,用于占位private static final Object PRESENT = new Object();public HashSet() {map = new HashMap<>();}public boolean add(E e) {return map.put(e, PRESENT)==null;}
}

可以看到,在 HashSet 中,我们只需要调用 HashMap 的 put() 方法来将元素插入到 HashMap 中。这样做的好处是可以节省很多重复代码,而且可以复用 HashMap 的很多特性。同时,由于 HashSet 只存储键而不存储值,因此在大多数情况下比 HashMap 更加高效。

相关文章:

java面试题-集合篇

Collection 1.Collection有哪些类&#xff1f; Java集合框架中的Collection接口是所有集合类的基础接口&#xff0c;定义了一些基本的集合操作&#xff0c;如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。 List List接口定义了按照索引…...

二十九、vite项目集成webpack+vue2项目

一、开发 基座应用: 1、安装依赖 npm i @micro-zoe/micro-app@0.8.6 --save 2、在入口处引入(main.ts) import microApp from @micro-zoe/micro-appmicroApp.start()...

小程序之间实现互相跳转的逻辑

1:小程序之间可以实现互相跳转吗 可以实现互相跳转! 2:小程序跳转是否有限制 有限制!限制如下 2.1:需要用户触发跳转 从 2.3.0 版本开始,若用户未点击小程序页面任意位置,则开发者将无法调用此接口自动跳转至其他小程序。 2.2:需要用户确认跳转 从 2.3.0 版本开始…...

算法——数学建模的十大常用算法

数学建模的十大常用算法在数学建模竞赛和实际问题解决中起着至关重要的作用。以下是这些算法的具体信息、应用场景以及部分算法的C语言代码示例&#xff08;由于篇幅限制&#xff0c;这里只给出部分算法的简要代码或思路&#xff0c;实际应用中可能需要根据具体问题进行调整和扩…...

cookie、session、jwt、Oauth2.0、sso 分别有什么用

cookie、session、jwt都是 web 应用中的认证方式&#xff0c;最早只有 cookie&#xff0c;后面觉得所有数据存储在客户端不安全&#xff0c;就出现了 cookie-session&#xff0c;再后面有了 jwt。 cookie工作原理 cookie 数据存储在用户的本地。服务器完全根据 cookie 确定访…...

maven使用默认settings.xml配置时,Idea基于pom.xml更新依赖时报错,有些组件下载时连接超时

1、问题背景&#xff1a;maven使用默认settings.xml配置时&#xff0c;Idea基于pom.xml更新依赖时报错&#xff0c;有些组件下载时连接超时&#xff0c; 通过日志发下&#xff0c;去连接maven.org网站下载依赖&#xff0c;有时候肯定会超时。 2、解决办法&#xff1a;使用国外…...

信息收集-Web应用搭建架构指纹识别WAF判断蜜罐排除开发框架组件应用

知识点&#xff1a; 1、信息收集-Web应用-架构分析&指纹识别 2、信息收集-Web应用-架构分析&WAF&蜜罐 3、信息收集-Web应用-架构分析&框架组件识别 指纹识别 EHole_magic https://github.com/lemonlove7/EHole_magic 指纹识别 Wappalyzer https://github.com…...

蓝桥杯之图

图&#xff1a; 对于图来说&#xff0c;重点在于之后的最短路径算法&#xff0c;这边简单做一下了解即可...

ProxySQL构建PolarDB-X标准版高可用路由服务三节点集群

ProxySQL构建PolarDB-X标准版高可用路由服务三节点集群 一、PolarDB-X标准版主备集群搭建 三台机器上传 polardbx 包&#xff0c;包可以从官网https://openpolardb.com/download获取&#xff0c;这里提供离线rpm。 1、上传 polardbx 安装包 到 /opt目录下 rpm -ivh t-pol…...

【leetcode】双指针:移动零 and 复写零

文章目录 1.移动零2.复写零 1.移动零 class Solution { public:void moveZeroes(vector<int>& nums) {for (int cur 0, dest -1; cur < nums.size(); cur)if (nums[cur] ! 0)swap(nums[dest], nums[cur]);} };class Solution { public:void moveZeroes(vector&l…...

正则化(Regularization)和正则表达式(Regular Expression)区别

文章目录 1. **正则化&#xff08;Regularization&#xff09;**2. **正则表达式&#xff08;Regular Expression&#xff09;**关键区别为什么名字相近&#xff1f; 正则化&#xff08;Regularization&#xff09;和正则表达式&#xff08;Regular Expression&#xff09;不是…...

【C++】C++-教师信息管理系统(含源码+数据文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【C】C教师信息管理系统&#xff08;含源码&#x…...

MySql从入门到精通

第一部分 基础篇 1.概述 1.1 启动与停止MySql 启动 net start mysql80 停止 net stop mysql80 注意&#xff1a; mysql开机默认启动 1.2 客户端连接 方法一&#xff1a;使用MySQL提供的命令行客户端方法二&#xff1a;系统自带的命令行工具执行指令 mysql [-h 127.0.0.1] …...

27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的。

一、如果我们要做这个项目&#xff0c;第一步我们要做的就是需要有对应的训练数据集。 这里提供两个数据集&#xff0c;一个是原始评论数据集《reviews.txt》&#xff0c;以及对应的评论是消极还是积极的数据集《labels.txt》&#xff0c;下面的程序就是找到这两个数据集&…...

微信小程序 - 组件和样式

组件和样式介绍 在开 Web 网站的时候&#xff1a; 页面的结构由 HTML 进行编写&#xff0c;例如&#xff1a;经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写&#xff0c;例如&#xff1a;经常会采用 .class 、#id 、element 等选择器 但在小程序中不能…...

滤波总结 波形处理原理 如何对一个规律的波形进行滤波 显现出真正的波形 如何设计滤波

需要用到的软件:waveserialport vofa++ 1.波形想用MCU进行采集首先你要考虑到你的采集频率因为如果你的对象波形即你要采集的波形,他过于快速的话有一些MCU它是不能的比如说有一些它的主频才36兆72兆呢你如果遇到一个特别快的波形毫秒级别那他就检测不了 2.…...

【代码随想录】刷题记录(115)-岛屿数量(广搜)

题目描述&#xff1a; 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均被水包围。 输入描…...

Git指南-从入门到精通

代码提交和同步命令 流程图如下&#xff1a; 第零步: 工作区与仓库保持一致第一步: 文件增删改&#xff0c;变为已修改状态第二步: git add &#xff0c;变为已暂存状态 bash $ git status $ git add --all # 当前项目下的所有更改 $ git add . # 当前目录下的所有更改 $ g…...

uvm错误记录4

如下所示&#xff0c;奇怪的是penable莫名其妙的出X。可问题&#xff0c;我发送激励了。 仔细定位发现&#xff0c;39行用的是vif中的penable, 问题是都是赋值&#xff0c;却出现同时赋值多次&#xff0c;这是因为nonblocking和blocking同时触发导致的&#xff0c;因此&#xf…...

用大模型学大模型03-数学基础 概率论

https://metaso.cn/s/Jp0OU9w 提示词:我正在学习深度学习相关的数学知识&#xff0c;学到了概率论与统计学部分&#xff0c;给我一个入门级的完整教程和实例。 好的&#xff0c;我现在需要回答用户关于深度学习所需的概率论与统计学入门教程和实例的问题。用户希望得到一个完整…...

数字电路-基础逻辑门实验

基础逻辑门是数字电路设计的核心元件&#xff0c;它们执行的是基本的逻辑运算。通过这些基本运算&#xff0c;可以构建出更为复杂的逻辑功能。常见的基础逻辑门包括与门&#xff08;AND&#xff09;、或门&#xff08;OR&#xff09;、非门&#xff08;NOT&#xff09;、异或门…...

基于springboot轨道交通安全评估系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;轨道交通安全评估管理当然不能排除在外。轨道交通安全评估系统是在实际应用和软件工程的开发原理之上&#xff0c;运用Java语言以及Spring…...

多能互补综合能源系统,改变能源结构---安科瑞 吴雅芳

多能互补综合能源系统是一种通过整合多种能源的形势&#xff08;如电力、天然气、热能、冷能等&#xff09;和多种能源技术&#xff08;如可再生能源、储能技术、智能电网等&#xff09;&#xff0c;实现能源利用和配置调整的系统。其目标是通过多能互补和协同优化&#xff0c;…...

Python 量化

Python 量化是指利用 Python 编程语言以及相关的库和工具来进行金融市场数据分析、策略开发和交易执行的过程。 Python 由于其简洁、易学、强大的生态系统和丰富的金融库而成为量化交易的首选编程语言之一。 量化交易在金融领域得到广泛应用&#xff0c;它允许交易者通过系统…...

图数据库Neo4j面试内容整理-属性(Property)

在图数据库中,属性(Property)是用来描述节点(Node)和关系(Relationship)详细信息的键值对。属性可以附加到节点或关系上,用来存储具体的数据,如名字、年龄、时间戳、标签等。属性使得节点和关系不仅能够表示实体或交互,还能包含丰富的、与实体或交互相关的信息。 1. …...

uniapp - iconfont下载本地并且运用至项目上

1、项目中创建一个文件夹放置iconfont相关文件&#xff0c;例如src/assets/iconfont&#xff08;名称自己定义&#xff09; 2、在iconfont下载项目至本地 3、解压后把文件复制进1的文件夹中 4、修改src/assets/iconfont - iconfont.css里的font-face的src地址&#xff0c;修…...

leetcode 1594. 矩阵的最大非负积

题目如下 数据范围 示例 本题难就难在矩阵存在负数&#xff0c;我们可以先思考如果矩阵每个数都大于等于0那么很简单我们只需要维护左边和上面的最大值即可。那么如果遇到负数显然要得到最大值就要和左边和右边的最小值相乘。所以这里我们维护两个二维数组用于存从(0,0)开…...

Vue3 从入门到精通:全面掌握前端框架的进阶之路

一、Vue3 简介 Vue.js 是一款流行的 JavaScript 前端框架&#xff0c;用于构建用户界面。Vue3 作为 Vue.js 的重大升级版本&#xff0c;带来了诸多性能提升和新特性。它采用了 Proxy 实现数据响应式系统&#xff0c;优化了虚拟 DOM 算法&#xff0c;使得应用在运行时更加高效。…...

lightning.pytorch.callbacks内置的Callbacks介绍

PyTorch Lightning 提供了一些 内置回调 (Callback),可以在训练过程中自动执行 检查点保存、学习率调度、早停 等功能。通过使用 Trainer(callbacks=[...]) 来传入这些回调。 PyTorch Lightning 的 Callback 是一种强大的工具,允许用户在训练过程中插入自定义逻辑,而无需修…...

网络运维与网络安全技术分享

网络运维与网络安全介绍之二 在上阶段给大家基本介绍了网络运维与网络安全专业第一阶段的内容之后&#xff0c;接下来&#xff0c;我们就开始进入正式内容分享了&#xff01; 第一阶段&#xff1a;运维基础与网络系统管理之Windows系统的安装部署以及常见Windows应用技巧。 在这…...

基于巨控GRM242Q-4D4I4QHE模块的农村供水自动化监控技术方案

一、系统架构设计 拓扑结构&#xff1a; 传感器层&#xff08;液位/压力/流量&#xff09;→ 巨控GRM242Q模块 → 4G网络 → 云平台 → 手机/PC监控端硬件配置&#xff1a; 核心设备&#xff1a;GRM242Q-4D4I4QHE模块&#xff08;4DI/4DO/4AI/1485&#xff09;传感器&#xff1…...

Java 单元测试框架之 Mockito 详细介绍

本文是博主在学习如何高效创建单元测试时的知识记录&#xff0c;文中项目代码是基于 SpringBoot 项目&#xff0c;测试组件使用的 JUnit 5&#xff0c;单元测试组件使用的 Mockito 。虽然现在都是在使用 AI 助手帮助生成单元测试和代码辅助修改&#xff0c;但我们不能被工具挡住…...

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 , 基于 openEuler 构建 LVS-DR 群集。

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 NAT模式的优势&#xff1a; 可以隐藏后端服务器的IP地址&#xff0c;提高了系统的安全性。 支持多个后端服务器共享同一个IP地址&#xff0c;提高了系统的可扩展性。 可以在负载均衡器和后端服务…...

mapbox V3 新特性,添加下雪效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录 一、&#x1f340;前言1.1 ☘️mapboxgl.Map 地图对象…...

谈谈云计算、DeepSeek和哪吒

我不会硬蹭热点&#xff0c;去分析自己不擅长的跨专业内容&#xff0c;本文谈DeepSeek和哪吒&#xff0c;都是以这两个热点为引子&#xff0c;最终仍然在分析的云计算。 这只是个散文随笔&#xff0c;没有严谨的上下游关联关系&#xff0c;想到哪里就写到哪里。 “人心中的成见…...

深入HBase——引入

引入 前面我们通过深入HDFS到深入MapReduce &#xff0c;从设计和落地&#xff0c;去深入了解了大数据最底层的基石——存储与计算是如何实现的。 这个专栏则开始来看大数据的三驾马车中最后一个。 通过前面我们对于GFS和MapReduce论文实现的了解&#xff0c;我们知道GFS在数…...

【前端】【vue】vue2/3,nuxt的插槽使用详解

插槽在Vue2、Vue3和不同版本Nuxt中的使用 Vue2中的插槽 基础插槽 在Vue2中&#xff0c;基础插槽允许在组件的模板中定义一个占位符&#xff0c;然后在使用组件时插入自定义内容。例如&#xff0c;创建一个简单的MyBox组件&#xff1a; <template><div class"…...

逆境、情绪低落时可用的锦囊、咒语

《浮生一梦》&#xff08;一&#xff09; 大多数人都经历过逆境低谷、失败、挫折、看似无端情绪低落、抑郁… 人逢情绪低落时&#xff0c;几乎任何话都听不进去&#xff0c;再正的能量也塞不进脑子&#xff0c;笑话笑不出来&#xff0c;食不知味… 复原力不强者很难走出来&am…...

【目标检测json2txt】label从COCO格式json文件转YOLO格式txt文件

目录 🍀🍀1.COCO格式json文件 🌷🌷2.YOLO格式txt文件 💖💖3.xml2json代码(python) 🐸🐸4.输入输出展示 🙋🙋4.1输入json 🍂🍂4.2输出txt 整理不易,欢迎一键三连!!! 送你们一条美丽的--分割线-- 🍀🍀1.COCO格式json文件 COCO数…...

ASP.NET Core SixLabors.ImageSharp 位图图像创建和下载

从 MVC 控制器内部创建位图图像并将其发送到浏览器&#xff1b;用 C# 编写并与 Linux 和 Windows 服务器兼容。 使用从 ASP.NET MVC 中的控制器下载任何文件类型File。 此示例创建一个位图 (jpeg) 并将其发送到浏览器。它需要 NuGet 包SixLabors.ImageSharp v1.0.4。 另请参…...

Java开发实战:使用IntelliJ IDEA 开发Spring Boot + MyBatis + MySQL的详细实现步骤

使用IntelliJ IDEA 开发Spring Boot MyBatis MySQL的详细实现步骤 在本文中&#xff0c;我们将一步步讲解如何在IntelliJ IDEA 2024.2.3中使用Spring Boot、MyBatis和MySQL来开发一个简单的Web应用。通过本文&#xff0c;你将学会如何设置项目、配置数据库、创建实体类、编写…...

python-leetcode-在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; class Solution:def searchRange(self, nums: List[int], target: int) -> List[int]:def find_first(nums, target):left, right 0, len(nums) - 1result -1while left < rig…...

Oracle RHEL 7.8 安装

前言 Red Hat Enterprise Linux Server release 7.8 为企业级 SO 镜像。绝大部分企业如果使用Oracle数据库均会使用其企业版 OS &#xff0c;能够很好的支持数据库的运行 文档目的 当前文档仅针对 VMware Workstation Pro 进行 OS 介质安装。 镜像下载地址 注意&#xff1…...

Java多线程交替打印

1. 双线程交替打印奇偶数 class Printer{private int num1; //要打印的数字private Object myLock new Object();public static void main(String[] args){Printer pnew Printer();Thread t1new Thread( ()->p.printNum(true), "threadA");t1.start();Thread t…...

华为2288H V5服务器无法启动问题处理

问题&#xff1a;通电后服务器前面显示888&#xff0c;点击电源键没有反应 一.通过管理口管理服务器硬件设备 华为2288H V5它默认的IP是192.168.2.100 网关是255.255.255.0 2.将网线一头连接服务器的Mgmt口&#xff0c;另一头来连接笔记本的网口&#xff0c;将笔记本的的本地…...

阿里巴巴对deepseek回应

行业背景与发布契机 当杭州的DeepSeek在相关领域展现实力时&#xff0c;阿里巴巴为了在技术竞争中占据一席之地&#xff0c;推出新的视觉 - 语言模型&#xff0c;试图吸引行业关注。 Qwen2.5 - VL系列模型发布详情 模型介绍&#xff1a;阿里巴巴发布Qwen2.5 - VL系列视觉 - 语…...

如何使用UniApp实现页面跳转和数据传递?

在 UniApp 中&#xff0c;页面跳转和数据传递是基本的功能&#xff0c;允许用户在应用中浏览不同的页面并传递必要的信息。以下是如何实现页面跳转和数据传递的详细步骤和示例。 一、页面跳转 UniApp 提供了几种方式来进行页面跳转&#xff0c;主要包括&#xff1a; uni.nav…...

STM32:迎接汽车与AI时代MCU新挑战

作为通用32位MCU市场最受关注的产品系列&#xff0c;意法半导体&#xff08;ST&#xff09;的STM32 MCU从2007年问世之后就迎来爆发式增长&#xff0c;成功占据通用32位MCU市占率领头羊的位置&#xff0c;并且不断引领着通用MCU技术与应用的新思维开拓。 本文引用地址&#xf…...

【操作系统】深入理解Linux物理内存

物理内存的组织结构 我们平时所称的内存也叫随机访问存储器也叫 RAM 。RAM 分为两类&#xff1a; 一类是静态 RAM&#xff08; SRAM &#xff09;&#xff0c;这类 SRAM 用于 CPU 高速缓存 L1Cache&#xff0c;L2Cache&#xff0c;L3Cache。其特点是访问速度快&#xff0c;访…...

K8s组件

一、Kubernetes 集群架构组件 K8S 是属于主从设备模型&#xff08;Master-Slave 架构&#xff09;&#xff0c;即有 Master 节点负责集群的调度、管理和运维&#xff0c;Slave 节点是集群中的运算工作负载节点。 主节点一般被称为 Master 节点&#xff0c;master节点上有 apis…...