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

(八)Java-Collection

一、Collection接口

1.特点

Collection实现子类可以存放多个元素,每个元素可以是Object;

有些Collection的实现类,可以存放重复的元素,有些不可以;

有些Collection的实现类,有些是有序的(List),有些则不是有序(Set);

Collection接口没有直接的实现子类,通过其子接口List和Set来实现的。

2.方法

add : 添加单个元素;

remove : 删除指定元素;

contains : 查找元素是否存在;

size : 获取元素个数;

isEmpty : 判断是否为空;

clear : 清空;

addAll : 添加多个元素;

containaAll :查找多个元素是否都存在;

removeAll : 删除多个元素。

3.遍历

Iterator(迭代器)(不推荐使用)

增强 for 循环

二、List

1.特点

List集合类中元素有序(即添加和取出顺序一致),且可重复;

List集合中的每个元素都有其对应的顺序索引,即支持索引

List容器中的元素都对应一个整数型的序号记录其在容器中的位置,根据序号存取容器中的元素;

List常用接口有 ArrayList、LinkedList、Vector。

2.方法

void add (int index,Object ele) :在index位置插入ele元素;

boolean addAll (int index,Collection eles) :从index位置开始将eles集合中的所有元素添加进来;

Object get (int index) :获取指定index位置的元素;

int indexOf (Object obj) :返回obj在集合中首次出现的位置;

int lastIndexOf (Object obj) :返回obj在集合中末次出现的位置;

Object remove (int index) :移除指定index位置的元素,并返回此元素;

Object set (int index,Object ele) :设置指定index的位置的元素为ele,相当于是替换;

List subList (int fromIndex,int toIndex) :返回从fromIndex到toIndex位置的子集合。

3.遍历

Iterator(迭代器)(不推荐使用)

增强 for 循环

普通for循环

4.实现

ArrayList、LinkedList、Vector的比较:

三、ArrayList

1.概述

底层实现:实现了 List 接口,基于动态数组。

特点:有序、可重复、动态大小。

初始容量:10

扩充机制:1.5倍(内部通过 grow() 方法完成扩容)

访问速度:时间复杂度为 O(1),随机访问速度快。

增删速度:时间复杂度为 O(n),插入和删除速度较慢,尤其是在列表中间插入或删除时,因为需要移动大量元素。

线程安全性:不是线程安全的。

常用场景:适用于频繁读取而不频繁插入或删除的场景。

2.构造方法

ArrayList()                   

// 默认构造方法,创建一个容量为 10 的空列表

ArrayList(int initialCapacity)

// 创建一个指定初始容量的空列表

ArrayList(Collection<? extends E> c)

// 创建一个包含指定集合元素的列表

3.常用方法

add(E e):将指定元素添加到列表的末尾。

add(int index, E element):将指定元素添加到指定位置。

get(int index):返回指定索引处的元素。

set(int index, E element):用指定元素替换指定位置的元素。

remove(int index):删除指定位置的元素,并返回该元素。

remove(Object o):删除列表中第一次出现的指定元素,如果元素不存在则返回 false。

clear():删除列表中的所有元素。

size():返回列表中元素的数量。

isEmpty():如果列表为空,返回 true。

contains(Object o):判断列表中是否包含指定元素。

indexOf(Object o):返回指定元素第一次出现的索引,找不到返回 -1。

lastIndexOf(Object o):返回指定元素最后一次出现的索引。

toArray():将列表转换为一个普通数组。

toArray(T[] a):将列表转换为指定类型的数组。

4.线程安全

使用 Collections.synchronizedList() 方法:

List<String> list = Collections.synchronizedList(new ArrayList<>())

使用 CopyOnWriteArrayList()方法(是一个线程安全的变体,适合读多写少的场景):

List<String> list = new CopyOnWriteArrayList<>()

四、Vector

1.概述

底层实现:实现了 List 接口,并继承自 AbstractList 类,基于动态数组,类似于 ArrayList。

特点:有序、可重复、动态大小。

初始容量:10

