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

Java集合及面试题学习

知识来源沉默王二、小林coding、javaguide

1、ArrayList

list.add("66")      list.get(2)      list.remove(1)      list.set(1,"55")

List<String> list=new ArrayList<>();   底层是动态数组

添加元素流程:判断是否扩容,无需扩容则直接加元素。否则计算新容量与10比较,取较大值,然后执行grow()方法,扩容至原来的1.5倍,如果还不够则扩到指定容量,调用Arrays.copyOf方法最后回到add函数里面。返回boolean

设置元素流程:检查索引越界,然后替换新值并返回旧值。

删除元素流程:(下标删除)检查索引越界,移动元素使用Syetem.arraycopy(),最后size--,末尾为null让GC回收,返回删除的元素。(元素删除)根据是否为null来分别判断,null用==,其它用equals方法,返回boolean

查找元素流程:根据是否为null来分别判断,null用==,其它用equals方法,返回元素索引,未找到为-1

list.add(1,"66")

list.remove("66")

list.indexOf("66")

list.lastIndexOf("66")

2、LinkedList

LinkedList<String> list = new LinkedList();   底层是链表实现的 

list.add("33")    list.addFirst("11")   list.addLast("33")  

  • remove(int):删除指定位置的节点
  • remove(Object):删除指定元素的节点
  • set(0,"33")
  • indexOf(Object):查找某个元素所在的位置
  • get(int):查找某个位置上的元素
  • poll() 方法用于删除并返回第一个元素
  • peekFirst() 方法用于返回但不删除第一个元素。

3、HashMap

put(1,"11")//增加或修改

remove("1")//删除

get(1) //查询

HashMap 是通过拉链法来解决哈希冲突的,也就是当哈希冲突时,会将相同哈希值的键值对通过链表的形式存放起来,采用的是头插法。

hash方法:hash 方法是用来做哈希值优化的,把哈希值右移 16 位之后与原哈希值做异或运算,增大了随机性。其中调用了键的hashcode方法

扩容机制:

当我们往 HashMap 中不断添加元素时,HashMap 会自动进行扩容操作(条件是元素数量达到负载因子(load factor)乘以数组长度时),以保证其存储的元素数量不会超出其容量限制。在进行扩容操作时,HashMap 会先将数组的长度扩大一倍,然后将原来的元素重新散列到新的数组中。由于元素的位置是通过 key 的 hash 和数组长度进行与运算得到的,因此在数组长度扩大后,元素的位置也会发生一些改变。一部分索引不变,另一部分索引为“原索引+旧容量”。

加载因子:

HashMap 的加载因子是指哈希表中填充元素的个数与桶的数量的比值,当元素个数达到负载因子与桶的数量的乘积时,就需要进行扩容。这个值一般选择 0.75,是因为这个值可以在时间和空间成本之间做到一个折中,使得哈希表的性能达到较好的表现。因为容量是2的n次幂,所以与加载因子乘积后最好是整数,而0.75最合适。

4、ArrayDeque、PriorityQueue

ArrayDeque<String> stack = new ArrayDeque<>(); 

offer("6")

String top = stack.peek();   //获取

String pop = stack.poll();    //出队

PriorityQeque:堆

PriorityQueue<String> queue = new PriorityQueue<>();

peek()    

offer("s")

poll()    

5、HashSet

HashSet<String> set = new HashSet<>(); 

set.add("陈清扬");

boolean containsWanger = set.contains("王二");

boolean removeWanger = set.remove("王二");

修改=增加+删除

6、Java面试算法常用api 

 算法题常用语法(Java篇) - 知乎

Java常用函数总结_java函数-CSDN博客

List<String> rets1 = new ArrayList<>(Arrays.asList(intro));

Arrays.sort()

Arrays.equals()

String[] revised = Arrays.copyOf(intro, 3);

Collections.reverse(list);

Collections.sort(list);

Collections.swap(list, 2,4);

max(Collection coll)

min(Collection coll)

frequency(Collection c, Object o)   //返回指定对象出现的频次

集合通用:

toArray()

size()

isEmpty()

contains()

clear()

数组用nums.length    集合用list.size(),String用length()

面试题

1、 Java集合类有哪些

集合主要有两条大的支线:

一条是Collection,由List\Set\Queue组成。

List代表有序可重复的集合,有封装了动态数组的ArrayList,封装了链表的LinkedList

Set代表无序不可重复的集合,主要有HashSet、TreeSet

Queue代表队列,典型的有双端队列ArrayDeque,优先级队列PriorityDeque

第二条线就是Map,表示键值对的集合,主要代表就是HashMap

2、 用过哪些集合类?它们的优劣?

