近日,据国外媒体报道,电动汽车厂商特斯拉的股价本周一再次大涨,延续上周4个交易日连续大涨的势头,CEO埃隆·马斯克的身价也因此而增至463亿美元,比马云和拼多多创始人黄峥均高出了31亿美元。
/ 前言 /

EventBus大家都很熟悉了,各种实现方式也是层出不穷,然而,作为有追求的程序员们,永远在不停的造轮子,毕竟,在程序员的眼中,至今,没有哪个轮子看上去是完美无暇的。

因此,作为有追求的程序员中的一员,我也想假装很权威的站出来,然后无所畏惧的从远古时期讲讲事件总线的来龙去脉。有兴趣的小伙伴可以搬个椅子听我白话一番。也许可以给你带来不一样的视野。

/ 什么是EventBus /

1) 要搞清楚什么是事件总线,我们先了解一下什么叫总线:

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。

其实总线一词来源于计算机组成原理,计算机总线是一组能为多个部件分时共享的信息传送线,用来连接多个部件并为之提供信息交换通路。总线不仅是一组信号线,从广义上讲,总线是一组传送线路及相关的总线协议。

总而言之,在计算机中用于连接各种功能部件并在它们之间传送数据的公用线路或通路,我们称之为总线。用现实生活打比方,如果把人当作需要传输的数据,总线就和日常生活中的公交车一样,公交车翻译成Bus,看来很符合实际啊。

2) 在总线上传输的数据分很多种,根据用途可以分为以下几种:

数据总线(Data Bus):在CPU与RAM之间来回传送需要处理或是需要储存的数据。
地址总线(Address Bus):用来指定在RAM(Random Access Memory)之中储存的数据的地址。
控制总线(Control Bus):将微处理器控制单元(Control Unit)的信号,传送到周边设备。
扩展总线(Expansion Bus):外部设备和计算机主机进行数据通信的总线,例如ISA总线,PCI总线。
局部总线(Local Bus):取代更高速数据传输的扩展总线。

其实上面的总线都是实际物理存在的概念,而事件本身也是信息的一种形式,为了理解方便,在软件开发领域,大家便把,在多个模块间,为事件提供传输通道的组件或者说库,称之为事件总线,也可以称之为消息总线。

/ 为什么要使用事件总线 /

搞清楚事件总线的定义之后,我们来分析一下,为什么我们需要使用事件总线:

在软件开发中,为了软件前期开发的高效,中期合作的顺畅,后期维护的便利,架构师们会施展浑身解数,比如运用面向对象思想,面向对象六大原则(单一、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则),以及传说中的23种设计模式,等花里胡哨的技术,尽量把软件架构设计得看上去很完美,于是产生了处理各种逻辑的模块,比如我们熟知的界面层、数据逻辑层等,各层内部也存在处理不同逻辑的组件,面对这些完美的架构设计,这么多的模块和组件为了相互之间的交互,必定会涉及到数据传递。

但是有人会说了,在没有总线的情况下,我们也是可以进行数据传递的,比如参数传递,事件回调等。我们知道,事件总线涉及三个要素:事件源、订阅者、通道。

当一个模块处理逻辑时会产生事件,我们称这个模块为事件源。
有的模块等待事件的产生,然后去执行特定的任务,我们称这个模块为订阅者。
维护这些事件源和订阅者的关系的组件我们称之为通道,也就是总线。

想象一下,如果没有一个通道管理,事件源并不想知道谁会关心自己产生的事件,订阅者也不想操心是谁产生的事件,因为同样一个事件可能有N个模块会产生,也可能会有M个模块会订阅,但每个模块都只希望聚焦于自己的逻辑,如果要通过回调或者其他方式去管理,对谁来说都是一个灾难。因此,引入一个和平使者第三方:总线,是面向对象原则的使用,也是很好的一种设计,可以做到更好的解藕。
在这里插入图片描述
可以看到,如上图所示,无论是作为发布事件的组件,还是订阅事件的组件,在总线的帮助下,都可以很好的进行解藕。