扩充机制:2倍(内部通过 grow() 方法完成扩容/可指定增量

访问速度:时间复杂度为 O(1),随机访问速度快。

增删速度:时间复杂度为 O(n),插入和删除速度较慢。

线程安全性:线程安全,因为所有的方法都是同步的。

常用场景:适用于需要线程安全且不特别关注性能的场景。由于同步的开销,相较于 ArrayList 性能会有所下降。

// 创建一个初始容量为 5,容量增量为 3 的 Vector

Vector<Integer> vector = new Vector<>(5, 3);

2.构造方法

Vector()                   

// 默认构造方法,创建一个容量为 10 的空向量

Vector(int initialCapacity)

// 创建一个指定初始容量的空向量

Vector(int initialCapacity, int capacityIncrement)

// 创建一个指定初始容量和扩展大小的空向量

Vector(Collection<? extends E> c)

// 创建一个包含指定集合元素的向量

3.常用方法

add(E e):将指定元素添加到向量的末尾;

add(int index, E element):将指定元素插入到指定位置;

addElement(E obj):将指定元素添加到向量的末尾( Vector特有方法);

get(int index):返回指定位置的元素;

set(int index, E element):用指定元素替换指定位置的元素;

elementAt(int index):返回指定位置的元素(Vector特有方法);

firstElement():返回向量中的第一个元素;

lastElement():返回向量中的最后一个元素;

remove(int index):删除指定位置的元素,并返回该元素;

remove(Object o):删除列表中第一次出现的指定元素;

removeElement(Object obj):删除指定的元素;

removeAllElements():删除所有元素;

size():返回向量的大小,即元素的个数;

isEmpty():如果向量为空,返回 true;

contains(Object o):判断向量中是否包含指定的元素;

indexOf(Object o):返回指定元素第一次出现的索引,找不到返回 -1;

lastIndexOf(Object o):返回指定元素最后一次出现的索引;

toArray():将向量转换为一个普通数组;

toArray(T[] a):将向量转换为指定类型的数组;

iterator():返回一个迭代器,用于遍历向量。

五、LinkedList

1.概述

底层实现:基于链表,由一系列的节点(Node)组成,每个节点包含两个部分。

数据部分:存储实际的数据。

指针部分:指向下一个节点的引用(或者在双向链表中,指向前一个节点和下一个节点的引用)。

特点:有序,可重复,动态大小,内存开销大。

访问速度:随机访问速度较慢,需要从头开始遍历。

增删速度:插入和删除速度较快,只需更改指针而不移动元素。

线程安全性:不是线程安全的。

常用场景:适用于频繁插入和删除操作的场景。

2.基本类型

单向链表:

每个节点有一个数据部分和一个指向下一个节点的指针。链表的末尾节点的指针指向 null。

双向链表:

每个节点有两个指针:一个指向下一个节点,另一个指向前一个节点。

循环链表:

单向链表或双向链表的变体,末尾节点指向头节点(而不是 null),形成一个环。

3.操作

插入:

在头部插入(头插法)、在尾部插入(尾插法)、在指定位置插入。

删除:

删除头节点、删除尾节点、删除指定位置的节点。

查找:

查找链表中的元素,可以通过遍历链表逐一比较每个节点的值。

更新:

更新链表中的某个节点的值,首先找到该节点,再修改其数据部分。

4.时间复杂度

插入和删除操作:

  在链表的头部插入或删除:O(1)

  在链表的尾部插入或删除:O(1)(但如果没有尾指针则需要 O(n))

在中间插入或删除:

  O(n)(需要遍历到特定位置)

查找操作:

  O(n)(必须遍历链表才能找到特定元素)

访问操作:

  O(n)(无法直接通过索引访问,必须从头开始遍历)

六、Set

1.特点

无序(添加和取出的顺序不一致),没有索引

不允许重复元素,所以最多包含一个null

Set的常用实现类有:HashSet、LinkedHashSet和TreeSet。

2.遍历

Iterator(迭代器)(不推荐使用)

增强 for 循环

3.线程安全

CopyOnWriteArraySet(基于 CopyOnWriteArrayList)

4.实现

HashSet、LinkedHashSet、TreeSet和CopyOnWriteArraySet比较:

七、HashSet

1.概述

底层实现:基于哈希表(HashMap)实现,使用哈希算法来存储元素。

特点:无序、不可重复,高效。

初始容量:16     

负载因子:0.75

扩充机制:条目数 > 容量 × 负载因子,哈希表将会自动增加桶的数量,一般是当前容量的两倍(rehashing),会重新计算所有现有元素的存储位置。

存储规则:存储的元素不可重复,元素在 HashSet 中没有顺序,即元素存储的顺序不一定与插入顺序相同。

增删速度:一般为时间复杂度O(1),最坏为O(n)。

线程安全性:线程不安全。

场景:适用于需要高效地添加、删除和查找元素,并且不关心元素的顺序。

2.哈希值和哈希冲突

  HashSet 使用元素的 hashCode() 方法来决定元素的存储位置。如果两个不同的元素有相同的哈希值,就会发生哈希冲突。为了减少冲突,HashSet 会使用链表或红黑树等结构来存储具有相同哈希值的元素。通过 equals() 方法判断两个元素是否相等。

hashCode():返回一个整数值,表示对象的哈希值。这个哈希值用于决定对象在哈希表中的存储位置。

equals():用于比较两个对象是否相等。

3.常用方法

add(E e):将指定元素添加到集合中;

remove(Object o):从集合中移除指定元素,如果集合中包含该元素;

contains(Object o):检查集合中是否包含指定元素o;

size():返回集合中元素的数量;

isEmpty():检查集合是否为空;

clear():清空集合中的所有元素。

八、LinkedHashSet

1.概述

底层实现:继承HashSet,实现了Set接口;结合了哈希表和链表的特性。

特点:插入有序、不可重复、性能低于HashSet。

初始容量:16     负载因子:0.75

扩充机制:同HashSet。

存储规则:根据元素的 hashCode 值来决定元素的存储位置,同时使用链表维护元素的次序。

查增删速度:平均情况下为 O(1)。

线程安全性:线程不安全。

场景:维护元素的插入顺序、去重并保留顺序、性能要求不高,但需要顺序。

2.构造方法

// 创建一个空的 LinkedHashSet,默认初始容量 16,负载因子 0.75

LinkedHashSet<E> set1 = new LinkedHashSet<>();

// 创建一个指定初始容量的 LinkedHashSet

LinkedHashSet<E> set2 = new LinkedHashSet<>(int initialCapacity);

// 创建一个指定初始容量和负载因子的 LinkedHashSet

LinkedHashSet<E> set3 = new LinkedHashSet<>(int initialCapacity, float loadFactor);

// 使用一个现有的集合创建一个 LinkedHashSet

LinkedHashSet<E> set4 = new LinkedHashSet<>(Collection<? extends E> c);

3.常见方法

add(E e):添加元素;

remove(Object o):删除指定元素;

contains(Object o):是否存在;

size():返回元素的数量;

clear():清空集合;

isEmpty():是否为空;

iterator():返回一个迭代器,遍历集合;

forEach():使用 forEach() 方法遍历集合。

、TreeSet

1.概述

底层实现:基于红-黑树(一种自平衡的二叉查找树)实现。

特点:有序、不可重复、高效、支持 NavigableSet 接口。

存储规则:存储的元素不可重复,元素有序,按照自然顺序或者指定的比较器进行排序。如果元素是自定义对象,则需要实现 Comparable 接口或者提供 Comparator。

增删速度:时间复杂度 O(log n)。

线程安全性:线程不安全。

场景:适用于需要元素有序存储,并且支持自然顺序或者自定义排序规则。

2.底层解析

红黑树具有以下特性:

每个节点要么是红色,要么是黑色。

根节点始终是黑色的。

每个叶子节点(NIL)是黑色的。

如果一个红色节点有子节点,那么该子节点必须是黑色的。

从任何节点到其所有后代叶节点的路径上,必须包含相同数量的黑色节点。

3.常见操作和方法

add(E e):添加元素;

remove(Object o):删除指定元素;

contains(Object o):检查指定元素是否存在;

size():返回元素数量;

first():返回集合中的第一个元素,即最小的元素;

last():返回集合中的最后一个元素,即最大的元素;

headSet(E toElement):返回一个视图,小于 toElement 的所有元素;

tailSet(E fromElement):返回一个视图,大于等于 fromElement 所有元素;

subSet(E fromElement, E toElement):返回一个视图,包含在 fromElement 和 toElement 之间的元素;

pollFirst():移除并返回最小元素(即第一个元素);

pollLast():移除并返回最大元素(即最后一个元素)。

十、CopyOnWriteArrayList

 是Java中一个线程安全的List实现类,属于 java.util.concurrent包。与常见的 ArrayList 相比,CopyOnWriteArrayList 的一个显著特点是写操作时会复制数组,从而保证线程安全。

1.概述

底层数据结构:动态数组,通过复制数组的方式来实现对集合的写操作。

对于写操作,会创建一个新的内部数组,然后将数据复制到这个新数组中,修改操作只会作用于这个新数组。这意味着写操作的成本较高。

主要特点:有序、可重复,读操作不受影响,写操作代价较高。

初始容量:0 (可指定)

时间复杂度:读:O(1)或O(n),其他:O(n)。

线程安全性:线程安全。

应用场景:适用于对并发读有较高需求,但写操作较少的场景,如缓存、事件监听、日志记录等。

2.构造方法

// 创建一个空的 CopyOnWriteArrayList

CopyOnWriteArrayList<E> list = new CopyOnWriteArrayList<>();

// 创建一个包含指定元素的 CopyOnWriteArrayList

CopyOnWriteArrayList<E> list2 = new CopyOnWriteArrayList<>(Collection<? extends E> c);

// 创建一个包含指定容量的 CopyOnWriteArrayList

CopyOnWriteArrayList<E> list3 = new CopyOnWriteArrayList<>(Object[] array);

3.常见操作和方法

add(E e):将元素添加到末尾;

remove(Object o):删除指定的元素;

get(int index):获取指定索引位置的元素;

set(int index, E element):替换指定位置的元素,实际上是通过复制数组来实现的,性能开销较大;

size():返回元素个数;

contains(Object o):是否包含指定元素;

clear():清空所有元素,实际上是通过创建一个新的空数组实现的;

iterator():返回一个迭代器,该迭代器支持并发读取;

forEach():遍历集合。

3.优缺点

优点:CopyOnWriteArrayList 提供了高效的并发读操作,适用于读多写少的场景,能保证线程安全。

缺点:由于写操作的开销较大,因此不适用于写操作频繁的场景。

十一、CopyOnWriteArraySet

  是一个线程安全的集合类,基于 CopyOnWriteArrayList 实现,用于提供高效的读取操作和线程安全的写入操作。

  与 HashSet 和 TreeSet 等传统集合不同,它采用 Copy-On-Write(写时复制)策略,意味着每次对集合进行修改(如添加或删除元素)时,都会复制底层的数组,并将修改应用到新数组中,而不是直接修改原数组。这使得 CopyOnWriteArraySet 特别适合于读多写少的场景。

1.概述

底层数据结构:基于CopyOnWriteArrayList,动态数组。实现了 Set 接口。

主要特点:无序、不可重复,高效的读操作,写操作代价较高

时间复杂度:读O(1)或O(n),写O(n)。

线程安全性:线程安全。

应用场景:读多写少的应用、需要线程安全的应用、高并发环境。

2.常用操作

添加元素 (add(E e));

删除元素 (remove(Object o));

检查元素是否存在 (contains(Object o));

获取集合大小 (size());

清空集合 (clear());

迭代器 (iterator())。

十二、Collections

  是 Java 提供的一个工具类,位于 java.util 包中,包含了多个静态方法,旨在对集合框架中的集合对象进行操作和增强功能。它提供了对集合的排序、查找、同步化、反转、填充等操作的支持,简化了集合类的使用和操作。

1.排序

升序排序:

sort(List<T> list)

List<Integer> list = Arrays.asList(5, 2, 8, 1, 4);

Collections.sort(list);

// [1, 2, 4, 5, 8]

根据指定的比较器 Comparator 对列表进行排序:

sort(List<T> list, Comparator<? super T> c)

List<String> list = Arrays.asList("banana", "apple", "cherry");

Collections.sort(list, Comparator.reverseOrder());

// ["cherry", "banana", "apple"]

2.查找最大值和最小值

(1)返回集合中的最大/小元素,依据元素的自然顺序:

max(Collection<? extends T> coll)

min(Collection<? extends T> coll)

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Integer max = Collections.max(list); // 5

Integer min = Collections.min(list); // 1

(2)根据给定的比较器返回集合中的最大/小元素:

max(Collection<? extends T> coll, Comparator<? super T> comp)

min(Collection<? extends T> coll, Comparator<? super T> comp)

List<String> list = Arrays.asList("apple", "banana", "cherry");

String max = Collections.max(list, Comparator.reverseOrder());

// "cherry"

String min = Collections.min(list, Comparator.reverseOrder());

// "apple"

3.反转和旋转

反转列表中元素的顺序:

reverse(List<?> list)

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Collections.reverse(list); // [5, 4, 3, 2, 1]

将列表中的元素按指定距离旋转。正数表示向右旋转,负数表示向左旋转:

rotate(List<?> list, int distance)

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Collections.rotate(list, 2); // [4, 5, 1, 2, 3]

4.填充和替换

用指定的对象填充整个列表中的元素:

fill(List<? super T> list, T obj)

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));