我常用的集合类有 ArrayList、LinkedList、HashMap、LinkedHashMap。

  1. ArrayList 可以看作是一个动态数组,可以在需要时动态扩容数组的容量,只不过需要复制元素到新的数组。访问速度快但是插入和删除元素可能需要移动或者复制元素。

  2. LinkedList 是一个双向链表,适合频繁的插入和删除操作。缺点是访问元素时需要遍历链表。

  3. HashMap 是一个基于哈希表的键值对集合。可以根据键的哈希值快速查找到值,但有可能会发生哈希冲突,并且不保留键值对的插入顺序。

  4. LinkedHashMap 在 HashMap 的基础上增加了一个双向链表来保持键值对的插入顺序

3、队列和栈说说?有什么区别?

 队列是先进先出,栈是先进后出的

4、哪些是线程安全的容器,哪些不安全?(后续补充

 Vector:线程安全的动态数组,其内部方法基本都经过synchronized修饰

Hashtable(不推荐):线程安全的哈希表,HashTable 的加锁方法是给每个方法加上 synchronized 关键字,不过现在推荐使用ConcurrentHashMap

还有JUC里有很多线程安全的容器:

ConcurrentHashMap:1.7使用了分段锁,而1.8 中取消了 Segment 分段锁,采用 CAS + synchronized 来保证并发安全性,使用了拉链法存放冲突节点,当冲突节点超过8时转为红黑树

CopyOnWriteArraySet:是线程安全的Set实现,它是线程安全的无序的集合

CopyOnWriteArrayList:它是 ArrayList 的线程安全的变体,其中所有写操作(add,set等)都通过对底层数组进行全新复制来实现,允许存储 null 元素。

ArrayList、LinkedList、HashSet、HashMap: 这些集合类是非线程安全的。在多线程环境中,如果没有适当的同步措施,对这些集合的并发操作可能导致不确定的结果。

5、ArrayList和Array有什么区别

1、数组创建时必须指定大小且不能更改,而ArrayList是动态数组实现的,会自动扩容

2、数组不支持泛型,ArrayList支持泛型

3、数组元素可以为基本类型也可以为对象,但ArrayList只能为对象

4、ArrayList有丰富的增删改查的方法,而数组没有

6、ArrayList和LinkedList区别

 1、ArrayList是基于数组实现的,LinkedList是基于链表实现的

2、ArrayList实现了RamdomAccess接口,支持随机访问,查找复杂度为O(1),适用于频繁访问读取的场景

而LinkedList不支持随机访问,因为他是双向链表,插入删除效率为O(1),使用于频繁的增删场景

3、ArrayList是空间占用少,使用的是连续的内存空间,而LinkedList包含了节点的引用,占用会更多。,一般而言ArrayList性能会更加高一些

7、ArrayList扩容机制

因为它底层是基于数组实现的,所以没添加元素时它还是个空数组,当添加第一个元素时,默认初始化容量为10. 

当往ArrayList中添加元素时,如果超过当前容量的限制则会进行扩容(如果已经达到了Integer,MAX_VALUE则抛出异常)。扩容是通过一个grow方法,扩容后新数组的长度是原来的1.5倍,如果1.5倍不够,则直接扩容到当前所需的大小。最后再把原数组的值拷贝到新数组中。

8、有哪几种实现ArrayList线程安全的方法?

 常用的有两种

1、使用Collections的synchronizedList,会返回一个线程安全的集合,其内部是通过synchronized加锁来实现的

2、使用JUC的CopyOnWriteArrayList,使用写时复制技术,每当对列表进行修改时,都会创建一个新副本,这个新副本会替换旧的列表,而对旧列表的所有读取操作仍然在原有的列表上进行,这样并发读时无需加锁就实现了线程安全。

9、ArrayList和Vector的区别

 Vector是线程安全的,是1.0时期的遗留类,现在基本已经不使用了。所有方法都使用synchronized进行同步,单线程环境效率很低。

ArrayList是1.2时期引入的,不支持多线程安全,但在单线程下效率很高

10、Map接口有哪些实现类

 比较常用的有 HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap。

如果无需排序则使用HashMap,因为它的性能最好。

如果考虑到多线程安全的问题则使用ConcurrentHashMap,使用了分段锁和CAS机制,性能好于Hashtable

如果考虑到顺序则可以用LinkedhashMap,因为它额外维护了一个双向链表记录插入和访问顺序。

如果需要范围查询按自定义顺序排列则可以用TreeMap,因为它是基于红黑树实现的。

11、详细说说HashMap及其底层原理?

 HashMap是将数据以键值对的形式存储的,是线程不安全的。

jdk7是使用数组+链表来实现的,Hash冲突时会使用拉链法将冲突元素放进一个链表中。

jdk8引入了红黑树,链表长度超过8会将链表转换为红黑树,具有更好的性能。

HashMap 的初始容量是 16,如果传入的容量参数不为2的幂次方,则会增大到2的幂次方

随着元素的不断添加,HashMap 就需要进行扩容,阈值是capacity * loadFactor,capacity 为容量,loadFactor 为负载因子,默认为 0.75

12、了解红黑树吗?简单说说

 红黑树是一种自平衡的二叉查找树,每个节点只能是红色或黑色其中一种。其中根和叶子节点必须是黑色。从任一节点到叶子节点的简单路径都包含相同数目的黑色节点。红色节点的子节点一定是黑色。

13、为什么超过8会变为红黑树小于6变为链表?

 因为它链表节点数量遵从泊松分布,当超过8时概率小于百万分之一,然后才转换为红黑树。如果数量变少的话使用链表更加方便,而如果7就转换的话会产生不小开销,甚至容易产生链表与红黑树的不断转换你。选择6的话是兼顾时间和空间比较合适的数字。

14、为什么使用红黑树,不使用二叉搜索树和AVL树?

 二叉树容易出现极端情况,比如插入的数据是有序的,那么二叉树就会退化成链表,查询效率就会变成 O(n)

而AVL树每个节点的左右子树的高度最多相差 1,这种高度的平衡保证了极佳的查找效率,但在进行插入和删除操作时,可能需要频繁地进行旋转来维持树的平衡,维护成本更高

使用红黑树更像是一种折中的方案,查找插入删除的效率都是O(logN)

15、HashMap的put流程

 先判断数组是否为空,为空则进行初始化。

然后计算哈希值,(n-1)&hash计算下标位置,构造Node节点放入

如果发生哈希冲突则判断是否为同一个key,如果key不同就要根据数据结构放入节点

如果是红黑树就构造树形节点插进去,链表的化就是Node节点插进去,这里看看是否需要转为红黑树。

最后判断节点数是否大于阈值,大于则扩容为原数组的两倍。

16、为什么hashMap的容量是2的幂次方?

 因为hashmap计算下标使用hash&(n-1),n为数组大小,n-1之后恰好产生低位全是1的掩码,保证能很好利用容量空间,并尽量的均匀分布。

(计算hash时利用高16位与低16位异或运算)

实际这里hashmap是将取模运算优化成了位运算,而容量只有为2的幂次方时,两者结果才一致,由于位运算比取模运算快,所以采用位运算+2的幂次方来完美替代取模运算

17、 Hash冲突有哪些解决方式?

有线性探测法:如果发生冲突则顺序查看该下标的下一个位置,直到该下标未被使用

二次探测法:发生冲突则交替变化正负x的平方移动,x从1开始递增。

伪随机探测法:预先生成一个伪随机序列,根据序列的值来进行移动

最后还有链地址法,HashMap就是基于这种方法实现的,冲突的话会放在对应下标的链表上。

这里冲突的判断方式是先判断hashcode,再判断equals,如果都一样则认为key一样,更新value

18、HashMap的扩容机制说说?

 jdk1.8中扩容会先生成新数组,其容量是原来的两倍,然后遍历旧哈希表元素

如果是链表的话,则重新计算下标放入新数组中,放置的结果等效于hash&(n-1),n为新的容量大小。

如果是红黑树的话,会遍历红黑树计算出新的下标位置。

如果该位置下元素超过8则生成新的红黑树放进去。

如果没超过8则生成一个链表将元素放进去

最后将新数组赋值给HashMap的table属性

 19、负载因子是多少?为什么用这个数?

负载因子是0.75,当HashMap里元素的数量超过容量*负载因子时会发生扩容至原来的2倍。

负载因子如果太低,比如0.5则会浪费很多空间,如果是0.9则会发生太多冲突导致性能下降。

0.75 是 JDK 作者经过大量验证后得出的最优解,能够最大限度减少 rehash 的次数。

而且由于容量是2的幂,所以算出来的数恰好都为整数。虽然0.625,0.875也能整除,但折中考虑0.75更加恰当

20、jdk8对HashMap做了哪些优化

 1、底层数据结构由数组+链表转为数组+链表+红黑树

2、链表的插入方式由头插法改为尾插法,能不改变链表的顺序

3、扩容的时机由插入时判断改为插入后判断,避免了覆盖旧值时不必要的扩容问题

4、hash算法进行了优化,原来是多次移位和异或实现,jdk8则是高16位与低16位异或实现

21、HashMap是线程安全的吗?

 不是线程安全的,多个线程同时读写时可能会出现并发修改问题。而且它的一些操作不是原子性的,在多线程下可能会出现竟态条件。

比如Jdk7里会出现死锁问题,因为多线程操作HashMap并触发扩容时,可能会形成环形链表,后续遍历链表则会发生死循环。

jdk虽然使用头插法解决了死锁问题,但并发修改导致的数据异常依然没有解决

22、HashMap如何实现线程安全?

 1、使用Collections下的synchronizedMap来创建,返回一个同步的Map包装器,所有的Map操作都是同步的。内部是通过 synchronized 对象锁来保证线程安全的

2、使用ConcurrentHashMap,使用了分段锁机制,允许多个线程同时读,提高并发性能。

使用了CAS和synchronized来保证线程安全

3、自己使用显式的锁,比如ReentrantLock来保证线程安全

23、 讲讲HashMap和TreeMap

①、HashMap 是基于数组+链表+红黑树实现的,put 元素的时候会先计算 key 的哈希值,然后通过哈希值计算出元素在数组中的存放下标,然后将元素插入到指定的位置,如果发生哈希冲突,会使用链表来解决,如果链表长度大于 8,会转换为红黑树。

②、TreeMap 是基于红黑树实现的,put 元素的时候会先判断根节点是否为空,如果为空,直接插入到根节点,如果不为空,会通过 key 的比较器来判断元素应该插入到左子树还是右子树。

在没有发生哈希冲突的情况下,HashMap 的查找效率是 O(1)。适用于查找操作比较频繁的场景。

TreeMap 的查找效率是 O(logn)。并且保证了元素的顺序,因此适用于需要大量范围查找或者有序遍历的场景。

24、讲讲HashMap和Hashtable

1、 Hashtable 是同步的,即它的方法是线程安全的。这是通过在每个方法上添加同步关键字来实现的,而HashMap 不是同步的,因此它不保证在多线程环境中的线程安全性。

2、Hashtable 不允许键或值为 null。 HashMap 允许键和值都为 null

3、现在HashTable已经不常用了,一般考虑线程安全都会使用ConcurrentHashMap

25、讲讲HashSet的底层实现

 HashSet 是由 HashMap 实现的,只不过值由一个固定的 Object 对象填充,而键用于操作。

实际上HashSet并不常用,如果需要去重会考虑使用它,否则会用HashMap或ArrayList来替代它

26、HashSet和ArrayList区别 

  • ArrayList 是基于动态数组实现的,HashSet 是基于 HashMap 实现的。
  • ArrayList 允许重复元素和 null 值。HashSet 保证每个元素唯一,不允许重复元素,基于元素的 hashCode 和 equals 方法来确定元素的唯一性。
  • ArrayList 保持元素的插入顺序,可以通过索引访问元素;HashSet 不保证元素的顺序,元素的存储顺序依赖于哈希算法,并且可能随着元素的添加或删除而改变。

27、HashMap和HashSet的区别?

 1、HashMap 使用键值对的方式存储数据,通过哈希表实现。  HashSet 实际上是基于 HashMap 实现的,它只使用了 HashMap 的键部分,将值部分设置为一个固定的常量。

2、HashMap 用于存储键值对,其中每个键都唯一,每个键关联一个值。  HashSet 用于存储唯一的元素,不允许重复。

28、HashMap和ConcurrentHashMap区别 

 1、HashMap 不是线程安全的。在多线程环境中,如果同时进行读写操作可能会导致数据不一致。 ConcurrentHashMap 是线程安全的,它使用了分段锁的机制,将整个数据结构分成多个段,每个段都有自己的锁。这样不同的线程可以同时访问不同的段,提高并发性能。

2、HashMap 在实现上没有明确的同步机制,需要在外部进行同步,例如通过使用 Collections.synchronizedMap() 方法。

3、在单线程或低并发环境下,HashMap 的性能会比 ConcurrentHashMap 稍好,因为 ConcurrentHashMap 需要维护额外的并发控制。  在高并发情况下,ConcurrentHashMap 的性能通常更好,因为它能够更有效地支持并发访问。

高频自测:

  1. Java的集合类有哪些
  2. 哪些是线程安全的?哪些是线程不安全的?
  3. ArrayList 和 Array 有什么区别?
  4. ArrayList 和 LinkedList 的区别是什么?底层实现是怎么样的?
  5. ArrayList 扩容机制
  6. Map 接口有哪些实现类
  7. Java中的HashMap了解吗?HashMap 的底层实现 【重要】
  8. Hash 冲突有什么解决方式? HashMap 是如何解决 hash 冲突的
  9. HashMap 的 put 方法流程
  10. HashMap 的扩容机制
  11. HashMap 为什么是线程不安全的? 如何实现线程安全                                                            
  12. concurrentHashMap 如何保证线程安全
  13. HashSet 和 HashMap 和 HashTable 的区别              
  14. HashMap和ConcurrentHashMap

 

相关文章:

Java集合及面试题学习

知识来源沉默王二、小林coding、javaguide 1、ArrayList list.add("66") list.get(2) list.remove(1) list.set(1,"55") List<String> listnew ArrayList<>(); 底层是动态数组 添加元素流程&#xff1a;判断是否扩容&#xf…...

【内置函数】84个Python内置函数全整理

Python 内置函数全集&#xff08;完整分类 参数详解 示例&#xff09; 文章目录 Python 内置函数全集&#xff08;完整分类 参数详解 示例&#xff09;一、数值与数学函数abs(x)divmod(a, b)pow(x, y, modNone)round(number[, ndigits])sum(iterable, /, start0)hash(obj) …...

【LeetCode 热题 100】双指针 系列

&#x1f4c1;283. 移动零 对于该题目&#xff0c;需要注意的是两个地方&#xff0c;一是保持非零元素的相对顺序&#xff0c;以及O(1)的空间复杂度。 采用双指针的思路&#xff0c;将数组划分成3个区间,。 [0 , left]&#xff1a;该区间内元素全是非零元素。 [left1 , right…...

实现批量图片文字识别(python+flask+EasyOCR)

话不多说,向上效果图 1)先说框架版本 为什么要先说框架版本呢,因为我在各种版本中尝试了两天,总算确定了如下版本适合我,至于其他的版本,各位自己去尝试 python 3.9.7 EasyOCR 1.7.2 flask 3.0.3 2)执行操作效果图 2.1)多选文件 2.2)图片预览 2.3)提取选中文件 2.4)提取所有文…...

