👨‍🎓博主主页:爪哇贡尘拾Miraitow
📆创作时间:🌴2022年2月7日 20:23-2:03🌴
📒内容介绍:常见集合的源码分析后续可能会有ArrayList等集合
📚参考资料:[小刘讲源码]
⏳简言以励:列位看官,且将新火试新茶,诗酒趁年华
📝内容较多有问题希望能够不吝赐教🙏
🎃 欢迎点赞 👍 收藏 ⭐留言 📝

在这里插入图片描述

1、什么是Hash

哈希:英文是Hash,也称为散列
基本原理就是把任意长度输入,转化为固定长度输出
这个映射的规则就是Hash算法,而原始数据映射的二进制串就是Hash值

2、Hash的特点

  • 1.从Hash值不可以反向推导出原始数据
  • 2.输入数据的微小变化会得到完全不同的Hash值相同的数据一定可以得到相同的值
  • 3.哈希算法的执行效率要高效,长的文本也能快速计算Hash值
  • 4.Hash算法的冲突概率小

由于Hash原理就是将输入空间映射成Hash空间,而Hash空间远远小于输入空间,根据抽屉原理,一定存在不同输出有相同的映射

抽屉原理

桌子上有10个苹果,将其放在9个抽屉里面,那必有一个抽屉不少于2个苹果

再比如

有五十个同学,但是只有二十个外号,每个同学都要有外号,那么必然有重复的外号(外号相当于hash的桶,学生的外号名字相当于hash值

3、HashMap原理讲解

HashMap的继承体系
在这里插入图片描述

HashMap继承了AbstractMap,实现了Cloneable接口、Serializable接口、Map<K,V>接口

Node的数据结构分析

final int hash;
final K key;
V value;
Node<K,V> next;

底层数据结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-De9PiqMp-1644236323789)(images/数组和链表-jdk8.png)]

put数据原理分析

在这里插入图片描述

在这里插入图片描述

什么是Hash碰撞

假如我有存储一个元素,发现其Key的Hash值还是1122,那么经过扰动之后,其位置还是2,所以此时,就有冲突,这个时候就要解决冲突。

解决Hash碰撞的方法

  • 开放寻址法
  • 拉链法 [HashMap就是使用了此方法]

什么是链化