Collections.fill(list, "x"); // ["x", "x", "x"]

替换列表中所有等于 oldVal 的元素为 newVal:

replaceAll(List<T> list, T oldVal, T newVal)

List<String> list =

new ArrayList<>(Arrays.asList("apple", "banana", "apple"));

Collections.replaceAll(list, "apple", "orange");

// ["orange", "banana", "orange"]

5.线程安全集合

返回一个线程安全的列表,所有的操作都会通过同步来确保线程安全:

synchronizedList(List<T> list)

List<Integer> list = new ArrayList<>();

List<Integer> synchronizedList = Collections.synchronizedList(list);

返回一个线程安全的集合,所有操作都会通过同步来确保线程安全:

synchronizedSet(Set<T> s)

Set<Integer> set = new HashSet<>();

Set<Integer> synchronizedSet = Collections.synchronizedSet(set);

返回一个线程安全的映射,所有操作都会通过同步来确保线程安全:

 synchronizedMap(Map<K, V> m)

Map<String, Integer> map = new HashMap<>();

Map<String, Integer> synchronizedMap =

Collections.synchronizedMap(map);

6.空集合和常量集合

(1)返回一个空列表。返回的列表是不可修改的:

emptyList() 、emptySet()

List<String> emptyList = Collections.emptyList(); // []