[Swift]pod install成功后运行项目报错问题error: Sandbox: bash(84760) deny(1)

操作&#xff1a; platform :ios, 14.0target ZKMKAPP do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!# Pods for ZKMKAPPpod Moyaend pod install成功后运行报错 报错&#xff1a; error: Sandbox: bash(84760) deny(1) file-writ…...

文档内容提取以及合成

如何从10个左右的docx文档中抽取内容&#xff0c;生成新的文档&#xff0c;抽取内容包括源文档的文字内容、图片、表格、公式等&#xff0c;以及目标文档的样式排版、字体、格式&#xff0c;还有目标文档的语言风格、用词规范、文法习惯等等。这是一个相当复杂的需求&#xff0…...

[Windows] Wireshark 网络抓包工具 v4.4.6

[Windows] Wireshark 网络抓包工具 链接&#xff1a;https://pan.xunlei.com/s/VOODTZ7Lm2gsNLoFNcOIqflzA1?pwdf3ea# 软件说明Wireshark&#xff08;前称Ethereal&#xff09;是一款免费开源的网络嗅探抓包东西&#xff0c;世界上最流行的网络协议剖析器&#xff01;网络封…...

在Ubuntu中安装hadoop的详细过程

在Ubuntu中安装hadoop的详细过程 请自行安装Ubuntu系统&#xff08;可参考&#xff1a;在VMWare中安装Linux虚拟机Ubuntu&#xff09; 一、创建hadoop用户 如果在安装 Ubuntu 的时候不是用的 “hadoop” 用户&#xff0c;这时需要增加一个名为 hadoop 的用户。 首先打开终端…...

