带你彻底掌握 Lambda 表达式(上)
更多技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~
说明:
由于 Lambda 表达式涉及的周边知识点实在太多,因此拆分为上、下两篇文章讲解,本篇为上篇,下篇随后放出,大家可在我公众号中查找。
目录介绍:
上篇,主要讲 1~4 章节,下篇,主要介绍 5~8 章节。
序言
JDK8 日渐成为项目开发中的主流。
但平时在和很多小伙伴的交流和面试中,发现很多人仍停留在 JDK7 及以前的认知层面,Lambda 表达式、方法引用、Stream 流、default 关键字,很少使用,甚至还有不少小伙伴不知道怎么用!!
不客气的说,不掌握 JDK8 的新特性,面试通过基本很难很难。换位思考,若不掌握,你面试不慌吗?
而 Lambda 表达式,更是 JDK8 新特性中的重中之重,它能够简化我们的传统操作模式。
本文会帮你详细梳理 Lambda 表达式的前世今生,有原理讲解,有示例实战,助力你面试起飞。
文章略长,但一定是干货满满的,对于技术文章而言,短小精悍的特点并不是好事,因此我写的文章都偏长,注重干货,注重前因后果,做到知其然更要知其所以然。如果你有耐心读下去,一定会有较大收货。如果没时间看,可收藏留以备用~
在具体描述 Lambda 表达式之前,我们需要补充一些基础知识:什么是函数式接口。
1. 函数式接口的定义
提到函数式接口( functional interface ),就牵扯到一个注解:@FunctionInterface
。
所谓函数式接口,是指的一类添加了 @FunctionInterface
注解的接口。换言之,只要一个接口有@FunctionInterface
注解,那这个接口就是函数式接口。
举个例子就明白了。
当你在对任务 taskA 处理时,如果想异步处理,不影响主干流程的继续进行,你会怎么做?
a) 初级版:新增一个类,实现 Runnable 接口
你会说很简单呐,另起一个线程去执行任务 taskA 就可以了呀,喏,如下:
/*** @author: sss*/
public class TaskAThread implements Runnable {@Overridepublic void run() {// process taskA...}
}public class Main {public static void main(String[] args) {// new 一个新线程,执行任务ARunnable taskA = new TaskAThread();new Thread(taskA).start();// 主线程继续做其他事情System.out.println("do other things...");}
}
这种方式是可以实现,但有没有其他方式呢?
b) 进阶版:使用匿名内部类
有些小伙伴明显的发现了上面代码中的问题:繁琐!!只是为了创建一个线程并使用它的 run()
方法,还要新增一个类,没有必要,直接使用匿名类就解决啦:
public class Main {public static void main(String[] args) {// 通过匿名类来创建一个新线程,执行任务ARunnable taskA = new Runnable() {@Overridepublic void run() {// process taskA...}};new Thread(taskA).start();// 主线程继续做其他事情System.out.println("do other things...");}
}
通过匿名类的方式,省去了新增一个类的操作,大大简化。但若使用 Lambda 的方式,会更加简洁。
c) 高级版:使用 Lambda 表达式
public static void main(String[] args) {// 通过匿名类来创建一个新线程,执行任务Anew Thread(() -> {System.out.println("正在异步处理 taskA 中...");// do things...}).start();// 主线程继续做其他事情System.out.println("do other things...");
}
有没有发现很神奇,类似() -> {...}
的这种箭头式写法竟然能通过编译!而且还能运行(不信的小伙伴可以试试)!这种就是 Lambda 表达式的其中一种写法,不理解的小伙伴也没关系,我们后面会详细解释。
也许这种 Lambda 写法很多小伙伴见过,并习以为常,但为什么可以运行,你知道根本原因吗?
这里就体现出函数式接口的作用了。我们去看一下 JDK7 和 JDK8 中关于 Runnable
接口的定义,如下。大家有发现什么不同点了吗?
眼尖的小伙伴一定发现了,JDK8 中多了个注解 @FunctionalInterface
。这就是为何能在 JDK8 中可以使用这种箭头式的 Lambda 写法。
本小节最开始时我们也提到了此注解。从上图也能看出,@FunctionalInterface
是 JDK8 中新引入的一个注解,它定义了一类新的接口(即函数式接口),该类接口有且只能有一个抽象方法。
它主要用于编译期的错误检查,如果一个接口不包含抽象方法(eg: Serializable、Cloneable
等标记接口),或者包含多个抽象方法,都不符合 @FunctionalInterface
注解的定义,加了就会出错,如下这种:
// 错误示例 1
@FunctionalInterface
interface InvalidInterfaceA {
}// 错误示例 2
@FunctionalInterface
interface InvalidInterfaceB {void testA();void testB();
}
正确示范:
@FunctionalInterface
interface InvalidInterfaceC {void testC();
}@FunctionalInterface
interface InvalidInterfaceD {void testD();default void testE() {System.out.println("this is a default method.");}
}
@FunctionalInterface
修饰的接口,只能有一个抽象方法,但并代表只能有一个方法声明,像上面的 InvalidInterfaceD
接口,还有 default
关键字修饰的 testE()
方法,但这是一个有默认实现的方法,并不是抽象方法,因此接口 InvalidInterfaceD
依然符合函数式接口的定义。
另外,我们仔细看下注解的描述片段:
上面截图中的信息量较大,分为两块内容。
第一块内容是使用 @FunctionalInterface
注解需满足的 2 个条件:
- 必须是接口,不能是注解、枚举或类,限定了使用的类型范围
- 被注解的接口,必须满足函数式接口的定义,即只能有一个抽象函数
第二块内容是 @FunctionalInterface
注解的功能已内置于编译器的处理逻辑中:不管一个接口是否添加了 @FunctionalInterface
注解,只要该接口满足函数式接口的定义,编译器都会把它当做函数式接口。
看下面的例子:
interface MathOperation {int operation(int a, int b);
}public static void main(String args[]) {MathOperation addition = (int a, int b) -> a + b;
}
上面的 MathOperation
接口,并没有添加 @FunctionalInterface
注解,但依然可以使用 Lambda 表达式,就是因为它符合函数式接口的定义,JDK8 的编译器默认将其当做函数式接口(上面代码中的箭头表达式不懂没关系,我们下面会详细讲解)。
在 JDK8 中,推出了一个新的包:java.util.function
,它里面内置了一些我们常用的函数式接口,如 Predicate
、Supplier
、Consumer
等接口。
2. 什么是 Lambda 表达式
总结了很久,发现还是很难用语言来定义什么是 Lambda 表达式,它更适合结合示例来说明。
2.1 示例 1
还是以上面的异步线程执行任务 A 为例。在 Lambda 表达式之前,我们最精简的写法就是使用匿名类,但若用 Labmda 表达式,则可直接简化成一行代码。看下面代码示例的对比:
public static void main(String[] args) {// 使用匿名内部类new Thread(new Runnable() {@Overridepublic void run() {System.out.println("正在异步处理 taskA 中...");}}).start();// 使用 Lambda 表达式new Thread(() -> System.out.println("正在异步处理 taskA 中...")).start();
}
上面的示例中,使用 Lambda 表达式,进一步简化了匿名类,这也是 Lambda 表达式最常用的功能。
2.2 示例 2
为进一步强化大家对 Lambda 表达式的理解,再举一个最常用的示例,集合类的遍历操作。在 JDK8 以前,List 的遍历操作,要么用 for 循环,要么用迭代器(Iterator):
public static void main(String[] args) {List<String> strList = Arrays.asList("a", "b", "c", "d");// 方式1for (int i = 0; i < strList.size(); i++) {System.out.println(strList.get(i));}// 方式2,语法糖,本质还是下面的方式3for (String str : strList) {System.out.println(str);}// 方法3Iterator<String> iterator = strList.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}
}
上面的代码中,方式 2 是一种语法糖,本质上还是方法 3,大家可通过编译之后的 .class
文件来查看。
但在 JDK8 中,我们可使用 forEach()
方式来实现 Lambda 表达式下的遍历操作。
strList.forEach(str -> System.out.println(str));
进一步探究,forEach()
是怎么做到的,看下其源码:
default void forEach(Consumer<? super T> action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}
}/*** Represents an operation that accepts a single input argument and returns no* result. Unlike most other functional interfaces, {@code Consumer} is expected* to operate via side-effects.** <p>This is a <a href="package-summary.html">functional interface</a>* whose functional method is {@link #accept(Object)}.** @param <T> the type of the input to the operation** @since 1.8*/
@FunctionalInterface
public interface Consumer<T> {void accept(T t);default Consumer<T> andThen(Consumer<? super T> after) {Objects.requireNonNull(after);return (T t) -> { accept(t); after.accept(t); };}
}
forEach()
的形参是一个 Consumer
对象,而 Comsumer
接口又是一个有 @FunctionalInterface
注解的函数式接口,其抽象方法是 accept(T t)
。
此时,如果我们撇开 Lambda 表达式,使用匿名类,依然可以做到,如下:
strList.forEach(new Consumer<String>() {@Overridepublic void accept(String str) {System.out.println(str);}
});
既然 Consumer
是一个函数式接口,就可以使用更简洁的 Lambda 表达式:
strList.forEach(str -> System.out.println(str));
2.3 小结
有了前面两个示例,你应该对 Lambda 表达式有个大体的印象了。
若一个方法的形参是一个接口类型,且该接口是一个函数式接口(即只有一个抽象方法),那么就可以使用 Lambda 表达式来替代其对应的匿名类,达到易读、简化的目的。
通常,Lambda 表达式的格式如下:
() -> {...}
或
(xxx) -> {...}
从前面的示例也可以看到,Lambda 表达式其实就代表了一个接口的实例对象,并且这个接口还得是一个函数式接口,即只能有一个抽象方法,这个抽象方法的具体实现,就是 Lambda 表达式中箭头的右侧 body 部分。
3 Lambda 表达式特性及示例
前面我们初识了 Lambda 表达式,那么,它又有哪些特性呢?
- 特性 1:由箭头将表达式分为左、右两个部分
必须是形如 () -> {...}
的形式。
- 特性 2:入参可为零个、一个、多个
当为零个时,箭头左侧的括号不可省略:
() -> {System.out.println("test expression!");};
() -> 123;
当入参为 1 个时,箭头左侧的圆括号可省略:
(x) -> {System.out.println(x);};
x => x + 2;
当入参为多个时,左侧括号不能省略:
(x, y, z) -> {System.out.println(x);System.out.println(y);System.out.println(z);
};
以上都是合法表达式。但是,这并不意味着他们可以独立存在。若不给这些表达式赋左值,则编译器会报错:Not s statement
。
前面我们也有提到,Lambda 表达式其实是一个实例对象,因此,赋左值,自然是赋值给某个特定类型的实例。它是如何赋值的呢?可手动指定,也可根据 IDE 自动生成(此时编译器会自动推断左值类型)。在正常使用过程中,我们往往都会有目的的手动赋左值。
- 特性 3:入参类型声明可省略,编译器会做自动类型推断
List<String> strList = Arrays.asList("a", "b", "c", "d");
strList.forEach(str -> {System.out.println(str);
});
上方代码中,Lambda 表达式中的 str
局部变量,不需要再次声明类型,因为编译器会从 strList
变量中推断出 str
变量的类型为 String
。
- 特性 4:表达式右侧的 body 中,只有一条语句,则可省略大括号,否则不可省略
上面的 strList
变量的 forEach()
方式的遍历,可简化为如下形式:
strList.forEach(str -> System.out.println(str));
- 特性 5:表达式的返回值是可选的
上面的 forEach()
方式,就是没有返回值的,也可认为是 void。
4. 为何引入 Lambda 表达式
我们先来简述下几种常见的编程范式。
4.1 几种常见的编程范式
编程范式代表了计算机编程语言的典型风格和编程方式,通俗来说,编程范式就是对各种编程语言的分类,分类的依据,就是对各类编程语言的行为和处理方式进行抽象拔高,再看是否都是一类。
这么说比较抽象,举几种常见的编程范式:命令式编程、声明式编程和函数式编程。
我们看一个具体示例:
你眼前有一个水果篮,里面放了一堆的苹果和桔子。这时候,你老板跟你说:“小张,交给你一个事儿,你从水果篮中一个个拿出水果,如果是桔子,则放回,继续从水果篮中拿下一个水果,如果是苹果,再看是否有 M 标签,如果没有,则放回,如果有 M 标签,再看这个苹果是否已坏掉,如果坏掉,则返回,如果没坏掉,则把该苹果挑出来”,然后你很快就按老板的指示圆满完成了任务。
这时,如果你老板是程序员,你是计算机,那么你老板就在使用命令式编程。他会把每一步该怎么做都告诉你,然后你只需要严格按照他要求的去做就可以完成任务。
但是,我们考虑另外一种情况:
你老板跟你说:“小张,交给你一件事,把水果篮里的贴了 M 标签的没有坏掉的苹果都捡出来”。然后你按照老板的要求,一个个把符合条件的苹果捡出来。
此时,老板并没有告诉你该怎么一步步的把符合条件的苹果捡出来,它只是告诉了你他想要的是什么(what),但并没有告诉你该怎么做(how),这种就是声明式编程。
一般来说,绝大多数的程序员都是使用的命令式编程的风格,像 Java、C、C++ 等,都属于命令式编程语言,它们都需要由程序员来严格指定每一步该怎么做,语言本身是不会做任何特殊逻辑处理。这和冯诺依曼体系的计算机一致,指令存储在内存中,由 CPU 一条条执行指令做运算,并将数据再放回内存。
从编程范式的角度来看,像 Java、C++ 等这些高级编程语言,本质上和更接近机器语言的汇编语言没有区别,都是基于冯诺依曼体系计算机模式的思想,都是命令式编程。相比汇编语言,高级语言只是更符合我们人类认知的习惯和便于理解、编写,但编译后,还是变成了天书般的机器语言。
我们经常接触的 SQL 语句,其实就是声明式编程。如下面的语句:
## 找出所有学生的数学成绩
select name,age,course,scorefrom studentwhere course= "math";
上面的 SQL 语句,只是声明了需要什么(找出所有学生的数学成绩),但至于怎么找,语言层面不需要关心,交给数据库系统来处理。
函数式编程,是近几年火起来的一种编程范式,但其早就存在于我们周围,想 JavaScript 就是一种函数式编程语言。函数式语言最鲜明的特点,是允许将函数作为入参传递给另一个函数,且也可以返回一个函数。像我们常用的 Java 语言,其函数是无法独立存在的,必须声明在某个类的内部,换句话说,Java 中的函数是依附于某个特定类的,且服务于该类的域变量。因此若要按等级来划分,对象或变量的级别是高于函数的。但在函数式编程语言中,函数可当做参数传递,也可作为返回值,我们称之为高阶函数。看下面的示例:
def sum(x):def add(y):return x + y;return add;sum2 = sum(2);
elementB = sum(7);
a = sum2(3); # 2 + 3 = 5
b = elementB(1); # 7 + 1 = 8
print a; # 输出5
print b; # 输出8
示例中,sum()
函数内部定义了add()
函数,两者各自有一个入参,且 sum()
函数的返回值是 add()
函数。那么这里的 sum()
就是一个高阶函数。它做了件什么事情呢?很简单,求两个数值的和。在 Java 中,它是怎么实现的呢?
public int sum(int x, int y) {return x + y;
}
这是 Java 中的写法,但函数式编程的计算思想和我们常规理解的不同,它使用了两个函数来实现。比如前面的示例中,要计算 2+3,首先通过函数 sum(2)
得到一个变量 sum2
,它同时也是一个函数,即 add()
函数,我们再次把数字 3 作为参数传进去:sum2(3)
,就得到了求和的值 6。
通过以上的示例对比,就能发现函数式编程的核心思想:通过函数来操作数据,复杂逻辑的实现是通过多个函数的组合来实现的。相比声明式编程和命令式编程,它是一种更高级别的抽象:汇编语言要求我们如何用机器能理解的语言来写代码(指令);高级语言如 Java、C++ 则是使用易于人理解的方式,但如何做,还需要我们来一步步设定,仍未逃脱指令式的思维模式;函数式编程,通过函数来操作数据,至于函数内部做了什么,交给其他函数来组合实现。
4.2 为何引入 Lambda
因为 Lambda 表达式是属于函数式编程的范围(将函数视作变量或对象),且后面要讲到的 Stream 流,都属于函数式编程的范围,所以,这个问题的问法是可以再扩大化,即:
为何会引入函数式编程的用法?
a) 原因 1:使得代码更简洁,可读性强
如果你有仔细阅读前面的介绍,你会发现,Lambda 表达式本质上就是一个函数,就是其对应的函数式接口的那个唯一抽象方法的具体实现!再来回顾一下代码:
new Thread(() -> System.out.println("this is a Lambda expression!")).start();
Thread 类的有参构造函数 Thread(Runnable runnable)
,本来参数是一个 Runnable 对象,
但 Java 作为一枚面向对象的编程语言,除了像 int、double、char 等 8 种基本数据类型,其他的一切都是对象,包括类(class)、接口(interface)、枚举(Enum)、数组(Array)。但函数并不是对象,它只能依附于对象而存在,按层级划分的话,函数是低于对象的,它是无法作为一个方法的入参或者返回值的。
在这种限制下,Java 的部分功能代码就难免出现臃肿的现象。比如:难看又无法避免的匿名内部类、集合类的过滤、求和、转换等操作。而 Lambda 表达式的出现,就避免了这种臃肿。
而函数式编程的优点就是使用简洁、可读性高(只看函数名就知道要做什么操作),如下的 Stream 流操作:
List<String> nameList = Arrays.asList("tom", "kate", "jim", "david");
List<String> newNameList = nameList.stream().filter(name -> name.length() > 3).map(name -> name.toUpperCase()).sorted().collect(Collectors.toList());
上面代码要实现的功能一目了然,没有大量的匿名内部类,没有多余的中间变量,没有复杂的逻辑计算。若摒弃 JDK8 的写法,则需要使用又臭又长的代码,耗费两倍不止的时间才能实现。
所以,从可读性、易用性角度讲,函数式编程的写法完胜 JDK7 以前的 Java 式写法。
b) 原因 2:传递行为,而不止是传递值,更便于功能复用
因为函数是代表了一连串行为的集合,代表的是一组动作,而不止是一个数据,举个例子就明白了,看下面的示例:
// 给定一个整数集合
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);// 求所有元素的和
private Integer sumAll(List<Integer> list) {int sum = 0;for (Integer ele : list) {sum += ele;}return sum;
}// 求所有偶数元素的和
private Integer sumEven(List<Integer> list) {int sum = 0;for (Integer ele : list) {if (ele % 2 == 0) {sum += ele;}}return sum;
}// 求所有奇数元素的和
private Integer sumOdd(List<Integer> list) {int sum = 0;for (Integer ele : list) {if (ele % 2 == 1) {sum += ele;}}return sum;
}
// 求所有大于3的元素的和
private Integer sumLargerThan3(List<Integer> list) {int sum = 0;for (Integer ele : list) {if (ele > 3) {sum += ele;}}return sum;
}
作为一个有追求的程序员,对上面的这种代码是不能忍的,重复度太高了有木有!除了元素的判断条件不同,其他处理方式都相同。
那,对于上面的代码,我们能怎么优化呢?大家也许会想到策略模式,每一种处理,都对应一个不同的计算策略,设计模式用起来:
public interface sumStrategy {Integer sum(List<Integer> list);
}public class SumAllStrategy implements sumStrategy {@Overridepublic Integer sum(List<Integer> list) {int sum;for (Integer ele : list) {sum += ele;}return sum;}
}public class SumEvenStrategy implements sumStrategy {@Overridepublic Integer sum(List<Integer> list) {...}
}// 实际调用
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
// 示例1:当想求所有元素的和时,使用 SumAllStrategy 类
Strategy strategy1 = new SumAllStrategy();
strategy1.sum(list);// 示例2:当想求所有偶数元素的和时,使用 SumEvenStrategy 类
Strategy strategy2 = new SumEvenStrategy();
strategy2.sum(list);
虽然设计模式用起来了,逼格也高起来了,然并卵,代码量依然没有减少,代码并没有做到复用的目的。
有了 Lambda 表达式,以上的一切都变得简单起来,我们可以依赖一个函数式接口:Predicate
接口。
// @since 1.8
@FunctionalInterface
public interface Predicate<T> {/*** Evaluates this predicate on the given argument.** @param t the input argument* @return {@code true} if the input argument matches the predicate,* otherwise {@code false}*/boolean test(T t);...}
里面唯一的抽象方法 test(T t)
,一个入参,然后返回一个布尔值,很符合这里的元素判断。
Lambda 的使用如下:
private Integer sum(List<Integer> list, Predicate condition) {int sum = 0;for (Integer ele : list) {if (condition.test(ele)) {sum += ele;}}return sum;
}// 实际使用
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
// 示例1:求所有元素的和
int sum = sum(list, x -> true);
// 示例2:求所有偶数元素的和
sum = tester.sum(list, x -> (int)x % 2 == 0);
// 示例3:求所有大于5的元素的和
sum = tester.sum(list, x -> (int)x > 5);
通过 Lambda 表达式,使用一个函数就搞定一切。
在上面的示例中,多个重复代码片段的唯一异同点,就是对元素的判断行为不同。而 Lambda 表达式,就可以把不同的判断行为当做参数传入 sum()
方法中,达到复用的目的。
c) 原因 3:流的并行化操作
新引入的 Stream
流操作,可以串行,也可以并行:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
// 串行
Integer reduce = list.stream().reduce((a, b) -> a + b).get();
// 并行,相比串行多了 parallel() 函数
Integer reduce = list.stream().parallel().reduce((a, b) -> a + b).get();
小结
关于 Lambda 表达式的基本使用,本篇就先介绍到这里。但仅仅掌握这些是不足以应付面试的!
在下篇中,我们将会围绕以下几点内容展示:
- Lambda 表达式和匿名内部类的区别?
- 变量作用域
- Java 中的闭包是什么?
- 常用的 Consumer、Supplier 等函数式接口怎么用?
我的公众号文章推荐:
- HashMap 面试题,看这一篇就够了!
- Linux 常用命令用法汇总
- 你了解 Referer 吗?
- ShadowSocks 的原理和使用
- 想定制化你的电脑开机吗?
更多技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- python深度学习读书笔记(一)
一 从数据中学习表示 机器学习的要素输入数据点 预期输出的示例 衡量算法效果好坏的方法机器学习和深度学习的核心问题在于有意义的变换数据,换句话说在于学习输入数据的有用表示 学习指的是寻找更好数据表示的自动搜索过程二 深度学习的工作原理 深度学习:学习数据表示的多级…...
2024/3/29 13:00:55 - Spring Boot中配置.yml和.proerties
原文:https://www.jianshu.com/p/b4e606c1ffdd #JEST (Elasticsearch HTTP客户端)(JestProperties) spring.elasticsearch.jest.connection-timeout = 3s #连接超时。 spring.elasticsearch.jest.multi-threaded = true #是否从多个执行线程启用连接请求。 spring.elast…...
2024/3/29 13:00:54 - 【Java】泛型
重要声明:本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。本文更新不及时,请到原地址查看原文。 原地址:【Java】泛型。 一、泛型简介 泛型听名知意,它是和Java中数据类型有点关系的东西,它本什么并不是某个类型。为了更好的使用它,必…...
2024/5/6 5:41:59 - 2020 年技术趋势一览:AutoML、联邦学习、云寡头时代的终结
2020-01-12 12:04:26作者 | Roberto Sannazzaro,Ben Longstaff译者 | 夕颜出品 | AI科技大本营(ID:rgznai100)在 2020 年来临之际,新年前夕往往是人们回顾过去一年并展望来年的好时机。本文将深入探讨了关于 AI 的技术和非技术方面的趋势,讨论一下相对较新的趋势,如AutoM…...
2024/4/23 2:01:13 - Navicat Premium 下看不到PostgreSQL下已创建的表(已解决!!)
Navicat Premium 12下看不到PostgreSQL下已创建的表正文问题:通过Navicat Premium 12连接PostgreSQL之后发现找不到已存在的表,通过PostgreSQL自带的连接工具可以看到表是已经存在了的。解决办法换最新版本Navicat Premium,这里使用Navicat Premium 15即可解决问题。网盘下载…...
2024/4/20 22:04:52 - API规范约定,让你写出高质量的API!
摘要 API的设计原则:控制API的粒度和数量 命名要遵循简单、可读、统一原则; 优先设计API,然后编码多说一句: 在现在流行的微服务、敏捷开发等这些项目一般为了更高效的开发,节约编写文档的成本,API服务都会使用Swagger来生成描述。URL设计【针对后端开发】 HTTP规范 动词…...
2024/5/4 12:51:20 - 7分钟部署自己的ngrok
7分钟部署自己的ngrok文章背景前置准备安装软件 文章背景 最近因为要做微信公众号的开发, 需要用到外网ip. 然而, 网上的免费版不是速度慢就是定期更换ip,烦不胜烦, 故决定使用linux服务器和域名自己部署一个ngrok 注: 后面看钉钉开发文档发现他有提供内网穿透工具, 不过我已经…...
2024/3/29 13:00:48 - 《Redis入门指南》笔记
敬请期待~...
2024/4/30 9:13:52 - SpringData
SpringData...
2024/3/29 13:00:46 - golang学习笔记(一)
接口还可以嵌套接口。一个接口可以包含一个或多个其他的接口,这相当于直接将这些内嵌接口的方法列举在外层接口中一样。 空接口 interface{} 所有的类型都实现了空接口。任意类型的变量都能当成空接口。 import _ “net/http/pprof” golang对没有使用的导入包会编译报错,但是…...
2024/3/28 21:14:56 - Vue 页面传参方式 Query 和 Params
1. query 与 params 传参query 需要和配合 path 属性使用,携带参数会拼接在请求路径后,效果同 Get 请求方式http://localhost:8033/Permission/Role/Form?productCode=crm-operate&roleId=1&roleName=admin&roleType=-1&roleDesc=%E7%AE%A1%E7%90%86%E5%…...
2024/4/1 11:48:51 - SSSP整合&分页
SSSP整合&分页...
2024/5/4 11:21:19 - 第一章 第18节Java语言基础(Editplus的安装及开发程序并编译运行)
JavaSE视频课程完整版本课程讲师拥有15年BAT大型项目经验,多次参与重大项目研发工作,拥有多年实战技术积累,从0入门讲解,由浅到深的教学,让每一位学员都能学以致用!菜鸟学院9.90去订阅第一章 第18节Java语言基础(Editplus的安装及开发程序并编译运行)查看专栏详情立即解锁…...
2024/3/29 13:00:42 - CentOS7搭建kubernetes集群&配置&常见问题
在CentOS 7服务器上搭建Kubernetes 部署方式各组件以守护进程(服务)方式运行 各组件以容器方式运行(使用kubeadm部署)√节点服务分布master nodeskube-apiserver,kube-controller-manager,kube-scheduler , kube-proxy,etcd , pause,coredns scheduler分配部署k8s集…...
2024/3/29 13:00:41 - 基于log4cxx的日志封装
//头文件 #pragma once //添加log4cxx头文件 #pragma once //添加log4cxx头文件 #include <iostream> #include <log4cxx/logstring.h> #include <log4cxx/logger.h> #include <log4cxx/propertyconfigurator.h> #include <log4cxx/helpers/excepti…...
2024/3/29 13:00:40 - Acesrc and String Theory 【HDU - 6661】【后缀数组】
题目链接题目问的是有多少个K连续重复子串,即连续出现K次的重复子串。思路:肯定是往后缀数组上想,但是中间出了点差错。错误一:在特判K==1的时候,应该是子串的数量,而不是文本串的长度,那么子串的数量就是。错误二:在我们枚举长度L的时候,算他们同时包含i和i + L的且连…...
2024/4/20 20:14:32 - centos 设置 ssh超时自动断开链接
1.针对特定用户设置cd ~ #用户家目录vi .bash_profileexport TMOUT=600 #加入超时时间单位ssource .bash_profile #重新加载文件2.全局设置vi /etc/ssh/sshd_configClientAliveInterval 60 #超时时间ClientAliveCountMax 3 #允许最大次数service sshd restart #重启服务ClientA…...
2024/3/29 7:35:24 - 第一章 第19节Java语言基础(注释概述及其分类)
JavaSE视频课程完整版本课程讲师拥有15年BAT大型项目经验,多次参与重大项目研发工作,拥有多年实战技术积累,从0入门讲解,由浅到深的教学,让每一位学员都能学以致用!菜鸟学院9.90去订阅第一章 第19节Java语言基础(注释概述及其分类)查看专栏详情立即解锁全部专栏...
2024/3/29 7:35:26 - 报错:Invalid bound statement (not found): com.wshy.example.dao.UserDao.getUsers
在跑网上微服务例程时,运行microservice-provider,出现以下报错 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.wshy.exam…...
2024/4/22 1:40:15 - javaScript数组怎么删除指定元素?
js数组是js部分非常重要的知识,有时我们有这么个需求js数组删除指定元素,先定义一个函数来获取删除指定元素索引值,然后用js数组删除的方法,来删除指定元素即可,就两步不难,很简单。1、JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,也就是索引值,代码如…...
2024/3/29 7:35:20
最新文章
- 【C++】对文章分词,并对词频用不同排序方法排序,比较各排序算法效率
文章分词 1.问题描述2.需求分析3.概要设计3.1 主程序流程3.2 函数调用关系 4.主函数实现4.1 main.h4.2 main.cpp 5. 函数实现5.1 processDic函数5.2 forwardMax函数5.3 countWordFreq函数5.4 quickResult函数5.5 其它排序算法效率…...
2024/5/6 7:34:34 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 基于Swin Transformers的乳腺癌组织病理学图像多分类
乳腺癌的非侵入性诊断程序涉及体检和成像技术,如乳房X光检查、超声检查和磁共振成像。成像程序对于更全面地评估癌症区域和识别癌症亚型的敏感性较低。 CNN表现出固有的归纳偏差,并且对于图像中感兴趣对象的平移、旋转和位置有所不同。因此,…...
2024/5/5 23:21:49 - 最新在线工具箱网站系统源码
内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API,同时还自带免费API接口, 是一个多功能性工具程序,支持后台管理、上…...
2024/5/3 2:32:18 - CSS3 高级- 复杂选择器、内容生成、变形(transform)、过渡(transition)、动画(animation)
文章目录 一、复杂选择器兄弟选择器:选择平级元素的唯一办法属性选择器:1、通用:基本用不着,太泛了2、自定义:4种伪类选择器:1、目标伪类:2、结构伪类:3、元素状态伪类:4、伪元素选择器:应用于文字,使网页看起来想杂志5、否定伪类:选择器:not([本选择器的条件]) /*…...
2024/5/5 8:52:14 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/4 23:55:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57