在JDK1.7之前,假如数据量很大,那么碰撞的概率也很大,碰撞形成链表,就是链化此时,拉链法的链子就会很长,那么就会降低查找速度(七上八下,1.8之前是头插法,1.8以后是尾插法

所以在JDK1.8之后引入红黑树

HashMap的扩容原理

因为当数据表很多的时候,碰撞使得冲突和查找速度都上升,此时就要扩容

4、手撕源码

HashMap核心属性分析(threshold、loadFactor、size、modCount)

threshold:扩容阈值

loadFactor:负载因子

size:map实际的元素个数

modCount:map修改元素的次数,如删除和增加,但是对同一个位置进行修改value,不增加

常量分析

缺少table大小,默认初始化容量大小为16

  static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

table的最大长度

static final int MAXIMUM_CAPACITY = 1 << 30;

默认负载因子为0.75,不建议自己去设置,这都是科学家计算的

static final float DEFAULT_LOAD_FACTOR = 0.75f;

树化阈值

static final int TREEIFY_THRESHOLD = 8;

树降级为链表阈值

static final int UNTREEIFY_THRESHOLD = 6;

不是链表达到8就可以树化,而是元素达到64,并且链表达到8才会树化

static final int MIN_TREEIFY_CAPACITY = 64;

属性分析

哈希表

  transient Node<K,V>[] table;
  transient Set<Map.Entry<K,V>> entrySet;

当前hash表中元素个数

  transient int size;

当前hash表结构修改次数
(你插入元素或者减掉一个元素,注意,替换不是表结构修改,不会进行加减操作)

  transient int modCount;

扩容阈值,当前的哈希表超过阈值时,触发扩容
threshold=capacity * loadFactor
默认为16*0.75=12,也就元素个数大于12时扩容

  int threshold;

负载因子,一般不会改(0.75)

  final float loadFactor;

构造方法分析

一共有4个构造函数

1.有两个参数的构造方法(int initialCapacity, float loadFactor)

public HashMap(int initialCapacity, float loadFactor) {
//初始容量小于零就抛出异常对象if (initialCapacity < 0)throw new IllegalArgumentException("Illegal initial capacity: " +initialCapacity);//如果初始容量大于数组的最大容量,就把初始容量设置为最大容量if (initialCapacity > MAXIMUM_CAPACITY)initialCapacity = MAXIMUM_CAPACITY;//NaN 实际上就是 Not a Number的简称//0.0f/0.0f的值就是NaN,从数学角度说,0/0就是一种未确定。if (loadFactor <= 0 || Float.isNaN(loadFactor))throw new IllegalArgumentException("Illegal load factor: " +loadFactor);this.loadFactor = loadFactor;//initialCapacity之所以不直接赋值,是因为要保证这个数字是2的次方数this.threshold = tableSizeFor(initialCapacity);
}

我们来看 tableSizeFor 怎么实现的

作用:返回大于 cap 的最小 2 的 N 次方。例如说,cap = 10 时返回 16 ,cap = 28 时返回 32 ,并且这个数字一定是2的次方数
cap=10
n=10 -1=9;
0b1001 | 0b0100=>0b1101
0b1101 | 0b0011=>0b1111
0b1111 | 0b0000=>0b1111
0b1111 | 0b0000=>0b1111
0b1111 | 0b0000=>0b1111
ob1111=>转为十进制是15
return 16

那么刚开始为什么减一那?
如果没有减一的情况下
假设

cap=16
0b10000 | 0b01000 =>0b11000
0b11000 | 0b00100=>0b11110
0b11110 | 0b00001 =>0b11111
0b11111 | 0b00000=>0b11111
0b11111 | 0b00000=>0b11111
ob11111=>转换为十进制为31
return 32

我们传入的是16结果变成了32,显然不符合假设一个数为0001 1101 1100 => 0001 1111 1111+1 => 0010 0000 0000一定是2的次方数

  • 让cap-1再赋值给n的目的是另找到的目标值大于或等于原值。例如二进制1000,十进制数值为8。如果不对它减1而直接操作,将得到答案10000,即16。显然不是结果。减1后二进制为111,再进行操作则会得到原来的数值1000,即8。

  • HashMap里的MAXIMUM_CAPACITY是2的30次方。结合tableSizeFor()的实现,猜测设置原因如下:
    int的正数最大可达2的31-1次方,而没办法取到2的31次方。所以容量也无法达到2的31次方。又需要让容量满足2的幂次。所以设置为2的30次方

static final int tableSizeFor(int cap) {int n = cap - 1;n |= n >>> 1;n |= n >>> 2;n |= n >>> 4;n |= n >>> 8;n |= n >>> 16;return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;}
public HashMap(int initialCapacity) {this(initialCapacity, DEFAULT_LOAD_FACTOR);
}public HashMap() {this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
}   public HashMap(Map<? extends K, ? extends V> m) {this.loadFactor = DEFAULT_LOAD_FACTOR;putMapEntries(m, false);
}

核心知识点:为什么 table 的长度 一定是2的幂

  • 计算Hash值得算法,实际就是取模,hash%length

  • 计算机中直接求余效率不如位移运算源码中做了优化hash&(length-1)

  • 要想保证hash%length==hash&(length-1)

  • 那么length必须是2的n次方

HashMap put 方法分析 - putVal

public V put(K key, V value) {return putVal(hash(key), key, value, false, true);
}
// 扰动函数
// 作用:如何table比较短的时候,让key的hash值得高16位也参加路由运算
// 异或:相同为0,不同返回1// h = 0b 0010 0101 1010 1100 0011 1111 0010 1110// 0b 0010 0101 1010 1100 0011 1111 0010 1110 [h]
// ^
// 0b 0000 0000 0000 0000 0010 0101 1010 1100 [h >>> 16]
// => 0010 0101 1010 1100 0001 1010 1000 0010
// 在 table 还不是很长的情况下,让高16位也参与进来,为了减少冲突和碰撞
static final int hash(Object key) {int h;return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}
// put的 核心方法
// hash:key的hash值
// key:key
// value: value
// onlyIfAbsent:如果为true,则不要更改现有值
// evict:如果为false,则表处于创建模式。
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,boolean evict) {// tab:引用当前hashMap的散列表// p:当前散列表的元素// n:表示当前散列表的长度// i:表示路由寻址的结果Node<K,V>[] tab; Node<K,V> p; int n, i;// 延迟初始化逻辑,第一次调用 putVal 的时候会初始化hashMap对象中最耗费内存的散列表// 如果 table 为null,或者长度为0,就开始创建if ((tab = table) == null || (n = tab.length) == 0)// 第一次插入数据的时候才会初始化n = (tab = resize()).length;// 最简单的一种情况,寻址找到的桶位,刚好是 null 此时就直接赋值到计算的位置// tab 和 n 在上一个 if 赋值// 执行一次路由运算 (n - 1) & hash] 得到hash的地址// 如果 tab 中没有这个元素或者等于nullif ((p = tab[i = (n - 1) & hash]) == null)// 创建一个新的Node 就把 k-v 封装一个Node放在 tab的i位置tab[i] = newNode(hash, key, value, null);// 此时可能是数组、可能是链表、可能是红黑树else {// e:不为null的话,找到了一个与当前要插入的k-v一致的元素// k:表示临时的kNode<K,V> e; K k;// p:在另一个分支if中获得// 表示桶为中的该元素,与你当前插入的元素的key完全一致,后续进行替换操作if (p.hash == hash &&((k = p.key) == key || (key != null && key.equals(k))))e = p;// p:已经树化了else if (p instanceof TreeNode)e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);//是链表else {// 链表的头元素与要插入的key不一致,for (int binCount = 0; ; ++binCount) {// 如果到末尾了,就把p加到最后一个位置if ((e = p.next) == null) {p.next = newNode(hash, key, value, null);// 如果当前链表的大小 binCount 大于基准树化的值,就执行树化操作if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st// 树化操作treeifyBin(tab, hash);break;}// 如何 hash 相等 且key也相等,需要进行替换操作if (e.hash == hash &&((k = e.key) == key || (key != null && key.equals(k))))break;// 循环p = e;}}// 如果e不为null,找到老的值,返回if (e != null) { // existing mapping for keyV oldValue = e.value;if (!onlyIfAbsent || oldValue == null)// 把新的值覆写e.value = value;afterNodeAccess(e);return oldValue;}}//修改次数增加,替换Node元素替换不算++modCount;// 如果table大小大于阈值,就执行 resize(),进行扩容if (++size > threshold)resize();afterNodeInsertion(evict);return null;
}