NOIP2017提高组.列队

目录 *数据结构模板题目算法标签: 模拟, 线段树, 线段树动态开点, 树状数组, 平衡树思路*前置代码完整注释代码精简注释代码 *数据结构模板 题目 530. 列队 算法标签: 模拟, 线段树, 线段树动态开点, 树状数组, 平衡树 思路 首先考虑简单情况, 如果只有一行, 删除一个位置…...

PSN港服跳过生日找回密码(需要英语对话,需要注册的id)

登陆这个网站 https://www.playstation.com/en-hk/support/contact-us/?categoryAcc&subCategorypw 随便输入点名字 firstname 跟lastname 勾选&#xff0c;然后打开机器人聊天 然后按照提示输入邮箱跟id&#xff0c;输入正确之后会分配真人客服 真人客服会要求提供第一次…...

服务治理-服务注册

一个服务在真实项目部署的时候&#xff0c;如果压力较大&#xff0c;会做多实例部署。 在IDEA里面做多实例部署的话&#xff0c;只需要配置多个启动项。...

Jinja2模板引擎SSTI漏洞

1. 引入 再研究大模型相关应用的漏洞CVE-2025-25362时&#xff08;参考1&#xff09;&#xff0c;看到作者给了比较详细的分析&#xff08;参考2&#xff09;。下面对这个漏洞做个介绍。 2. 漏洞类型 这个漏洞属于CWE-1336&#xff0c;它主要关注在使用模板引擎进行脚本化处…...