Set<String> emptySet = Collections.emptySet(); // []

(2)返回一个空映射。返回的映射是不可修改的:

emptyMap()

Map<String, String> emptyMap = Collections.emptyMap(); // {}

(3)返回一个只包含指定元素的不可修改的列表:

singletonList(T o)、singleton(T o)

List<String> singletonList = Collections.singletonList("apple");

// ["apple"]

Set<String> singletonSet = Collections.singleton("apple");

// ["apple"]

(4)返回一个只包含一个映射的不可修改的映射:

singletonMap(K key, V value)

Map<String, String> singletonMap =

Collections.singletonMap("key", "value");

// {"key"="value"}

7. 其他常用方法

(1)shuffle(List<?> list)

随机打乱列表中的元素。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Collections.shuffle(list); // 列表顺序会随机改变

(2)unmodifiableList(List<? extends T> list)

返回一个不可修改的列表,修改会抛出 UnsupportedOperationException。

List<String> list = Arrays.asList("apple", "banana", "cherry");

List<String> unmodifiableList = Collections.unmodifiableList(list);

(3)unmodifiableSet(Set<? extends T> s)

返回一个不可修改的集合,修改会抛出 UnsupportedOperationException。

Set<String> set = new HashSet<>(Arrays.asList("apple", "banana"));

