Spring 学习笔记②:动态代理及面向切面编程
文章目录
- 0. 基本概念
- 1. AOP概念及术语
- 2. 动态代理
- 2.1 代理模式
- 2.1.1 静态代理
- 2.1.2 动态代理
- 2.1.3 代理模式的缺点
- 2.2 java.lang.reflect.Proxy
- 2.2.1 实现Invoke接口、注入增强代码
- 2.2.2 基于JDK的Proxy获得代理对象
- 2.3 CGLib
- 3. Spring中的AOP
- 3.1 pom.xml文件
- 3.2 基于通知类型代理增强的Bean
- 3.2.1 AOP通知类型
- 3.2.2 示例:拦截器与工厂方法
- 3.3 使用AspectJ开发AOP(推荐)
- 3.3.1 示例①:基于XML的声明式开发
- 3.3.2 示例中的标签及对应的切面类解析
- 3.3.3 示例②:基于注解的声明式开发
- 3.4 一对多的切面及相关问题
- 3.4.1 实现多切面的有序运行
- 3.4.2 在注解中实现多个切入点
- 3.4.3 获取代理对象的目标对象
- 3.5 切入点表达式
- 3.6 PointCut指示符
0. 基本概念
- 面向切面编程,它将业务逻辑的各个部分进行隔离,使开发人员在编写业务逻辑时可以专心于核心业务,从而提高了开发效率。
- 关注点(切入点)代码,就是指重复执行的代码。
- 业务代码与关注点代码分离:关注点代码写一次即可;开发者只需要关注核心业务,运行时期,执行核心业务代码时候动态植入关注点代码。
// 关注点代码举例public void add(User user) { Session session = null; Transaction trans = null; try { session = HibernateSessionFactoryUtils.getSession(); // 【关注点代码】trans = session.beginTransaction(); // 【关注点代码】session.save(user); // 核心业务代码:如何保存、用户有效性校验trans.commit(); //…【关注点代码】} catch (Exception e) { e.printStackTrace(); if(trans != null){ trans.rollback(); //..【关注点代码】} } finally{ HibernateSessionFactoryUtils.closeSession(session); ////..【关注点代码】} }
1. AOP概念及术语
术语 | 解释 |
---|---|
Joinpoint(连接点) | 指那些被拦截到的点,在 Spring 中,可以被动态代理拦截目标类的方法。 |
Pointcut(切入点) | 指要对哪些 Joinpoint 进行拦截,即被拦截的连接点(方法)。 |
Advice(通知) | 指拦截到 Joinpoint 之后要做的事情,即对切入点增强的内容。 |
Target(目标) | 指代理的目标对象。 |
Weaving(植入) | 指把增强代码应用到目标上,生成代理对象的过程。 |
Proxy(代理) | 指生成的代理对象。 |
Aspect(切面) | 切入点和通知的结合。 |
2. 动态代理
2.1 代理模式
为其他对象提供一个代理以控制对某个对象的访问,代理类不现实具体服务,而是利用委托类来完成服务,并将执行结果封装处理。在Spring中被用来做无侵入的代码增强。
和装饰器模式有什么不同?答:不会产生太多的装饰类。
2.1.1 静态代理
- 被代理类承担、插入自己的方法。
- 创建一个代理类,持有被代理类(目标对象)的引用,实现接口(但具体业务由创建一个接口,被代理类(目标对象)实现接口。
显然,一个代理类只能代理一个目标对象,会造成目标类的泛滥。这也是“静态”的意思。
业务逻辑的接口:
public interface TargetInterface {void doSomething();
}
目标对象:
public class TargetImpl implements TargetInterface{@Overridepublic void doSomething() {System.out.println("Hello World!");}
}
代理类:
public class TargetProxy implements TargetInterface{private TargetInterface target = new TargetImpl(); // 持有引用@Overridepublic void doSomething() {System.out.println("Before invoke" );this.target.doSomething();System.out.println("After invoke");}
}
UML图:
2.1.2 动态代理
- 目标接口和目标对象和静态代理类一致。
- 运用反射来创建代理类。
代理类对象:
public class ProxyHandler implements InvocationHandler{private Object object;public ProxyHandler(Object object){this.object = object;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("Before invoke");method.invoke(object, args);System.out.println("After invoke");return null;}}
最后基于反射完成代理过程,详见2.2小节:
InvocationHandler handler = new ProxyHandler(new TargetImpl());
TargetInterface targetProxy = (TargetInterface) Proxy.newProxyInstance(TargetImpl.getClassLoader(), TargetImpl.getInterfaces(), handler);
targetProxy.doSomething();
2.1.3 代理模式的缺点
- 静态代理:由于静态代理需要实现目标对象的相同接口,那么可能会导致代理类会非常非常多,不好维护。
- 动态代理:目标对象一定是要有接口的,没有接口就不能实现动态代理。
2.2 java.lang.reflect.Proxy
java.lang.reflect.Proxy
是基于反射的动态代理,是属于JDK的原生实现。
2.2.1 实现Invoke接口、注入增强代码
public interface InvocationHandler {public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
}
例如:
public class ProxyHandler implements InvocationHandler{private Object object;public ProxyHandler(Object object){this.object = object;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("Before invoke"); // 增强代码1Object obj = method.invoke(object, args);System.out.println("After invoke"); // 增强代码2return obj;}}
2.2.2 基于JDK的Proxy获得代理对象
利用 static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler invocationHandler )
构建代理对象。其中各参数如下:
ClassLoader loader
:指定当前target对象使用类加载器,获取加载器的方法是固定的,如TargetInterface.class.getClassLoader()
。Class<?>[] interfaces
:target对象实现的接口的类型,使用泛型方式确认类型,如new Class[] { TargetInterface.class}
。InvocationHandler invocationHandler
:事件处理,执行target对象的方法时,会触发事件处理器的方法,会把当前执行target对象的方法作为参数传入。
2.3 CGLib
相较于基于JDK的动态代理仍有局限性,即其目标对象必须要实现至少一个接口。而借用CGlib则不需要,其凭借一个小而快的字节码处理框架ASM转换字节码并生成新的类。由于其基于内存构建出一个子类来扩展目标对象的功能,也被称为“子类代理”。
需要注意的是,目标类不能为不可继承的
final
类型或目标对象的方法不能为静态类型。
public class TargetProxyFactory {public static TargetProxy getProxyBean() {// 1. 准备目标类和自定义的切面类(用于增强目标对象)final Target goodsDao = new Target();final Aspect aspect = new Aspect();// 2. 构建CgLib的核心类`Enhancer`Enhancer enhancer = new Enhancer(); // 3. 确定需要增强的类enhancer.setSuperclass(goodsDao.getClass());// 4. 添加回调函数:实现一个MethodInterceptor接口enhancer.setCallback(() -> {// intercept 相当于 jdk invoke,前三个参数与 jdk invoke—致@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {aspect.myBefore(); // 前增强Object obj = method.invoke(goodsDao, args); // 目标方法执行aspect.myAfter(); // 后增强return obj;}});// 5. 创建代理类TargetProxy targetProxy = (TargetProxy) enhancer.create();return targetProxy;}
}
构建CGLib依赖的pom.xml
文件为:
<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version>
</dependency>
3. Spring中的AOP
3.1 pom.xml文件
<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.6.RELEASE</version>
</dependency><!-- Spring 2.0 以后,新增了对 AspectJ 方式的支持,新版本的 Spring 框架,建议使用 AspectJ 方式开发 AOP -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.6.RELEASE</version>
</dependency>
3.2 基于通知类型代理增强的Bean
3.2.1 AOP通知类型
- 通知(Advice)其实就是对目标切入点进行增强的内容。
名称 | 说明 |
---|---|
org.springframework.aop.MethodBeforeAdvice(前置通知) | 在方法之前自动执行的通知称为前置通知,可以应用于权限管理等功能。 |
org.springframework.aop.AfterReturningAdvice(后置通知) | 在方法之后自动执行的通知称为后置通知,可以应用于关闭流、上传文件、删除临时文件等功能。 |
org.aopalliance.intercept.MethodInterceptor(环绕通知) | 在方法前后自动执行的通知称为环绕通知,可以应用于日志、事务管理等功能。 |
org.springframework.aop.ThrowsAdvice(异常通知) | 在方法抛出异常时自动执行的通知称为异常通知,可以应用于处理异常记录日志等功能。 |
org.springframework.aop.IntroductionInterceptor(引介通知) | 在目标类中添加一些新的方法和属性,可以应用于修改旧版本程序(增强类)。 |
3.2.2 示例:拦截器与工厂方法
现在,假设要增强 UserDao
,切入点是 save()
方法,要在之前加入自己面向 User
的增强方法,如校验等切面业务。核心要点有:
- 目标对象要实现一个通用接口(除非使用CGlib)。
- 代码增强类(切面类)实现一种通知的接口,在其中做增强。
- 在配置文件中利用
org.springframework.aop.framework.ProxyFactoryBean
创建代理类,需要给出proxyInterfaces
(目标对象的接口)、target
(目标对象的引用)、interceptorNames
(拦截器/切面类的名字)。
@Repository("userDao")
public class UserDao implements UserDaoInterface { // 实现一个通用接口public void save(User user){System.out.println("数据库已保存" + user); // 业务代码}
}
代码切面类:
public class UserDaoAspect implements MethodInterceptor { // 此处以环绕通知为例子public Object invoke(MethodInvocation methodInvocation) throws Throwable {System.out.println("Dao enhanced before"); // 增强1(重复的切入点代码)Object obj = methodInvocation.proceed(); // 这里会由Spring替我们注入target对象System.out.println("Dao enhanced after"); // 增强2(重复的切入点代码)return obj;}
}
创建配置文件:
<beans><bean id="userDaoAspect" class="MVC.Aspect.UserDaoAspect"/> <!-- 拦截器/切面类--><bean id="targetUserDao" class="MVC.Model.Dao.UserDao"/> <!-- 目标类 --><bean id="userDaoProxy" class="org.springframework.aop.framework.ProxyFactoryBean"><!--代理对象实现的接口、目标对象、拦截者(切面类) --><property name="proxyInterfaces" value="MVC.Model.Dao.UserDaoInterface"/><property name="target" ref="targetUserDao"/> <!-- 此处是一个引用ref --><property name="interceptorNames" value="userDaoAspect"/><!-- 如何生成代理,true:使用CGLib; false :使用JDK动态代理(默认) --><property name="proxyTargetClass" value="true"/></bean></beans>
其中, UserService
类需要进行修改:
@Service("userService")public class UserService {@Resource(name = "userDaoProxy") // 注入ProxyFactoryBean工厂方法获得的代理类(增强类)private UserDaoInterface userDao; // 修改为其接口public void service(User user){System.out.println("MVC Service sth. with " + user);this.userDao.save(user);System.out.println("MVC Service Over.");}}
工程结构:
3.3 使用AspectJ开发AOP(推荐)
- AspectJ 是一个基于 Java 语言的 AOP 框架,它扩展了 Java 语言。Spring 2.0 以后,新增了对 AspectJ 方式的支持,新版本的 Spring 框架,建议使用 AspectJ 方式开发 AOP。
- 主要有两种开发方法:“基于XML的声明式开发”和“基于注解的声明式开发”。
3.3.1 示例①:基于XML的声明式开发
需要引入命名空间:
<beans xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd">
编写切面类:
public class UserDaoAspect { // 以前、后通知为例public void asBefore() {System.out.println("Dao enhanced before"); // 一些重复的代码}public void asAfter() {System.out.println("Dao enhanced after");}}
被增强的目标类(不再需要接口):
@Repository("userDao")public class UserDao {public void save(User user){System.out.println("数据库已保存" + user); // 业务代码}}
编写配置文件:
<beans><bean id="userDaoAspect" class="MVC.Aspect.UserDaoAspect"/> <!-- 切面类 --><bean id="targetUserDao" class="MVC.Model.Dao.UserDao"/> <!-- 目标类(随后都会变成代理类) --><!-- 面向切面编程,交由Spring管理--><aop:config><!-- 配置切入点 --><aop:pointcut expression="execution(* MVC.Model.Dao.UserDao.save(..))" id="pointcut-save"/><!-- 对切入点配置切面 --><aop:aspect ref="userDaoAspect"><!-- 配置前置增强 --><aop:before method="asBefore" pointcut-ref="pointcut-save" /><aop:after method="asAfter" pointcut-ref="pointcut-save"/></aop:aspect></aop:config><!-- 如何生成代理,true:使用CGLib; false :使用JDK动态代理(默认)|如果目标类没有声明接口,则Spring将自动使用CGLib动态代理 --><aop:aspectj-autoproxy proxy-target-class="true"/></beans>
注意此处
proxy-target-class="false"
的话注入会报错...but was actually of type ‘com.sun.proxy.$Proxy7'
。
获取增强类:
UserDao userDaoProxy = (UserDao) applicationContext.getBean("targetUserDao");
3.3.2 示例中的标签及对应的切面类解析
附 <aop>
标签格式概览:
<aop:config><!-- 配置切入点,通知最后增强哪些方法 --><aop:pointcut expression="execution ( * target.* (..))" id="pointcut-id-x" /><aop:aspect ref="myAspect"><!--前置通知,关联通知 Advice和切入点PointCut --><aop:before method="myBefore" pointeut-ref="pointcut-id-x" /><!--后置通知,在方法返回之后执行,就可以获得返回值returning 属性 --><aop:after-returning method="myAfterReturning" pointcut-ref="pointcut-id-x" returning="returnVal" /><!--环绕通知 --><aop:around method="myAround" pointcut-ref="pointcut-id-x" /><!--抛出通知:用于处理程序发生异常,可以接收当前方法产生的异常 --><!-- * 注意:如果程序没有异常,则不会执行增强 --><!-- * throwing属性:用于设置通知第二个参数的名称,类型Throwable --><aop:after-throwing method="myAfterThrowing" pointcut-ref="pointcut-id-x" throwing="e" /><!--最终通知:无论程序发生任何事情,都将执行 --><aop:after method="myAfter" pointcut-ref="pointcut-id-x" /></aop:aspect></aop:config>
对应的切面类:
//切面类public class MyAspect {// 前置通知public void myBefore(JoinPoint joinPoint) {System.out.print("前置通知,目标:" + joinPoint.getTarget() + " 方法名称: " + joinPoint.getSignature().getName());}// 后置通知public void myAfterReturning(JoinPoint joinPoint) {System.out.print("后置通知,方法名称:" + joinPoint.getSignature().getName());}// 环绕通知public Object myAround(ProceedingJoinPoint proceedingJoinPoint)throws Throwable {System.out.println("环绕开始"); // 开始Object obj = proceedingJoinPoint.proceed(); // 执行当前目标方法System.out.println("环绕结束"); // 结束return obj;}// 异常通知public void myAfterThrowing(JoinPoint joinPoint, Throwable e) {System.out.println("异常通知" + "出错了" + e.getMessage());}// 最终通知public void myAfter() {System.out.println("最终通知");}}
3.3.3 示例②:基于注解的声明式开发
名称 | 说明 |
---|---|
@Aspect | 用于定义一个切面。 |
@Before | 用于定义前置通知,相当于 BeforeAdvice。 |
@AfterReturning | 用于定义后置通知,相当于 AfterReturningAdvice。 |
@Around | 用于定义环绕通知,相当于MethodInterceptor。 |
@AfterThrowing | 用于定义抛出通知,相当于ThrowAdvice。 |
@After | 用于定义最终final通知,不管是否异常,该通知都会执行。 |
@DeclareParents | 用于定义引介通知,相当于IntroductionInterceptor。 |
编写配置文件:
<context:component-scan base-package="MVC"/> <!-- 扫描注解 -->
<aop:aspectj-autoproxy proxy-target-class="true"/> <!-- 使用CGlib植入切面代码 -->
构建切面类:
@Aspect@Componentpublic class UserDaoAspect {@Pointcut("execution(* MVC.Model.Dao.UserDao.save(..))") // 配置切入点private void pointCut(){} // 要求:方法必须是private,没有值,名称自定义,没有参数@Before("pointCut()")public void asBefore() {System.out.println("Dao enhanced before");}@After("pointCut()")public void asAfter() {System.out.println("Dao enhanced after");}}
3.4 一对多的切面及相关问题
3.4.1 实现多切面的有序运行
- 当有多个切面时,它不会存在任何顺序,这些顺序代码会随机生成,但是有时候我们希望它按照指定的顺序运行。
- 此时,需要借助
org.springframework.core.annotation.Order
注解类或实现org.springframework.core.Ordered
接口。
构建一个新的切面:
@Aspect@Component@Order(value = 2) // 会在第二个执行public class UserDaoAspect2 {@Pointcut("execution(* MVC.Model.Dao.UserDao.save(..))")private void pointCut(){} // 要求:方法必须是private,没有值,名称自定义,没有参数@Before("pointCut()")public void asBefore() {System.out.println("Dao enhanced before 2");}@After("pointCut()")public void asAfter() {System.out.println("Dao enhanced after 2");}}
3.4.2 在注解中实现多个切入点
假设有一个新的业务需要被 UserDao
切入:
@Repository
public class ShopDao {public void load(){System.out.println("载入商品");}
}
则 UserDao
需要修改为:
@Aspect@Componentpublic class UserDaoAspect {@Pointcut("execution(* MVC.Model.Dao.UserDao.save(..))")private void pointCut(){} @Pointcut("execution(* MVC.Model.Dao.ShopDao.load())")private void pointCut2(){} // 新的切入点@Before("pointCut()")public void asBefore() {System.out.println("Dao enhanced before");}@After("pointCut() || pointCut2()") // 修改表达式语句,植入代码public void asAfter() {System.out.println("Dao enhanced after");}}
3.4.3 获取代理对象的目标对象
由于被CGLib植入之后,IoC容器中所有的目标对象都会变成代理对象,且Spring没有提供获取原生对象的API。
参考解决方法:CSDN@在spring中获取代理对象代理的目标对象工具类。
import java.lang.reflect.Field;
import org.springframework.aop.framework.AdvisedSupport;
import org.springframework.aop.framework.AopProxy;
import org.springframework.aop.support.AopUtils; public class AopTargetUtils { public static Object getTarget(Object proxy) throws Exception { return !AopUtils.isAopProxy(proxy) ? proxy :(AopUtils.isJdkDynamicProxy(proxy) ? getJDKDynamicProxyTargetObject(proxy) : getCGlibProxyTargetObject(proxy))} // 获取CGLib 代理的对象private static Object getCGlibProxyTargetObject(Object proxy) throws Exception { Field h = proxy.getClass().getDeclaredField("CGLIB$CALLBACK_0"); h.setAccessible(true); Object dynamicAdvisedInterceptor = h.get(proxy); Field advised = dynamicAdvisedInterceptor.getClass().getDeclaredField("advised"); advised.setAccessible(true); return ((AdvisedSupport)advised.get(dynamicAdvisedInterceptor)).getTargetSource().getTarget(); } // 获取JDK代理的对象private static Object getJDKDynamicProxyTargetObject(Object proxy) throws Exception { Field h = proxy.getClass().getSuperclass().getDeclaredField("h"); h.setAccessible(true); AopProxy aopProxy = (AopProxy) h.get(proxy); Field advised = aopProxy.getClass().getDeclaredField("advised"); advised.setAccessible(true); return ((AdvisedSupport)advised.get(aopProxy)).getTargetSource().getTarget(); }
}
3.5 切入点表达式
切入点表达式为:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
符号讲解:
?
号代表0或1,表明可选参数。*
号代表任意类型取0或多,常用作通配符。
表达式匹配参数讲解:
modifiers-pattern?
:【可选】连接点的类型。ret-type-pattern
:【必填】连接点返回值类型,常用*
做匹配。declaring-type-pattern?
:【可选】连接点的类型(包.类
),如com.example.User
,通常不省略。name-pattern(param-pattern)
:【必填】要匹配的连接点名称,即方法
(如果给出了连接点的类型,要用.
隔开),如save(..)
;括号里面是方法的参数(匹配方法见下)。throws-pattern?
:【可选】连接点抛出的异常类型。
方法参数****的匹配方法:
()
匹配不带参数的方法。(..)
匹配带参数的方法(任意个)。(*, String)
匹配带两个参数的方法且第二个必为String。
3.6 PointCut指示符
除了使用 execution
作为切入点表达式进行配置,还可以使用以下表达式内容(需要保证所有的连接点都在IoC容器内):
within
:匹配所有在指定子包内的类的连接点,如within(com.xyz.service.*)
、within(com.xyz.service..*)
;严格匹配目标对象,不理会继承关系 。this
: 匹配所有代理对象为目标类型中的连接点,如this(com.xyz.service.AccountService)
。target
:匹配所有实现了指定接口的目标对象中的连接点,如target(com.xyz.service.UserDaoInterfece)
。bean
:匹配所有指定命名方式的类的连接点,如bean(userDao)
。args
:匹配任何方法参数是指定的类型的连接点,如args(*, java.lang.String)
、args(java.lang.Long, ..)
。@within
:匹配标注有指定注解的类(不可为接口)的所有连接点(要求注解的Retention级别为CLASS),如@within(com.google.common.annotations.Beta)
;对子类不起效,除非使用@within(xxxx)+
或者子类中继承的方法未进行重载。@target
:匹配标注有指定注解的类(不可为接口)的所有连接点(要求注解的Retention级别为RUNTIME),如@target(org.springframework.stereotype.Repository)
;对子类不起效。@args
:匹配传入的参数类标注有指定注解的所有连接点,如@args(org.springframework.stereotype.Repository)
。@anntation
:匹配所有标注有指定注解的连接点,如@annotation(com.aop.annotation.AdminOnly)
。
除此之外,表达式还可以用 &&
、 ||
、 !
进行合并,详见3.4.2小节。
@within 和 @target的区别:
@within
:若当前类有注解,则该类对父类重载及自有方法被拦截。子类中未对父类的方法进行重载时,亦被拦截。@target
:若当前类有注解,则该类对父类继承、重载及自有的方法被拦截;对子类不起效。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 【源码笔记】LinkedList
【源码笔记】LinkedList前言链表实现接口定义实现类头插入指定位置插入尾插入移除头元素移除尾元素移除指定值元素是否包含指定元素是否为空LinkedListNodeadd()add(int index, E element)addAll(int index, Collection<? extends E> c)addAll(Collection<? extends…...
2024/4/16 23:54:21 - JVM(JAVA虚拟机介绍)
Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。本文首先简要介绍从Java文件的编译到最终执行的过程,随后对JVM规格描述作一说明。一.Java源文件的编译、下载、解释和执…...
2024/4/16 10:27:54 - 记录在阿里云服务器上发布tomcat web项目的全过程(centOS7.7+ECS)(三)sqlserver+web项目
【相关链接】记录在阿里云服务器上发布tomcat web项目的全过程(centOS7.7+ECS)(一)jdk 【相关链接】记录在阿里云服务器上发布tomcat web项目的全过程(centOS7.7+ECS)(二)tomcat 【相关链接】记录在阿里云服务器上发布tomcat web项目的全过程(centOS7.7+ECS)(三)sqlserver+web项…...
2024/4/16 23:54:45 - 设计模式-服务定位器模式
上文(设计模式-拦截过滤器模式):https://blog.csdn.net/qq_16498553/article/details/107128062目录背景服务定位器模式是什么?角色:优点:缺点:个人理解:服务定位器模式类图源码下载:https://gitee.com/hong99/design-model/issues/I1IMES实现代码 结果源码下载:https://git…...
2024/4/16 10:27:59 - ElasticSearch (ES)学习之路(五)ES 复杂搜索( 匹配 过滤 精准 排序 高亮)
ElasticSearch (ES)学习之路(五)ES 复杂搜索( 匹配 过滤 精准 排序 高亮) 在上文中,我们查询小红 其kinbana 语法是这样写的 GET /lei/one/_search?q=name:小丽前文中,也是做了分析,由于有多个包含‘小丽’的数据,所以我们在搜索’小丽’ 时将与之相匹配的数据全部…...
2024/4/19 17:42:30 - AID_Python_IO并发之阻塞IO 与非阻塞IO
IO并发 分类阻塞IO 非阻塞IO IO多路复用 异步IO等阻塞IO 1.定义:在执行IO操作时如果执行条件不满足则阻塞。阻塞IO是IO的默认形态。 2.效率:阻塞IO是效率很低的一种IO。但是由于逻辑简单所以是默认IO行为。 3.阻塞情况: 因为某种执行条件没有满足造成的函数阻塞 e.g. accept…...
2024/4/16 23:54:45 - Netty源码分析之拆包粘包相关处理器的实现原理
1. 为什么要粘包拆包 为什么要粘包 首先你得了解一下TCP/IP协议,在用户数据量非常小的情况下,极端情况下,一个字节,该TCP数据包的有效载荷非常低,传递100字节的数据,需要100次TCP传送,100次ACK,在应用及时性要求不高的情况下,将这100个有效数据拼接成一个数据包,那会…...
2024/4/16 10:27:44 - 音视频学习(十二、AAC格式介绍)
每次都普及这些基础的时候,都是要转载别人的文章,因为我也不熟,也是一边学习一边记录学习的过程,这些基础知识都是需要补的。 转载链接:AAC ADTS格式分析 12.1 AAC基本介绍 AAC音频格式:Advanced Audio Coding(高级音频解码),是一种由MPEG—4标准定义的有损音频压缩格…...
2024/4/16 10:27:04 - HttpClient-HttpClient4.5使用代理服务器访问外网
前言: 当你处于公司内网无法对外网的接口访问,但是我们有一些第三方的接口处于外网,所以这个时候就需要配置代理服务器发出请求达到我们想要的目的。通过代理服务器访问外网: 通过HttpClient官网提供的文档,发现HttpClient4.5的代理服务器做如下配置(附上HttpClient官网提…...
2024/4/16 10:28:04 - 用Eclipse和Mysql编写模拟银行系统
用Eclipse和Mysql编写模拟银行系统 这是我的第一篇博客,本人大一结束,想通过CSDN记录一下自己学习程序的过程,也希望能够帮助到其他同学,有待改进的地方欢迎指正。 作业内容 考试题目及具体要求:在MySQL数据库中建立名为bank的数据库,在bank库中建立银行储户表account存储…...
2024/4/16 10:27:59 - 初学者的Linux网络基础服务
Linux网络基础服务 文章目录Linux网络基础服务Linux ifconfig命令查看所有活动网络接口的信息查看指定网络接口信息hostname命令查看主机名称route命令查看路由表条目netstat命令查看网络连接情况ping命令traceroute命令跟踪数据包域名解析虚拟机网卡的3种模式三种模式的简单介…...
2024/4/27 2:26:08 - 神是什么?神即道 道法自然 如来 ---《天道》王志文饰丁元英 左小青饰芮小丹
神是什么?神即道 道法自然 如来 —《天道》王志文饰丁元英 左小青饰芮小丹 我的观后感:我是一口气从1集看完24集,看了18个小时,中间没有睡觉也没有吃饭,这部连续剧给我很大的冲击,是目前为止我看过的最好的片子,男主角(王志文饰)丁元英已经超凡脱俗,看透了人性的本源…...
2024/4/16 10:28:30 - 一步一步学linux操作系统: 16 线程是如何创建的以及与进程创建的区别
进程和线程 无论是进程还是线程,在内核里面都是任务 线程不是一个完全由内核实现的机制,它是由内核态和用户态合作完成的。pthread_create 不是一个系统调用,是 Glibc 库的一个函数 Glibc 里的pthread_create pthread_create 函数 \glibc-2.29\nptl\pthread_create.cint __p…...
2024/4/16 10:28:45 - TikTok抖音国际版留存背后的数据和算法推演
导读:最近在朋友组织的创业群听到了一些前辈和同行讨论的话题,收获很大,拿出来分享给大家。这个话题就是TikTok在美国的留存率一年之内取得了大幅上涨,有哪些地方做对了呢?本文将站在算法工程师的角度做一些个人的猜想和推演,不吝拙见,以求抛砖引玉,望不妥之处请批评指…...
2024/4/16 10:27:39 - redis 2020面试必看
概述什么是RedisRedis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。与…...
2024/4/16 10:28:45 - DockerToolbox安装docker - Windows 10
DockerToolbox安装docker - Windows 10一、前言由于本机使用的是win10家庭版操作系统,无法直接Docker for Windows安装,因此只好使用Docker Toolbox。在安装过程中遇到了不少问题,花费了不少时间,才把docker启动起来。在此记录一下过程,以供参考。二、准备工作2.1 操作系统…...
2024/4/4 20:55:47 - 比较新的okhttp请求
https://github.com/liujingxing/okhttp-RxHttp/wiki/%E5%85%B3%E4%BA%8EHttpshttps://github.com/liujingxing/okhttp-RxHttp...
2024/4/29 0:36:02 - pytorch—yolov3训练自己的数据集
注意:本篇博客直接使用VOC2007数据集1.数据集Labelimg软件构建数据集,Labelimg项目地址:https://github.com/tzutalin/labelImg,Labelimg快捷键:Ctrl + u Load all of the images from a directory Ctrl + r Change the default annotation target dir Ctrl + s …...
2024/4/19 7:38:04 - SCrapy自定义配置数据读不出来问题
今天遇到一个小问题,在setting.py里边写的数据,怎么也读取不出来,后来发现居然是setting.py里边的变量都要大写,都要大写,都要大写,重要的事情说三遍。读取的时候,在py文件里,引入这个:from scrapy.utils.project import get_project_settings然后这样读取即可:setti…...
2024/4/26 6:30:00 - 02一元多项式的乘法与加法运算(java顺序存储结构实现)
一元多项式的乘法与加法运算(java顺序存储结构实现) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输…...
2024/4/16 10:29:43
最新文章
- 华为手机ip地址怎么切换
随着移动互联网的普及,IP地址成为了我们手机上网的重要标识。然而,在某些情况下,我们可能需要切换手机的IP地址,以更好地保护个人隐私、访问特定地区的内容或服务,或者出于其他网络需求。华为手机作为市场上的热门品牌…...
2024/5/2 14:04:42 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - STL--vector有哪些应用场景
vector 在 C 中是一种非常灵活和强大的容器,适用于多种不同的应用场景。以下是一些常见的应用场景: 1 动态数据集合:当你不确定数据集的大小,或者数据集的大小会随时间变化时,vector 是理想的选择。例如,在…...
2024/5/1 16:11:41 - JAVA------基础篇
java基础 1.JDK JDK :java development kit JRE:java runtime environment JDK包含JRE java跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。 当你想要在Linux系统下运行,则需要…...
2024/5/1 3:44:40 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/2 9:28:15 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
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/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和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/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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