[Collection与数据结构] 位图与布隆过滤器
🌸个人主页:https://blog.csdn.net/2301_80050796?spm=1000.2115.3001.5343
🏵️热门专栏:
🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm=1001.2014.3001.5482
🍕 Collection与数据结构 (93平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm=1001.2014.3001.5482
🧀线程与网络(96平均质量分) https://blog.csdn.net/2301_80050796/category_12643370.html?spm=1001.2014.3001.5482
🍭MySql数据库(93平均质量分)https://blog.csdn.net/2301_80050796/category_12629890.html?spm=1001.2014.3001.5482
🍬算法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12676091.html?spm=1001.2014.3001.5482
🍃 Spring(97平均质量分)https://blog.csdn.net/2301_80050796/category_12724152.html?spm=1001.2014.3001.5482
🎃Redis(97平均质量分)https://blog.csdn.net/2301_80050796/category_12777129.html?spm=1001.2014.3001.5482
🐰RabbitMQ(97平均质量分) https://blog.csdn.net/2301_80050796/category_12792900.html?spm=1001.2014.3001.5482
感谢点赞与关注~~~
目录
- 1. 常见位运算总结
- 2. 位图
- 2.1 位图的概念
- 2.2 位图的实现
- 2.3 位图的应用
- 2.4 对应java中的类
- 3. 布隆过滤器
- 3.1 布隆过滤器的提出
- 3.2 布隆过滤器的概念
- 3.3 布隆过滤器的插入
- 3.4 布隆过滤器的查找
- 3.5 布隆过滤器的模拟实现
- 3.6 布隆过滤器的缺陷
- 3.7 布隆过滤器的优点
- 3.8 布隆过滤器的常见使用场景
- 4. 海量数据处理
- 4.1 哈希切割
- 4.2 位图应用
- 4.3 布隆过滤器的应用
1. 常见位运算总结
- 基础位运算
<<
: 二进制左移.
>>
:二进制右移.
~
:二进制取反.
&
: 有0就是0,全1才是1.
|
: 有1就是1,全0才是0.
^
: 相同为0,相异位1.其实也可以看做是一种无进位相加. - 给定一个数n,确定他的二进制表示的第x位是0还是1
可以把这个数字n进行左移x位,之后&
上一个二进制1,如果结果是1,说明该位是1,如果结果是0,说明该位是0. - 将一个数n的二进制表示的第x位修改为1.
可以把二进制1左移x位,之后n|=
左移x位之后的这个数字. - 将一个数n的二进制表示的第x位修改成0.
首先把一个二进制1取反,之后再左移x位,之后n&=
左移x位之后的这个数字. - 提取一个数n二进制表示中最右侧的1.
n&(~n+1)
- 干掉一个数n二进制表示中最右侧的1.
n&(n-1)
- 异或
^
运算的运算律
消消乐运算律- a^0 = a
- a^a = 0
- a ^ b ^ c = a ^ (b ^ c)
2. 位图
2.1 位图的概念
所谓位图,就是用每一个bit位来存放某种状态,1表示一种状态,0表示另一种状态.适用于海量数据,整数,数据无重复的场景.通常用来判断某个数据是否存在.
位图之所以可以存储海量的数据,是由于位图对空间的利用率非常高.下面我们来举个例子:
给定40亿个不重复的无符号整数,没有经过排序,给一个无符号整数,如何快速判断这个数是否在这40亿个数据中存在.
我们如果使用遍历数据的方法的话,存在两个问题,第一个问题就是内存空间有限,我们不可能把数据全部都从硬盘中读取到内存中来寻找,其次就是查找效率太低,时间复杂度为O(N).如果我们进行排序之后利用二分查找算法来查找,只能一定程度上解决时间效率上的问题,不可解决空间效率上的问题.
所以我们可以使用位图来解决:
数据是否给定的整形数据中,结果是在或者是不在,刚好是两种状态,那么可以使用一个二进制位来表示数据是否存在的信息,如果二进制比特位为1,代表的是存在,为0则代表的是不存在.
2.2 位图的实现
- 首先位图需要有存储数据的空间,我们使用byte[]数组来存储数据.
- 其次需要有空间使用大小.
- 使用构造方法初始化byte[]数组的空间.默认是1字节,如果指定了空间大小,那么就是
n/8+1
字节.比如n=12,除8之后就是1余4,也就是我们需要存储在第二个字节的第4个比特位,此时我们就需要2个byte.如果正好是在第8个bit位的时候,可能会多出来一个字节,但是也没有关系. - 插入数据,首先/8计算在那个字节,之后判断有没有越界的情况,如果越界,使用
copyof
方法进行扩容,之后%8,计算在那个bit位存储这个数据,之后使用我们上面提到的常用的位运算来把指定的bit为改为1. - 查找数据,首先还是把数据/8之后%8,之后还是使用我们上面的常用位运算验证对应的bit位是否是1.
- 删除某个数据,还是先把数据/8之后%8,之后还是使用我们上面的常用位运算把对应的bit为改为0.
代码实现:
import java.util.Arrays;public class MyBitSet {private byte[] elem;public int usedSize;public MyBitSet(){this.elem = new byte[1];}public MyBitSet(int size){this.elem = new byte[size/8+1];}/*** 添加指定元素* @param val 指定元素* @return 返回是否添加成功*/public boolean add(int val){if (val < 0){//不支持负数throw new RuntimeException("val not support lower than 0");}int byteSet = val / 8;int bitSet = val % 8;if (byteSet > elem.length-1){//容量不够,扩容elem = Arrays.copyOf(elem,elem.length*2);}elem[byteSet] |= (byte) (1 << bitSet);usedSize++;return true;}/*** 是否包含指定元素* @param val 指定元素* @return 返回是否存在*/public boolean contains(int val){if (val < 0){throw new RuntimeException("val not support lower than 0");}int byteSet = val / 8;int bitSet = val % 8;if ((elem[byteSet] & (byte) (1 << bitSet)) != 0){return true;}return false;}/*** 删除指定元素* @param val 指定元素*/public void del(int val){if (val < 0){throw new RuntimeException("val not support lower than 0");}int byteSet = val / 8;int bitSet = val % 8;elem[byteSet] &= (byte) ~(1 << bitSet);usedSize--;}
}
2.3 位图的应用
- 去重+排序
位图这种数据结构本身就是一个萝卜一个坑,一个数据在位图中只能存在一次,其次,位图本身就是从小到大存储数据,只要把位图中的元素遍历一遍,就可以从小到大输出数据.下面是遍历位图的实现:
/*** 输出位图中的数据*/
public void display(){for (int i = 0;i < elem.length;i++){for (int j = 0;j < 8;j++){if ((elem[i] & (1<<j)) != 0){System.out.print(i*8+j+" ");}}}
}
- 求两个交集的交集,并集.
把两个位图进行&
运算,就可以求出交集,把连个位图进行|
就可以求出并集.
对位图进行测试进行测试:
public class Main {public static void main(String[] args) {MyBitSet bitSet = new MyBitSet();bitSet.add(3);bitSet.add(7);bitSet.add(10);bitSet.add(9);bitSet.add(5);System.out.println(bitSet.contains(5));bitSet.del(10);bitSet.display();}
}
测试结果符合预期:
3. 操作系统重磁盘块的标记
2.4 对应java中的类
位图在java中被封装为了BitSet
这个类,不同的一点就是,我们自己实现的这个位图是用byte数组来保存数据的,在除和取模的时候是以8为单位来计算的,而java封装的这个位图是使用long数组来保存数据的,在除和取模的时候是使用64为单位来计算的,下面是常用的一些方法:
返回值 | 方法名 | 描述 |
---|---|---|
void | clear(int bitIndex) | 将指定的bit为设置为0 |
boolean | get(int bitIndex) | 查看指定的值是否在位图中 |
void | set(int bitIndex) | 将指定位置的值设置为1 |
String | toString() | 将这个位图按照字符串的形式表示出来 |
下面是使用实例
public static void main(String[] args) {BitSet bitSet = new BitSet();bitSet.set(1);bitSet.set(2);bitSet.set(3);bitSet.set(4);bitSet.set(5);bitSet.set(6);System.out.println(bitSet.toString());System.out.println(bitSet.get(1));bitSet.clear(2);System.out.println(bitSet.get(2));System.out.println(bitSet.toString());
}
测试结果:
3. 布隆过滤器
3.1 布隆过滤器的提出
日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合中。比如在字处理软件
中,需要检查一个英语单词是否拼写正确(也就是要判断它是否在已知的字典中);在 FBI,一个嫌疑人的
名字是否已经在嫌疑名单上;在网络爬虫里,一个网址是否被访问过等等。最直接的方法就是将集合中全部
的元素存在计算机中,遇到一个新元素时,将它和集合中的元素直接比较即可。
一般来讲,计算机中的集合是用哈希表(hash table)来存储的。它的好处是快速准确,缺点是费存储空
间。当集合比较小时,这个问题不显著,但是当集合巨大时,哈希表存储效率低的问题就显现出来了。
比如说,一个像 Yahoo,Hotmail 和 Gmai 那样的公众电子邮件(email)提供商,总是需要过滤来自发送垃
圾邮件的人(spamer)的垃圾邮件。一个办法就是记录下那些发垃圾邮件的 email 地址。由于那些发送者
不停地在注册新的地址,全世界少说也有几十亿个发垃圾邮件的地址,将他们都存起来则需要大量的网络服
务器。
如果用哈希表,每存储一亿个 email 地址, 就需要 1.6GB 的内存(用哈希表实现的具体办法是将每一个
email 地址对应成一个八字节的信息指纹,然后将这些信息指纹存入哈希表,由于哈希表的存储效率一般只有
50%,因此一个 email 地址需要占用十六个字节。一亿个地址大约要 1.6GB, 即十六亿字节的内存)。因此
存贮几十亿个邮件地址可能需要上百 GB 的内存。除非是超级计算机,一般服务器是无法存储的。
- 用哈希表存储用户记录,缺点:浪费空间
- 用位图存储用户记录,缺点:位图一般只能处理整形,如果内容编号是字符串,就无法处理了。
- 将哈希与位图结合,即布隆过滤器.
3.2 布隆过滤器的概念
布隆过滤器是一种紧凑的,比较巧妙的概率型数据结构,特点是高效的插入和查询,可以用来告诉你某样东西一定不存在或者可能存在,不可以判断某样东西一定存在,他是用多个哈希函数,将一个数据映射到位图的结构中.此种方式不仅仅可以提升查询的效率,也可以节省大量的内存空间.
布隆过滤器与位图最大的区别就是,位图适合处理大量的整数.适合对这些整数进行查找/排序/去重,但如果不是整数,但是依然还是想在位图中存储数据,那么就需要使用到布隆过滤器.
3.3 布隆过滤器的插入
比如我们要向布隆过滤器中插入"baidu"和"tencent".
我们首先需要把这个字符经过不同的哈希函数进行映射,得到一个值之后,把他映射到位图之上.
我们看到在插入不同的数据的时候,经过不同的哈希函数映射之后的值是有可能产生重合的值的.如果这些值全部重合的话,在查找的时候就有可能产生误判.下面我们就来解释查找操作.
3.4 布隆过滤器的查找
布隆过滤器的思想是将一个元素用多个哈希函数映射到一个位图中,因此被映射到的位置的bit位一定为1.所以可以按照一下的方式进行查找:分别计算每个哈希值对应的比特位置存储的是否为0,只要有一个为0,代表该元素一定不在位图中,否则可能在哈希表中.
注意:布隆过滤器如果判断某个元素一定不存在时,该元素一定不存在,如果该元素存在时,则该元素可能存在,因为哈希函数映射之后存在一定的误判概率.
比如:在不同过滤器中查找alibaba时,假设经过哈希函数计算出的哈希值为1,3,7,刚好和其他元素的比特位重叠,此时布隆过滤器告诉该元素存在,但实际上元素是不存在的.
3.5 布隆过滤器的模拟实现
- 首先我们需要定义一个hash函数类,其中包含容积和随机种子.
- 之后我们需要在定义一个hash方法,使用这个hash函数求出对应的hash值.
- 实现布隆过滤器,布隆过滤器中存在若干个随机种子和默认容积.
- 存在hash函数数组,在为位图中设置值的时候,需要经过hash数组中每一个hash函数的计算,数组中每一个hash函数都会计算出一个hash值,最后我们需要把这些hash值全部设置到位图当中去.
import java.util.BitSet;/*** 创建Hash函数*/
class SimpleHash{private int cap;//容量private int seed;//随机种子public SimpleHash(int cap, int seed) {this.cap = cap;this.seed = seed;}/*** 根据容量和随机数种子计算得到val的Hash值* @param val 传入的值* @return 返回Hash值*/public int hash(String val){int ret = 0;int len = val.length();for (int i = 0;i < len;i++){ret = ret * seed + val.charAt(i);}return (cap-1) & ret;}
}/*** 布隆过滤器*/
public class MyBloomFilter {private static final int DEFAULT_SIZE = 1 << 24;//默认容积private static final int[] seeds = {1,6,3,5,10};//一共5个随机种子,在映射到位图中就需要把一个值映射到5个bit位.public int size;//过滤器存储元素的个数private SimpleHash[] simpleHashes;//不同种子的哈希函数private BitSet bitSet;//存储元素的位图public MyBloomFilter(){bitSet = new BitSet();//初始化位图//初始化哈希函数数组simpleHashes = new SimpleHash[seeds.length];for (int i = 0;i < seeds.length;i++){SimpleHash simpleHash = new SimpleHash(DEFAULT_SIZE,seeds[i]);simpleHashes[i] = simpleHash;}}/*** 为布隆过滤器中设置指定的值* @param val 指定的值*/public void set(String val){if (val == null){return;}for (SimpleHash simpleHash : simpleHashes) {bitSet.set(simpleHash.hash(val));}size++;}/*** 获取指定的值是否在布隆过滤器中存在* @param val 需要获取的值* @return 返回是否在布隆过滤器中存在*/public boolean get(String val){if (val == null){return false;}for (SimpleHash simpleHash : simpleHashes) {if (!bitSet.get(simpleHash.hash(val))) {//如果有一个不存在,就返回falsereturn false;}}return true;//如果全部存在,则可能存在}
}
3.6 布隆过滤器的缺陷
- 布隆过滤器不能直接支持删除操作,因为在删除一个元素的时候,可能会影响到其他的元素.
比如我们上面"baidu"和"tencent"的例子,想要在布隆过滤器中删除"tencent"元素,如果直接将该元素所对应的二进制位置为0,"tencent"元素和"baidu"元素刚好有一个重叠的位置,那么"baidu"元素也被删除了. - 有误判率,即不能准确判断元素是否在集合中存在.
- 不能获取元素本身
3.7 布隆过滤器的优点
- 增加和查询元素的时间复杂度为:O(K), (K为哈希函数的个数,一般比较小),与数据量大小无关,所以化简之后时间复杂度为O(1).
- 布隆过滤器不需要存储元素本身,在某些对保密要求比较严格的场合有很大优势
- 在能够承受一定的误判时,布隆过滤器比其他数据结构有这很大的空间优势,数据量很大的时候,布隆过滤器可以表示全集,而其他数据结构不可以.
3.8 布隆过滤器的常见使用场景
- 网页爬虫对URL的去重,避免爬取相同的URL地址.
- 垃圾邮件的过滤,从数十亿个垃圾邮件列表中判断某邮件是否为垃圾邮件.
- 解决数据库缓存击穿问题,当黑客攻击服务器的时候,会构建大量不存在于缓存中的key向服务器发起请求,在数据量足够大的时候,频繁的数据库查询会导致数据库服务器宕机.
- 秒杀系统,查看用户是否存在重复购买.
4. 海量数据处理
4.1 哈希切割
给一个超过100G大小的log file.log中保存着IP地址,设计算法找到出现次数最多的IP地址.
- IP本身是一个字符串,先把使用哈希函数把一个字符串变为一个hash值,
hash(IP)
- 我们需要把这些地址存入不同的文件中,首先计算出IP地址需要在那个文件中存放,即存放文件的下标.
index = hash(IP)%文件数
- 把每个小文件都加载到内存中,统计每个文件中出现IP的次数(使用Map统计).
4.2 位图应用
- 给定100亿个整数,设计算法找到只出现一次的整数.
我们可以使用位图来解决,其中有两个位图,我们针对没有出现的数据在两个位图中分别使用0 0
来表示,针对只出现一次数据在两个位图中分别用1 0
表示,针对出现两次的数据分别使用0 1
来表示,针对出现两次以上的数据使用1 1
来表示.
- 给定两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件的交集.
- 第一种方法使用哈希切割的方法
首先我们把一个文件拆分为多个小文件,之后比较每个小文件中的交集((1,1)文件,(2,2)文件依次比较). - 第二种方法是使用位图的算法.
遍历第一个文件,把存在的数据存放到位图中,之后遍历第二个文件,看读取到的数据是否在位图中存在,如果存在,就是交集.
- 第一种方法使用哈希切割的方法
4.3 布隆过滤器的应用
- 给定两个文件,分别有100亿个query,我们只有1G内存,如果找到两个文件的交集,分别给出精确的算法和近似的算法.
- 精确算法: 利用哈希切割,把两个大文件利用hash函数分为若干个小文件,之后比较小文件之间的交集((1,1)文件,(2,2)文件以此类推).
- 近似算法: 把第一个文件中的query使用hash函数映射到布隆过滤器中,之后再把第二个文件中的query使用hash函数映射出对应的值.之后再从布隆过滤器中查找,如果存在,就是交集.如果不存在就不是.
相关文章:
[Collection与数据结构] 位图与布隆过滤器
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
Redis与缓存
目录 缓存 缓存优缺点 缓存更新策略 超时剔除 先删缓存再更新数据库 旁路缓存(先更新数据库,再删缓存) 先更新数据库,再更新缓存 读写穿透 编辑 异步缓存写入模式 缓存常见问题 缓存穿透 缓存雪崩 缓存击穿 缓存 在业务开发…...
Ubuntu Linux 文件、目录权限问题(五)
本文为Ubuntu Linux操作系统- 第五弹 此文是在上期文件目录的内容操作基础上接着讲权限问题 上期回顾:Ubuntu Linux 目录和文件的内容操作 文件访问者身份与文件访问权限 Linux文件结构 所有者(属主)所属组(属组)其他…...
AI 名人堂:Jeff Dean
Jeff Dean,谷歌的高级研究员和人工智能领域的领军人物,以其在大规模分布式计算系统和人工智能系统的杰出贡献而闻名。 谷歌AI掌门人 TensorFlow项目负责人 美国工程院院士 2AGI.NET AI 名人堂 AI 名人堂:Jeff DeanAI 名人堂:Je…...
基础排序算法详解:冒泡排序、选择排序与插入排序
引言 上一章,我们聊到了排序的基本概念和常见算法的分类。这一次,我们从基础开始,深入剖析三种常见的O(n) 排序算法:冒泡排序、选择排序 和 插入排序。 它们是学习排序算法的入门神器,不仅实现简单,还能帮…...
Flink如何基于数据版本使用最新离线数据
业务场景 假设批量有一张商户表,表字段中有商户名称和商户分类两个字段。 批量需要将最新的商户名称和分类的映射关系推到hbase供实时使用。 原实现方案 a.原方案内容 为解决批量晚批问题,批量推送hbase表时一份数据产生两类rowkey:T-1和…...
什么是反向代理?作用、原理和实例详解
🚀 什么是反向代理?作用、原理和实例详解 在现代的网络架构中,反向代理(Reverse Proxy)无处不在。无论是负载均衡、加速缓存,还是WebSocket 支持,反向代理都是必不可少的工具。 这篇文章将带您…...
国产GPU中,VLLM0.5.0发布Qwen2.5-14B-Instruct-GPTQ-Int8模型,请求返回结果乱码
概述 国产GPU: DCU Z100 推理框架: vllm0.5.0 docker容器化部署 运行如下代码: python -m vllm.entrypoints.openai.api_server --model /app/models/Qwen2.5-14B-Instruct-GPTQ-Int8 --served-model-name qwen-gptq --trust-remote-code --enforce…...
Stable Diffusion本地部署:从零开始的完整指南
1、引言 Stable Diffusion是计算机视觉领域的一个生成式大模型,能够进行文生图(txt2img)和图生图(img2img)等图像生成任务。它利用深度学习技术,特别是RealisticVision v2.0模型,能够创造出接近…...
隐式神经网络实现低光照图像增强
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
Flutter动画(三)内建显式动画Widget
常见的内建显式动画Widget: ListenableBuilder: AnimatedBuilder AnimatedWidget AlignTransition DecoratedBoxTransition DefaultTextStyleTransition PositionedTransition RelativePositionedTransition RotationTransition ScaleTransiti…...
springSecurity自定义登陆接口和JWT认证过滤器
下面我会根据该流程图去自定义接口: 我们需要做的任务有: 登陆:1、通过ProviderManager的方法进行认证,生成jwt;2、把用户信息存入redis;3、自定义UserDetailsService实现到数据库查询数据的方法。 校验&a…...
Spring Boot日志:从Logger到@Slf4j的探秘
写在前面 Hello大家好,今日是2024年的第一天,祝大家元旦快乐?? 2024第一篇文章从SpringBoot日志开始 文章目录 一、前言二、日志有什么用?三、日志怎么用?四、自定义日志打印 ?? 常见日志框架说明4.1 在程序中得到?志对象【…...
使用 LabVIEW 与 PLC 通信的方式
要将 PLC 与 LabVIEW 或其他 NI 产品进行通信,首先需要明确 PLC 支持的通信协议和接口类型。NI 提供了多种方案,包括 OPC 服务器、Modbus、Ethernet/IP 和其他工业通信协议。下面将详细介绍这些方法,并进行比较分析,帮助你选择最适…...
python录制鼠标键盘操作循环播放
依赖 pip install pynput 程序: from pynput import mouse, keyboard import time import threading# 用于存储录制的鼠标和键盘事件 mouse_events [] keyboard_events []# 定义事件处理函数# 处理鼠标事件 def on_move(x, y):mouse_events.append((move, x, y))def on_cl…...
开发者如何使用GCC提升开发效率Opencv操作
看此篇前请先阅读 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144216351?spm=1001…...
异常与文件
目录 1.异常 1.1.概念 1.2.常见异常 1.3.异常处理方式 1.3.1.try except 1.3.2.try except else 1.3.3.try except else finally 2.文件 2.1.文件分类 ps:python 程序的数据保存在哪里? 2.2.常见的文件类型 2.3.python 操作文件的函数 2.3.1.读取文件…...
【C语言】完成程序设计填空
文章目录 1、请阅读下面的程序,在空白处填写正确的代码,要求各在一行从头开始输出m和n的值。2、求100~599之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。3、以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序 拆分并输出。请填空…...
西湖大学:LLM零样本推理任务校准
📖标题:Task Calibration: Calibrating Large Language Models on Inference Tasks 🌐来源:arXiv, 2410.18764 🌟摘要 🔸大型语言模型(LLM)在推理任务上表现出令人印象深刻的零样本…...
windows下Qt5自动编译配置QtMqtt环境(11)
文章目录 [toc]1、概述2、准备1.1 下载源码1.2 配置环境1.3 解释原理 3、编译4、验证5、参考6、视频 更多精彩内容👉内容导航 👈👉Qt网络编程 👈 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配…...
每天五分钟深度学习:神经网络的前向传播的计算(多样本)
本文重点 前面我们学习了单样本的前向传播,本文我们学习多样本的前向传播,我们先来回忆一下,神经网络的单样本的前向传播的向量化的方式: m个样本依次进行前向传播 这里我们说明一下符号: 我们使用(m)表示第m个样本,用[m]表示神经网络的第m层 a[2](i) 表示第i个样本计…...
基于 NXP S32K312+FS23 的汽车通用评估板方案
S32K3 系列是 NXP 推出的面向汽车电子和工业应用的微控制器,基于 ARMCortex-M7 内核,支持单核、双核和锁步内核配置。S32K3 系列具有内核、内存和外设数量方面的可扩展性,符合 ISO26262 标准,能达到 ASIL B/D 安全等级,…...
11进阶篇:专业课论文阅读方向指南(2025版)
文章目录 第一个检索式:图情档核心期刊(北大 + CSSCI)发文情况研究方法类关键词研究主题类关键词论文阅读建议第二个检索式:川大公共管理学院在核心期刊(北大 + CSSCI)的发文情况研究方法类关键词研究主题类关键词特点关键词与2024年972(现815)两道题目的映射情况815信…...
Qt之第三方库QXlsx使用(三)
Qt开发 系列文章 - QXlsx(三) 目录 前言 一、Qt开源库 二、QXlsx 1.QXlsx介绍 2.QXlsx下载 3.QXlsx移植 4.修改项目文件.pro 三、使用技巧 1.写入数据 2.读出数据 总结 前言 Qt第三方控件库是指非Qt官方提供的、用于扩展Qt应用程序功能的控件…...
第145场双周赛: 使数组的值全部为 K 的最少操作次数、破解锁的最少时间 Ⅰ、使两个整数相等的位数操作、统计最小公倍数图中的连通块数目
Q1、使数组的值全部为 K 的最少操作次数 1、题目描述 给你一个整数数组 nums 和一个整数 k 。 如果一个数组中所有 严格大于 h 的整数值都 相等 ,那么我们称整数 h 是 合法的 。 比方说,如果 nums [10, 8, 10, 8] ,那么 h 9 是一个 合法…...
AJAX三、XHR,基本使用,查询参数,数据提交,promise的三种状态,封装-简易axios-获取省份列表 / 获取地区列表 / 注册用户,天气预报
一、XMLHttpRequest基本使用 XMLHttpRequest(XHR)对象用于与服务器交互。 二、XMLHttpRequest-查询参数 语法: 用 & 符号分隔的键/值对列表 三、XMLHttpRequest-数据提交 核心步骤 : 1. 请求头 设置 Content-Type 2. 请求体 携带 符合要求 的数…...
Android期末复习题
1.如何搭建Android开发环境? 答案:搭建Android开发环境需要以下几个步骤: (1)下载和安装JDK (2)配置PATH环境变量 (3)下载和安装Android Studio (4)创建A…...
《蓝桥杯比赛规划》
一、比赛简介 蓝桥杯全国软件和信息技术专业人才大赛是一项具有较高影响力的编程竞赛,旨在促进软件和信息技术领域专业技术人才的培养,提升高校毕业生的就业竞争力。比赛涵盖了多个编程语言和专业方向,包括 C/C、Java、Python 等。 二、目标…...
三、Zookeeper
Zookeeper 三、Zookeeper3.1什么是zookeeper?3.2为什么需要zookeeper3.3Zookeeper基本运行流程3.4Zookeeper数据模型3.5Zookeeper主要角色3.6Zookeeper工作原理3.7Zookeeper节点数据操作流程三、Zookeeper 3.1什么是zookeeper? ZooKeeper是一个分布式的,开放源码的分布式应…...
Wireshark数据抓包分析之传输层协议(TCP协议)
根据实验环境,本实验的步骤如下: 1.在测试环境使用发包工具和Wireshark抓取TCP三次握手和四次断开的数据包。 2.详细分析TCP协议的三次握手以及四次断开。 任务描述:安装发包工具,并配置TCP客户端,服务端࿰…...
用ai做机器视觉的事情
cnn(卷积神经网络)是典型的ai算法。 我们已经cnn实现像机器视觉中形状匹配的功能,因为使用了roi抠图匹配,所以就叫做roicnn,以区分整图匹配。下面是roicnn笔记总结: 20241022,roicnn搞定&…...
LLM - 开源视觉多模态 LLaVA-CoT(o1) 深度推理模型 测试与源码 教程
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144304351 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 LLaVA-…...
qtcanpool 知 10:包管理雏形
文章目录 前言痛点转机雏形实践后语 前言 曾听闻:C/Qt 没有包管理器,开发起来太不方便。这是一个有过 node.js 开发经验的人对 Qt 的吐槽。 确实,像 python、golang、node.js 这些编程语言都有包管理器,给用户带来了极佳的开发体…...
[保姆式教程]使用目标检测模型YOLO11 OBB进行旋转目标检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)
之前写了一个基于YOLOv8做旋转目标检测(OBB)的文章,内容写得不够好,内容也有些杂乱无序。现如今YOLO已经更新到11了,数据集也集齐了无人机和卫星的农业大棚,所以这次就写一个基于YOLO11 OBB的农业大棚旋转检…...
MySQL 权限管理分配详解
MySQL 权限管理分配详解 MySQL权限系统的工作原理权限表的存取用户通过权限认证、进行权限分配的流程账号管理我们常用的授权all privileges到底有哪些权限呢?以及带来的安全隐患有哪些?创建账户的时候最好分配指定的权限,这样子安全也高管理…...
【期末速成】《微机原理与接口技术》知识点总结
文章目录 前言第一、二章 接口技术概述1. 接口的定义*2. 接口功能特点*3. 接口的分类*4. 接口中的传输信息及其组成5. 接口的编址与译码*6. CPU 与外设之间的数据传送方式* 第三章 总线1. 总线(BUS)的定义*2. 总线的标准3. 采用标准总线的优点*4. 总线的…...
华为、华三交换机纯Web下如何创关键VLANIF、操作STP参数
华为交换机WEB操作 使用的是真机S5735,目前主流的版本都适用(V1R5~V2R1的就不在列了,版本太老了,界面完全不一样,这里调试线接的console口,电脑的网络接在ETH口) 「模拟器、工具合集」复制整段内…...
【Elasticsearch】初始化默认字段及分词
1、添加分词插件 1)在线安装 执行命令 需要指定相同的版本 bin/elasticsearch-plugin.bat install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.24 2)离线安装 将安装包解压到 /plugins 目录下 安装包可以从对应的资源处下载 启动成…...
asdf-java配置
asdf list all java 无结果 asdf list all java 显示结果 No compatible versions available 解决方案 参考 执行 cp ~/.asdf/plugins/java/data/jdk-macosx-x86_64-ga.tsv $TMPDIR/asdf-java-$(whoami).cache/releases-macosx-x86_64.tsv 在此执行 asdf list all java 就可…...
2-2-18-14 QNX系统架构之 TCP/IP 网络
阅读前言 本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个…...
RabbitMQ延迟消息的实现
RabbitMQ延迟队列的实现 延迟消息是什么延迟消息的实现死信交换机代码实现 延迟消息插件 延迟消息是什么 延迟消息是将消息发送到MQ中,消费者不会立即收到消息,而是过一段时间之后才会收到消息,进行处理。在一些业务中,可以用到延…...
Docker 安装 中文版 GitLab
Docker 安装系列 安装GitLab、解决服务器内存不足问题、使用域名/IP地址访问项目 1、拉取 [rootTseng ~]# docker pull twang2218/gitlab-ce-zh:latest latest: Pulling from twang2218/gitlab-ce-zh 8ee29e426c26: Pull complete 6e83b260b73b: Pull complete e26b65fd11…...
Ubuntu22.04深度学习环境安装【Anaconda+Pycharm】
anaconda可以提供多个独立的虚拟环境,方便我们学习深度学习(比如复现论文); Pycharm编辑器可以高效的编写python代码,也是一个很不错的工具。 下面就记录下Ubuntu22.04的安装流程: 1.Anaconda安装 下载Ana…...
springboot整合canal
学习链接 Cannal项目地址 SpringBoot整合Canal实现数据同步到ElasticSearch - 原文地址 Spring Boot整合canal实现数据一致性解决方案解析-部署实战 Java:SpringBoot整合Canal实现数据同步 docker环境安装mysql、canal、elasticsearch,基于binlog利…...
8.在 Vue 3 中使用 OpenLayers 加载天地图示例(多种形式)
前言 OpenLayers 是一个强大的开源地图框架,可以轻松实现地图加载与操作。而 Vue 3 则通过 Composition API 提供了更加简洁和灵活的开发体验。本文将介绍如何在 Vue 3 中结合 OpenLayers 实现对天地图的加载,包括矢量地图、卫星地图以及中文和英文标记等…...
如何设置 Java 开发环境
如果你在这里,可能是想学习如何为 Java 开发设置环境。第一步是安装 SDK(软件开发工具包),它是一组由硬件和软件供应商提供的工具和库。 对于 Java,我们使用 JDK(Java 开发工具包)。JDK 是一组…...
MetaGPT 安装
1. 创建环境 conda create -n metagpt python3.10 && conda activate metagpt2. 可编辑方式安装 git clone --depth 1 https://github.com/geekan/MetaGPT.git cd MetaGPT pip install -e .3. 配置 metagpt --init-config运行命令,在C盘位置C:\Users\325…...
石岩湿地公园的停车场收费情况
周末石岩湿地公园停车场【967个】小车停车费封顶14元价格还行,我还记得2020年的时候湿地公园还是10元一天封顶。现在的收费情况也是可以的,尤其是周末停车比工作日停车便宜还是很得民心的哈。 车型 收费标准 小车 工作日 高峰时间8:00~20:00 首小时…...
v3账号密码登录随机图片验证码
安装插件 pnpm i identify --save图形验证码组件 <template><div class"s-canvas"><!-- 图形验证码的宽和高都来自于父组件的传值,若父组件没有传值,那么就按当前子组件的默认值进行渲染 --><canvas id"s-canvas&…...
mysql8 主从复制一直失败
问题描述: 开启同步后从服务器一直失败,报错如下: Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ANONYMOUS at source log …...