HashMap resize 扩容方法分析 核心

// resize()  方法
// 为什么需要扩容?
// 当元素越来越多的时候,hashMap的查找速度就从O(1)升到O(n),导致链化严重,
// 为了解决冲突带来的查询效率的下降,因此需要扩容[扩容是一个很不好的动作]
final Node<K,V>[] resize() {// oldTab:引用扩容之前的哈希表Node<K,V>[] oldTab = table;// oldCap:表示扩容之前table数组的长度int oldCap = (oldTab == null) ? 0 : oldTab.length;// oldThr:表示扩容之前的阈值,触发本次扩容的预祝int oldThr = threshold;// newCap:扩容之后table数组的大小// newThr:扩容之后下次触发扩容的条件int newCap, newThr = 0;// 条件如果成立,说明hashMap中的散列表已经初始化过了,是一次正常的扩容if (oldCap > 0) {// 当前数组的长度已经大于 hashMap所能容纳的最大大小 就不在扩容,直接返回原数组// 设置扩容最大阈值为 int 的最大值if (oldCap >= MAXIMUM_CAPACITY) {threshold = Integer.MAX_VALUE;return oldTab;}// 新的table大小为源table的2倍// 通知扩容之后的newCap小于数组的最大值限制,其扩容之前的阈值为16// 这种情况下,则下一次的扩容的阈值,翻倍else if ((newCap = oldCap << 1) < MAXIMUM_CAPACITY &&oldCap >= DEFAULT_INITIAL_CAPACITY)// 扩容的阈值也变为原来的2倍newThr = oldThr << 1; // double threshold}// oldCap == 0 [说明hashMap中的散列表式null] // 1.new HashMap(initCap,loadFactor)// 2.new HashMap(intiCap)// 3.new HashMap(map) 并且Map有数据else if (oldThr > 0) // initial capacity was placed in thresholdnewCap = oldThr;// oldCap == 0 && oldThr == 0// new HashMap();的时候else {               // zero initial threshold signifies using defaultsnewCap = DEFAULT_INITIAL_CAPACITY; // 16newThr = (int)(DEFAULT_LOAD_FACTOR * DEFAULT_INITIAL_CAPACITY); //12}// newThr为0的时候,通过newCap和loadFactor计算出一个newThrif (newThr == 0) {float ft = (float)newCap * loadFactor;newThr = (newCap < MAXIMUM_CAPACITY && ft < (float)MAXIMUM_CAPACITY ?(int)ft : Integer.MAX_VALUE);}// 更新阈值为计算出来的 newThrthreshold = newThr;@SuppressWarnings({"rawtypes","unchecked"})// 创建一个很大的数组Node<K,V>[] newTab = (Node<K,V>[])new Node[newCap];// 然后更新 table 的引用table = newTab;// oldTab不为null,说明hashMap本次扩容之前,table不为nullif (oldTab != null) {// 迭代 一个一个位置去处理for (int j = 0; j < oldCap; ++j) {// e:当前的node节点Node<K,V> e;// 迭代桶节点,如果节点不为空,才需要计算// 但是桶里面的数据具体式哪种(单个数据、链表、树)不确定,需要继续判断if ((e = oldTab[j]) != null) {// 把原来的数组数据置空,等待GC回收,原来的数据已经存在e里面oldTab[j] = null;// 说明式单个元素数据,if (e.next == null)// 直接计算hash值放入即可newTab[e.hash & (newCap - 1)] = e;// 如果已经树化else if (e instanceof TreeNode)// 在红黑树部分讲解((TreeNode<K,V>)e).split(this, newTab, j, oldCap);// 如果是链表else { // preserve order// 桶位已经形成链表// 低位链表:存放在扩容之后的数组的下标的位置,与当前数组下标位置一致Node<K,V> loHead = null, loTail = null;// 高位链表:存放在扩容之后数组的下标位置,// 当前数组下标位置 + 扩容之前数组的长度Node<K,V> hiHead = null, hiTail = null;// 当前链表的一个元素Node<K,V> next;do {next = e.next;// hash -> .... 1 1111 // hash -> .... 0 1111 // 0b 1 0000if ((e.hash & oldCap) == 0) {if (loTail == null)loHead = e;elseloTail.next = e;loTail = e;}else {if (hiTail == null)hiHead = e;elsehiTail.next = e;hiTail = e;}} while ((e = next) != null);// 低位链表有数据if (loTail != null) {loTail.next = null;newTab[j] = loHead;}// 高位链表有数据if (hiTail != null) {hiTail.next = null;newTab[j + oldCap] = hiHead;}}}}}// 结束之后返回新的return newTab;
}