Set<String> unmodifiableSet = Collections.unmodifiableSet(set);

(4)unmodifiableMap(Map<? extends K, ? extends V> m)

返回一个不可修改的映射,修改会抛出 UnsupportedOperationException。

Map<String, String> map = new HashMap<>();

map.put("key1", "value1");

Map<String, String> unmodifiableMap = Collections.unmodifiableMap(map);

十三、其他API工具

1.Guava

  提供了丰富的集合框架、缓存、字符串处理、并发工具等功能。

(1)增强的集合类型

ImmutableList / ImmutableSet / ImmutableMap: 不可变集合,线程安全且不易被修改。

Multiset: 允许重复元素的集合,可以统计元素的出现次数。

Multimap: 键到多个值的映射,支持一个键对应多个值。

BiMap: 双向映射,键和值都是唯一的。

(2)缓存

Cache: 提供高效的缓存实现,支持过期策略和容量限制。

(3)字符串处理

Joiner: 简化字符串拼接的操作。

Splitter: 方便地将字符串分割成集合。

(4)并发工具

ListenableFuture: 扩展了 Future 的功能,支持回调机制。

RateLimiter: 控制方法调用频率。

(5)其他实用工具

Optional: 提供对可能为 null 的值的优雅处理,减少 null 引用带来的问题。