插播说明:我们发现发布-订阅模式包含生产-消费者模式,也包含观察-被观察者模式,其中还有中介者模式,其实,我们常说的23种设计模式,大部分时候并不是单独存在的,那只是最小设计模式单元,为了便于理解,以上图为参考画出如下两种模式,对比一下你就明白了,这些模式之间的微妙关系。
在这里插入图片描述
/ EventBus常见实现方式 /

结合上一章节对事件总线的了解,我们知道,事件总线必不可缺的元素就是事件,另一个必备点就是,当有新的事件时可以通知到关心的模块,不然其他模块总要隔三差五的来询问有没有事件,那样效率也太低了吧。

所以事件总线的订阅和发布是逃不了了,观察者模式也是板上钉钉的了,为了后面更顺畅,在说明常见事件总线实现方式之前,我们还得补充一个小知识:(觉得长的这块也可以略过)

要实现事件总线,就涉及到事件(信息)的流转分发,因此,在此之前我们还应该聊一聊信息流转方式,而信息流转又分为进程内流转和进程间流转。

进程内流转又分为单线程和多线程。

单线程数据流转其实就是参数传递,值传递或者引用传递。如函数调用,以及注册回调函数。多线程之间数据流转,其实就是多个线程在操作同一个资源,但是操作的的动作不同。如,一个线程对资源进行写的操作,一个线程对资源进行读的操作。因为数据在同一个进程中都可以访问(不考虑私域变量),这个时候考虑的不是数据的流转,而是同步和互斥问题。

进程间流转也就是我们常说的进程间通信(IPC,InterProcess Communication)方式。而IPC方式一般有如下方式:说明:可以用于进程间通信的方式,同一个进程内自然也是可以,只是杀鸡焉用牛刀。

管道( pipe )

管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

有名管道 (namedpipe)

有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

信号量(semophore)

信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

消息队列(messagequeue)

消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

信号 (signal)

信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

共享内存(shared memory )

共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

套接字(socket)

套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同设备及其间的进程通信。

Binder

Android优化的跨进程通信方式,更高效的数据传输方式。AIDL、BroadCast、AMS等本质都用到了Binder。

了解了信息的流转方式后,我们再来看看常见的事件总线是怎么实现的吧!

1、直接使用注册回调方式实现最简单的观察者模式,由被观察者统一管理注册的观察者,事件发生时通知所有的观察者。

优点:简单直接,适合部分场景。

缺点:无法跨线程,更无法跨进程,容易造成内存泄露,要注意注册(register)和解注册(unregister)配对使用,没有生命周期管理等。

2、使用系统提供的广播机制实现消息事件的订阅和发布。

优点:支持跨进程,适合多进程事件总线

缺点:如果使用非应用内广播(Local Broadcast),可能造成安全性问题,而且效率不高,建议少用或者不用,且要注意注册(register)和解注册(unregister)配对使用,没有生命周期管理等。

3、GreenRobot提供的EventBus库利用Handler机制,系统的Message等技术,实现的跨线程通信,是现在大家用得最多的一个事件总线,也是大家公认的EventBus。

优点:可继承、优先级、粘滞,使用简单

缺点:事件分发是通过注解函数的参数类型决定的,这就导致了当接受者过多或相同参数时很难理清消息流。

4、RxBus是基于RxJava实现的一个消息总线,其实网上有很多实现方式,因为核心还是依赖与RxJava,所以实现都大同小异,有兴趣可以自己去查查。

优点:如果不考虑RxJava的代码,RxBus代码简单,是搭配RxJava的天然利器。

缺点:性能依赖于RxJava,方法调用栈相对来说比较深。

5、LiveEventBus其实也算是依赖于其他库或者组件发展起来的一种消息总线,目前实现方式也比较杂,各有千秋。

优点:天然的生命周期感知能力,粘性事件,跨线程能力。原生LiveData的良好扩展。

缺点:为了解决粘性问题,有各种反射或者侵入性比较强的解决方式。

