【Effective Objective-C】—— 块与大中枢派发
开发应用程序时,最糟糕的事莫过于程序因UI线程阻塞而挂起了,在iOS系统中,阻塞过久可能会使应用程序终止执行,所幸苹果公司以全新的方式设计了多线程,并且当前多线程的核心就是“块”与“大中枢派发”,“块”是一种可在C、C++及OC代码中使用的“词法闭包”,GCD是一种与块有关的技术,它提供了对线程的抽象,而这种抽象则基于“派发队列”。
块与GCD都是当前OC编程的基石,因此,必须理解其工作原理及功能。
第37条:理解“块”这一概念
块可以实现闭包,并且其是作为“扩展”而加入GCD编译器中的。
1.块的基础知识:
块与函数类似,只不过是直接定义在另一个函数里的,和定义它的那个函数共享同一个范围内的东西。块用“^”符号来表示,后边跟着一对花括号,括号里面是块的实现代码。例如:
^{//代码
}
块其实就是个值,而且自有其相关类型。与int、float或OC对象一样,也可以把块赋值给变量,然后像使用其他变量那样使用它。**块类型的语法与函数指针近似。**块的结构语法如下:
return_type (^block_name)(parameters)
例如:
int (^addBlock)(int a, int b) = ^(int a, int b){return a + b;
};
如果使用的话就是:
int add = addBlock(2, 5);
这个类似于函数中套一个函数的感觉,然后你可以在该函数中调用这个block,并且它还能捕获在它声明的范围内的所有变量。
默认情况下,为块所捕获的变量,是不可以在块里修改的,不过,声明变量时可以加上_block
修饰符,这样就可以在块内修改了。
例如:
_block NSIntger count = 0;
//下面是一个块
那么这个count
值就可以在块中改变了,这也是“内联块”的用法。
如果块所捕获的变量是对象类型,那么就会自动保留它。系统在释放这个块的时候,也会将其一并释放。这就引出了一个于块有关的重要问题。块本身可视为对象。并且块本身也和其他对象一样,有引用计数。
如果将块定义在OC类的实例方法中,那么除了可以访问类的所有实例变量之外,还可以使用self
变量。块总能修改实例变量,所以在声明时无需加_block
。不过,如果通过读取或写入操作捕获了实例变量,那么也会自动把self
变量一并捕获了,因为实例变量是与self
所指代的实例关联在一起的。也就是说,只要你在块中调用到了属性值,那么这个块就会捕获这个类本身也就是self。
然而一定要记住:self也是个对象,因而块在捕获它时也会将其保留。如果self所指代的那个对象同时也保留了块,那么这种情况通常就会导致“保留环”。
2.块的内部结构:
块本身也是对象,在存放块对象的内存区域中,首个变量是指向Class
对象的指针,该指针叫做isa
。其余内存里含有块对象正常运转所需的各种信息。块对象的内存布局:
在内存布局中,最重要的就是invoke
变量,这是个函数指针,指向块的实现代码。函数原型至少需要接受一个void*
型的参数,此参数代表块。
descriptor
变量是指向结构体的指针,每个块里都包含此结构体,其中声明里块对象的总体大小,还声明里copy
与dispose
这两个辅助函数所对应的函数指针。
块还会把它所捕获的所有变量都拷贝一份。这些拷贝放在descriptor
变量的后面,捕获了多少个变量,就要占据多少内存空间。请注意,拷贝的并不是对象本身,而是指向这些对象的指针变量。invoke
函数为何需要把块对象作为参数传进来呢? 原因就在于,执行块时,要从内存中把这些捕获到的变量读出来。
3.全局块、栈块及堆块:
定义块的时候,其所占的内存区域是分配在栈中的。这就是说,块只在定义它的那个范围内有效。像下面这种代码就可能有危险:
定义在if及else语句中的两个块都分配在栈内存中。编译器会给每个块分配好栈内存,然而等离开了相应的范围后,编译器有可能把分配给块的内存覆写掉。于是,这两个块只能保证在对应的if或else语句范围内有效。这样写出来的代码时而正确,时而错误。若编译器未覆写待执行的块,则程序照常运行,若覆写,则程序崩溃。通俗的说就是,因为你在if条件内定义的块,if执行完了之后可能就会把你的块回收了,然后你再在if条件之外使用就出错了。
为了解决这个问题,我们可以给块对象发送copy消息以拷贝之。这样的话,就可以把块从栈复制到堆了。并且拷贝后的块,可以在定义它的那个范围之外使用。
如果你使用的是手动管理引用计数,那么就记得用外块之后还需将其释放。
除了“栈块”和“堆块”之外,还有一类块叫做“全局块”。这种块不会捕捉任何状态(比如外围的变量),运行时也无须有状态来参与。块所使用的整个内存区域,在编译期已经完全确定了,因此,全局块可以声明在全局内存里,而不需要在每次用到的时候于栈中创建。另外,全局块的拷贝操作是个空操作,因为全局块绝不可能为系统所回收。这种块实际上相当于单例。下面就是个全局块:
void (^block)() = ^{NSLog(@"This is a block");
};
4.要点:
- 块是C、C++、OC中的词法闭包。
- 块可接受参数,也可返回值。
- 块可以分配在栈上或堆上,也可以是全局的。分配在栈上的块可拷贝到堆里,这样的话,就和标准的OC对象一样,具备引用计数了。
第38条:为常用的块类型创建typedef
每个块都具备其“固有类型”,因而可将其赋给适当类型的变量。这个类型由块所接受的参数及其返回值组成。
因为之前我们使用或者书写块的时候代码都十分的复杂,所以我们为了简化代码就用到了typedef
,就像这样:
typedef int (^EOCSomeBlock)(BOOL flag, int value);
这样就实现了对一个块的重命名,现在想要定义这个块就可以直接使用EOCSomeBlock
来定义,这个就相当于一个新的数据类型一样,它接受两个参数,返回一个int型的数据。
例如:
EOCSomeBlock block = ^(BOOL flag, int value) {//代码
};
这次代码就读起来顺畅多了:与定义其他变量时一样,变量类型在左边,变量名在右边。
当然其用处不止这点,当一个函数在接受参数的时候,其参数很多,我们就可以使用这种方法将方法签名中的参数类型写成一个词,那样就读起来顺口多了。
例如:
就可以写成:
这样写看上去简洁明了,易于理解,并且在我们想要更改其接收参数时也更加的方便,不易出错,我们只需要改变其typedef
中的定义的参数就好了,若是有些地方的参数没调整过来它就会对其进行警告,我们就可以清楚的知道了。
并且,若是有好几个方法的接收参数都一样,你也不能用一个替代了,你也得给每个方法都定义一个接收参数的别名,因为若是你都用同一个的话,修改了一个就等于说是将其都修改了,这样会对别的方法造成影响。
要点:
- 以typedef重新定义块类型,可令块变量用起来更加简单。
- 定义新类型时应遵从现有的命名习惯,勿使其名称与别的类型相冲突。
- 不妨为同一个块签名定义多个类型别名。如果要重构的代码使用了块类型的某个别名,那么只需要修改相应typedef中的块签名即可,无须改动其他typedef。
第39条:用handler块降低代码分散程度
为用户界面编码时,一种常用的范式就是“异步执行任务”。这种范式的好处在于:处理用户界面的显示及触摸操作所用的线程,不会因为要执行I/O或网络通信这类耗时的任务而阻塞。这个线程通常称为主线程。
某些情况下,如果应用程序在一定时间内无响应,那么就会自动终止。iOS系统上的应用程序就是如此,“系统监控器”在发现某个应用程序的主线程已经阻塞了一段时间之后,就会令其终止。
通常我们想在某任务执行完了之后再通知相关代码进行后续的任务就会用到各种传值,但是我们上面说了块的各种用法,在此我们就可以用到,我们将一个方法的方法签名改为一个块,那么我们是不是就可以通过这个块来达到我们想要的效果,就像这样:
这种方法和委托协议很像,但是可以以内联形式定义completion handler,以此方式来使用“网络数据获取器”,可令代码比原先易懂很多。
与使用委托模式的代码相比,用块写出来的代码显然更为整洁。但是委托模式又个缺点:如果类要分别使用多个获取器下载不同数据,那么就得在delegate回调方法里根据传入的获取器参数来切换,就像这样:
改用块来写的好处是:无须保存获取器,也无须在回调方法里切换。每个completion handler的业务逻辑,都是和相关的获取器对象一起来定义的:
并且使用这种写法还可以处理很多错误情况,这又分为两种办法。可以分别用两个处理程序来处理操作失败的情况和操作成功的情况。也可以把处理失败情况所需的代码,与处理正常情况所用的代码,都封装到同一个completion handler块里。例如:
这种API设计风格很好,由于成功和失败的情况要分别处理,所以调用此API的代码也就会按照逻辑,把对应成功和失败情况的代码分开来写,这将令代码更易读懂。而且,若有需要,还可以把处理失败情况或成功情况所用的代码省略。
而另一种是这样的:
这种方式需要在块代码中检测传入的error变量,而且要把逻辑代码都放在一处。这种写法的缺点是:由于全部逻辑都写在一起,所以会令块变得比较长,且比较复杂。然而只用一个块的写法也有好处,那就是更为灵活。
把成功情况和失败情况放在同一个块中还有一个优点:调用API的代码可能会在处理成功响应的过程中发现错误。
有时需要在相关事件点执行回调操作,这种情况也可以使用handler块。就比如说是下载应用的进度条。我们为其添加一个观察者,并且在其值发生改变的时候我们调用其中的块。
此处传入的NSOperationQueue参数就表示触发通知时用来执行块代码的那个队列。这是个“队列操作”,而非“底层GCD队列”,不过两者语义也相同。
要点:
- 在创建对象时,可以使用内联的handler块将相关的业务逻辑一并声明。
- 在有多个实例需要监控时,如果采用委托模式,那么经常需要根据传入的对象来切换,而若改用handler块来实现,则可以直接将块与相关对象放在一起。
- 设计API时如果用到了handler块,那么可以增加一个参数,使用调用者可以通过此参数来决定应该把块安排在哪个队列上执行。
第40条:用块引用其所属对象时不要出现保留环
使用块时,若不仔细思量,则很容易出现“保留环”。比如说下面的这段代码:
还有另一个类去引用他:
这两段代码看上去没什么问题,但是其中有个保留环,其情况是这样:
在EOCClass类中,那个start方法块中引用了_fetchedData
实例变量也就相当于这个块引用了这个类本身,因为想要获取到这个实例变量就的获取到这个类。
想要破解这个保留环其实也很简单,就让其中一处断裂就好了:
这种是三方的保留而造成的保留环,当然也有两方的保留而造成的保留环,如果completion handler块所引用的对象最终又引用了这个块本身,那么就会出现保留环。所以我们在书写这类代码的时候,一定要好好注意,或许你看不出来,但是它确实存在。
要点:
- 如果块所捕获的对象直接或间接的保留了块本身,那么就得当心保留环问题。
- 一定要找个适当的时机解除保留环,而不能把责任推给API的调用者。
第41条:多用派发队列 ,少用同步锁
在OC中,如果有多个线程要执行同一份代码,那么有时就会出现问题。这种情况下,通常要使用锁来实现某种同步机制。在GCD出现之前,有两种方法,第一种是采用内置的“同步块”。
这种写法会根据给定的对象,自动创建一个锁,并等待块中的代码执行完毕。执行到这段代码结尾处,锁就释放了。然而,滥用@synchronized(self)
则会降低代码效率,因为公用一个锁的那些同步块,都必须按顺序执行。若是在self对象上频繁加锁,那么程序可能要等另一段与此无关的代码执行完毕,才能继续执行当前代码,这样做其实并没有必要。
另一个方法是直接使用NSLock对象:
也可以使用NSRecursiveLock
这种“递归锁”,线程能过多次持有该锁,而不会出现死锁现象。
这两种方法都很好,不过也有其缺陷。比方说,在极端情况下,同步块会导致死锁,另外,其效率也不见得很高,而如果直接使用锁对象的话,一旦遇到死锁,就会非常麻烦。
代替方案就是使用GCD,它能以更加简单、更高效的形式为代码加锁。
因为刚才说了,滥用@synchronized(self)
会很危险,因为所有同步块都会彼此抢夺同一个锁。所以我们出现了一种简单而高效的办法来代替同步块或锁对象,那就是“串行同步队列”。用法如下:
此模式的思路是:把设置操作与获取操作都安排在序列化的队列里执行,这样的话,所有针对属性的访问操作就都同步了。但是这么写有个坏处:如果你测一下程序性能,那么可能会发现这种写法比原来的慢,因为执行异步派发时,需要拷贝块。若拷贝块所用的时间明显超过执行块所花的时间,则这种做法将比原来更慢。
多个获取方法可以并发执行,而获取方法与设置方法之间不能并发执行,利用这个特点,我们可以写出更快的代码来。这次我们使用并发队列。
像现在这样写代码,还无法正确实现同步。所有读取操作与写入操作都会在同一个队列上执行,不过由于是并发队列,所以读取与写入操作可以随时执行。而我们恰恰不想让这些操作随意执行。此问题用一个简单的GCD功能即可解决,他就是栅栏。下列函数可以向队列中派发块,将其作为栅栏使用:
在队列中,栅栏块必须单独执行,不能与其他块并行。这只对并发队列有意义,因为串行队列的块总是按顺序来执行的。并发队列如果接下来要处理的块是个栅栏块,那么就一直要等到当前所有并发块都执行完完毕,才会单独执行这个栅栏块。待栅栏块执行过后,再按正常方式继续向下处理。
因为获取和写入方法不能同步进行,所以上述的方法可以这样来写:
对获取方法使用并发队列,而对写入方法使用栅栏块。其用图来说明就是这样:
这样写来一定比之前的串行队列要快。注意:设置函数也可以改用同步的栅栏块来实现,那样做可能会更高效,其原因刚才也说明了。
要点:
- 派发队列可用来表述同步语义,这种做法要比使用@synchronized块或NSLock对象更简单。
- 将同步与异步派发结合起来,可以实现与普通加锁机制一样的同步行为,而这么做却不会阻塞执行异步派发的线程。
- 使用同步队列及栅栏块,可以令同步行为更加高效。
第42条:多用GCD,少用performSelector系列方法
OC是一门非常动态的语言,NSObject定义了几个方法,令开发者可以随意调用任何方法。这几个方法可以推迟执行方法调用,也可以指定运行方法所用的线程。但是现在还是少用的好。
其中最简单的是“performSelector:
”。该方法签名如下,它接受一个参数,就是要执行的那个选择子:
- (id)performSelector:(SEL)selector;
该方法与直接调用选择子等效。所以下面两行代码的执行效果相同:
这种方式看上去很鸡肋,但是若选择子是在运行期决定的,那么就能体现出这种方式的强大之处了。这就相当于在动态绑定之上再次使用动态绑定,就像下面这样:
这种方式极为灵活,还可以用来简化代码。还有一种用法,就是先把选择子保存起来,等某个事件发生之后再调用。不管哪种用法,编译器都不知道要执行的选择子是什么,这必须到了运行期才能确定。然而,使用此特性的代价是,如果在ARC下编译代码,那么编译器会发出如下警示信息:
因为编译器不知道要调用的选择子是什么,也就不了解其方法签名及返回值,甚至连有没有返回值都不知道,就不知道使用ARC分配多少空间。鉴于此,ARC采取了比较谨慎的做法,就是不添加释放操作。就是因为这个而导致的内存泄漏,因为方法在返回对象时可能已经将其保留了。所以我们通常不建议使用这个方法来访问程序中的方法。
并且这种方法还有许多延伸的方法,就像下面这些,但是还是不建议使用,因为其弊大于利,有很大的局限性。
比如上述的这两个其最多才能传递两个参数,那么你想传递更多的参数怎么办,并且由于其是id类型的参数,所以就只能传递对象,若是接收的是整数或者浮点数那还得转换又很麻烦。与之类似的还有很多但是都不建议使用因为他们都有局限性而且我们还可以找到更好的方法来替代。
就比如,延后执行可以用dispatch_after
来实现,在另一个线程上执行任务则可通过dispatch_sync
及dispatch_async
来实现。
要点:
- performSelector系列方法在内存管理方面容易有疏失。它无法确定将要执行的选择子具体是什么,因而ARC编译器也就无法插入适当的内存管理方法。
- performSelector系列方法所能处理的选择子太过局限了,选择子的返回值类型及发送给方法的参数个数都受到限制。
- 如果想把任务放在另一个线程上执行,那么最好不要用performSelector系列方法,而是应该把任务封装到块里,然后调用大中枢派发机制的相关方法来实现。
第43条:掌握GCD及操作队列的使用时机
在执行后台任务时,GCD
并不一定是最佳的方式。还有一种技术叫做NSOperationQueue
,它虽然与GCD
不同,但是却与之相关,开发者可以把操作以NSOperation
子类的形式放在队列中,而这些操作也能够并发执行。
这两者的诸多差别中,首先要注意:GCD是纯C的API,而操作队列则是OC的对象。在GCD中,任务用块来表示,而块是个轻量级的数据结构。与之相反,“操作”则是个更为重量级的OC对象。
使用NSOperation
及NSOperationQueue
的好处如下:
NSOperation
对象也有“线程优先级”,这决定了运行此操作的线程处在何种优先级上。用GCD
也可以实现此功能,而采用操作队列更简单,只需要设置一个属性。
总之,还是应该尽可能选用高层的API,只在确有必要时才求助于底层。但是还得因情况而议。
要点:
- 在解决多线程与任务管理问题时,派发队列并非唯一方案。
- 操作队列提供了一套高层的OC API,能实现纯GCD所具备的绝大部份功能,而且还能完成一些更为复杂的操作,那些操作若改用GCD来实现,则需另外编写代码。
第44条:通过Dispatch Group机制,根据系统资源状况来执行任务
dispatch group
是GCD的一项特性,能够把任务分组。调用者可以等待这组任务执行完毕,也可以在提供回调函数之后继续往下执行,这组任务完成时,调用者会得到通知。其中最重要的用法,就是把将要并发执行的多个任务合为一组,于是调用者就可以知道这些任务何时才能全部执行完毕。
下面这个函数可以创建dispatch group
:
dispatch_group_tdispatch_group_create();
想把任务编组,有两种方法。第一种是下面这个函数:
void dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block);
他是普通dispatch_async
函数的变体,比原来多一个参数,用于表示带执行块所归属的组。还有中办法能够指定任务所属的dispatch group
,那就是使用下面这一对函数:
void dispatch_group_enter(dispatch_group_t group);
void dispatch_group_leave(dispatch_group_t group);
前者能够使分组里正要执行的任务数递增,而后者则使之递减。由此可知,调用了dispatch_group_enter
以后,必须有与之对应的dispatch_group_leave
才行。这和引用计数相似。而在使用dispatch group
时,如果调用enter
之后,没有相应的leave
操作,那么这一组任务就永远执行不完。
下面这个函数可用于等待dispatch group
执行完毕:
long dispatch_group_wait(dispatch_group_t group, dispatch_time_t timeout);
此函数接受两个参数,一个是要等待的group
,另一个是代表等待时间的timeout
值。timeout
参数表示函数在等待dispatch group
执行完毕时,应该阻塞多久。如果执行dispatch group
所需的时间小于timeout
,则返回0,否则返回非0。此参数也可以取常量dispatch_time_forever
,这表示函数会一直等着dispatch group
执行完,而不会超时。
除了使用上面那个函数等待dispatch group
执行完毕之外,也可以换个方法,使用下列函数:
void dispatch_group_notify(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block);
与wait
函数略有不同的是:开发者可以向此函数传入块,等dispatch group
执行完毕之后,块会在特定的线程上执行。并且notify
回调时所选用的队列,完全应该根据具体情况来定。
为什么要“根据系统资源状况来执行任务”呢?
为了执行队列中的块,GCD会在适当的时机自动创建新线程或复用旧线程。如果使用并发队列,那么其中有可能会有多个线程,这也意味着多个块可以并发执行。在并发队列中,执行任务所用的并发线程数量,取决于各种因素,而GCD主要是根据系统资源状况来判定这些因素的。
我们想要遍历collection
,并在其每个元素上执行任务,而这也可以用另一个GCD函数来实现:
void dispatch_apply(size_t iterations, dispatch_queue_t queue, void(^block)(size_t));
此函数会将块反复执行一定的次数,每次传给块的参数都会递增,从0开始,直至“iterations - 1
”,其用法如下:
有一件事要注意:dispatch_apply
所用的队列可以是并发队列。如果采用并发队列,那么系统就可以根据资源状况来并行执行这些块了,这与使用dispatch group
的那段实例代码一样。
总之我们还是得灵活使用,不是学了一个就死用一种方法,我们要因情况而议,选择最好的办法。
要点:
- 一系列任务可归入一个dispatch group之中。开发者可以在这组任务执行完毕时获得通知。
- 通过dispatch group,可以在并发式派发队列里同时执行多项任务。此时GCD会根据系统资源状况来调度这些并发执行的任务。开发者若自己来实现此功能,则需编写大量代码。
第45条:使用dispatch_once来执行只需运行一次的线程安全代码
单例模式对我们来说都不陌生,常见的实现方式为:在类中编写名为sharedInstance
的方法,该方法只会返回全类共用的单例实例,而不会在每次调用时都创建新的实例。
但是这样写还有有争议的,不过GCD引入了一项特征,能使单例实现起来更为容易:
void dispatch_once(dispatch_once_t *token, dispatch_block_t block);
此函数接受类型为dispatch_once_t
的特殊函数,称为标记,此外还接受块参数。对于给定的标记来说,该函数抱枕相关的块必定会执行,且仅执行一次。首次调用该函数时,必然会执行块中的代码,最重要的一点在于,此操作完全是线程安全的。请注意,对于只需执行一次的块来说,每次调用函数时传入的标记都必须完全相同。因此,开发者通常将标记声明在static
或global
作用域里。
那么单例就可以这样写:
要点:
- 经常需要编写“只需执行一次的线程安全代码”。通过GCD所提供的dispatch_once函数,很容易就能实现此功能。
- 标记应该声明在static或global作用域中,这样的话,在把只需执行一次的块传给dispatch_once函数时,传进去的标记也是相同的。
第46条:不要使用dispatch_get_current_queue
使用GCD时,我们经常需要判断当前代码正在那个队列上执行, 我们会发现苹果给了我们这个函数:
dispatch_queue_t dispatch_get_current_queue();
此函数会返回当前正在执行代码的队列。但是我们最好还是不要使用,因为队列之间会形成一套层级体系,这意味着在某个队列中的块,会在其上级队列(“父队列”)里执行。层级里地位最高的那个队列总是“全局并发队列”。这样我们再进行检测的时候,他返回的其实并不是我们想要队列,而可能是其子队列,若对其进行条件的判断就有可能造成“死锁”。
要解决这个问题,最好的办法就是通过GCD所提供的功能来设定“队列特有数据”,此功能可以把任意数据以键值对的形式关联到队列里。最重要之处在于,假如根据指定键获取不到关联数据,那么系统就会沿着层级向上查找,知道找到数据或到达根队列为止。
void dispatch_queue_set_specific(dispatch_queue_t queue, const void *key, void *context, dispatch_function_t destructor);
此函数的首个参数表示待设置数据的队列,其后两个参数是键与值。键与值都是不透明的void指针。对于键来说,有个问题一定要注意:函数是按指针值来比较键的,而不是按照其内容。
函数最后一个参数是“析构函数”,对于给定的键来说,当队列所占内存为系所回收,或者有新的值与键相关联时,原有的值对象就会移除,而析构函数也会于此时运行。dispatch_function_t
类型的定义如下:
typedef void (*dispatch_function_t)(void*);
要点:
- dispatch_get_current_queue函数的行为常常与开发者所预期的不同。此函数已经废弃。只应做调试只用。
- 由于派发队列是按层级来组织的,所以无法单用某个队列对象来描述“当前队列”这一概念。
- dispatch_get_current_queue函数用于解决不可重入的代码所引发的死锁,然而能用此函数解决的问题,通常也能改用“队列特定数据”来解决。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Codeforces Global Round 19
B.这次比赛暴力写的多,没有想到正解,对于这种复杂的情况一定是有结论可以让题目变得简单的。对A来讲如果已经排了序,那么一定是no否则 说明存在一个点a[i] > a[j], i < j或者让a[i] < a[j] i > j对于第一种情况一定是YES…...
2024/4/28 5:14:32 - 重返天梯—L2-001 紧急救援 (25 分)
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的…...
2024/4/14 6:00:23 - 小鹿线前端
小鹿线前端研发部门 1.1 自研项目有 微信小程序:小鹿线前端学习平台:xuexiluxian.cn写简历平台前端博客和笔记平台1.2 研发部门人员配置 产品经理ui设计师web前端开发工程师java开发工程师小鹿线前端讲师团队 2.1 助教老师 2.2 讲师 小鹿线前端学管团…...
2024/4/13 5:04:05 - java学习笔记第五周(二)
目录 一、容器(二)——双例集合 1、Map接口介绍 1.1 Map接口特点 1.2 Map的常用方法 2、HashMap容器类 2.1 添加元素 2.2 get方法获取元素 2.3 并集操作 2.4 删除元素 2.5 判断key和value是否存在 3、TreeMap 3.1 元素自身实现比较规则 3.2 …...
2024/4/5 2:01:25 - 【长期更新】Arch Linux 个人配置记录
文章目录前言软件安装中文字体支持图形界面声音支持及其按键控制前言 本文跟 Arch Linux 类似,是“滚动更新”的,记录笔者根据个人习惯配置 Arch Linux 的过程。注意,由于大家更关注 Arch Linux 本身的安装过程,之后的配置因人而…...
2024/4/5 2:01:24 - Lua实现分析之string类型
一、概述 string是Lua的一种数据类型,它不同于普通的基本类型,为了节约内存,多个相同的短字符串会共用一个,因而需要管理string的引用情况,从而实现在不被用时,能正确GC。 二、实现细节 1、字符串分类 …...
2024/4/27 22:05:30 - 如何使用 Github 操作自动化您的存储库构建
如果您厌倦了手动构建和发布应用程序,那么可能是时候设置 CI/CD 管道了。Github Actions 使大多数项目的这个过程变得简单和免费,并且可以通过自动化应用程序的构建过程来节省您的时间。 什么是行动? Github Actions 是在云中运行的任务。它…...
2024/4/28 2:57:13 - 蓝博湾装修方案个人疑问整理_20220212
1. 厨房 1.1 厨房生活阳台窗子 我方图: 针对图中红线圈起来的这面窗子,好像是打不开的吧,我看设计图中窗子内外都会被柜子挡住,好像应该打不开吧。如果这个窗子确实是打不开的,此处设计是作为装饰作用吗?…...
2024/4/18 20:45:40 - 深度学习多任务分类小demo
今天突然好多人关注,也不知道是系统账号还是真粉丝,所以决定大晚上的发一个博客,嘿嘿嘿 数据集等我起床再说吧,晚安啦,嘿嘿嘿 这是我的demo项目结构,nets文件夹里面是自己搭建的网络模型: 训练…...
2024/4/24 0:31:27 - 二、Kali Linux 2 使用基础
一、Kali Linux 2 介绍与安装 1、Kali Linux 2 简介 Kali Linux 2是一个面向专业人士的渗透测试和安全审计的操作系统,它是由之前大名鼎鼎的Back Track系统发展而来。Back Track系统曾经是世界上非常优秀的渗透测试操作系统,取得了极大的成功。之后Off…...
2024/4/8 19:21:55 - 500强外企基恩士春招来了应届毕业生18w-22w
【职位】 销售工程师(具体工作职能详见官网扫码可了解更多岗位情况) 【福利】 第一年培训期100%发工资18-22w,第二年25-29w,第三年更多,自动化行业龙头,福利多多 1.六险一金 2.双休带薪 3.年假、法定节…...
2024/4/19 23:27:52 - Matlab读取fig格式图片的数据,重新画图
首先声明我的图片来源,我的图片是使用matlab的分类工具箱,产生的ROC图 为了是效果展示更好所以寻求将多个不同模型的ROC放到同一个图片里,所以需要读取出fig中的数据再重新画图。 首先使用openfig打开fig格式的 运行open代码会打开图窗&…...
2024/4/13 5:04:25 - 抽象思想:球球了ToT~快把Python import搞明白吧
python import的坑年年都有从未消停过 一来是看了网上好多讲解,讲的都没错也都能看懂,但大多都是流于形式、流于一种规则主义的介绍,没有触达正确理解import思想的灵魂 二来是很多排过坑的同学都在发牢骚吐槽python的import非常坑ÿ…...
2024/4/8 19:21:53 - c++进行数据离散化
题目链接:https://www.acwing.com/problem/content/804/ 核心stl语句: sort(alls.begin(),alls.end());alls.erase(unique(alls.begin(),alls.end()),alls.end());//https://www.acwing.com/problem/content/804/ #include<bits/stdc.h> using nam…...
2024/4/8 19:21:50 - 【已解决】PYTHON:An error occurred while installing package 问题解决办法
【已解决】python安装模块失败–cx_oracle 问题原因 今天在使用python读取数据库数据时,进行连接数据库操作,发现cx_Oracle模块没有安装,使用python自动安装oracle时报错:“ERROR conda.core.link:_execute_actions(337): An er…...
2024/4/13 5:05:00 - NOI Linux的使用系列-2019-10-28
NOI Linux NOI Linux_百度百科 NOI Linux 2.0发布,将于9月1日起正式启用! NOI Linux 2.0发布,将于9月1日起正式启用! 一、NOI Linux安装 1、NOI系列活动标准竞赛环境(2016年11月08日更新) http://www.noi.cn/newsview.html?id…...
2024/4/13 5:05:10 - 真正说透Redis五种数据结构
文章目录前言一、5种基本数据结构二、字符串String2.1、常用操作2.2、应用场景2.2.1、单值缓存(最常用)2.2.2、对象缓存2.2.3、分布式锁2.2.4、计数器三、哈希hash3.1、常用操作3.2、应用场景3.2.1、对象缓存3.2.2、 电商购物车四、列表list4.1、常用操作…...
2024/4/13 5:05:15 - 【214情人节】低调奢华有内涵的python程序猿撒狗粮的正确姿势(附源码)
目录 一. 效果演示 1. 原图-效果图对比 2. 看出两张图片的区别了吗? 二. 代码架构 三. 功能实现 3.1 图片处理 3.2 html 使用form表单,真心话和图片文件的布局 3.3 js 上传文件 3.4 服务端 python flask 四. 源码下载 《孟子.梁惠王下》【独乐…...
2024/4/13 5:05:05 - 【2022.2.14情人节】低调奢华有内涵的python程序猿撒狗粮的正确姿势(附源码)
《孟子.梁惠王下》【独乐乐不如众乐乐】 情人节就要到了,小伙伴们一起来皮一皮吧~ ,正如春晚大张伟所言:我们要做自己的气氛大王! 一. 效果演示 1. 先看原图 2. 再看效果图 3. 看出两张图片的区别了吗? 将效果图放大…...
2024/4/16 22:42:22 - [MySql]in(n)和int(1)
CREATE TABLE user ( id int(4) unsigned zerofill NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8mb4; int后面的数字不能表示字段的长度,int(num)一般加上zerofill,才有效果。 zerofill的作用一般可…...
2024/4/8 19:21:44
最新文章
- 移动端日志采集与分析最佳实践
前言 做为一名移动端开发者,深刻体会日志采集对工程师来说具有重要意义,遇到问题除了 debug 调试就是看日志了,通过看日志可以帮助我们了解应用程序运行状况、优化用户体验、保障数据安全依据,本文将介绍日志采集的重要性、移动端…...
2024/4/28 6:21:04 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - golang的引用和非引用总结
目录 概述 一、基本概念 指针类型(Pointer type) 非引用类型(值类型) 引用类型(Reference Types) 解引用(dereference) 二、引用类型和非引用类型的区别 三、golang数据类型…...
2024/4/26 23:10:32 - 开启 Keep-Alive 可能会导致http 请求偶发失败
大家好,我是蓝胖子,说起提高http的传输效率,很多人会开启http的Keep-Alive选项,这会http请求能够复用tcp连接,节省了握手的开销。但开启Keep-Alive真的没有问题吗?我们来细细分析下。 最大空闲时间造成请求…...
2024/4/23 4:15:19 - 整理的微信小程序日历(单选/多选/筛选)
一、日历横向多选,支持单日、双日、三日、工作日等选择 效果图 wxml文件 <view class"calendar"><view class"section"><view class"title flex-box"><button bindtap"past">上一页</button&…...
2024/4/26 15:51:28 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/28 3:28:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/28 1:22:35 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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