HashMap get 方法分析

// 获得一个方法
public V get(Object key) {Node<K,V> e;// 先调用 hash(key)计算hash值,然后调用 getNode方法return (e = getNode(hash(key), key)) == null ? null : e.value;
}// getNode方法
final Node<K,V> getNode(int hash, Object key) {// tab:引用当前hashMap的散列表// first:桶位中的头元素// e:临时node元素// n:table数组元素Node<K,V>[] tab; Node<K,V> first, e; int n; K k;// 首先判断 table 不是空且长度不为0,并且first部位nullif ((tab = table) != null && (n = tab.length) > 0 &&(first = tab[(n - 1) & hash]) != null) {// 对第一个first进行判断,如果hash值相等并且 key 相等,返回当前节点if (first.hash == hash && // always check first node((k = first.key) == key || (key != null && key.equals(k))))return first;// 如果first的下一个不为nullif ((e = first.next) != null) {// 如果是树,就调用树的查找方法if (first instanceof TreeNode)return ((TreeNode<K,V>)first).getTreeNode(hash, key);// 如果是链表,就循环进行判断do {if (e.hash == hash &&((k = e.key) == key || (key != null && key.equals(k))))return e;} while ((e = e.next) != null);}}// 都没有,就返回nullreturn null;
}

HashMap remove方法分析

