1. 概述

老艿艿:本系列假定胖友已经阅读过 《Apollo 官方 wiki 文档》 ,特别是 《Java 客户端使用指南》 。

本文,我们来一览 Apollo 客户端配置的 Java API 的实现,从而对它有整体的认识。再在之后的文章,我会写每个组件的具体代码实现。

涉及类如下图:

ç±» 

2. ConfigService

com.ctrip.framework.apollo.ConfigService ,客户端配置服务,作为配置使用的入口

2.1 构造方法

/*** 单例*/
private static final ConfigService s_instance = new ConfigService();private volatile ConfigManager m_configManager;
private volatile ConfigRegistry m_configRegistry;
  • s_instance 静态,单例。

  • m_configManager 属性,通过 #getManager() 方法获得。代码如下:

private ConfigManager getManager() {// 若 ConfigManager 未初始化,进行获得if (m_configManager == null) {synchronized (this) {if (m_configManager == null) {m_configManager = ApolloInjector.getInstance(ConfigManager.class);}}}// 返回 ConfigManagerreturn m_configManager;
}
    • 调用 ApolloInjector#getInstance(Class<T>) 方法,获得 ConfigManager 单例。详细解析,在 「5.4 ApolloInjector」 中。
  • m_configRegistry 属性,通过 #getRegistry() 方法获得。代码如下:

private ConfigRegistry getRegistry() {// 若 ConfigRegistry 未初始化,进行获得if (m_configRegistry == null) {synchronized (this) {if (m_configRegistry == null) {m_configRegistry = ApolloInjector.getInstance(ConfigRegistry.class);}}}// 返回 ConfigRegistry return m_configRegistry;
}
  • ConfigManager 和 ConfigRegistry 是什么?不用捉急,下面会分享。

2.2 获得配置对象

在 Apollo 客户端中,有两种形式的配置对象的接口:

  • Config ,配置接口
  • ConfigFile ,配置文件接口

实际情况下,我们使用 Config 居多。另外,有一点需要注意,Config 和 ConfigFile 差异在于形式,而不是类型。🙂 如果不理解,没关系,下面会具体解释。

2.2.1 获得 Config 对象

/*** Get Application's config instance.** @return config instance*/
public static Config getAppConfig() {return getConfig(ConfigConsts.NAMESPACE_APPLICATION);
}/*** Get the config instance for the namespace.** @param namespace the namespace of the config* @return config instance*/
public static Config getConfig(String namespace) {return s_instance.getManager().getConfig(namespace);
}
  • 调用 ConfigManager#getConfig(namespace) 方法,获得 Namespace 对应的 Config 对象。在这里,我们可以看出,ConfigManager 是 Config 的管理器

2.2.2 获得 ConfigFile 对象

public static ConfigFile getConfigFile(String namespace, ConfigFileFormat configFileFormat) {return s_instance.getManager().getConfigFile(namespace, configFileFormat);
}
  • 调用 ConfigManager#getConfigFile(namespace, ConfigFileFormat) 方法,获得 Namespace 对应的 ConfigFile 对象。在这里,我们可以看出,ConfigManager 是 ConfigFile 的管理器

  • 相比 #getConfig(namespace) 方法,多了一个类型为 ConfigFileFormat 的方法参数,实际是一致的。因为 ConfigManager 会在方法中,将 ConfigFileFormat 拼接到 namespace 中。代码如下:

// ConfigManager#getConfigFile(namespace, configFileFormat)
String namespaceFileName = String.format("%s.%s", namespace, configFileFormat.getValue());

2.3 设置 Config 对象 