STM32单片机教程:从零开始打造智能天气时钟

STM32单片机教程&#xff1a;从零开始打造智能天气时钟 大家好&#xff01;今天我想为大家详细介绍一下我们的STM32课程&#xff0c;以及如何从零基础逐步掌握单片机开发技能&#xff0c;最终实现一个完整的智能天气时钟项目。 课程面向人群 本课程主要面向那些已经通过野火…...

c++_csp-j算法 (1)

DFS搜索(深度优先搜索) 讲解 第一部分&#xff1a;DFS搜索算法简介 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种常用的图搜索算法&#xff0c;用于遍历或搜索图或树的所有节点。DFS算法的核心思想是尽可能深地搜索图的分支&#xff0c;直…...

word选中所有的表格——宏

Sub 选中所有表格()Dim aTable As TableApplication.ScreenUpdating FalseActiveDocument.DeleteAllEditableRanges wdEditorEveryoneFor Each aTable In ActiveDocument.TablesaTable.Range.Editors.Add wdEditorEveryoneNextActiveDocument.SelectAllEditableRanges wdEdito…...

16、堆基础知识点和priority_queue的模拟实现

一、priority_queue的使用方法 priority_queue的使用方法看这篇文章 二、堆 1、介绍 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树数据结构&#xff0c;满足以下性质&#xff1a; 堆序性质&#xff08;Heap Property&#xff09;&#xff1a; 大顶堆&#xff08…...