// 移除元素的方法
public V remove(Object key) {Node<K,V> e;// 调用hash方法,获得哈希值,然后调用removeNodereturn (e = removeNode(hash(key), key, null, false, true)) == null ?null : e.value;
}// 核心方法 removeNode
// hash:hash值
// key:key
// value:value 如果matchValue则匹配的值,否则忽略
// matchValue:如果为true,则仅在值相等时删除
// movable:如果删除虚假不动其他节点
final Node<K,V> removeNode(int hash, Object key, Object value,boolean matchValue, boolean movable) {// tab:引用当前hashMap的散列表// p:当前node元素// n:表示散列表数组长度// index:表示寻址结果Node<K,V>[] tab; Node<K,V> p; int n, index;// 判断 table 是否为空,是否长度为0,且对应的hash值在数组里面存在,才继续向下走if ((tab = table) != null && (n = tab.length) > 0 &&(p = tab[index = (n - 1) & hash]) != null) {// 说明桶位是由数据的,需要进行查找操作,并且删除// node:查找到的结果// e:当前Node的下一个元素Node<K,V> node = null, e; K k; V v;// 判断头元素是不是要删除的元素,如果是就放进去nodeif (p.hash == hash &&((k = p.key) == key || (key != null && key.equals(k))))node = p;// 桶的第一个不是else if ((e = p.next) != null) {// 树化结构if (p instanceof TreeNode)// 调用树化的结果node = ((TreeNode<K,V>)p).getTreeNode(hash, key);else {// 链表结构 循环遍历得到结构do {if (e.hash == hash &&((k = e.key) == key ||(key != null && key.equals(k)))) {node = e;break;}p = e;} while ((e = e.next) != null);}}// 判断是否得到了目标要删除的节点if (node != null && (!matchValue || (v = node.value) == value ||(value != null && value.equals(v)))) {// 如果是树节点,调用树的删除操作if (node instanceof TreeNode)((TreeNode<K,V>)node).removeTreeNode(this, tab, movable);// 如果node = p 表示是第一个数据else if (node == p)// 更新地址为下一个数据,放到桶tab[index] = node.next;else// 如果node 不等于 p 那就直接指向链表的下一个元素地址p.next = node.next;// 修改次数增加++modCount;// 大小减1--size;afterNodeRemoval(node);// 返回删除的nodereturn node;}}// 如果都没有执行,那么就返回nullreturn null;
}

HashMap replace方法分析

// 根据 k 和 v 替换
@Override
public V replace(K key, V value) {Node<K,V> e;if ((e = getNode(hash(key), key)) != null) {V oldValue = e.value;e.value = value;afterNodeAccess(e);return oldValue;}return null;
}// 根据 k oldValue newValue 替换 
@Override
public boolean replace(K key, V oldValue, V newValue) {Node<K,V> e; V v;if ((e = getNode(hash(key), key)) != null &&((v = e.value) == oldValue || (v != null && v.equals(oldValue)))) {e.value = newValue;afterNodeAccess(e);return true;}return false;
}

