字节面试官问:写一个你认为最好的单例模式?于是我写了7个
面试题:写一个你认为最好的单例模式
面试考察点
考察目的:单例模式可以考察非常多的基础知识,因此对于这种问题,很多面试官都会问。小伙伴要注意,在面试过程中,但凡能够从多个维度考察求职者能力的题目,一定不会被抛弃,特别是比较泛的问题,比如:”请你说说对xxx的理解“之类。
考察范围:工作1到5年经验,随着经验的提升,对于该问题的考察深度越深。
背景知识
单例模式,是一种软件设计模式,属于创建型模式的一种。
它的特性是:保证一个类只有唯一的一个实例,并提供一个全局的访问点。
基于这个特性可以知道,单例模式的好处是,可以避免对象的频繁创建对于内存的消耗,因为它限制了实例的创建,总的来说,它有以下好处:
-
控制资源的使用,通过线程同步来控制资源的并发访问;
-
控制实例产生的数量,达到节约资源的目的。
-
作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。
在实际应用中,单例模式使用最多的就是在Spring的IOC容器中,对于Bean的管理,默认都是单例。一个bean只会创建一个对象,存在内置map中,之后无论获取多少次该bean,都返回同一个对象。
下面来了解单例模式的设计。
单例模式设计
既然要保证一个类在运行期间只有一个实例,那必然不能使用new
关键字来进行实例。
所以,第一步一定是私有化该类的构造方法,这样就防止了调用方自己创建该类的实例。
接着,由于外部无法实例化该对象,因此必须从内部实例化之后,提供一个全局的访问入口,来获取该类的全局唯一实例,因此我们可以在类的内部定义一个静态变量来引用唯一的实例,作为对外提供的实例访问对象。基于这些点,我们可以得到如下设计。
public class Singleton {// 静态字段引用唯一实例:private static final Singleton INSTANCE = new Singleton();// private构造方法保证外部无法实例化:private Singleton() {}
}
接着,还需要给外部一个访问该对象实例INSTANCE
的方法,我们可以提供一个静态方法
public class Singleton {// 静态字段引用唯一实例:private static final Singleton INSTANCE = new Singleton();// 通过静态方法返回实例:public static Singleton getInstance() {return INSTANCE;}// private构造方法保证外部无法实例化:private Singleton() {}
}
这样就完成了单例模式的设计,总结来看,单例模式分三步骤。
-
使用
private
私有化构造方法,确保外部无法实例化; -
通过
private static
变量持有唯一实例,保证全局唯一性; -
通过
public static
方法返回此唯一实例,使外部调用方能获取到实例。
单例模式的其他实现
既然单例模式只需要保证程序运行期间只会产生唯一的实例,那意味着单例模式还有更多的实现方法。
-
懒汉式单例模式
-
饿汉式单例模式
-
DCL双重检查式单例
-
静态内部类
-
枚举单例
-
基于容器实现单例
懒汉式单例模式
懒汉式,表示不提前创建对象实例,而是在需要的时候再创建,代码如下。
public class Singleton {private static Singleton instance;private Singleton() {}// synchronized方法,多线程情况下保证单例对象唯一public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}
其中,对getInstance()
方法,增加了synchronized
同步关键字,目的是为了避免在多线程环境下同一时刻调用该方法导致出现多实例问题(线程的并行执行特性带来的线程安全性问题)。
优点: 只有在使用时才会实例化单例,一定程度上节约了内存资源。缺点: 第一次加载时要立即实例化,反应稍慢。每次调用getInstance()方法都会进行同步,这样会消耗不必要的资源。这种模式一般不建议使用。
DCL双重检查式单例
DCL双重检查式单例模式,是基于饿汉式单例模式的性能优化版本。
/*** DCL实现单例模式*/
public class Singleton {private static volatile Singleton instance = null;private Singleton() {}public static Singleton getInstance() {// 两层判空,第一层是为了避免不必要的同步if (instance == null) {synchronized (Singleton.class) {if (instance == null) {// 第二层是为了在null的情况下创建实例instance = new Singleton();}}}return instance;}
}
从代码中可以看到,DCL模式做了两处改进:
-
在
getInstance()
方法中,把synchronized同步锁的加锁范围缩小了。缩小锁的范围能够带来性能上的提升,不妨思考一下,在原来的
懒汉式
模式中,把synchronized
关键字加载方法级别上,意味着不管是多线程环境还是单线程环境,任何一个调用者需要获得这个对象实例时,都需要获得锁。但是加这个锁其实只有在第一次初始化该实例的时候起到保护作用。后续的访问,应该直接返回instance
实例对象就行。所以把synchroinzed
加在方法级别,在多线程环境中必然会带来性能上的开销。而DCL模式的改造,就是缩小了加锁的范围,只需要保护该实例对象
instance
在第一次初始化即可,后续的访问,都不需要去竞争同步锁。因此它的设计是:-
先判断
instance
实例是否为空,如果是,则增加synchronized
类级别锁,保护instance
对象的实例化过程,避免在多线程环境下出现多实例问题。 -
接着再
synchronized
同步关键字范围内,再一次判断instance
实例是否为空,同样也是为了避免临界点时,上一个线程刚初始化完成,下一个线程进入到同步代码块导致多实例问题。
-
-
在成员变量
instance
上修饰了volatile
关键字,该关键字是为了保证可见性。之所以要加这个关键字,是为了避免在JVM中指令重排序带来的可见性问题,这个问题主要体现在
instance=new Singleton()
这段代码中。我们来看这段代码的字节码17: new #3 // class org/example/cl04/Singleton20: dup21: invokespecial #4 // Method "<init>":()V24: putstatic #2 // Field instance:Lorg/example/cl04/Singleton;27: aload_028: monitorexit29: goto 3732: astore_133: aload_0
关注以下几个指令
而
invokespecial #4
指令,和astore_1
指令,是允许重排序的(关于重排序问题,就不再本篇文章中说明,后续的面试题中会分析到),就是说执行顺序有可能astore_1
先执行,invokespecial #1
后执行。重排序对于两个没有依赖关系的指令操作,CPU和内存以及JVM,为了优化程序执行性能,会对执行指令进行重排序。也就是说两个指令的执行顺序不一定会按照程序编写顺序来执行。
因为在堆上建立对象开辟地址以后,地址就已经定了,而
“将栈里的Singleton instance
与堆上的对象建立起引用关联” 和 “将对象里的成员变量进行赋值操作” 是没什么逻辑关系的。所以cpu可以进行乱序执行,只要程序最终的结果是一致的就可以。
这种情况,在单线程下没有问题,但是多线程下,就会出现错误。
试想一下,DCL下,线程A在将对象new出来的时,刚执行完
new #4
指令,紧接着没有执行invokespecial #4
指令,而是执行了astore_1
,也就是说发生了指令重排序。此时线程B进入getInstance(),发现instance并不为空(因为已经有了引用指向了对象,只不过还没来得及给对象里的成员变量赋值),然后线程B便直接return了一个“半初始化”对象(对象还没彻底创建完)。
所以DCL里,需要给instance加上volatile关键字,因为volatile在JVM层有一个特性叫内存屏障,可以防止指令重排序,从而保证了程序的正确性。
-
new #3 :这行指令是说在堆上的某个地址处开辟了一块空间作为Singleton对象
-
invokespecial #4 :这行指令是说将对象里的成员变量进行赋值操作
-
astore_1 :这行指令是说将栈里的Singleton instance与堆上的对象建立起引用关联
-
关于DCL模式的优缺点:
优点:资源利用率高,既能够在需要的时候才初始化实例,又能保证线程安全,同时调用getInstance()方法不进行同步锁,效率高。缺点:第一次加载时稍慢,由于Java内存模型的原因偶尔会失败。在高并发环境下也有一定的缺陷,虽然发生概率很小。
DCL模式是使用最多的单例模式实现方式,除非代码在并发场景比较复杂,否则,这种方式基本都能满足需求。
饿汉式单例模式
在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
/*** 饿汉式实现单例模式*/
public class Singleton {private static Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}
由于static
关键字修饰的属性,表示这个成员属于类本身,不属于实例,运行时,Java 虚拟机只为静态变量分配一次内存,在类加载的过程中完成静态变量的内存分配。
所以在类加载的时候就创建好对象实例,后续在访问时直接获取该实例即可。
而该模式的优缺点也非常明显。
优点:线程安全,不需要考虑并发安全性。
缺点:浪费内存空间,不管该对象是否被使用到,都会在启动时提前分配内存空间。
静态内部类
静态内部类,是基于饿汉式模式下的优化。
第一次加载Singleton类时不会初始化instance,只有在第一次调用getInstance()方法时,虚拟机会加载SingletonHolder类,初始化instance
。instance
的唯一性、创建过程的线程安全性,都由 JVM 来保证。
/*** 静态内部类实现单例模式*/
public class Singleton {private Singleton() {}public static Singleton getInstance() {return SingletonHolder.instance;}/*** 静态内部类*/private static class SingletonHolder {private static Singleton instance = new Singleton();}
}
这种方式既保证线程安全,单例对象的唯一,也延迟了单例的初始化,推荐使用这种方式来实现单例模式。
静态内部类不会因为外部类的加载而加载,同时静态内部类的加载不需要依附外部类,在使用时才加载,不过在加载静态内部类的过程中也会加载外部类
知识点:如果用static来修饰一个内部类,那么就是静态内部类。这个内部类属于外部类本身,但是不属于外部类的任何对象。因此使用static修饰的内部类称为静态内部类。静态内部类有如下规则:
静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。
外部类可以使用静态内部类的类名作为调用者来访问静态内部类的类成员,也可以使用静态内部类对象访问其实例成员。
静态内部类单例优点:
-
对象的创建是线程安全的。
-
支持延时加载。
-
获取对象时不需要加锁。
这是一种比较常用的模式之一。
基于枚举实现单例
用枚举来实现单例,是最简单的方式。这种实现方式通过Java
枚举类型本身的特性,保证了实例创建的线程安全性和实例的唯一性。
public enum SingletonEnum {INSTANCE;public void execute(){System.out.println("begin execute");}public static void main(String[] args) {SingletonEnum.INSTANCE.execute();}
}
基于枚举实现单例会发现它并不需要前面描述的几个操作
-
构造方法私有化
-
实例化的变量引用私有化
-
获取实例的方法共有
这类的方式实现枚举其实并不保险,因为私有化构造
并不能抵御反射攻击
.
这种方式是
Effective Java
作者Josh Bloch
提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊。
基于容器实现单例
下面的代码演示了基于容器的方式来管理单例。
import java.util.HashMap;
import java.util.Map;
/*** 容器类实现单例模式*/
public class SingletonManager {private static Map<String, Object> objMap = new HashMap<String, Object>();public static void regsiterService(String key, Object instance) {if (!objMap.containsKey(key)) {objMap.put(key, instance);}}public static Object getService(String key) {return objMap.get(key);}
}
SingletonManager可以管理多个单例类型,在程序的初始化时,将多个单例类型注入到一个统一管理的类中,使用时根据key获取对象对应类型的对象。这种方式可以通过统一的接口获取操作,隐藏了具体实现,降低了耦合度。
关于单例模式的破坏
前面在分析枚举类实现单例模式时,有提到一个问题,就是私有化构造,会被反射破坏,导致出现多实例问题。
public class Singleton {private static volatile Singleton instance = null;private Singleton() {}public static Singleton getInstance() {// 两层判空,第一层是为了避免不必要的同步if (instance == null) {synchronized (Singleton.class) {if (instance == null) {// 第二层是为了在null的情况下创建实例instance = new Singleton();}}}return instance;}public static void main(String[] args) throws Exception{Singleton instance=Singleton.getInstance();Constructor<Singleton> constructor=Singleton.class.getDeclaredConstructor();constructor.setAccessible(true);Singleton refInstance=constructor.newInstance();System.out.println(instance);System.out.println(refInstance);System.out.println(instance==refInstance);}
}
运行结果如下
org.example.cl04.Singleton@29453f44
org.example.cl04.Singleton@5cad8086
false
由于反射可以破坏private
特性,所以凡是通过private
私有化构造实现的单例模式,都能够被反射破坏从而出现多实例问题。
可能有人会问,我们没事干嘛要去破坏单例呢?直接基于这个入口访问就不会有问题啊?
理论上来说是这样,但是,假设遇到下面这种情况呢?
下面的代码演示的是通过对象流实现Singleton的序列化和反序列化。
public class Singleton implements Serializable {private static volatile Singleton instance = null;private Singleton() {}public static Singleton getInstance() {// 两层判空,第一层是为了避免不必要的同步if (instance == null) {synchronized (Singleton.class) {if (instance == null) {// 第二层是为了在null的情况下创建实例instance = new Singleton();}}}return instance;}public static void main(String[] args) throws Exception {Singleton instance=Singleton.getInstance();ByteArrayOutputStream baos=new ByteArrayOutputStream();ObjectOutputStream oos=new ObjectOutputStream(baos);oos.writeObject(instance);ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray());ObjectInputStream ois=new ObjectInputStream(bais);Singleton ri=(Singleton) ois.readObject();System.out.println(instance);System.out.println(ri);System.out.println(instance==ri);}
}
运行结果如下
org.example.cl04.Singleton@36baf30c
org.example.cl04.Singleton@66a29884
false
可以看到,序列化的方式,也会破坏单例模式。
枚举类单例的破坏测试
可能有人会问,枚举难道就不能破坏吗?
我们可以试试看,代码如下。
public enum SingletonEnum {INSTANCE;public void execute(){System.out.println("begin execute");}public static void main(String[] args) throws Exception{SingletonEnum instance=SingletonEnum.INSTANCE;Constructor<SingletonEnum> constructor=SingletonEnum.class.getDeclaredConstructor();constructor.setAccessible(true);SingletonEnum refInstance=constructor.newInstance();System.out.println(instance);System.out.println(refInstance);System.out.println(instance==refInstance);}
}
运行结果如下
Exception in thread "main" java.lang.NoSuchMethodException: org.example.cl04.SingletonEnum.<init>()at java.lang.Class.getConstructor0(Class.java:3082)at java.lang.Class.getDeclaredConstructor(Class.java:2178)at org.example.cl04.SingletonEnum.main(SingletonEnum.java:15)
从错误来看,似乎是没有一个空的构造函数?这里并没有证明 反射无法破坏单例。
下面是Enum这类的源码,所有枚举类都继承了Enum这个抽象类。
public abstract class Enum<E extends Enum<E>>implements Comparable<E>, Serializable {/*** The name of this enum constant, as declared in the enum declaration.* Most programmers should use the {@link #toString} method rather than* accessing this field.*/private final String name;/*** Returns the name of this enum constant, exactly as declared in its* enum declaration.** <b>Most programmers should use the {@link #toString} method in* preference to this one, as the toString method may return* a more user-friendly name.</b> This method is designed primarily for* use in specialized situations where correctness depends on getting the* exact name, which will not vary from release to release.** @return the name of this enum constant*/public final String name() {return name;}/*** The ordinal of this enumeration constant (its position* in the enum declaration, where the initial constant is assigned* an ordinal of zero).** Most programmers will have no use for this field. It is designed* for use by sophisticated enum-based data structures, such as* {@link java.util.EnumSet} and {@link java.util.EnumMap}.*/private final int ordinal;/*** Returns the ordinal of this enumeration constant (its position* in its enum declaration, where the initial constant is assigned* an ordinal of zero).** Most programmers will have no use for this method. It is* designed for use by sophisticated enum-based data structures, such* as {@link java.util.EnumSet} and {@link java.util.EnumMap}.** @return the ordinal of this enumeration constant*/public final int ordinal() {return ordinal;}/*** Sole constructor. Programmers cannot invoke this constructor.* It is for use by code emitted by the compiler in response to* enum type declarations.** @param name - The name of this enum constant, which is the identifier* used to declare it.* @param ordinal - The ordinal of this enumeration constant (its position* in the enum declaration, where the initial constant is assigned* an ordinal of zero).*/protected Enum(String name, int ordinal) {this.name = name;this.ordinal = ordinal;}
}
该类有一个唯一的构造方法,接受两个参数分别是:name
和ordinal
那我们尝试通过这个构造方法来创建一下实例,演示代码如下。
public enum SingletonEnum {INSTANCE;public void execute(){System.out.println("begin execute");}public static void main(String[] args) throws Exception{SingletonEnum instance=SingletonEnum.INSTANCE;Constructor<SingletonEnum> constructor=SingletonEnum.class.getDeclaredConstructor(String.class,int.class);constructor.setAccessible(true);SingletonEnum refInstance=constructor.newInstance("refinstance",2);System.out.println(instance);System.out.println(refInstance);System.out.println(instance==refInstance);}
}
运行上述代码,执行结果如下
Exception in thread "main" java.lang.IllegalArgumentException: Cannot reflectively create enum objectsat java.lang.reflect.Constructor.newInstance(Constructor.java:417)at org.example.cl04.SingletonEnum.main(SingletonEnum.java:17)
从错误信息来看,我们成功获取到了Constructor
这个构造器,但是在newInstance
时报错。
定位到出错的源码位置。
if ((clazz.getModifiers() & Modifier.ENUM) != 0)throw new IllegalArgumentException("Cannot reflectively create enum objects");ConstructorAccessor ca = constructorAccessor; // read volatile
从这段代码:(clazz.getModifiers() & Modifier.ENUM) != 0
说明:反射在通过newInstance创建对象时,会检查该类是否ENUM修饰,如果是则抛出异常,反射失败
,因此枚举类型对反射是绝对安全的。
既然反射无法破坏?那序列化呢?我们再来试试
public enum SingletonEnum {INSTANCE;public void execute(){System.out.println("begin execute");}public static void main(String[] args) throws Exception{SingletonEnum instance=SingletonEnum.INSTANCE;ByteArrayOutputStream baos=new ByteArrayOutputStream();ObjectOutputStream oos=new ObjectOutputStream(baos);oos.writeObject(instance);ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray());ObjectInputStream ois=new ObjectInputStream(bais);SingletonEnum ri=(SingletonEnum) ois.readObject();System.out.println(instance);System.out.println(ri);System.out.println(instance==ri);}
}
运行结果如下.
INSTANCE
INSTANCE
true
因此,我们可以得出一个结论,枚举类型是所有单例模式中唯一能够避免反射破坏导致多实例问题的设计模式。
综上,可以得出结论:枚举是实现单例模式的最佳实践。毕竟使用它全都是优点:
-
反射安全
-
序列化/反序列化安全
-
写法简单
问题解答
面试题:写一个你认为最好的单例模式
对于这个问题,想必大家都有答案了,枚举方式实现单例才是最好的。
当然,回答的时候要从全方面角度去讲解。
-
单例模式的概念
-
有哪些方式实现单例
-
每种单例模式的优缺点
-
最好的单例模式,以及为什么你觉得它是最好的?
问题总结
单例模式看起来简单,但是学到极致,也还是有很多知识点的。
比如涉及到线程安全问题、静态方法和静态成员变量的特征、枚举、反射等。
多想再回到从前,大家都只用jsp/servlet,没有这么多乱七八糟的知识,我们只想做个简单的程序员。
需要java学习资料的的小伙伴可以帮忙点赞+转发,关注小编一下后,下方扫码 即可免费下载一份这套全面系统的PDFJava核心面试题~
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 2021-2027全球及中国书柜和书架行业研究及十四五规划分析报告
【报告篇幅】:131 【报告图表数】:185 【报告出版时间】:2021年11月 报告摘要 2020年,全球书柜和书架市场规模达到了 百万美元,预计2027年可以达到 百万美元,年复合增长率(CAGR)为 % (2021-2027)。中国市…...
2024/4/25 19:21:12 - 程序员到了35岁就会失业吗?三位程序员UP主这样说……
Q: 你自己也是 up ,然后会接触很多程序员群体,你觉得你在跟这些程序员沟通下来,他们会有一些关于年龄方面的焦虑嘛? A: 很多人都有,而且很多人都是,还没入行就开始焦虑了,就开始问我“ 水哥水哥 ”,咱这程…...
2024/4/25 2:46:04 - Android 有关爬墙头儿的那点儿事儿 - 眼下出行难,不光车多、路还窄呀!
Android 有关爬墙头儿的那点儿事儿 - 眼下出行难,不光车多、路还窄呀!太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Andr…...
2024/4/27 1:16:14 - C++设计模式之桥接模式
桥接模式:将抽象部分与现实部分分离,使它们都可以独立变换。 以下情形考虑使用桥接模式: 1.当一个对象有多个变化因素的时候,考虑依赖于抽象的实现,而不是具体的实现。 2.当多个变化因素在多个对象间共享时…...
2024/4/20 1:44:14 - React+MobX+axios实现权限管理
1.环境配置 1)安装脚手架到全局 npm i create-react-app -g 2)安装mobx 2.1进行配置文件抽离 npm run eject 2.2 安装mobx和mobx-react这两个包 npm i mobx mobx-react (mobx:状态管理工具)(mobx-react是做数据分片…...
2024/4/13 14:38:07 - 重学C++
第1章 C概括 了解C的历史概况,C语言的特点及C语言作用,认识哪些场合下C是无可替代的; 1-1 2020重C 课程导学 (08:38) 1-2 CPP的历史 (12:54) 1-3 CPP的特点 (10:01) 1-4 CPP的应用 (08:06) 1-5 第一章课后练习题 第2章 C基础语法 本章…...
2024/4/19 15:35:38 - 华三6300交换机密码破解
华三6300交换机console密码破解 注意:若之前配置若没有保存,重启设备配置会丢失。 1、重启设备,重启过程中按ctrlb进入boot菜单。2、选择【CtrlP: Change authentication for console login】跳过console口认证,之后再选择reboo…...
2024/4/19 21:51:56 - 深度卷积传输学习网络:一种针对无标记数据机器智能故障诊断的新方法
文章目录BackgroundTransfer Learning ProblemProposed methodDCTLNOptimizationExperimentDatasetExperiment on DCTLNBackground 应用于验证各种智能故障诊断方法有效性的数据集满足以下两个条件:1)有带有故障信息的标记数据;2)训练和测试数据来自相同…...
2024/4/20 21:27:13 - 供应商管理系统方案,一站式管理供应商信息、生命周期、绩效和风险
想象一下,如果你全面了解新的、可靠的供应商信息,以及采购支出、绩效和风险,那么管理你的供应商将是多么容易。如果将供应商资格认证和细分工作流程纳入采购流程,那么降低风险和防止浪费又将是多么容易。 这是一个端到端的解决方…...
2024/4/27 22:23:45 - 所有我的请求view_allmyrequest
以人为维度,统计每个人发起的流程 思路分析:每个流程仅能由一个人发起,所以也可以视为以流程为维度统计每个流程都有一条唯一的workflow_requestbase表记录 create or replace view view_allmyrequest as select a.requestid, --请求ID&…...
2024/4/24 20:33:08 - JavaScript忍者秘籍第2版学习笔记(更新中)
前端小白红宝书实在啃不下来,打算碎片时间看,最近在看忍者秘籍,将内容做点笔记总结一下,仅供参考 第1章 无所不在的JavaScript 1. JavaScript语言特性 1)核心特性 函数是一等公民(一级对象)&a…...
2024/4/20 6:52:38 - 6.2 浮动静态路由及负载均衡
浮动静态路由:配置去往相同目的、但优先级别不同的静态路由,以保证优先级较高的路由(主路由)在失效的情况下,提供备份路由。 负载均衡:当数据有多条可选路径前往同一目的网络,可通过配置相同优先…...
2024/4/19 6:53:21 - JUnit 单元测试
文章目录1:junit单元测试介绍2:junit环境搭建3:junit用法3.1:语法注意事项3.2:测试失败说明3.3:一些常用注解:3.4:实战4:junit测试类4.1:测试类4.2࿱…...
2024/4/19 10:33:48 - Linux服务器换源
CentOS8为例 访问阿里云镜像站开源镜像站 配置方法 备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup下载CentOS-Base.repo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo或者 wget -O…...
2024/4/20 11:46:36 - Dockerfile编写学习
一、Dockerfile简介 随着容器技术的普及,编写正确的dockerfile文件成为了一项基本技能,今天简要说一下dockerfile中的一些学习笔记 在现阶段,我们将Dockerfile、Docker镜像和Docker容器看待为软件的三个不同阶段。 Dockerfile面向开发---&…...
2024/4/20 23:29:30 - 5G NR初始接入和移动性管理
5G NR初始接入和移动性管理 UE和网络进行数据传输之前,必须通过初始接入过程连接到网络。初始接入过程包括小区搜索、系统信息接收和随机接入等阶段。 小区搜索 UE利用小区同步信号进行下行时间和频率同步,获得物理小区标识PCID(1008个&…...
2024/4/27 2:16:10 - 操作系统,软中断实现父子进程同步
如有错误欢迎指正 父进程用kill(),子进程用signal(),代码如下 运行结果如下 只输出了父进程的A,没有输出子进程的B,我想是不是父进程结束了子进程立马被杀死了。上网搜了一下,发现不是,父进程结束了子进程不会被自动杀死。 我们把…...
2024/4/25 14:40:22 - 6.1 静态路由和默认路由的基础配置
初始情况下,路由器的路由表上仅包括了与自己直接相连的网段的路由信息。 通过配置静态路由,可以实现跨不同网段间的通信。静态路由配置有两种方式:一是在配置中采取指定下一跳的方式,二是指定出接口的方式。 1.实现PC1和PC2之间的…...
2024/4/28 0:03:53 - 微信小程序 防抖
函数防抖和函数节流都是老生常谈的问题了。这两种方式都能优化 js 的性能。有些人可能会搞混两个的概念。所以,我以自己的理解,来解释这两个概念的含义。并且列举在小程序中这两个方法的使用。 函数防抖: 英文 debounce 有防反跳的意思&…...
2024/4/15 4:27:14 - 使用shell脚本实现杀死kill特定进程的代码
使用shell脚本实现杀死kill特定进程的代码1、原始暴力的方法2、温柔点的方法1、原始暴力的方法 myLinux:/home/zhanhailiang/public_html # killall nginx2、温柔点的方法 查找指定进程的pid,并kill|kill -USR1 掉 myLinux:/home/zhanhailiang/public_html # ps …...
2024/4/18 0:07:48
最新文章
- spring的常用注解
目录 1.前言 2.web url映射 2.1RequestMapping 2.2PostMapping 2.3GetMapping 3.参数接受和接口响应 3.1RequestParam 3.2RequstBoby 3.3ResponseBoby 3.4RestController 4.bean的存储 4.1Controller 4.2Service 4.3Repository 4.4Compontent 4.5Configuration …...
2024/4/28 1:05:37 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - docker进行jenkins接口自动化测试持续集成实战
文章目录 一、接口功能自动化测试项目源码讲解二、接口功能自动化测试运行环境配置1、下载jdk,maven,git,allure并配置对应的环境变量2、使用docker安装jenkins3、配置接口测试的运行时环境选择对应节点4、jenkins下载插件5、jenkins配置环境…...
2024/4/27 15:40:21 - 理解 Golang 变量在内存分配中的规则
为什么有些变量在堆中分配、有些却在栈中分配? 我们先看来栈和堆的特点: 简单总结就是: 栈:函数局部变量,小数据 堆:大的局部变量,函数内部产生逃逸的变量,动态分配的数据&#x…...
2024/4/26 20:04:06 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/26 20:12:18 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/26 21:56:58 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/26 22:01:59 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57