Preconditions: 提供参数检查工具,确保方法参数的有效性。

2.Apache Commons Collections

(1)主要特性

额外的集合类型:

  Bag: 允许重复元素的集合,并支持计数功能。

  MultiValuedMap: 每个键可以对应多个值的映射。

  TreeSortedSet: 有序集合,基于红黑树实现。

(2)装饰器模式

通过装饰器模式增强已有集合的功能,比如创建只读集合、同步集合等。

示例:SynchronizedCollection 可以为集合提供线程安全的访问。

(3)过滤器和转换器

提供多种过滤器和转换器,可以对集合进行操作,比如只保留特定条件的元素或转换元素类型。

(4)集合工具

提供各种静态方法用于操作集合,如合并、差集、交集等。

示例:CollectionUtils 类提供了很多便利的方法。

(5)快速查找和排序

提供高效的查找和排序算法,特别是对于大量数据的处理。

相关文章:

(八)Java-Collection

一、Collection接口 1.特点 Collection实现子类可以存放多个元素&#xff0c;每个元素可以是Object&#xff1b; 有些Collection的实现类&#xff0c;可以存放重复的元素&#xff0c;有些不可以&#xff1b; 有些Collection的实现类&#xff0c;有些是有序的&#xff08;Li…...

从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯

目录 前言 HAL库对GPIO的抽象 核心分析&#xff1a;HAL_GPIO_Init 前言 我们终于到达了熟悉的地方&#xff0c;对GPIO的初始化。经过漫长的铺垫&#xff0c;我们终于历经千辛万苦&#xff0c;来到了这里。关于GPIO的八种模式等更加详细的细节&#xff0c;由于只是点个灯&am…...

C++ | 哈希表

前言 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 —…...

leetcode_动态规划/递归 70. 爬楼梯

70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 思路&#xff1a; 考虑: 假设现在已经爬到了某一阶台阶&#xff0c;那是如何到达这里的呢&#xff1f;可能是从前一阶台阶爬上来的&am…...

基于Rook的Ceph云原生存储部署与实践指南(上)

#作者&#xff1a;任少近 文章目录 1 Ceph环境准备2 rook部署ceph群集2.1 Rook 帮助地址2.2 安装ceph2.3 获取csi镜像2.4 Master参加到osd2.5 设置默认存储 3 Rook部署云原生RBD块存储3.1 部署storageclass资源3.2 部署WordPress使用RBD3.3 WordPress访问 4 Rook部署云原生RGW…...

C++ Qt常见面试题(4):Qt事件过滤器

在 Qt 中,事件过滤器(Event Filter)提供了一种机制,可以拦截并处理对象的事件(如鼠标事件、键盘事件等),在事件到达目标对象之前对其进行预处理。事件过滤器通常用于以下场景: 捕获和处理特定的事件(如鼠标点击、按键等);对事件进行筛选或修改;实现全局的事件监听功…...

regionserver实例僵住问题分析

问题现象: 应用提交超时,发现regionserver实例异常。hbase原生页面这个实例dead,业务连接到这个rs的进程超时8个regionserver实例。 D08在18:30分后显示warning,应用提交任务到这个rs节点超时,hbase控制台不显示d08的rs信息了。19:30在页面停止rs实例失败,然后kill进程…...

服务器离线部署DeepSeek

目标 本次部署的目标是在本地服务器上部署DeepSeek。但是该服务不能连接外网&#xff0c;因此只能使用离线部署的方式。为了一次完成部署。现在云服务器上进行尝试。 云服务器部署尝试 云服务器配置 CentOS72080Ti 11GB 安装准备 1、上传iso并配置为本地yum源 安装前先将…...

QT mac系统下qml实现的菜单栏,标准快捷键Delete无作用或失灵的处理