5、HashMap小结

  • HashMap 默认容量为 16(1 << 4),每次超过阀值时,按照两倍大小进行自动扩容,所以容量总是 2^N 次方。并且,底层的 table 数组是延迟初始化,在首次添加 key-value 键值对才进行初始化。

  • HashMap 默认加载因子是 0.75 ,如果我们已知 HashMap 的大小,需要正确设置容量和加载因子。

  • HashMap 每个槽位在满足如下两个条件时,可以进行树化成红黑树,避免槽位是链表数据结构时,链表过长,导致查找性能过慢。

    1. 条件一,HashMap 的 table 数组大于等于 64 。
    2. 条件二,槽位链表长度大于等于 8 时。选择 8 作为阀值的原因是(泊松分布)概率不足千万分之一。
  • 在槽位的红黑树的节点数量小于等于 6时,会退化回链表。

  • HashMap 的查找和添加 key-value 键值对的平均时间复杂度为 O(1) 。

  • 对于槽位是链表的节点,平均时间复杂度为 O(k) 。其中 k 为链表长度。

  • 对于槽位是红黑树的节点,平均时间复杂度为 O(logk) 。其中 k 为红黑树节点数量。
    在这里插入图片描述

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. vue插槽总结

    一、认识插槽Slot 前面我们会通过props传递给组件一些数据&#xff0c;让组件来进行展示&#xff0c;但是为了让这个组件具备更强的通用性&#xff0c;我们不能将组件中的内容限制为固定的div、span等等这些元素&#xff0c;比如某种情况下我们使用组件&#xff0c;希望组件显示…...

    2024/4/20 12:37:11
  2. C Primer Plus 第9章(函数)

    目录1. 函数简介1.1 创建并使用简单函数1.2 分析程序1.3 函数参数1.4 定义带形式参数的函数1.5 调用带实际参数的函数1.6 黑盒视角1.7 使用 return 从函数中返回值1.8 函数类型1.9 所有的C函数皆平等2. ANSI C 函数原型与原书不同&#xff0c;自写3. 递归3.1 尾递归3.2 递归的优…...

    2024/4/20 2:36:12
  3. VMware Workstation Pro安装Ubuntu20.04必装

    发布者声明&#xff1a;以下内容整理自互联网&#xff08;包含但不限于CSDN&#xff09;&#xff0c;和《Ubuntu Linux操作系统》第2版|微课版人民邮电出版社 1. 第一次使用root&#xff0c;对root用户进行密码初始化&#xff1a; sudo passwd root 2.安装open-vm-tools&…...

    2024/4/19 15:02:23
  4. MySQL PostgreSQL 常用数据类型

    MySQL & PostgreSQL 常用数据类型MySQL & PostgreSQL常用数据类型数字类型整数类型定点数类型&#xff08;任意精度&#xff09;浮点数类型序数类型布尔类型字符串类型日期 / 时间类型JSON 类型位串类型JSON 类型示例创建表格查询 JSON 数据MySQLPostgreSQLMySQL &…...

    2024/4/13 12:06:50
  5. buu-[ACTF新生赛2020]easyre

    查看文件信息 32位&#xff0c;UPX脱壳 查看main函数 int __cdecl main(int argc, const char **argv, const char **envp) {char v4; // [esp12h] [ebp-2Eh]char v5; // [esp13h] [ebp-2Dh]char v6; // [esp14h] [ebp-2Ch]char v7; // [esp15h] [ebp-2Bh]char v8; // [esp16…...

    2024/4/20 0:04:10
  6. 跨应用的访问 contentprovider

    首先需要明确一点就是插入的位置还是这个应用的sqllite的数据库思路:provider 提供一个可以访问的uri,然后外部直接来访问,要是和内部提供的uri匹配上了。就直接返回某一个操作。首先写好提供者(包括代码 和 配置)下面是配置然后直接将需要的放在解析者的代码里面在provide…...

    2024/4/13 12:06:40
  7. CSP 202112-4 磁盘文件操作 25分

    #include <bits/stdc.h> using namespace std; const int MAX_SIZE1e710; int n,m,k; struct Node {int num;int pre;//0 不被占用 1 被占用int owner; }N[MAX_SIZE];int main() {std::ios::sync_with_stdio(false);cin>>n>>m>>k;for(int i1;i<m;i)…...

    2024/4/15 18:41:46
  8. 【机器学习QA】文本表示模型:有哪些文本表示模型?它们各有什么优缺点?

    文本表示模型&#xff1a;有哪些文本表示模型&#xff1f;它们各有什么优缺点&#xff1f;场景描述分析与解答内容来源场景描述 文本是一类非常重要的非结构化数据&#xff0c;如何表示文本数据一直是机器学习领域的一个重要研究方向。 知识点&#xff1a;词袋模型&#xff08…...

    2024/4/15 9:18:08
  9. 20. Converting Dotted Decimal to Prefix Notation

    20. Converting Dotted Decimal to Prefix Notation...

    2024/4/13 12:06:45
  10. Linux系统编程之我的学习笔记

    gcc(g++)的工作流程: 1 预处理:调用cpp的预处理器,do的工作是:去掉注释,展开头文件,宏替换 gcc -E test.c -o test.i 2 编译:gcc将源代码文件编译为汇编语言代码 gcc -S test.i -o test.s 3 汇编:as,将汇编语言代码编译为了二进制文件(目标代码) gcc -c…...

    2024/4/13 12:06:40
  11. 力扣1001——网格照明(哈希)

    解题思路 数据量很大&#xff0c;模拟实际场景不现实&#xff1b; 因为灯可以直接点亮其所在行列和对角线&#xff0c;所以可以用哈希存储哪些行列对角线有亮光&#xff1b; 总体分为三部分&#xff0c;1、统计所有亮光所在信息&#xff1b;2、对每次查询&#xff0c;看所在地…...

    2024/4/13 12:06:25
  12. 前端 盒子模型

    前端页面的每一个部分都可以看做成一个盒子模型&#xff0c;对于一个简单的页面来说&#xff0c;页面的每一个部分都可以简化的看成一个盒子模型&#xff0c;然后可以对盒子模型进行简单的操作。 盒子模型分为四个区 这四个区由内到外为&#xff1a; 内容区 填充区 边框区 外…...

    2024/4/7 22:01:30
  13. 嵌入式Linux软件开发自救指南

    文章目录前言打工的基本逻辑&#xff1a;生产者思维基本价值一、为什么选择嵌入式四个角度个人需求现有资源与长板职业优先级排序二、距离目标还有多远距离目标距离三、路线前言 为什么选择嵌入式&#xff0c;以及基于作为准备校招学生&#xff0c;如何进行准备才能在校招的时…...

    2024/4/7 22:01:29
  14. 数据结构: 散列表实现思路和实例

    前言 ★ 这里是小冷的博客 ✓ 优质技术好文见专栏 个人公众号&#xff0c;分享一些技术上的文章&#xff0c;以及遇到的坑 当前系列&#xff1a;数据结构系列 源代码 git 仓库 ‘ 数据结构代码地址 代码Git 仓库地址 目录前言哈希表哈希表的基本介绍google 上机题思路分析并画出…...

    2024/4/17 15:41:54
  15. 雷达具有数字化正交解调、数字脉冲处理、固定目标对消、动目标检测(MTD)、和恒虚警(CFAR)处理等功能

    %% 雷达系统仿真 %% % 发射信号为13位巴克码和线性调频混合调制的信号,线性调频的中心频率为30MHz, % 调频带宽为4MHz,每一位码宽为10微秒,发射信号的帧周期为1毫秒 % 该雷达具有数字化正交解调、数字脉冲处理、固定目标对消、动目标检测(MTD)、 % 和恒虚…...

    2024/4/13 12:06:45
  16. Android:Android消息机制整理

    文章目录前言一、Android消息机制的构成二、为什么只允许主线程对UI进行更新操作三、消息机制具体分析ThreadLocal原理分析MessageQueueLooperHandler主线程的消息循环总结前言 整理Android消息机制&#xff0c;帮助自己梳理Android消息机制的内容 一、Android消息机制的构成…...

    2024/4/22 8:41:00
  17. 重装Android Studio显示SDK installed(但是其实并没有)

    我刚开始只是win11的应用界面卸载&#xff0c;重装的时候到了下载SDK那一步就显示我已经installed&#xff0c;但是我电脑里确实没有installed&#xff0c;同时此问题还有一个特征&#xff1a;安装的时候不会问是否import user setting&#xff0c;直接跳过了&#xff0c;看来是…...

    2024/4/20 4:12:42
  18. linux内核那些事之buddy(2)

    Buddy相关API 继《linux内核那些事之buddy》&#xff0c;buddy实现主要位于mm\page_alloc.c文件中&#xff0c;对外提供了一系列API: API作用struct page * __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, …...

    2024/4/13 12:06:25
  19. 【技术书籍】那些年我翻过的Linux/网络类书籍

    Linux内核相关 Linux内核设计与实现&#xff08;LKD&#xff09;深入理解Linux内核深入Linux内核架构奔跑吧Linux内核LINUX内核修炼之道深入理解LINUX网络技术内幕追踪Linux TCP IP代码运行Linux内核中网络协议的设计与实现Linux内核源码剖析&#xff1a;TCP/IP实现 驱动相关…...

    2024/4/19 13:36:19
  20. 【无标题】OS安装经验

    ** OS安装经验 ** 作者&#xff1a;黄土&#xff1a; 2022年2月7日春节之前&#xff0c; 有一台从21世纪初期留下来的PC&#xff0c; 精英主板845PE-A800,2GB内存&#xff0c;硬盘不到80GB. 我用一块大硬盘和一条易驱线组成一个大的安装U盘&#xff0c; 俗称“USB HDD”. 从网…...

    2024/4/13 12:06:50

