深度解析HashMap集合底层原理
前置知识#
==和equals的区别#
对于基本类型变量来说,只能使用 == ,因为基本类型的变量没有方法。使用==比较是值比较
对于引用类型的变量来说,==比较的两个引用对象的地址是否相等。所有类都是继承objcet类,而object类是equals方法比较的也是对象的地址是否相等,如果类没有重写equals方法,使用 == 和equals方法效果是一样的
为什么要重写equals和HashCode#
HashCode方法:底层采用C语言编写,根据对象地址转换为整数类型
如果两个对象的HashCode相等,对象的内容至不一定相等;hash碰撞的问题
如果使用equals方法比较两个对象内容值相等的情况下,那么hashcode的值也相等
因为equals默认情况下Object类采用==比较对象,那么比较的是内存地址是否相等,当数据类型只要不是基本类型,那么比较永远不会相等。
set集合存储的就是不重复的对象,底层就是hashmap,依据equals和hashcode进行判断
时间复杂度#
时间复杂度为O(n) 从头查询到尾部,查询多次
时间复杂度为O(1) 查询一次 比如根据数组下标查询
时间复杂度为O(logn) 平方查询 比如红黑树,
效率:O(1)>O(logn)>O(n)
(不带符号右移) >>>#
无符号右移就是右移之后,无论该数为正还是为负,右移之后左边都是补上0
无符号右移运算符和右移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移多少位补多少个0
15>>>2=0000 1111 右移两位=0000 0011=3
^异或运算#
相同为0,不同为1
2^3= 0010^0011=0001=1
&(与运算)#
00得0 11得1 01得0
2&3=0010&0011=0010=2
位移操作:1<<2=4,1左移两位为什么等于4#
这里的1是十进制,而计算机交流是用二进制,所以先要将1用二进制表示出来。
每一个符号(英文、数字或符号等)都会占用1Bytes的记录,每一个中文占2Byte
而一个1Bytes占8个bit,也就是8个二进制位
8位二进制数:28种不同状态 0000 0000 ~1111 1111=0~255=28=256
1的二进制表示0000 0001,然后进行位移操作。
位移操作向左边位移,后面空出来的补上0,越往左边越大,把0000 0001向左位移2位,变成了0000 0100,二进制0000 0100转化十进制所以为4,也可以说每左移一位是乘以2
8>>2?
0000 1000右移2位0000 0010,转化为10进制等于2
10>>2?
0000 1010右移2位0000 0010,转化为10进制等于2
1<<30?
0000 0001左移30位01000000 00000000 00000000 00000000,转化为10进制等于1073741824,也就是230
HashMap集合特点及源码分析(JDK1.8)#
public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable {
HashMap继承了AbstractMap
类,实现了Cloneable克隆接口、Serializable序列化接口、Map接口
特点:数组+链表+红黑树构成
HashMap重要的五大点#
1.集合初始化#
HashMap成员变量#
//默认初始化hashmap容量
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //2的4次幂 16
//hashmap最大容量1073741824
static final int MAXIMUM_CAPACITY = 1 << 30;//2的30次幂
//扩容因子 16*0.75=12 达到12就会进行扩容
static final float DEFAULT_LOAD_FACTOR = 0.75f;
//链表中存储元素的数量 > 8 时,会自动转换为红黑树
static final int TREEIFY_THRESHOLD = 8;
//删除元素时,如果一个红黑树中中存储元素数量 < 6 后,会自动转换为链表
static final int UNTREEIFY_THRESHOLD = 6;
//数组容量>64&链表长度>8 转为红黑树
static final int MIN_TREEIFY_CAPACITY = 64;//阙值,用于判断是否扩容,threshold=容量*扩容因子=16*0.75=12
int threshold;
//扩容因子实际大小
final float loadFactor;
//HashMap中元素的数量 transient表示不能被序列化
transient int size;
//集合修改次数 防止多线程篡改数据
transient int modCount;
//存储元素的数组 单向链表
transient Node<K,V>[] table;
HashMap内部数据结构#
链表
//单向链表 实现了Entry接口 由上面的数组构成了数组加链表的结构
static class Node<K,V> implements Map.Entry<K,V> {final int hash;final K key;V value;Node<K,V> next;//构造一个节点Node(int hash, K key, V value, Node<K,V> next) {this.hash = hash;this.key = key;this.value = value;this.next = next;}//基本方法public final K getKey() { return key; }public final V getValue() { return value; }public final String toString() { return key + "=" + value; }public final int hashCode() {return Objects.hashCode(key) ^ Objects.hashCode(value);}public final V setValue(V newValue) {V oldValue = value;value = newValue;return oldValue;}//比较两个Node是否相等public final boolean equals(Object o) {if (o == this)return true;if (o instanceof Map.Entry) {Map.Entry<?,?> e = (Map.Entry<?,?>)o;if (Objects.equals(key, e.getKey()) &&Objects.equals(value, e.getValue()))return true;}return false;}
}
红黑树
//红黑树结构概览
static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> {TreeNode<K,V> parent; // red-black tree linksTreeNode<K,V> left;//左子树TreeNode<K,V> right;//右子树TreeNode<K,V> prev; //boolean red;//是否红色TreeNode(int hash, K key, V val, Node<K,V> next) {super(hash, key, val, next);}//返回当前节点final TreeNode<K,V> root() {for (TreeNode<K,V> r = this, p;;) {if ((p = r.parent) == null)return r;r = p;}}
}
HashMap构造方法#
指定初始容量
构造一个具有默认初始容量 (16) 和默认负载因子 (0.75)的空HashMap
static final float DEFAULT_LOAD_FACTOR = 0.75f;
public HashMap() {this.loadFactor = DEFAULT_LOAD_FACTOR; //扩容因子0.75
}
指定填充比
构造一个具有指定初始容量和默认扩容因子 (0.75)的空HashMap
public HashMap(int initialCapacity) {this(initialCapacity, DEFAULT_LOAD_FACTOR);//初始容量 扩容因子默认0.75
}
public HashMap(int initialCapacity, float loadFactor) {//容量非法判断if (initialCapacity < 0)throw new IllegalArgumentException("Illegal initial capacity: " +initialCapacity);//是否大于最大容量 不允许超过最大容量if (initialCapacity > MAXIMUM_CAPACITY)initialCapacity = MAXIMUM_CAPACITY;//扩容因子非法判断if (loadFactor <= 0 || Float.isNaN(loadFactor))throw new IllegalArgumentException("Illegal load factor: " +loadFactor);this.loadFactor = loadFactor;//负载因子this.threshold = tableSizeFor(initialCapacity);
}//获得的是大于cap的最小的2的幂,例如10,10的最小的2的幂=16
static final int tableSizeFor(int cap) {int n = cap - 1;//n=9 0000 1001n |= n >>> 1;//|= 代表异或运算 先向右位移1位=0000 0100,0000 1001和0000 0100异或运算得到0000 1101n |= n >>> 2;//....以此类推n |= n >>> 4;n |= n >>> 8;n |= n >>> 16;//n<0返回1,否则n大于MAXIMUM_CAPACITY的话返回最大值,小于最大值返回n + 1,全1的情况+1一定变成1后面跟一堆0的情况,这样就确定了最终的值,当HashMap的size到达threshold这个阈值时会扩容return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
用来初始化的Map
使用与指定Map
相同的映射构造一个新的HashMap
public HashMap(Map<? extends K, ? extends V> m) {this.loadFactor = DEFAULT_LOAD_FACTOR;//默认负载因子0.75putMapEntries(m, false);
}
//将集合元素put到HashMap中
final void putMapEntries(Map<? extends K, ? extends V> m, boolean evict) {//获取元素大小int s = m.size();if (s > 0) {//如果存储元素的数组为空 说明这是刚构造的HashMap 那么就要为它指定最大容量if (table == null) { //根据阈值和Map大小 推算出最大容量,向上取整为了取整数float ft = ((float)s / loadFactor) + 1.0F;//判断容量是否超过最大容量 不超过就直接赋值int t = ((ft < (float)MAXIMUM_CAPACITY) ?(int)ft : MAXIMUM_CAPACITY);//如果容量大于阈值 if (t > threshold)//重新计算阈值threshold = tableSizeFor(t);}//数组已经初始化了else if (s > threshold)resize(); //先扩容// 循环putfor (Map.Entry<? extends K, ? extends V> e : m.entrySet()) {K key = e.getKey();V value = e.getValue();//可能会触发resizeputVal(hash(key), key, value, false, evict);}}
}
2.数据寻址Get#
根据key获取元素
public V get(Object key) {Node<K,V> e;//key的hash值 return (e = getNode(hash(key), key)) == null ? null : e.value;
}
详细方法
final Node<K,V> getNode(int hash, Object key) {Node<K,V>[] tab; Node<K,V> first, e; int n; K k;//如果table不等于null 数组不等于null first=赋值计算当前节点的hash值所在的数组下标位置if ((tab = table) != null && (n = tab.length) > 0 &&(first = tab[(n - 1) & hash]) != null) {//如果比较当前节点的和第一个节点 if (first.hash == hash &&((k = first.key) == key || (key != null && key.equals(k))))//返回第一个结点return first;//如果第一个节点的下一个节点不为nullif ((e = first.next) != null) {//判断是否为红黑树if (first instanceof TreeNode)//处理getTreeNode()方法搜索keyreturn ((TreeNode<K,V>)first).getTreeNode(hash, key);//是链表do {//遍历比较直到找到节点或者节点为null退出循环if (e.hash == hash &&((k = e.key) == key || (key != null && key.equals(k))))return e;} while ((e = e.next) != null);}}return null;}
3.数据存储Put#
将元素添加进HashMap
public V put(K key, V value) {return putVal(hash(key), key, value, false, true);
}
详细方法
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,boolean evict) {Node<K,V>[] tab; Node<K,V> p; //n表示table数组的长度 i表示key存放在哪个数组下标int n, i;//将全局table=tab判断是否为空 或者 tab长度为0情况下 对table进行扩容if ((tab = table) == null || (n = tab.length) == 0)//扩容 n=16n = (tab = resize()).length;//i = (n - 1) & hash 计算key对应的index值 tab[i]key在数组中是否存在 if ((p = tab[i = (n - 1) & hash]) == null)//如果key的index值没有发生冲突 tab[i] = newNode(hash, key, value, null);//key的index发生冲突了else {Node<K,V> e; K k;//如果hash和equals比较都相同 直接覆盖if (p.hash == hash &&((k = p.key) == key || (key != null && key.equals(k))))e = p;//如果当前是红黑树else if (p instanceof TreeNode)//追加到红黑树后面e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);//当前是链表else {//循环遍历链表for (int binCount = 0; ; ++binCount) {//如果链表为空 直接追加在next后面if ((e = p.next) == null) {p.next = newNode(hash, key, value, null);//如果链表长度binCount大于8 数组容量大于64if (binCount >= TREEIFY_THRESHOLD - 1) //把链表转换为红黑树treeifyBin(tab, hash);break;}//查询链表中是否存在该key,如果存在直接修改value值if (e.hash == hash &&((k = e.key) == key || (key != null && key.equals(k))))break;p = e;}}//真正给e赋值 将新的value覆盖为oldvalueif (e != null) { V oldValue = e.value;if (!onlyIfAbsent || oldValue == null)e.value = value;afterNodeAccess(e);return oldValue;}}//只有新增才会使modCount++ 修改不会 fastclass机制防止在做遍历的时候有集合修改类++modCount;//如果size>12 就会提前去扩容if (++size > threshold)resize();afterNodeInsertion(evict);return null;}
4.节点删除#
public V remove(Object key) {Node<K,V> e;return (e = removeNode(hash(key), key, null, false, true)) == null ?null : e.value;}
详细方法
//hash:key的hash值 key:要删除的键值对的key value:要删除的键值对的value
//matchValue 如果为true,则当key对应的键值对的值equals(value)为true时才删除;否则不关心value的值
//movable 删除后是否移动节点,如果为false,则不移动
final Node<K,V> removeNode(int hash, Object key, Object value,boolean matchValue, boolean movable) {Node<K,V>[] tab; Node<K,V> p; int n, index;//节点数组tab不为空、数组长度n大于0、根据hash定位到的节点对象pif ((tab = table) != null && (n = tab.length) > 0 &&(p = tab[index = (n - 1) & hash]) != null) {Node<K,V> node = null, e; K k; V v;//如果当前节点的键和key相等,那么当前节点就是要删除的节点,赋值给nodeif (p.hash == hash &&((k = p.key) == key || (key != null && key.equals(k))))node = p;//获取当前节点的下一个节点else if ((e = p.next) != null) {//如果是一个红黑树,那么调用getTreeNode方法从树结构中查找满足条件的节点if (p instanceof TreeNode)node = ((TreeNode<K,V>)p).getTreeNode(hash, key);//如果是链表else {//从头到尾逐个节点比对do {//e节点的键是否和key相等,e节点就是要删除的节点,赋值给node变量if (e.hash == hash &&((k = e.key) == key ||(key != null && key.equals(k)))) {node = e;break;}p = e;//p指向e,让p存储的永远下一次循环里e的父节点} while ((e = e.next) != null);}}//node不为空 找到了删除的节点 如果不需要对比value值或者需要对比value值但是value值也相等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节点就是首节点else if (node == p)//删除 把当前节点的下一个赋值给当前表索引tab[index] = node.next;//不是首节点,p是node的父节点else// 删除 父节点的下一个节点就是node的下一个节点 p.next = node.next;++modCount;//HashMap的修改次数递增--size;//HashMap的元素个数afterNodeRemoval(node);//保留的重写方法 无效果return node;//返回删除结果}}return null;}
5.扩容原理#
JDK1.7 HashMap中扩容机制resize()#
void resize(int newCapacity) {Entry[] oldTable = table;int oldCapacity = oldTable.length;//如果旧容量已经达到了最大,将阈值设置为最大值,与1.8相同if (oldCapacity == MAXIMUM_CAPACITY) {threshold = Integer.MAX_VALUE;return;}//创建新哈希表Entry[] newTable = new Entry[newCapacity];//将旧表的数据转移到新的哈希表transfer(newTable, initHashSeedAsNeeded(newCapacity));table = newTable;//更新阈值threshold = (int)Math.min(newCapacity * loadFactor, MAXIMUM_CAPACITY + 1);}void transfer(Entry[] newTable, boolean rehash) {int newCapacity = newTable.length;//遍历原来数组中所有的链表for (Entry<K,V> e : table) {//判断每个下标对应的链表存放是否为空while(null != e) {//这里两个多线程环境下都拿到 e.next可能会有死循环问题Entry<K,V> next = e.next;//是否需要重新计算hash值if (rehash) {e.hash = null == e.key ? 0 : hash(e.key);}//得到新表中的索引int i = indexFor(e.hash, newCapacity);//将新节点作为头节点添加到桶中e.next = newTable[i];newTable[i] = e;e = next;}}}
多线程环境下扩容造成死循环的分析过程
for (Entry<K,V> e : table) {while(null != e) {Entry<K,V> next = e.next;if (rehash) {e.hash = null == e.key ? 0 : hash(e.key);}int i = indexFor(e.hash, newCapacity);e.next = newTable[i];newTable[i] = e;e = next;}}
因为是采用头插法,会导致整个链表顺序颠倒,多线程环境下遍历table这就容易导致死循环,因为操纵的同一个e对象
在多线程同时扩容的情况下,线程一抢先获得CPU资源,而线程二被挂起,此时它们拿到的数据都是e=a;next=c;线程一率先执行把key计算好了并放入newTable了
这时候线程二又被唤醒,因为线程之间不是共享的,所以此时newTable也为空,需要重新给里面赋值,但是e变量是可以被共享的。
1、线程二第一次循环还是之前拿到的数据e=a;next=c
,此时newTable还为空
// e=a e.next=c
Entry<K,V> next = e.next;
//1
int i = indexFor(e.hash, newCapacity);
//e.next=null
e.next = newTable[i];
//数组1位置第一个元素赋值为 a
newTable[i] = e;
//e=c
e = next;
2、线程二第二次循环
第二次循环获取e的数据,因为e的之前被线程一修改过变为d->c->
// e=c e.next=a
Entry<K,V> next = e.next;
//1
int i = indexFor(e.hash, newCapacity);
//e.next=null
e.next = newTable[i];
//数组1位置赋值为 c
newTable[i] = e;
//e=a
e = next;
因为e的之前被线程一修改过变为d->c->a,所以c.next等于线程一里面的值,c.next=a
3、线程二第三次循环
//e=a; e.next=a.next=null
Entry<K,V> next = e.next;
//1
int i = indexFor(e.hash, newCapacity);
//此时newTable[i]=a->c e.next=a.next a.next=c->a 出现死循环
e.next = newTable[i];
//数组1位置赋值为 a
newTable[i] = e;
//e=null
e = next;
此时进入环形引用,无限循环中导致CPU使用率飙升
解决办法
单线程下没有不会有问题,多线程下采用ConCurrentHashMap
JDK1.8 HashMap中扩容机制resize()#
final Node<K,V>[] resize() {Node<K,V>[] oldTab = table;//如果原来的table=null, 则为HashMap的初始化, 生成空table返回即可int oldCap = (oldTab == null) ? 0 : oldTab.length;//hashmap下一次扩容的阈值int oldThr = threshold;//记录新的容量和新的下一次扩容大小int newCap, newThr = 0;//大于0说明之前HashMap的数组不是空的 if (oldCap > 0) {// 再对数组进行检测 如果大于最大容量2的30次幂 直接返回if (oldCap >= MAXIMUM_CAPACITY) {threshold = Integer.MAX_VALUE;return oldTab;}//否者进行扩容为之前的二倍基于右移 newCap是oldCap长度的2倍else if ((newCap = oldCap << 1) < MAXIMUM_CAPACITY &&oldCap >= DEFAULT_INITIAL_CAPACITY)//下一次提前扩容的数量newThr = oldThr << 1;}//阈值大于0 说明集合已存在 赋值给newCapelse if (oldThr > 0) newCap = oldThr;//如果等于0 说明刚初始化 newCap=0.75 newThr=新扩容的阈值=0.75*默认容量大小else { newCap = DEFAULT_INITIAL_CAPACITY;newThr = (int)(DEFAULT_LOAD_FACTOR * DEFAULT_INITIAL_CAPACITY);}//如果下一次提前扩容的数量==0if (newThr == 0) {//新阈值=新容量*负载因子float ft = (float)newCap * loadFactor;//新数组小于最大容量 并且阈值小于最大容量 newThr = (newCap < MAXIMUM_CAPACITY && ft < (float)MAXIMUM_CAPACITY ?(int)ft : Integer.MAX_VALUE);}//下一次扩容的阈值threshold = newThr;@SuppressWarnings({"rawtypes","unchecked"})//HashMap里面新的扩容容量Node<K,V>[] newTab = (Node<K,V>[])new Node[newCap];table = newTab;//如果原表不为空,把原表中数据移动到新表中if (oldTab != null) {//遍历原来的列表for (int j = 0; j < oldCap; ++j) {Node<K,V> e;//判断每个数组里面是否有链表 有的话用一个链表e存起来if ((e = oldTab[j]) != null) {//然后将原来的链表赋值为null 能避免死循环oldTab[j] = null;//下一个节点为空 说明只包含一个元素 if (e.next == null)//计算e在新table中的位置,放入其中newTab[e.hash & (newCap - 1)] = e;//判断当前node是否是红黑树else if (e instanceof TreeNode)((TreeNode<K,V>)e).split(this, newTab, j, oldCap);//链表情况下else { //hashmap扩容会把原来的链表拆分成 两个链表//低位链表的头尾Node<K,V> loHead = null, loTail = null;//高位链表的头尾Node<K,V> hiHead = null, hiTail = null;Node<K,V> next;//循环把链表拆分 放到两个链表里面do {next = e.next;//散列下标不变的情况 oldCap=16 if ((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;}//放在新表j+oldCap位置if (hiTail != null) {hiTail.next = null;newTab[j + oldCap] = hiHead;}}}}}return newTab;}
HashMap1.8将链表通过运算拆封成两个链表存放到新的table中
HashMap面试题#
HashMap什么时候会转换为红黑树#
数组容量大于64并且链表长度大于8时
HashMap为什么要引进红黑树,为了解决什么问题?#
链表查询时间复杂度为O(n),查询效率太低了,引用红黑树查询效率可以变为O(logN)
HashMap的长度为什么必须是2的次幂?#
这样长度一定是偶数,在计算index下标的时候(n-1)&hash,这样(n-1)就会是奇数,奇数&hash值才会减小冲突。n取 2 的整数次幂,是为了使不同 hash 值发生碰撞的概率较小,这样就能使元素在哈希表中均匀地散列
如何避免HashMap内存溢出问题#
因为没有重写hashcode和equals和方法,底层默认用==比较内存地址,就会导致new出多个对象,重写之后每次比较都会是同一个对象,会做覆盖。
HashMap根据key查询的时间复杂度#
如果key没有产生冲突,时间复杂度为O(1),一次就能查到
如果key产生冲突链表存放为O(n),红黑树存放为O(logn)
HashMapKey为null存放在什么位置#
第0个位置
int index = k == null ? 0 : k.hashCode() % objects.length;
HashMap底层是采用单链表还是双链表#
单向链表
HashMap底层是有序存放的吗#
单向链表存放无序散列,会将所有链表和红黑树都遍历,效率非常低
LinkedHashMap 和 TreeMap底层如何实现有序的#
原理:将每个index中的链表实现关联,效率比HashMap要低
缓存淘汰算法底层实现原理LinkedHashMap
Redis如果缓存满的情况下如何清理?
LUR算法:清理最近少用的key
方案1:对每个key记录使用次数,然后排序再删除 效率非常低
方案2:基于LinkedHashMap有序集合实现 访问key的时候就会将key存到链表最后的位置
插入顺序:先添加的在前面,后添加的在后面。修改操作不影响顺序
执行get/put操作后,其对应的键值对会移动到链表末尾,所以最末尾的是最近访问的,最开始的是最久没有被访问的,这就是访问顺序。
其中参数accessOrder就是用来指定是否按访问顺序,如果为true,就是访问顺序。
为什么HashMap不使用取模运算#
k.hashcode()%entrys.length取模会导致key冲突概率非常大
就会导致变为链表O(n)或者红黑树O(logn),需要降低Hash冲突概率,均匀的放在数组的每个下标的位置
求下标i=(n-1)&hash,为什么(n-1)变成了奇数#
扩容默认是偶数,2的n次幂。如果是偶数&(与运算)hash,index冲突概率非常大,会使数据分布不均
所以需要变成奇数
HashMap如何降低Hash冲突#
hash函数计算i=(n-1)&hash,通过奇数余hash值能够降低hash值发生冲突的概率
加载因子为什么是0.75而不是1#
如果加载因子越大(1),空间利用率比较高16个位置都填满了,这样index冲突概率比较大
如果加载因子越小(0.1),达到0.1就扩容那么空间利用率越小,能存放的位置更多,这样index冲突概率越小
空间和时间上的平衡点:0.75
统计学概率:泊松分布是统计学和概率学常见的离散概率分布
Hashap存放1W条数据怎么样效率最高#
hashmap容量=(需要存储的元素个数/扩容因子)+1=(10000/0.75)+1=13334
目的是减少底层扩容的次数,如果没有设置初始容量大小,hashmap需要进行7次扩容,严重影响性能
Hashmap1.7和Hashmap1.8的区别#
Hashmap1.7基于数组+链表实现头插法,写法简单 但是有多线程死循环问题
Hashmap1.8基于数组+链表+红黑树实现尾插法,解决了多线程死循环问题
能够降低key对应的index的冲突概率,提高查询率
原来的链表使用与运算hash&原来table长度,拆分成两个链表放到新数组中,能够将链表长度缩短,提高查询效率
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- UOS/Deepin配置PaddlePaddle环境、独立Nvidia显卡教程
文章目录前言:切换回集成驱动:卸载系统显卡驱动:禁用noveau驱动安装N卡驱动:使用apt安装:(简单,可能有bug,建议用下一个方法)使用run安装:(稳定&a…...
2024/4/26 23:27:23 - 王倩兮金碧山水作品《绿水青山就是金山银山》
王倩兮金碧山水作品《绿水青山就是金山银山》 王倩兮1995年在中央美术学院举办《王倩兮画展》。著有《王倩兮画集》,出版跨入21世纪中国艺术家精品欣赏《王本诚王倩兮父女画集》。...
2024/5/8 15:25:54 - Java 计算这套系统最多能拦截多少导弹
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能 高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶…...
2024/4/24 15:41:18 - 负数在计算机中如何表示,计算机中负数为什么用补码表示?
转载一篇文章,留下来学习,加深下印象。问:负数在计算机中如何表示?举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢? 很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,在8位机中,规定每个字节的最高…...
2024/5/2 12:05:49 - 通过javap命令分析java汇编指令
一、javap命令简述 javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。 当然这些信息中,有些信息(如本…...
2024/4/24 15:41:17 - 打卡第八天(素数筛选)
和英雄哥一起光天化日学算法 204. 计数质数 今日的题目又遇见了熟悉的TLE 统计所有小于非负整数 n 的质数的数量。 示例 1: 输入:n 10输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 采用暴力方法,判…...
2024/4/24 15:23:56 - 2020年Java程序员请先把这几项硬技能熟悉掌握,再想着跳槽拿高薪
1、JAVA并发编程 对于一个 Java 程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一。因为并发编程是 Java 语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,更为考验一个程序员的内功。 2、Jav…...
2024/5/8 13:44:38 - 代码笔记《Variational Prototyping-Encoder: One-Shot Learning with Prototypical Images》
文章目录0. 准备1. 数据2. 模型3.训练模型训练损失函数优化器4.[score_NN](https://github.com/mibastro/VPE/blob/b5e86da58d47ef76fa90b4eedb466011dccb161a/code/main_train_val_test.py#L168)函数计算模型准确度官方代码 https://github.com/mibastro/VPE0. 准备 数据集 在…...
2024/5/8 13:35:58 - VICANDO六条命令
sudo apt install libxcb-xinerama0 libpcre2-16-0sudo apt install python2.7 python python-requests python-psutilsudo usermod -a -G dialout <username>在这里插入代码片...
2024/4/24 15:23:54 - 含有一个量词的命题的否定
1、全程量词的否定 2、存在量词的否定 3、关键量词的否定 链接:https://max.book118.com/html/2021/0609/7166044061003131.shtm 链接:https://zhuanlan.zhihu.com/p/369247791...
2024/4/24 15:23:53 - Spring的事务管理及应用
事务是用来做什么的? 主要是对数据库进行事务管理,spring的事务主要是用来管理spring所加载的ORM(Hibernate、Mybatis、MybatisPlus……)框架。 1、Transactional(这里是对事务的一些描述属性)标识 2、sp…...
2024/4/24 15:23:51 - vue3+vite在vite中配置跨域
在vite.config.js中配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path;// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],base: "./",//打包路径resolve: {alias: {: path.resolve(__…...
2024/4/24 15:23:50 - C# .Net 移动外部程序的窗口相关的函数
移动外部程序的窗口相关的函数, Find [DllImport("user32.dll")]public static extern int FindWindow(string lpClassName, string lpWindowName);[DllImport("user32.dll")]public static extern int GetTopWindow();[DllImport("user32.dll")…...
2024/4/24 15:23:56 - pytorch测试loss的简易方法
import torch import torch.nn as nnmodel = nn.Linear(10, 1) criterion = nn.BCEWithLogitsLoss()x = torch.randn(16, 10) y...
2024/4/24 15:41:14 - 机器视觉软件开发
简单回顾一下:第一段内容:界面库、算法库、编译器、插件的选择与配置;软件架构;界面架构;数据结构;线程分配。第二阶段内容:绘图模块;相机模块;通信模块;图像…...
2024/5/8 19:06:56 - 悟空CRM (基于jfinal+vue+ElementUI的前后端分离CRM系统)
悟空CRM9.0(JAVA版) 悟空软件长期为企业提供企业管理软件(CRM/HRM/OA/ERP等)的研发、实施、营销、咨询、培训、服务于一体的信息化服务。悟空软件以高科技为起点,以技术为核心、以完善的售后服务为后盾,秉承稳固与发展、求实与创新的精神,已为国内外上千家企业提供服务。 …...
2024/4/24 15:41:20 - 【LeetCode解题报告】《算法基础007_素数判定》- Java
目录一、866. 回文素数1.题目2.分析3.代码二、剑指 Offer 49.丑数1.题目2.分析3.代码一、866. 回文素数 1.题目 866. 回文素数 求出大于或等于 N 的最小回文素数。 回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。 …...
2024/4/24 15:41:11 - 腾讯云分布式数据库技术分享
目前国内分布式数据库背景: 1.数据爆发增长:大数据时代,万物互联,业务数据量爆发增长,传统服务器读、写、存储,等遇到多方面压力过大。 2. 扩展时效性:传统数据库进行高性能硬件的升级扩展时&a…...
2024/4/24 5:08:25 - 最详细的拼多多anti-token||anti_content算法分析过程(一)
文章目录前言一、正文开始1.寻找包含anti-token参数的文件2.寻找文件中设置anti-token参数的位置3.js调试查看参数在哪里生成前言 很多写爬虫的小伙伴在这个参数上犯愁了,像我自己常用的python来说,虽然有selenium去操作浏览器,但是效率和问…...
2024/4/24 15:41:16 - 下载并安装Redis教程
安装Redis 一、下载Redis 官网下载地址(Linux版本):http://www.redis.cn/download.html Windows版本下载地址:https://github.com/microsoftarchive/redis/tags 最新版本为3.2,下载最新版本的,现在电脑…...
2024/4/24 15:41:08
最新文章
- 【算法】动态规划之DP问题(5.10更新完)
前言: 本系列是看的B站董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 树塔-记忆化搜索 特点(前提):从上向下的累加和是不能重复使用的,从下向上的累加和是可以重…...
2024/5/8 22:45:44 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 开启 Keep-Alive 可能会导致http 请求偶发失败
大家好,我是蓝胖子,说起提高http的传输效率,很多人会开启http的Keep-Alive选项,这会http请求能够复用tcp连接,节省了握手的开销。但开启Keep-Alive真的没有问题吗?我们来细细分析下。 最大空闲时间造成请求…...
2024/5/5 19:08:29 - 3d representation的一些基本概念
顶点(Vertex):三维空间中的一个点,可以有多个属性,如位置坐标、颜色、纹理坐标和法线向量。它是构建三维几何形状的基本单元。 边(Edge):连接两个顶点形成的直线段,它定…...
2024/5/8 5:12:31 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/7 14:25:14 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) 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 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在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