static void setConfig(Config config) {setConfig(ConfigConsts.NAMESPACE_APPLICATION, config);
}/*** Manually set the config for the namespace specified, use with caution.** @param namespace the namespace* @param config    the config instance*/
static void setConfig(String namespace, final Config config) {s_instance.getRegistry().register(namespace, new ConfigFactory() {@Overridepublic Config create(String namespace) {return config;}@Overridepublic ConfigFile createConfigFile(String namespace, ConfigFileFormat configFileFormat) {return null; // 空}});
}
  • 按道理说,应该是将 Config 对象,设置到 ConfigManager 才对呀!这是笔者一开始的理解。在 Apollo 的设计中,ConfigManager 不允许设置 Namespace 对应的 Config 对象,而是通过 ConfigFactory 统一创建,虽然此时的创建是的,直接返回了 config 方法参数。

2.4 设置 ConfigFactory 对象

static void setConfigFactory(ConfigFactory factory) {setConfigFactory(ConfigConsts.NAMESPACE_APPLICATION, factory);
}/*** Manually set the config factory for the namespace specified, use with caution.** @param namespace the namespace* @param factory   the factory instance*/
static void setConfigFactory(String namespace, ConfigFactory factory) {s_instance.getRegistry().register(namespace, factory);
}
  • 和 「2.3 设置 Config 对象」 类似,也是注册到 ConfigRegistry 中。

3. Config && ConfigFile

3.1 Config

com.ctrip.framework.apollo.Config ,Config 接口。子类如下图:类

子类的具体实现,本文暂时不分享,避免信息量过大。

3.1.1 获得属性

String getProperty(String key, String defaultValue);Integer getIntProperty(String key, Integer defaultValue);Long getLongProperty(String key, Long defaultValue);Short getShortProperty(String key, Short defaultValue);Float getFloatProperty(String key, Float defaultValue);Double getDoubleProperty(String key, Double defaultValue);Byte getByteProperty(String key, Byte defaultValue);Boolean getBooleanProperty(String key, Boolean defaultValue);String[] getArrayProperty(String key, String delimiter, String[] defaultValue);Date getDateProperty(String key, Date defaultValue);Date getDateProperty(String key, String format, Date defaultValue);Date getDateProperty(String key, String format, Locale locale, Date defaultValue);<T extends Enum<T>> T getEnumProperty(String key, Class<T> enumType, T defaultValue);/*** Return the duration property value(in milliseconds) with the given name, or {@code* defaultValue} if the name doesn't exist. Please note the format should comply with the follow* example (case insensitive). Examples:* <pre>*    "123MS"          -- parses as "123 milliseconds"*    "20S"            -- parses as "20 seconds"*    "15M"            -- parses as "15 minutes" (where a minute is 60 seconds)*    "10H"            -- parses as "10 hours" (where an hour is 3600 seconds)*    "2D"             -- parses as "2 days" (where a day is 24 hours or 86400 seconds)*    "2D3H4M5S123MS"  -- parses as "2 days, 3 hours, 4 minutes, 5 seconds and 123 milliseconds"* </pre>** @param key          the property name* @param defaultValue the default value when name is not found or any error occurred* @return the parsed property value(in milliseconds)*/
long getDurationProperty(String key, long defaultValue);
  • 提供了多样的获得属性的方法,特别有趣的是 #getDurationProperty(key, defaultValue) 方法。

3.1.2 获得属性名集合

Set<String> getPropertyNames();

3.1.3 添加配置变化监听器 

void addChangeListener(ConfigChangeListener listener);

使用实例,参见 《Apollo应用之动态调整线上数据源(DataSource)》 文章。

3.1.3.1 ConfigChangeListener

com.ctrip.framework.apollo.ConfigChangeListener 接口,代码如下:

public interface ConfigChangeListener {/*** Invoked when there is any config change for the namespace.** @param changeEvent the event for this change*/void onChange(ConfigChangeEvent changeEvent);}

3.1.3.2 ConfigChangeEvent

com.ctrip.framework.apollo.model.ConfigChangeEvent ,Config 变化事件,代码如下:

public class ConfigChangeEvent {/*** Namespace 名字*/private final String m_namespace;/*** 变化属性的集合** KEY:属性名* VALUE:配置变化*/private final Map<String, ConfigChange> m_changes;
}

3.1.3.3 ConfigChange

com.ctrip.framework.apollo.model.ConfigChange ,配置每个属性变化的信息。代码如下:

public class ConfigChange {/*** Namespace 名字*/private final String namespace;/*** 属性名*/private final String propertyName;/*** 老值*/private String oldValue;/*** 新值*/private String newValue;/*** 变化类型*/private PropertyChangeType changeType;
}

3.1.3.4 PropertyChangeType

com.ctrip.framework.apollo.enums.PropertyChangeType ,属性变化类型枚举。代码如下:

public enum PropertyChangeType {ADDED, // 添加MODIFIED, // 修改DELETED // 删除}

3.2 ConfigFile

com.ctrip.framework.apollo.ConfigFile ,ConfigFile 接口。子类如下图:

ç±» 

子类的具体实现,本文暂时不分享,避免信息量过大。

3.2.1 获得内容

String getContent();boolean hasContent();
  • 获得配置文件的内容。这个是 Config 和 Config 最大的差异。

3.2.2 获得 Namespace 名字

String getNamespace();ConfigFileFormat getConfigFileFormat();

3.2.3 添加配置文件变化监听器 

void addChangeListener(ConfigFileChangeListener listener);

3.2.3.1 ConfigFileChangeListener

com.ctrip.framework.apollo.ConfigFileChangeListener 接口,代码如下:

public interface ConfigFileChangeListener {/*** Invoked when there is any config change for the namespace.** @param changeEvent the event for this change*/void onChange(ConfigFileChangeEvent changeEvent);}

3.2.3.2 ConfigFileChangeEvent

com.ctrip.framework.apollo.model.ConfigFileChangeEvent ,配置文件改变事件。代码如下:

public class ConfigFileChangeEvent {/*** Namespace 名字*/private final String namespace;/*** 老值*/private final String oldValue;/*** 新值*/private String newValue;/*** 变化类型*/private final PropertyChangeType changeType;
}

4. ConfigManager

com.ctrip.framework.apollo.internals.ConfigManager ,配置_管理器_接口。提供获得 Config 和 ConfigFile 对象的接口,代码如下:

public interface ConfigManager {/*** Get the config instance for the namespace specified.** @param namespace the namespace* @return the config instance for the namespace*/Config getConfig(String namespace);/*** Get the config file instance for the namespace specified.** @param namespace        the namespace* @param configFileFormat the config file format* @return the config file instance for the namespace*/ConfigFile getConfigFile(String namespace, ConfigFileFormat configFileFormat);}

4.1 DefaultConfigManager

com.ctrip.framework.apollo.internals.DefaultConfigManager ,实现 ConfigManager 接口,默认配置管理器实现类

4.1.1 构造方法

private ConfigFactoryManager m_factoryManager;/*** Config 对象的缓存*/
private Map<String, Config> m_configs = Maps.newConcurrentMap();
/*** ConfigFile 对象的缓存*/
private Map<String, ConfigFile> m_configFiles = Maps.newConcurrentMap();public DefaultConfigManager() {m_factoryManager = ApolloInjector.getInstance(ConfigFactoryManager.class);
}
  • 当需要获得的 Config 或 ConfigFile 对象不在缓存中时,通过 ConfigFactoryManager ,获得对应的 ConfigFactory 对象,从而创建 Config 或 ConfigFile 对象。

4.1.2 获得 Config 对象

@Override
public Config getConfig(String namespace) {// 获得 Config 对象Config config = m_configs.get(namespace);// 若不存在,进行创建if (config == null) {synchronized (this) {// 获得 Config 对象config = m_configs.get(namespace);// 若不存在,进行创建if (config == null) {// 获得对应的 ConfigFactory 对象ConfigFactory factory = m_factoryManager.getFactory(namespace);// 创建 Config 对象config = factory.create(namespace);// 添加到缓存m_configs.put(namespace, config);}}}return config;
}
  • 🙂 比较易懂,胖友自己看代码注释。

4.1.3 获得 ConfigFile 对象

@Override
public ConfigFile getConfigFile(String namespace, ConfigFileFormat configFileFormat) {// 拼接 Namespace 名字String namespaceFileName = String.format("%s.%s", namespace, configFileFormat.getValue());// 获得 ConfigFile 对象ConfigFile configFile = m_configFiles.get(namespaceFileName);// 若不存在,进行创建if (configFile == null) {synchronized (this) {// 获得 ConfigFile 对象configFile = m_configFiles.get(namespaceFileName);// 若不存在,进行创建if (configFile == null) {// 获得对应的 ConfigFactory 对象ConfigFactory factory = m_factoryManager.getFactory(namespaceFileName);// 创建 ConfigFile 对象configFile = factory.createConfigFile(namespaceFileName, configFileFormat);// 添加到缓存m_configFiles.put(namespaceFileName, configFile);}}}return configFile;
}
  • 和 #getConfig(namespace) 方法,基本一致

5. "工厂"们

本小节的标题,严格来说,是不严谨的,但是考虑到更好的归类,因此就这么叫啦。😈

5.1 ConfigFactoryManager

com.ctrip.framework.apollo.spi.ConfigFactoryManager ,ConfigFactory 管理器接口。代码如下:

public interface ConfigFactoryManager {/*** Get the config factory for the namespace.** @param namespace the namespace* @return the config factory for this namespace*/ConfigFactory getFactory(String namespace);}
  • ConfigFactoryManager 管理的是 ConfigFactory ,而 ConfigManager 管理的是 Config 。

5.1.1 DefaultConfigFactoryManager

com.ctrip.framework.apollo.spi.DefaultConfigFactoryManager ,ConfigFactoryManager 接口,默认 ConfigFactory 管理器实现类。代码如下:

public class DefaultConfigFactoryManager implements ConfigFactoryManager {private ConfigRegistry m_registry;/*** ConfigFactory 对象的缓存*/private Map<String, ConfigFactory> m_factories = Maps.newConcurrentMap();public DefaultConfigFactoryManager() {m_registry = ApolloInjector.getInstance(ConfigRegistry.class);}@Overridepublic ConfigFactory getFactory(String namespace) {// step 1: check hacked factory 从 ConfigRegistry 中,获得 ConfigFactory 对象ConfigFactory factory = m_registry.getFactory(namespace);if (factory != null) {return factory;}// step 2: check cache 从缓存中,获得 ConfigFactory 对象factory = m_factories.get(namespace);if (factory != null) {return factory;}// step 3: check declared config factory 从 ApolloInjector 中,获得指定 Namespace 的 ConfigFactory 对象factory = ApolloInjector.getInstance(ConfigFactory.class, namespace);if (factory != null) {return factory;}// step 4: check default config factory 从 ApolloInjector 中,获得默认的 ConfigFactory 对象factory = ApolloInjector.getInstance(ConfigFactory.class);// 更新到缓存中m_factories.put(namespace, factory);// factory should not be nullreturn factory;}}
  • 总的来说,DefaultConfigFactoryManager 的 ConfigFactory 来源有两个:
    • ConfigRegistry
    • ApolloInjector ,优先指定 Namespace 自定义的 ConfigFactory 对象,否则默认的 ConfigFactory 对象。

大多数情况下,使用 step 2 和 step 4 从 ApolloInjector 中,获得默认的 ConfigFactory 对象。

5.2 ConfigFactory

com.ctrip.framework.apollo.spi.ConfigFactory ,配置工厂接口,其每个接口方法和 ConfigManager 一一对应。代码如下:

public interface ConfigFactory {/*** Create the config instance for the namespace.** @param namespace the namespace* @return the newly created config instance*/Config create(String namespace);/*** Create the config file instance for the namespace** @param namespace the namespace* @return the newly created config file instance*/ConfigFile createConfigFile(String namespace, ConfigFileFormat configFileFormat);}

5.2.1 DefaultConfigFactory

com.ctrip.framework.apollo.spi.DefaultConfigFactory ,实现 ConfigFactory 接口,默认配置工厂实现类。

5.2.1.1 构造方法

private static final Logger logger = LoggerFactory.getLogger(DefaultConfigFactory.class);
private ConfigUtil m_configUtil;public DefaultConfigFactory() {m_configUtil = ApolloInjector.getInstance(ConfigUtil.class);
}

5.2.1.2 创建 Config 对象 

@Override
public Config create(String namespace) {// 创建 ConfigRepository 对象// 创建 DefaultConfig 对象return new DefaultConfig(namespace, createLocalConfigRepository(namespace));
}
  • 调用 #createLocalConfigRepository(name) 方法,创建 LocalConfigRepository 对象。作为后面创建的 DefaultConfig 对象的 ConfigRepository 。

5.2.1.3 创建 FileConfig 对象

@Override
public ConfigFile createConfigFile(String namespace, ConfigFileFormat configFileFormat) {// 创建 ConfigRepository 对象ConfigRepository configRepository = createLocalConfigRepository(namespace);// 创建对应的 ConfigFile 对象switch (configFileFormat) {case Properties:return new PropertiesConfigFile(namespace, configRepository);case XML:return new XmlConfigFile(namespace, configRepository);case JSON:return new JsonConfigFile(namespace, configRepository);case YAML:return new YamlConfigFile(namespace, configRepository);case YML:return new YmlConfigFile(namespace, configRepository);}return null;
}
  • 调用 #createLocalConfigRepository(name) 方法,创建 LocalConfigRepository 对象。作为后面创建的 XXXConfigFile 对象的 ConfigRepository 。

5.2.1.4 创建 LocalConfigRepository 对象

LocalFileConfigRepository createLocalConfigRepository(String namespace) {// 本地模式,使用 LocalFileConfigRepository 对象if (m_configUtil.isInLocalMode()) {logger.warn("==== Apollo is in local mode! Won't pull configs from remote server for namespace {} ! ====", namespace);return new LocalFileConfigRepository(namespace);}// 非本地模式,使用 LocalFileConfigRepository + RemoteConfigRepository 对象return new LocalFileConfigRepository(namespace, createRemoteConfigRepository(namespace));
}RemoteConfigRepository createRemoteConfigRepository(String namespace) {return new RemoteConfigRepository(namespace);
}
  • 根据是否为本地模式单独使用 LocalFileConfigRepository 还是组合使用 LocalFileConfigRepository + RemoteConfigRepository 。

  • 那么什么是本地模式呢?ConfigUtil#isInLocalMode() 方法,代码如下:

public boolean isInLocalMode() {try {Env env = getApolloEnv();return env == Env.LOCAL;} catch (Throwable ex) {//ignore}return false;
}
    • 通过判断 Env 是否为 LOCAL 。
  • 那么什么是 ConfigRepository 是什么呢?这里我们可以简单( 但不完全准确 )理解成配置的 Repository ,负责从远程的 Config Service 读取配置。详细解析,见 《Apollo 源码解析 —— 客户端 API 配置(四)之 ConfigRepository》 。

5.3 ConfigRegistry

com.ctrip.framework.apollo.spi.ConfigRegistry ,Config 注册表接口。其中,KEY 为 Namespace 的名字,VALUE 为 ConfigFactory 对象。代码如下:

public interface ConfigRegistry {/*** Register the config factory for the namespace specified.** @param namespace the namespace* @param factory   the factory for this namespace*/void register(String namespace, ConfigFactory factory);/*** Get the registered config factory for the namespace.** @param namespace the namespace* @return the factory registered for this namespace*/ConfigFactory getFactory(String namespace);}

5.3.1 DefaultConfigRegistry

com.ctrip.framework.apollo.spi.DefaultConfigRegistry ,实现 ConfigRegistry 接口,默认 ConfigFactory 管理器实现类。代码如下:

public class DefaultConfigRegistry implements ConfigRegistry {private static final Logger s_logger = LoggerFactory.getLogger(DefaultConfigRegistry.class);/*** ConfigFactory Map*/private Map<String, ConfigFactory> m_instances = Maps.newConcurrentMap();@Overridepublic void register(String namespace, ConfigFactory factory) {if (m_instances.containsKey(namespace)) { // 覆盖的情况,打印警告日志s_logger.warn("ConfigFactory({}) is overridden by {}!", namespace, factory.getClass());}m_instances.put(namespace, factory);}@Overridepublic ConfigFactory getFactory(String namespace) {return m_instances.get(namespace);}}

5.4 ApolloInjector

com.ctrip.framework.apollo.build.ApolloInjector ,Apollo 注入器,实现依赖注入( DI,全称“Dependency Injection” ) 。

构造方法

/*** 注入器*/
private static volatile Injector s_injector;
/*** 锁*/
private static final Object lock = new Object();
  • s_injector 静态属性,真正的注入器对象。通过 #getInjector() 静态方法获得。代码如下: 
private static Injector getInjector() {// 若 Injector 不存在,则进行获得if (s_injector == null) {synchronized (lock) {// 若 Injector 不存在,则进行获得if (s_injector == null) {try {// 基于 JDK SPI 加载对应的 Injector 实现对象s_injector = ServiceBootstrap.loadFirst(Injector.class);} catch (Throwable ex) {ApolloConfigException exception = new ApolloConfigException("Unable to initialize Apollo Injector!", ex);Tracer.logError(exception);throw exception;}}}}return s_injector;
}
  • 调用 com.ctrip.framework.foundation.internals.ServiceBootstrap#loadFirst(Class<S>) 方法,基于 JDK SPI 机制,加载指定服务的首个对象。代码如下: 
public class ServiceBootstrap {/*** 加载指定服务的首个对象** @param clazz 服务类* @param <S> 泛型* @return 对象*/public static <S> S loadFirst(Class<S> clazz) {Iterator<S> iterator = loadAll(clazz);if (!iterator.hasNext()) {throw new IllegalStateException(String.format("No implementation defined in /META-INF/services/%s, please check whether the file exists and has the right implementation class!", clazz.getName()));}return iterator.next();}/*** 基于 JDK SPI ,加载指定类的所有对象** @param clazz 服务类* @param <S> 泛型* @return 所有对象*/private static <S> Iterator<S> loadAll(Class<S> clazz) {ServiceLoader<S> loader = ServiceLoader.load(clazz); // JDK SPIreturn loader.iterator();}}
  • 在 META-INF/services/com.ctrip.framework.apollo.internals.Injector 中,配置 Injector 的实现类为 DefaultInjector ,如下: 
com.ctrip.framework.apollo.internals.DefaultInjector

获得实例

public static <T> T getInstance(Class<T> clazz) {try {return getInjector().getInstance(clazz);} catch (Throwable ex) {Tracer.logError(ex);throw new ApolloConfigException(String.format("Unable to load instance for type %s!", clazz.getName()), ex);}
}public static <T> T getInstance(Class<T> clazz, String name) {try {return getInjector().getInstance(clazz, name);} catch (Throwable ex) {Tracer.logError(ex);throw new ApolloConfigException(String.format("Unable to load instance for type %s and name %s !", clazz.getName(), name), ex);}
}

5.4.1 Injector

com.ctrip.framework.apollo.internals.Injector ,注入器接口。代码如下:

public interface Injector {/*** Returns the appropriate instance for the given injection type*/<T> T getInstance(Class<T> clazz);/*** Returns the appropriate instance for the given injection type and name*/<T> T getInstance(Class<T> clazz, String name);}

5.4.2 DefaultInjector

com.ctrip.framework.apollo.internals.DefaultInjector ,实现 DefaultInjector 接口,基于 Guice 的注入器实现类。

考虑到 Apollo 会被引入项目中,尽量减少对 Spring 的依赖。但是呢,自身又有 DI 特性的需要,那么引入 Google Guice 是非常好的选择。不了解的胖友,可以阅读 《通过 Guice 进行依赖项注入》 。

构造方法

private com.google.inject.Injector m_injector;public DefaultInjector() {try {m_injector = Guice.createInjector(new ApolloModule());} catch (Throwable ex) {ApolloConfigException exception = new ApolloConfigException("Unable to initialize Guice Injector!", ex);Tracer.logError(exception);throw exception;}
}
  • 使用 ApolloModule 类,告诉 Guice 需要 DI 的配置。代码如下: 
private static class ApolloModule extends AbstractModule {@Overrideprotected void configure() {bind(ConfigManager.class).to(DefaultConfigManager.class).in(Singleton.class);bind(ConfigFactoryManager.class).to(DefaultConfigFactoryManager.class).in(Singleton.class);bind(ConfigRegistry.class).to(DefaultConfigRegistry.class).in(Singleton.class);bind(ConfigFactory.class).to(DefaultConfigFactory.class).in(Singleton.class);bind(ConfigUtil.class).in(Singleton.class);bind(HttpUtil.class).in(Singleton.class);bind(ConfigServiceLocator.class).in(Singleton.class);bind(RemoteConfigLongPollService.class).in(Singleton.class);}}

获得实例 

@Override
public <T> T getInstance(Class<T> clazz) {try {return m_injector.getInstance(clazz);} catch (Throwable ex) {Tracer.logError(ex);throw new ApolloConfigException(String.format("Unable to load instance for %s!", clazz.getName()), ex);}
}@Override
public <T> T getInstance(Class<T> clazz, String name) {// Guice does not support get instance by type and namereturn null;
}
  • 🙂 指定 name 的暂时未实现,因为 Guice does not support get instance by type and name 。 
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Java Iterator迭代器接口

    源出处:尚硅谷http://www.gulixueyuan.com/my/course/310 Iterator迭代器接口Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素 GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元 素,而又不需暴露该对象的内部细节。…...

    2024/5/1 22:18:09
  2. QT:颜色拾取器的实现

    前言 思路:首先需要获取到鼠标的x和y坐标点,然后获取鼠标坐标点的像素点。将像素点的rgb分离出来显示。最后label上显示这个像素点的RGB 如果想要实时的显示这些数据的话,使用的是定时器一直调用函数showColorValue就行了 核心代码: //获取桌面x,y坐标点宽度1,高度1的像素…...

    2024/5/1 21:39:18
  3. 第三次学JAVA再学不好就吃翔(part14)--基础语法之循环语句注意事项

    学习笔记,仅供参考文章目录JAVA基础语法for, while, do...while的区别死循环循环嵌套JAVA基础语法for, while, do…while的区别do…while与其他两种的区别do…while循环至少执行一次循环体,而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。for和while的…...

    2024/4/16 12:36:50
  4. Nginx 安装配置

    Nginx 安装 系统平台:CentOS release 6.6 (Final) 64位。 一、安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 二、首先要安装 PCRE PCRE 作用是让 Nginx 支持 Rewrite 功能。 1、下载 PCRE 安装包,下载地址: http://do…...

    2024/5/2 3:19:41
  5. mysql备份数据库还原数据库压缩解压一条命令搞定

    mysql备份数据库还原数据库压缩解压一条命令搞定 备份并且压缩: mysqldump -hhostname -uusername -ppassword --databases dbname | gzip > backup-file.sql.gz解压还原: gunzip < backup-file.sql.gz | mysql -uusername -ppassword dbnamehostname mysql的ip数据库地…...

    2024/5/1 22:53:47
  6. kali 2020更改root密码

    摁下E键。 移到下面一行的“ro”这里,将“ro”改成“rw”;再将光标移到最后那里,空一格,输入“init=/bin/bash”f10保存修改密码为 paddwd usernameroot...

    2024/4/16 12:35:38
  7. Java实验(五)简单聊天室程序——主要考察图形界面、IO操作和网络编程的结合

    本次实验涉及的知识点 1、掌握网络编程的基本概念。 2、掌握java.net包中常用网络编程工具类的功能和使用。 3、掌握UDP编程和TCP编程的基本方法和步骤。 结合图形界面、IO操作、网络编程知识,设计一个简单聊天室程序,要求能够实现两台电脑之间的对聊。 实现效果如下:这个…...

    2024/4/16 12:35:28
  8. 雨听 | 英语学习笔记(十一)~作文范文:公园的免费入口

    雨听青苔入镜 檐下风铃 摇晃曾经 回忆 无从剪接 记录下学习点滴 注:范文来自懒人英语 由海轰整理Free Entrance to ParksRecently an increasing number of parks are offering free entrance,ensuring more people, rich or poor, have access to them.It is obvious that th…...

    2024/4/18 1:21:00
  9. 基于Ajax实现轮询

    一、什么是轮询 轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出入”(Programmed I/O)。轮询法的概念是,由CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始。 在WEB上来说就是…...

    2024/5/2 0:15:40
  10. 华清远见在线学习嵌入式第二天

    -128在内存中补码为10000000。 数在内存中以补码形式存在。 字符串以\0结尾。 变量存数类型 默认auto 在局部变量中为内存中的随机值。 register 寄存器型,将变量放入CPU的寄存器中,加速程序运行,但是CPU中寄存器数量有限并且寄存器没有地址,不可使用指针访问。 static 静态…...

    2024/4/24 9:07:34
  11. spring-security之生产环境的用户登录(身份验证)以及用户名回显和用户退出

    文章目录超级管理员的用户登录(内置,不连接数据库)用户名回显用户退出 超级管理员的用户登录(内置,不连接数据库) 导入依赖<!-- 身份验证 --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-we…...

    2024/5/2 2:48:47
  12. Django version 3 using settings 项目.settings

    在最初创建django app的时候提示Django version 3.0.6, using settings ‘mysite.settings’ 这句话表面django 从3.0.6开始需要在setting文件里面添加app应用...

    2024/4/24 9:07:36
  13. 面试题-Java集合类

    Java 集合类: list 、 set 、 queue 、 map 、 stack 的特点与用法 ? Map Map 是键值对,键 Key 是唯一不能重复的,一个键对应一个值,值可以重复。 TreeMap 可以保证顺序,HashMap 不保证顺序,即为无序的,Map 中可以将 Key 和 Value 单 独抽取出来,其中 KeySet()方法可…...

    2024/4/24 9:07:34
  14. 在for循环中运行setTimeout

    对for循环中运行setTimeout的理解 先看一段代码 for (var i=0; i<10; i++) { setTimeout(console.log(i), i*1000 );} 答案:0、1、2、3、4、5、6、7、8、9再比较一段代码 for(var i=0;i<10;i++){setTimeout(function(){console.log(i); },i*1000);} 答案:10、10、10、…...

    2024/4/24 9:07:30
  15. 2020年5月29日学习随感

    Linux 列出目前所有环境变量:env 查看环境变量与自定义变量:set PS1:命令提示字符的设置,到这里我就有话说了哈,就是发现一个不同的地方,有一个判断当前用户的提示符,root提示符为#,其他用户为$,鸟哥书上说的是\$,但是呢,我现在这个centos7.8上要使用\\$才能有这个效…...

    2024/4/24 9:07:30
  16. RCNN系列,从RCNN到fast-RCNN、faster RCNN、Mask RCNN

    x、y是以真实值的中心为远点的坐标,w和h是预测框的长宽。Fast RCNNSPP Net(Fast Rcnn与SPP有联系)Faster RCNN下面这幅图更加详细中间的流程Mask RCNNROI Align...

    2024/4/24 9:07:28
  17. 浅谈敏捷思想-09.看板系统

    看板系统 看板(Kanban为日文发音),意译为“揭示”,原意是传达生产搬运任务的卡片。它是日本丰田生产方式的管理工具,是丰田汽车工业公司为寻求生产准时化(Just In Time),即在必要的时候,只生产必要数量的必要产品,准时送到生产线,使库存减少,甚至接近于“零”,彻底…...

    2024/5/1 21:11:58
  18. docker管理镜像和管理容器以及端口映射

    docker使用管理镜像 管理容器 管理存储 管理网络管理镜像:build :基于dockerfile制作镜像 inspect:显示镜像的详细信息 load:从压缩包中导入镜像 save:将当前的某个镜像导出制作成压缩包 ls:查看当前本地有哪些镜像 pull:从镜像仓库拉取镜像到本地 push:将一个本地镜像…...

    2024/4/24 9:07:29
  19. 文件结构的整理(1)

    文件结构的整理(1) 面向解题,像素点和数据块等细节未来再总结。o( ̄▽ ̄)ブ 感谢大佬完整文件结构的分享: https://www.cnblogs.com/lidabo/p/3701197.html https://blog.csdn.net/qq_26187985/article/details/83654197PNG文件关键点:PNG,IHDR是文件头标志,IEND是文件结束…...

    2024/4/24 9:07:32
  20. Android 开发常用资源

    实践• NIST网络安全实践指南:“移动设备安全:云和混合构建” • Android安全概述 • 开发人员的Android安全提示 • 移动应用渗透测试备忘录 • MobileAppReportCard:Microsoft Excel电子表格,用于对Android和iOS移动应用程序进行一致的安全评估 • 项目/ OWASP移动安全项…...

    2024/4/24 6:13:33

最新文章

  1. 通义灵码实战系列:一个新项目如何快速启动,如何维护遗留系统代码库?

    作者&#xff1a;别象 进入 2024 年&#xff0c;AI 热度持续上升&#xff0c;翻阅科技区的文章&#xff0c;AI 可谓是军书十二卷&#xff0c;卷卷有爷名。而麦肯锡最近的研究报告显示&#xff0c;软件工程是 AI 影响最大的领域之一&#xff0c;AI 已经成为了软件工程的必选项&…...

    2024/5/2 3:18:58
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用

    数据结构 我们知道MySQL的存储引擎Innodb默认底层是使用B树的变种来存储数据的 下面我们来复习一下B树存储 B树存储 哈希存储的区别 哈希存储,只能使用等值查询 B树与B树存储 我们知道B树实际上就是B树的变种 那么为啥使用B树而不是使用B树呢? 我们知道效率的高低主要取决于…...

    2024/5/2 2:42:20
  4. WPS二次开发专题:WPS SDK实现文档打印功能

    作者持续关注WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 在办公场景或者家教场景中经常碰到需要对文档进行打印…...

    2024/5/1 13:31:33
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

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

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

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

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

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

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

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

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

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

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

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

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

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

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

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

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

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

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/30 9:42:49
  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