最新文章

  1. 美易官方:AI热潮“熄火”了?Meta Q1财报较差

    近期&#xff0c;随着Meta&#xff08;前Facebook&#xff09;发布了其2023年第一季度的财报&#xff0c;一场科技股的震荡在美股市场上演。曾经风光无限的AI热潮似乎出现了“熄火”的迹象&#xff0c;引发了市场的广泛关注和讨论。 Cresset Wealth Advisors首席投资官Jack Abl…...

    2024/4/25 12:31:01
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. AI小程序的创业方向:深度思考与逻辑引领

    随着人工智能技术的快速发展&#xff0c;AI小程序逐渐成为创业的新热点。在这个充满机遇与挑战的时代&#xff0c;我们有必要深入探讨AI小程序的创业方向&#xff0c;以把握未来的发展趋势。 一、目标市场定位 首先&#xff0c;我们要明确目标市场。针对不同的用户需求&#x…...

    2024/4/21 1:22:38
  4. 【C++】C++中的list

    一、介绍 官方给的 list的文档介绍 简单来说就是&#xff1a; list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中…...

    2024/4/22 17:51:44
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/25 11:51:20
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/23 13:30:22
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/23 13:28:06
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/24 18:16:28
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/23 13:27:44
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/19 11:57:53
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/23 13:29:53
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/23 13:27:22
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/23 13:28:42
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/23 22:01:21
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/23 13:29:23
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/25 0:00:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/25 4:19:21
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/19 11:59:23
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/19 11:59:44
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/24 16:38:05
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/23 13:28:14
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/23 13:27:51
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/23 13:27:19
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57