一.在mac系统下,QT官方提供的删除快捷键无作用。 1.下面这一段代码,最后一个menuItem采用的是QT自带的标准快捷键,但是在使用的过程中,快捷键无响应。大家可以将代码带入简单的demo尝试一下: MenuBar {id: rootMenu {id: editMenutitle: TransText.titleBar_EditMenuItem…...

redis序列化设置

redis序列化设置 redis序列化设置序列化对象里有org.joda.time.DateTime1&#xff09;、报错内容如下2&#xff09;、解决方案&#xff1a;分别自定义时间的序列化和反序列化&#xff0c;以对象形式关联到redisTemplate redis序列化设置 redis序列化设置&#xff0c;通过自定义…...

浅谈C++/C命名冲突

前言 在这里我会简要地介绍产生命名冲突的原因&#xff0c;和C中处理命名冲突的方法&#xff0c;同时和C语言的解决办法进行比较。 相信你在阅读完之后一定会有收获。对于我们来说&#xff0c;了解编译器的编译链接过程才能更好的理解编译器是如何报错的&#xff0c;更能让我们…...

【语音编解码】常用的基于神经网络的语音编解码方案对比

引言 随着实时通信与多媒体应用的爆炸式增长&#xff0c;传统语音编解码技术正面临带宽效率与音质保真的双重挑战。近年来&#xff0c;基于深度学习的神经编解码器突破性地将端到端架构、动态码率控制与可解释信号处理相结合&#xff0c;在3kbps以下超低码率场景仍能保持自然语…...

PVE 配置显卡直通

博客地址&#xff1a;PVE 配置显卡直通 配置 Device: Dell PowerEdge T630CPU: Intel Xeon E5-2696 v4 x2GPU 1: Matrox Electronics Systems Ltd. G200eR2GPU 2: NVIDIA GeForce GTX 1060 3GBOS: Proxmox VE bookworm 8.3.1 x86_64 注意事项 硬件需支持并在 BIOS 中开启 I…...

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来

Kronecker分解&#xff08;K-FAC&#xff09;&#xff1a;让自然梯度在深度学习中飞起来 在深度学习的优化中&#xff0c;自然梯度下降&#xff08;Natural Gradient Descent&#xff09;是一个强大的工具&#xff0c;它利用Fisher信息矩阵&#xff08;FIM&#xff09;调整梯度…...

ArcGIS Pro技巧实战:高效矢量化天地图地表覆盖图

在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;地表覆盖图的矢量化是一项至关重要的任务。天地图作为中国国家级的地理信息服务平台&#xff0c;提供了丰富且详尽的地表覆盖数据。然而&#xff0c;这些数据通常以栅格格式存在&#xff0c;不利于进行空间分析和数据…...

React + TypeScript 数据模型驱动数据字典生成示例

React TypeScript 数据模型驱动数据字典生成示例 引言&#xff1a;数据字典的工程价值 在现代化全栈开发中&#xff0c;数据字典作为业务实体与数据存储的映射桥梁&#xff0c;直接影响系统可维护性与团队协作效率。传统手动维护字典的方式存在同步成本高和版本管理混乱两大痛…...

道可云人工智能每日资讯|深圳将设立人工智能和机器人产业基金

道可云元宇宙每日简报&#xff08;2025年2月26日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 上海青浦发布国际产业协作元宇宙平台 近日&#xff0c;“2025出海企业与跨境专业服务论坛”在上海青浦区徐泾镇举行。论坛上重磅发布三大全球化服务平台&#xff0c…...

[2024年下半年架构师考试真题之论文]

2024论文真题试题一(架构) 论面向服务的架构设计 Web service 是一种通过互联网协议(如 HTTP)来提供服务的软件系统,它允许不同的应用程序之间进行交互,而无需考虑它们所使用的操作系统、编程语言或硬件平台。其本质是将应用程序的功能以服务的形式暴露出来,使得其他应…...

神经网络 - 激活函数(Sigmoid 型函数)

激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力&#xff0c;激活函数需要具备以下几点性质: (1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数. (2) 激活函数及其导函数要尽可能的简单&#xff0…...

阿里云 | 快速在网站上增加一个AI助手

创建智能体应用 如上所示&#xff0c;登录阿里云百炼人工智能业务控制台&#xff0c;创建智能体应用&#xff0c;智能体应用是一个agent&#xff0c;即提供个人或者企业的代理或中间件组件应用&#xff0c;对接阿里云大模型公共平台&#xff0c;为个人或者企业用户提供大模型应…...

告别暴力穷举!用ip33在线工具手工反算1~4字节CRC32校验码的原始数据

告别暴力穷举&#xff01;手工反算1~4字节CRC32校验码的数学艺术 在数据校验的世界里&#xff0c;CRC32就像一位沉默的守门人&#xff0c;它用32位的校验码守护着数据的完整性。但鲜为人知的是&#xff0c;当面对1-4字节的短数据时&#xff0c;这位守门人的规则可以被优雅地逆…...

ARM 架构 JuiceFS 性能优化:基于 MLPerf 的实践与调优迷

Qt是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

局域网基本原理

1.局域网技术 a.以太网Ethernet b.令牌环 token ring 由IBM公司开发&#xff0c;IEEE802.5就是在此基础上i.工作模式&#xff1a;需要发送数据的时候&#xff0c;需要等待空闲令牌收到后&#xff0c;才能发送&#xff0c;令牌是一种特殊的MAC控制帧 c.FDDI 光纤分布式数据接口i…...

OpenClaw自动化招聘工具:千问3.5-35B-A3B-FP8筛选简历截图并生成面试问题

OpenClaw自动化招聘工具&#xff1a;千问3.5-35B-A3B-FP8筛选简历截图并生成面试问题 1. 为什么需要自动化招聘工具 去年帮朋友公司处理校招季简历时&#xff0c;我深刻体会到人工筛选的痛点&#xff1a;连续三天熬夜翻阅800多份PDF简历&#xff0c;眼睛酸胀不说&#xff0c;…...

AI Agent 安全养虾实战:从零基础到专家的阿里云全栈进阶指南

开篇 通关前置认知&#xff1a;为什么AI Agent时代&#xff0c;“安全养虾”是从业者的必修课&#xff1f; 2024-2026年&#xff0c;AI Agent迎来产业级爆发拐点&#xff0c;“养虾”一跃成为横跨数字科技与实体农业两大赛道的全民热词&#xff0c;其背后是两大万亿级市场的核心…...

运维基础入门到精通,收藏这篇就够了

运维基础入门到精通&#xff0c;收藏这篇就够了 运维基础 一、运维概述 1、运维岗位的收入情况 &#xfffc; &#xfffc; 2、运维的职位定义 什么是运维&#xff1f; 在技术人员之间&#xff0c;一致对运维有一个开玩笑的认知&#xff1a;运维就是修电脑的、装网线的、背锅的…...

Rack错误处理终极指南:ShowExceptions中间件详解与实战技巧

Rack错误处理终极指南&#xff1a;ShowExceptions中间件详解与实战技巧 【免费下载链接】rack A modular Ruby web server interface. 项目地址: https://gitcode.com/gh_mirrors/ra/rack Rack是Ruby生态系统中最核心的Web服务器接口&#xff0c;为Ruby开发者提供了模块…...

二手硬盘避坑指南:用MHDD检测硬盘健康状态的5个关键指标(附真实案例)

二手硬盘避坑指南&#xff1a;用MHDD检测硬盘健康状态的5个关键指标&#xff08;附真实案例&#xff09; 在二手硬件交易市场&#xff0c;硬盘是最容易"踩雷"的品类之一。翻新盘、清零盘、扩容盘等造假手段层出不穷&#xff0c;普通消费者往往在数据丢失后才意识到问…...

手机QQ图片传输抓包实战:Wireshark+010Editor从捕获到还原全流程

手机QQ图片传输抓包实战&#xff1a;Wireshark010Editor从捕获到还原全流程 在移动互联网时代&#xff0c;即时通讯软件的数据传输安全越来越受到关注。作为国内用户量最大的社交应用之一&#xff0c;QQ的图片传输机制既常见又具有一定代表性。本文将带你深入探索手机QQ图片传输…...

Manim与3Blue1Brown:如何用Python制作专业数学动画

Manim与3Blue1Brown&#xff1a;用Python打造数学动画的终极指南 当Grant Sanderson以3Blue1Brown频道颠覆数学可视化领域时&#xff0c;他背后那个神秘的动画引擎Manim逐渐走入开发者视野。这个用Python编写的工具不仅能还原《数学之美》中的经典场景&#xff0c;更能让每位具…...