20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤

20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤 2025/4/19 15:38 查询格式YUV/RGB 81 09 04 24 60 FF 90 50 00 00 FF 查询辨率帧率 81 09 04 24 72 FF 90 50 01 03 FF 查询LVDS mode : Singel output/Dual output 81 09 04 24 74 FF 90 50 00 00 FF 配置405的机…...

【信息系统项目管理师】高分论文:论信息系统项目的采购管理(信息化办公系统)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划采购管理2、实施采购3、管理采购论文 随着信息化技术的发展,从企业到政府,传统的办公模式正在悄然消失,信息化办公模式正成为主流。特别是国务院印发的《关于加快推广“互联网+政务服务”工作的…...

国产GPU生态现状评估:从寒武纪到壁仞的编程适配挑战

近年来&#xff0c;国产GPU厂商在硬件性能上持续突破&#xff0c;但软件生态的构建仍面临严峻挑战。本文以寒武纪、壁仞等代表性企业为例&#xff0c;对比分析其与CUDA生态的兼容性差异&#xff0c;并探讨技术突围路径。 一、编程适配的核心挑战 ‌编程模型差异与开发成本‌ …...

Linux(autoDL云服务器)mamba-ssm环境安装——一次成功!

1.创建环境选择torch2.0&#xff0c; cuda11.8&#xff0c;python3.8 2.从GitHub官网下载cp38对应的&#xff0c;causl_conv1d&#xff0c;和mamba-ssm2.2.2。下载入下图所示。 3.直接用finalshell 或者xshell连接服务器上传&#xff0c;到根目录下面。 直接用pip install *…...

手搓LeNet-5(基础模型)实现交通标志识别

手搓LeNet-5&#xff08;基础模型&#xff09;实现交通标志识别 一、环境准备1. 安装Python环境2. 安装CUDA&#xff08;可选&#xff0c;仅需GPU加速时&#xff09;3. 配置虚拟环境4. 安装PyTorch核心库5. 安装辅助库6. 验证安装7. 准备数据集8.常见问题处理 二、 数据集处理三…...

TV主板的拆解学习

下面是小米的电视机主板&#xff0c;电源采用PFCLLC方案&#xff0c;主控采用电视盒子主控采用晶晨半导体T962-H&#xff0c;搭配2G南亚DDR3L内存和8G三星eMMC存储器。 本文用来加深对TV主板的认识&#xff0c;学习于充电头网&#xff0c;链接在文末。 两颗蓝色插件Y电容来自S…...

PH热榜 | 2025-04-19

1. Omakase.ai Voice 标语&#xff1a;你的语音驱动销售助手。一个链接。 介绍&#xff1a;Omakase.ai Voice将您的网站转变为一个语音驱动的销售助手&#xff0c;它可以在客户浏览时进行对话、倾听并给出推荐。聊天机器人往往效果不佳——它们无法实现销售&#xff0c;而这个…...