综上所见,可能还有其他方式实现事件总线,可以看到各有优缺点,其实也没有说谁是最好的实现,存在即合理,每种方式都有自己的生存空间,合适即合理,没有最好的,只有最合适的。

/ LiveData简介 /

上面巴拉巴拉了那么多,其实就是想从一个大局方向分析一下事件总线的来龙去脉,也为下面用LiveData实现事件总线做一个伏笔。

虽然市面上有很多事件总线的实现方式,但是基于简约原则,少即是多,越少变数越安全的理念,能不引入新的第三方时,我尽量使用原生实现。这个带来的好处有几个:

减小应用的体积。
减少引入的不稳定因素,第三方库随时有可能停止更新,随时可能被原生排斥。
杀鸡不用牛刀,用最合适的方式解决问题。
管理方便,统一总体架构。
深入思考,学会在现有环境解决现有问题。

那么,什么是LiveData呢?虽然很多人都很熟悉了,但是这里还是本着尽量不让一个人落下的原则,还是介绍一下:

LiveData是一种可观察的数据存储器类。与常规的可观察类不同,LiveData具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。

生命周期感知能力,是不是听上去很高级,我是觉得很高级,像拥有超能力一样。那么这种超能能力又有什么优点呢?

确保界面符合数据状态

LiveData 遵循观察者模式。当生命周期状态发生变化时,LiveData 会通知 Observer 对象。您可以整合代码以在这些 Observer 对象中更新界面。观察者可以在每次发生更改时更新界面,而不是在每次应用数据发生更改时更新界面。

不会发生内存泄露

观察者会绑定到 Lifecycle对象,并在其关联的生命周期遭到销毁后进行自我清理。

不会因 Activity 停止而导致崩溃

如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。

不再需要手动处理生命周期

界面组件只是观察相关数据,不会停止或恢复观察。LiveData 将自动管理所有这些操作,因为它在观察时可以感知相关的生命周期状态变化。

数据始终保持最新状态

如果生命周期变为非活跃状态,它会在再次变为活跃状态时接收最新的数据。例如,曾经在后台的 Activity 会在返回前台后立即接收最新的数据。

适当的配置更改

如果由于配置更改(如设备旋转)而重新创建了 Activity 或 Fragment,它会立即接收最新的可用数据。

共享资源

您可以使用单一实例模式扩展 LiveData对象以封装系统服务,以便在应用中共享它们。LiveData 对象连接到系统服务一次,然后需要相应资源的任何观察者只需观察 LiveData 对象。

看了上面这些描述,是不是和我一样觉得LiveData很高级?下面我们就开始把这高级的东西用起来吧!

/ 用LiveData实现简单的LiveEventBus /

话不多说,直接上代码:

import androidx.lifecycle.MutableLiveData;import java.util.HashMap;
import java.util.Map;/*** Created by cody.yi. on 2020/6/9.* LiveEventBus*/
public class LiveEventBus {public static <T> MutableLiveData<T> getDefault(String key, Class<T> clz) {return ready().with(key, clz);}private final Map<String, MutableLiveData<Object>> bus;private LiveEventBus() {bus = new HashMap<>();}private static class InstanceHolder {static final LiveEventBus INSTANCE = new LiveEventBus();}private static LiveEventBus ready() {return LiveEventBus.InstanceHolder.INSTANCE;}@SuppressWarnings("unchecked")private <T> MutableLiveData<T> with(String key, Class<T> clz) {if (!bus.containsKey(key)) {MutableLiveData<Object> liveData = new MutableLiveData<>();bus.put(key, liveData);}return (MutableLiveData<T>) bus.get(key);}
}

使用步骤

发送数据

LiveEventBus.getDefault("Event1",String.class).setValue("推送数据1");或者在非主线程时使用LiveEventBus.getDefault("Event1",String.class).postValue("推送数据1");

监听数据

LiveEventBus.getDefault("Event1",String.class).observe(this, new Observer<String>() {@Overridepublic void onChanged(final String event) {Toast.makeText(BusDemoActivity.this, "监听到数据 -> " + event, Toast.LENGTH_SHORT).show();}});