LeetCode(Hot.2)—— 49.字符异位词分组题解

Problem: 49. 字母异位词分组 字母异位词的定义是&#xff1a;两个单词的字母组成一样&#xff0c;但顺序可以不同&#xff0c;比如 eat、tea 和 ate 就是一个组的。 思路 将每个字符串按字母排序&#xff0c;把排序后的字符串作为 key&#xff0c;相同 key 的放在一个 list 中…...

UE学习记录part19

231 insect: insect enemy type 创建dead动画资源 往insect head上添加socket 创建攻击root motion动画。motion warping需要与root motion合作使用 为buff_blue创建物理资产 设置simulate physic使sinsect死亡后能落到地板上而不是漂浮在空中&#xff0c;要将die函数设置为 -…...

不连续数据区间天数累计sql

计算不连续数据区间天数并且剔除重复天数 create table loan_data(loan_no varchar(10),cust_no varchar(10),start_date date,end_date date )INSERT INTO loan_data VALUES (LN001, CUST001, 2025-01-04, 2025-01-08); INSERT INTO loan_data VALUES (LN002, CUST001, 2025-…...

django基于爬虫的网络新闻分析系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本网络新闻分析系统采用B/S架构&#xff0c;数据库是MySQL&#xff0c;网站的搭建与开发采用了先进的Python进行编写&#xff0c;使用了Django框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。前台主要功能包括&#xff1a;用户注册、登录、浏览…...

JAVA文件I/O

目录 一、三种路径的分类&#xff1a; 1、绝对路径&#xff1a; 2、相对路径&#xff1a; 3、基准目录&#xff1a; 二、文件的种类&#xff1a; 三、利用JAVA操作文件&#xff1a; 1、File类的构造方法&#xff1a; 2、File 类方法的使用&#xff1a; 使用例子&#…...

第七周作业

一、分别在前端和后端使用联合注入实现“库名-表名-字段名-数据”的注入过程&#xff0c;写清楚注入步骤 1、爆库 后端sql语句&#xff1a;select database(); 前端&#xff1a;1 order by 1#&#xff0c;1 order by 2#&#xff0c;1 order by 3# 判断显示位为两位1 union sel…...

Linux 进程信号详解

进程信号 信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。 kill -l //查看不同信号代表的事件 执行kill -l 可以看到共有62种信号&#xff0c;其中&#xff1a; 0-31号信号为非可靠信号&#xff08;这部分信号借鉴于UNIX系统的信号&#xff09;&#xff1b;…...

MCP 应用案例-网络设备批量管理

案例背景 需求痛点 企业需管理数百台跨地域网络设备&#xff08;交换机/路由器&#xff09;&#xff0c;传统方式存在&#xff1a; 人工SSH登录效率低脚本维护成本高&#xff08;不同厂商CLI语法差异&#xff09;状态监控依赖独立监控系统 解决方案 通过MCP协议构建智能网络…...

进程程序替换

fork() 之后,⽗⼦各⾃执⾏⽗进程代码的⼀部分如果⼦进程就想执⾏⼀个全新的程序呢&#xff1f;进程的程序 替换来完成这个功能&#xff01; 程序替换是通过特定的接⼝&#xff0c;加载磁盘上的⼀个全新的程序(代码和数据)&#xff0c;加载到调⽤进程的地址空间中&#xff01…...

6.7 ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南

ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南 关键词:定时任务调度, ChatGPT 代码生成, Cron 脚本开发, Python 调度器, 自动化更新系统 6.3 使用 ChatGPT 生成 Cron 调度脚本 在 GitHub Sentinel 的定期更新功能中,定时任务调度是核心模块。本节演示如何通过…...

废物九重境弱者学JS第十四天--构造函数以及常用的方法

目录 JavaScript 进阶 - 第2天 深入对象 构造函数 实例成员 静态成员 内置构造函数 Object Array 包装类型 String Number 案例 JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用&#xff0c;体会 JavaScript 一切皆对象的语言特征&#xff0c…...

机器学习+深度学习

文章目录 一、机器学习(一)机器学习概念(二)机器学习基本流程(三)机器学习应用场景二、机器学习的常见工具与相关库(一)Python 机器学习库(二)数据处理库(三)可视化库三、聚类算法思想与模型搭建过程(一)K - Means 聚类算法(二)DBSCAN 聚类算法四、分类算法思想…...

docker基本使用命令

一、镜像 1、拉取镜像 docker pull busybox docker pull nginx:1.26-alpine 2、查看本地镜像 [rootRocky-1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 4e1b6bae1e48 18 hours ago 192MB busybox lates…...

相机模型--CMOS和CCD的区别

1--CMOS和CCD的工作原理 CCD&#xff08;Charge Coupled Device&#xff0c;电荷耦合器件&#xff09;&#xff1a; 1. 图像通过光电效应在感光单元中转化为电荷&#xff1b; 2. 每个像素上的电荷被依次“耦合”并传输到芯片的角落&#xff0c;通过一个或几个模拟输出放大器输…...

触发器(详解)

一&#xff1a;MySQL触发器 MySQL数据库中触发器是一个特殊的存储过程。 不同的是执行存储过程要使用 CALL 语句来调用&#xff0c;而触发器的执行不需要使用 CALL 语句来调用&#xff0c;也不需要手工启动&#xff0c;只要一个预定义的事件发生就会被 MySQL自动调用。 引发…...

Vue 3 中将 ref 创建的响应式对象数据转换为普通(非响应式)的数据

Vue 3 中使用 ref 创建的响应式对象数据转换为普通&#xff08;非响应式&#xff09;的数据&#xff0c;有以下几种方法&#xff1a; 1. 访问 .value 属性: 这是最直接、最常见的方法。 由于 ref 对象的值存储在其 .value 属性中&#xff0c;直接访问该属性即可获得普通数据。…...

Vue基础(6)_键盘事件

普通键盘事件 键盘事件常用的有两个&#xff1a;keydown、keyup。 举例&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><script type"text/javascript" src"../js/vue.js"&…...

Kubernetes控制平面组件:高可用 APIServer

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

这个是我的qss按钮样式 和之前的// 应用全局样式表 QString style = R“(是会冲突吗,导致我的按钮背景颜色是黑色,我该怎么修改

/* 样式 A */ *[style-type="A"] { background-color:#cfd1d4; border: none; border-radius: 50%; /* 圆形边框 */ padding: 7px 14px; } *[style-type="A"]:hover { background-color: #45a049; }这个是我的qss按钮样式 和之前的// 应用全局样式表 QStri…...

Kubernetes控制平面组件:API Server详解(二)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

人工智能在智慧农业中的应用:从田间到餐桌的变革

农业是人类社会的基石&#xff0c;随着全球人口的增长和资源的日益紧张&#xff0c;传统农业面临着巨大的挑战。近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展为农业带来了新的机遇。智慧农业通过将AI技术与农业生产相结合&#xff0c;实现了从田间种植…...

多人3D游戏完整实现方案

以下是一份完整的代码实现方案,涵盖架构设计、核心模块实现和部署流程。我们以 多人3D游戏 为例,结合之前讨论的Nano服务端框架和Unity客户端: 技术栈 模块技术选型服务端Golang + Nano框架 + MongoDB客户端Unity 2022 + C# + Mirror Networking通信协议Protobuf + WebSock…...

FFUF指南

ffuf 的核心功能&#xff1a; 目录/文件发现&#xff1a; 通过暴力破解&#xff08;使用字典&#xff09;探测目标网站的隐藏目录或文件&#xff0c;例如&#xff1a; ffuf -w /path/to/wordlist.txt -u http://target.com/FUZZ 子域名枚举&#xff1a; 通过模糊测试发现目标…...

详细的PyCharm安装教程

详细的PyCharm安装教程 安装前准备 确认系统要求&#xff1a; Windows&#xff1a;Microsoft Windows 10 1809 64位或更高版本&#xff0c;Windows Server 2019 64位或更高版本。 macOS&#xff1a;12.0或更高版本。 Linux&#xff1a;满足以下要求的两个最新版本的Ubuntu LTS或…...

FPGA IO引脚 K7-认知4

UG475来知道bank, GTX, Pin数量&#xff0c; Package, Pinout 时钟 ​​SRCC​​&#xff08;Single-Region Clock Capable I/O&#xff09;和​​MRCC​​&#xff08;Multi-Region Clock Capable I/O&#xff09;是专用的时钟输入/输出引脚。 如 2.DQS...

C++——异常

1. C语言错误处理机制 我们在曾经介绍过C语言下的错误码。错误码我们过去经常见到&#xff0c;错误码通常是指errno变量中的值&#xff0c;它表示特定操作&#xff08;如系统调用或库函数&#xff09;发生错误的原因。errno是一个全局变量&#xff0c;当出现错误时会自动将错误…...

vue3 中 iframe 多页面切换导致资源刷新的问题解决

最近发现一个问题&#xff0c;我在使用 websocket 的时候&#xff0c;在主页面进行了 websocket 连接了之后&#xff0c;再使用 iframe 打开子页面的时候&#xff0c;通常会触发页面刷新&#xff0c;这样就导致 WebSocket 断开&#xff0c;这是因为切换 src 会重新加载 iframe …...