简单两步实现了事件总线,而且使用简单,不需要手动注册反注册操作。LiveData具有的优势它都有,是不是很香?

/ 简单LiveEventBus包含的问题 /

其实简单需求,上面已经够用了,但是看了LiveData的源码就会发现,其实还有几个小瑕疵,在某些特殊情况下会有点问题,下面先逐一分析问题,然后统一给出最终的解决方案。

问题一、因为LiveData机制,默认所有消息都是粘性事件

也就是说,无论什么时候开始监听数据变化,之前发送的数据也会被观察者收到,这在有些场景其实是OK的,但是有些时候就有点不合逻辑了。比如我们做一个价格监听的事件,用户预定了一个商品,希望降价的时候提示用户,如果是粘性事件,就有可能之前的价格变化也会提示用户,这种时候粘性事件就是多余的。
另一种场景就很适合粘性事件,比如我们记录登录状态,或者用户信息,无论我何时进入新页面,都可以把最后一次用户信息变化回调给我,这样还可以一定程度上减少全局变量。

解决方案网上也有很多:

比如美团大佬用的反射方式,还有包侵入方式修改或者获取LiveData的包可见字段方式,还有使用字段记录是否粘性方式(以上各个方案的具体实现可以去参考各位大佬的文章,如有不同看法欢迎讨论)。

其实当初看了美团大佬的反射方式,虽然学到了很多,但是,对于反射,我不是很满意,但是也给大佬提了建议-传送门,好像大佬也没有时间改,本着程序员爱折腾的本性,我自己实现了一套更优雅的方式,当然,也是仁者见仁,智者见智了,至少我看来是优雅的。实现完后自己项目中用了很长时间,后来机缘巧合看了别人的分享,也做了一下对比,还是觉得自己的比较优雅,考虑原因有以下几点。

1、反射是官方不提倡的,因此也随时有可能无效,而且版本兼容也是问题,侵入性强。
2、包可见侵入也是不符合面向对象原则的,人家设置包可见就是不想别人去动里面的东西。不是我的我不动,暂且算是程序员的洁癖吧。
3、第三种方式是最近看到的,看了一下逻辑,明显强依赖用户的使用方式,很容易失效。
4、侵入性强的方式对混淆有特殊要求,很容易因为混淆配置问题出错。

问题二、post方式有可能丢失事件

其实看一下LiveData的源码就可以发现,postValue方法做了一个小优化,当数据变更太快时,会选择行的丢掉之前还没有来得急发送的数据,其实如果只是用于数据监听,这个优化其实是很好的设计,但是用在事件总线的时候就是一个小坑了。

private final Runnable mPostValueRunnable = new Runnable() {@Overridepublic void run() {Object newValue;synchronized (mDataLock) {newValue = mPendingData;// 缓存里的值已经被发送,被发送了就回到未设置状态mPendingData = NOT_SET;}setValue((T) newValue);}};protected void postValue(T value) {boolean postTask;synchronized (mDataLock) {// 缓存里面是否还有值已被发送postTask = mPendingData == NOT_SET;mPendingData = value;}if (!postTask) {//就是这块返回,导致并不是每个数据都会被执行return;}ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);}

其实这个问题,我们可以自己把postValue重写一下就可以了。

问题三、关心事件发送是否在主线程

LiveData本身提供了两个方法来更新数据,setValue和postValue,在主线程的时候使用setValue,其他线程使用postValue,作为消息总线,其实可以统一封装成post方法,在方法里判断是在什么线程。

问题四、事件名称随意写,容易出错

GreenRobot的EventBus是使用类类型作为事件的区分,而我们这种使用字符串来指定事件名称其实很容易因为写错一个大小写,或者一个字母而导致收不到事件,因此,可以使用统一管理的方式或者去掉手工书写的方式,比如APT技术自动生成事件进行管理。

问题五、事件无法做到分组,统一打开或关闭事件总线

比如有老业务突然要下线,以前发送的事件都要取消,这个时候按照业务分组的消息就可以很灵活了,可以直接把相关业务的事件分组关闭,这样其他地方都不需要修改,什么时候需要打开了也可以打开进行操作,另一种情况,不同业务可能会有相同的消息,比如操作成功消息,大家都叫操作成功,如果按照业务来区分,也是一个不错的选择。
在我的设计里,我把不同业务场景或者分组叫(Group)。

问题六、无法实现跨进程

因为LiveData本身是单进程数据,不支持跨进程,考虑到跨进程场景比较少,我并没有做支持,如果业务需要,其实我们可以用上面说到的Android的跨进程方式做一个桥接,比如说AIDL,从而实现LiveData的跨进程通信。新的版本已经做了支持,使用了AIDL和messenger分别实现了一套。为了大家使用方便,项目也做了抽取,传送门:ElegantBus

/ 设计思路以及部分代码 /

1、通过包装类自己管理注册序号(源码通过版本管理),解决粘性问题。
2、实现自己的post方式,统一判断当前所在线程,调用合适的方式。
3、通过定义事件Event和范围EventGroup,给事件定义含义以及数据类型,然后使用APT技术自动生成需要使用的事件类。
4、提供统一调用方式,也提供简单测试方式,支持扩展。
5、进程间消息总线扩展,使用AIDL和Messenger两种实现方式。

事件值包裹类:

final class ValueWrapper<T> {// 每个被观察的事件数据都有一个序号,只有产生的事件数据在观察者加入之后才通知到观察者// 即事件数据序号要大于观察者序号final int sequence;@NonNullfinalT value;ValueWrapper(@NonNull T value, int sequence) {this.sequence = sequence;this.value = value;}
}

观察者包裹类:

public abstract class ObserverWrapper<T> {// 每个观察者都记录自己序号,只有在进入观察状态之后产生的数据才通知到观察者int sequence;Observer<ValueWrapper<T>> observer;
}

LiveData包裹类:

/*** Created by xu.yi. on 2019/3/31.* 和lifecycle绑定的事件总线* 每添加一个observer,LiveEventWrapper 的序列号增加1,并赋值给新加的observer,* 每次消息更新使用目前的序列号进行请求,持有更小的序列号才需要获取变更通知。* <p>* 解决会收到注册前发送的消息更新问题*/
@SuppressWarnings("unused")
public class LiveEventWrapper<T> {private int mSequence = 0;private final MutableLiveData<ValueWrapper<T>> mMutableLiveData;public LiveEventWrapper() {mMutableLiveData = new MutableLiveData<>();}/*** 如果在多线程中调用,保留每一个值* 无需关心调用线程,只要确保在相同进程中就可以** @param value 需要更新的值*/public void post(@NonNull T value) {checkThread(() -> setValue(value));}/*** 设置监听之前发送的消息不可以接收到* 重写 observer 的函数 isSticky ,返回true,可以实现粘性事件** @param owner           生命周期拥有者* @param observerWrapper 观察者包装类*/public void observe(@NonNull LifecycleOwner owner, @NonNull ObserverWrapper<T> observerWrapper) {observerWrapper.sequence = observerWrapper.isSticky() ? -1 : mSequence++;checkThread(() -> mMutableLiveData.observe(owner, filterObserver(observerWrapper)));}/*** 是否是在主线程** @return 是主线程*/private boolean isMainThread() {return Looper.getMainLooper().getThread() == Thread.currentThread();}/*** 检查线程并执行不同的操作** @param runnable 可运行的一段代码*/private void checkThread(Runnable runnable) {if (isMainThread()) {runnable.run();} else {// 主线程中观察BusFactory.ready().getMainHandler().post(runnable);}}
}

从包装类中过滤出原始观察者:

   /*** 从包装类中过滤出原始观察者** @param observerWrapper 包装类* @return 原始观察者*/@NonNullprivate Observer<ValueWrapper<T>> filterObserver(@NonNull final ObserverWrapper<T> observerWrapper) {if (observerWrapper.observer != null) {return observerWrapper.observer;}return observerWrapper.observer = valueWrapper -> {// 产生的事件序号要大于观察者序号才被通知事件变化if (valueWrapper != null && valueWrapper.sequence > observerWrapper.sequence) {if (observerWrapper.uiThread()) {observerWrapper.onChanged(valueWrapper.value);} else {BusFactory.ready().getExecutorService().execute(() -> observerWrapper.onChanged(valueWrapper.value));}}};}

通过APT动态生成代码的部分,因为比较简单,对APT感兴趣的可以去看一下相关文章,也可以参考一下我的源码。

高端使用方式

1、 定义事件

//定义了事件范围为demo,激活
@EventGroup(value = "TestScope", active = true)
public class EventDefine {@Event(description = "eventInt 事件测试", multiProcess = false, active = true)Integer eventInt;@Event(description = "eventString 事件测试", multiProcess = true, active = true)String eventString;@Event(description = "eventBean 事件测试", multiProcess = true, active = true)JavaBean eventBean;
}

说明

其实事件定义只用到两个注解:

@EventGroup 使用在 class 上,定义事件分组名,是否激活
@Event 使用在变量上,定义具体 事件描述,是否激活,是否支持多进程

定义完注解后,通过前面导入的注解处理器 annotationProcessor ,ElegantBus 会自动生成以 EventGroup 定义的分组名的事件总线 例如上面的定义就会生成一个 TestScopeBus。然后我们所有地方就可以直接使用这个事件总线进行事件管理。

2、发送事件和监听事件:

TestScopeBus.eventInt().post(888);
TestScopeBus.eventString().post("新字符串");
TestScopeBus.eventBean().post(new JavaBean());
TestScopeBus.eventInt().observe(owner, new ObserverWrapper<Integer>() {@Overridepublic void onChanged(final Integer value) {...}
});

参考资料Android核心知识点笔记
https://github.com/AndroidCot/Android

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

相关文章

  1. SharedPreferences 用法

    /*** 保存用户信息*/private void saveUserInfo(){SharedPreferences userInfo = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);SharedPreferences.Editor editor = userInfo.edit();//获取Editor//得到Editor后,写入需要保存的数据editor.putString("username"…...

    2024/5/4 16:38:55
  2. Tensorflow学习笔记4-卷积是什么

    卷积是什么? 卷积就是特征提取器,就是CBAPDgithub 链接,老师上课用的课件,课件5,对卷积网络描述的非常详细...

    2024/4/29 20:24:18
  3. JVM探究之旅:常量池

    目录前言正文一、Class常量池字面量符号引用二、运行时常量池字符串常量池Integer包装类后记 前言 在《JVM探究之旅:运行时数据区》提到过在方法区中有一块区域叫做运行时常量池,而运行时常量池只是所有常量池里面的一部分。 正文 常量池通常可以分为两类:静态常量池(class…...

    2024/4/29 20:24:15
  4. 图的遍历

    图的遍历:深度优先搜素遍历(DFS)广度优先搜索遍历(BFS) 这两种遍历都是针对连通图的。 针对非连通图进行遍历,只需将上述遍历函数放在一个循环中,循环用来检测图中的每一个顶点,如果当顶点没有被访问过,则调用上述函数从这个顶点遍历,否则什么也不作。 把图的深度优先…...

    2024/4/29 20:24:10
  5. springboot 实体JPA

    @Data /* * 1、@Data可以为类提供读写功能,从而不用写get、set方法。2、他还会为类提供 equals()、hashCode()、toString() 方法。** <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.…...

    2024/4/29 20:24:06
  6. 你凭什么进大厂?不死心就加油吧!

    前言最近面试,拒绝了很多人,我很心痛。所以今天简单聊聊这件事“你凭什么进大厂?”,希望分享给同学们两样东西:1.客观事实 2.解决方案客观事实为了避免先入为主的输出概念,咱们从最基本的客观事实切入这个问题天时时间很重要。招聘这件事的正常流程是先有需求,再申请正式…...

    2024/4/29 20:24:02
  7. 代理自动配置脚本

    应用背景总部部署的应用,分公司需要直接访问,一般有以下几个途径:1、VPN2、专线(专线互联而非专线接入,如DDN)3、代理服务器4、代理自动配置脚本今天,我们学习下其中代理服务器与代理自动配置脚本代理服务器:代理服务器(Proxy Server)的功能是代理网络用户去取得网络…...

    2024/4/29 20:23:59
  8. vnc server下载,vnc server下载怎么下载?教程详解

    Virtual Network Computing(VNC)是进行远程桌面控制的一个软件。客户端的键盘输入和鼠标操作通过网络传输到远程服务器,控制服务器的操作。服务器的图形界面 通过网络传输会客户端显示给用户。给你的感觉就像直接在操作本地计算机一样,只是所有的程序和命令都是在服务器端执行…...

    2024/4/29 20:23:54
  9. 06.LInux的基本命令

    基本命令帮助命令 man获取帮助信息 语法:man 【命令或配置文件】 显示说明信息 功能描述NAME 命令的名称和单行描述SYNOPSIS 怎么使用命令DESCRIPTION 命令功能的深入讨论EXAMPLSES 使用命令的例子SEE ALSO 相关主题(通常是手册页)help 获取shell内置命令的帮助信息 语…...

    2024/4/29 20:23:51
  10. vnc破解版,vnc破解版软件的3大优势

    VNC是一款很适合个人使用的远程控制软件,小巧但基本功能很齐全。使用起来也非常方便,对机器要求也很低。由于是AT&T开发的,它还支持多平台,在win9x/2000/xp中都可以使用,也可以在Linux操作系统下使用,甚至可以支持windows和Linux不同平台的互相控制。 IIS7服务器管理…...

    2024/5/2 10:11:22
  11. ELK安装部署及使用说明

    ELK安装及使用说明 时下最流行的ELK,日志分析系统,是由三部分组成:Logstash、ElasticSearch、Kibana。这三者是核心组件,并非全部。 Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的…...

    2024/4/29 20:23:42
  12. iOS改签名保存记录自己使用

    第一步:用Xcode新建一个工程,Bundle identifier不要和手机中已有的的APP重复,然后用自己的证书打包出ipa文件。 第二步:获取mobileprovision文件。 2020年1月8日更新:Catalina版本的系统把扩展名改为zip后解压。 先将一中(用自己证书打包的)ipa包进行解压。选中ipa包,右…...

    2024/4/29 20:23:38
  13. Java 枚举

    构造器摘要方法摘要只有 public String toString() 和public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 没有被 final 修饰(能被子类重写)ordinal()// 返回此枚举常量的序数(它在枚举声明中的位置,其中初始常量被分配为零的…...

    2024/4/29 1:34:03
  14. 秃顶之路-Day28

    Day 28 1.socketserver # ### 服务端 import socketservser class MyServer(socketserver.BaseRequestHandle):def handle(self):conn=self.requestwhile True:msg=conn.recv(1024)msg2=msg2.decode(utf-8)print(msg2)conn.send(msg2.upper().encode()) # ThreadingTCPServer(i…...

    2024/4/29 1:34:02
  15. 缓存之缓存击穿/穿透/雪崩

    Redis高频面试题 缓存穿透 概念 有一个查询接口,频繁接受到数据库中并不存在的查询条件,每次根据key查询缓存中都查不到,则这些查询请求纷纷落到数据库上,请求量大,造成数据库频繁IO最终宕机。例如接口是根据id获取用户,查询参数为-1、-2这种数据库根本没有的数据。 解决…...

    2024/4/29 1:33:53
  16. 保姆级EduSoho开源版安装教程:FTP工具使用指导(附视频转码实操)

    如何使用FileZilla的SFTP模式来上传您的文件1:下载FileZilla按照您现在操作系统的状态来选择下载对应的客户端。下载地址: https://filezilla-project.org/download.php?show_all=12: 设置连接新站点打开[文件] -> [站点管理器],出现一下界面,并按照要求填写。A:主机按…...

    2024/4/29 20:23:34
  17. 电商平台大数据风控解决方案

    基于大数据平台,帮助电商平台构建一套完善的大数据风控模型,全面识别商家、消费者风险,助力电商平台稳健发展。一、商家身份核验使用营业执照OCR识别、身份证OCR识别、银行卡OCR识别技术提升商户进件效率,同时基于身份核验、企业身份核验相关接口对商户的真实性进行验证1.个…...

    2024/4/29 20:23:30
  18. VR全景再起航你还没有上车吗?

    疫情已过,市场复苏,VR的春天还会远吗?这可能是支撑着众多VR行业人坚持下去最有力的一句话了。2016年被称之为VR元年,经历了短暂的爆发期后,很快,VR迎来了寒冬。四年时间,说长不长,说短不短。却足以完成一次VR玩家的洗牌,无数的初期VR企业坚持不了,选择了退出,坚持的…...

    2024/4/29 20:23:26
  19. 一文了解 Kubernetes

    Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 Kubernetes 的基本概念,后面再介绍实践,由浅入深步步为营。关于 Kubernetes 的基本概念我们将会围绕如下七点展开:一、Docker 的管理痛点如果想…...

    2024/5/3 20:17:48
  20. 嫦娥今昔

    自古以来,月亮一直是地球人类的亲密朋友,她一直陪伴着人类的进化、发展与进步,见证着世间悲欢离合的同时,也让地球人类对她产生无限的憧憬和向往。于是在中国,便有了满载人类希望的嫦娥仙子奔向月球美妙动人的神话故事和传说。一位婀娜多姿的少女,身着古典装饰,迎着皎洁的月光,…...

    2024/4/29 20:23:18

最新文章

  1. 【前端项目——分页器】手写分页器实现(JS / React)

    组件介绍 用了两种方式实现&#xff0c;注释详细~ 可能代码写的不够简洁&#xff0c;见谅&#x1f641; 1. 包含内容显示的分页器 网上看了很多实现&#xff0c;很多只有分页器部分&#xff0c;没和内容显示联动。 因此我增加了模拟content的显示&#xff0c;这里模拟了32条数…...

    2024/5/5 1:23:16
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. unity 历史版本下载

    原文链接&#xff1a;https://blog.csdn.net/huang714/article/details/106623675 Unity历史版本下载列表 Unity2019系列最新版本:Unity 2019.1.3 Unity2018系列最新版本:Unity 2018.4.0 Unity2017系列最新版本:Unity 2017.4.27 Unity5.x系列最新版本:Unity 5.6.7 Unity4.x系…...

    2024/5/4 10:53:22
  4. nodeJs 实现视频的转换(超详细教程)

    前段时间拿到一个视频是4k的&#xff0c;没法播放&#xff0c;于是通过 node.js 和 ffmpeg 实现了视频的转换。在win10 系统下实现。 所需工具 node 16.19 直接安装 ffmpeg-5.1.1-essentials_build 解压后重名 ffmpeg 放到C盘 然后配置下环境变量 Git-2.42.0.2-64-bit 直接…...

    2024/5/3 8:55:24
  5. npm常用命令技巧

    NPM (Node Package Manager) 是 JavaScript 的包管理工具&#xff0c;广泛用于管理项目中的依赖。无论是前端项目还是Node.js后端项目&#xff0c;NPM 都扮演着重要的角色。本文将介绍 NPM 中常用的几个命令&#xff0c;并提供相应的代码示例。 1. 初始化项目&#xff1a;npm …...

    2024/4/30 9:33:01
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/4 12:05:22
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/4 11:23:32
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/4 14:46:16
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/4 23:54:44
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/4 12:10:13
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/4 23:54:49
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/4 23:54:44
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/4 14:46:12
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/4 14:46:11
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/4 14:46:11
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/4 2:14:16
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/4 21:24:42
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/4 12:39:12
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/4 13:16:06
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/4 16:48:41
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/4 14:46:05
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/4 2:00:16
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/4 23:54:30
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/4 9:07:39
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/4 14:46:02
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

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

    2022/11/19 21:17:18
  27. 错误使用 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
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,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
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:16:58
  45. 如何在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