设计模式-深度学习单例模式

08 深度神经网络实践 - 神经网络和深度学习 [Deep Learning Specialization系列] 本文从0开始一步一步实现了深度神经网络 阅读详情

设计模式之单例模式

单例模式定义:

是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。

通俗:一个公司不可能有两个CEO,这就是单例的例子。

为什么要用单例:

1.单例在某种情况下防止重复的创建。

2.类本来只需要被创建一次

优点:

  1. 在内存中只有一个实例,减少了内存开销
  2. 可以避免对资源的多重占用
  3. 设置全局访问点,严格控制访问

缺点:没有接口,扩展困难   非面向接口编程,违背了开闭原则

学习反射应该学习的重点:

  1. 私有化构造器
  2. 保证线程安全
  3. 延迟加载
  4. 防止序列化和反序列化破坏单例
  5. 防御反射攻击单例
  6. 代码优化

ServletContext、servletConfig,ApplicationContext都是单例

下面的学习,均以上述学习重点逐步深入学习。

单例模式的写法:

  1. 饿汉式单例
  2. 懒汉式单例
  3. 注册式单例
  4. ThreadLocal单例

饿汉式单例

模式在类被加载时就会实例化一个对象。

/**
 * 有点,执行效率高,性能高,没有任何的锁
 */
public class HungrySinleton {
//启动即加载
    private static final HungrySinleton hungrySingleton = new HungrySinleton();
//屏蔽无参构造
    private HungrySinleton(){};
//提供静态构建方法
    public static HungrySinleton getInstance(){
        return hungrySingleton;
    }
}

优点:执行效率高,性能高,没有任何的锁

缺点:整个系统的类的数量过多,大量的饿汉加载在成内存浪费。

饿汉式单例还有第二种写法:静态代码块儿生成,原理与第一种写法差不多。

懒汉式单例

该模式只在你需要对象时才会生成单例对象

通过这种方式,可以有效解决饿汉式单例可能带来的内存浪费。

public class LazySimpleSingleton {
	private static volatile LazySimpleSingleton instance;
	
	private LazySimpleSingleton() {}
	/**
	 * 该方法为单例构造实例方法,但是会出现线程问题--线程不安全
	 * 两个线程,都去调用getInstance()
	 * 当两个线程同时进入instance==null的判断,便会重复创建两次
	 * 加速,会造成性能下降
	 * @return
	 */
	public static synchronized LazySimpleSingleton getInstance() {
		if (instance == null) {
			instance = new LazySimpleSingleton();
		}
		return instance;
	}

上面是懒汉式单例的最简单写法。

存在线程安全问题。

解决线程安全问题:双重检查锁

/**
	 * 同步代码块双重判断,能够有效解决线程安全的性能问题
	 * 
	 * 会产生指令重排序问题,需要在对象初始化加上volatile解决指令重排序问题
	 * 
	 * 缺点:代码繁杂
	 * @return
	 */
	public static synchronized LazySimpleSingleton getInstanceLockCodeDoubleCheck() {
		//检查是否要阻塞
		if (instance == null) {
			synchronized(LazySimpleSingleton.class) { 
				//检查是否要重新创建实例
				if (instance == null) {
					instance = new LazySimpleSingleton();
				}
			}
		}
		return instance;
	}

利用双重检查锁尽管能有效解决懒汉式单例的线程安全问题,但双重if判断影响代码的美观。

再优化: 静态内部类

/**
	 * 代码优化:静态内部类方式优化
	 * 
	 * 优点:利用了java语法特点,性能高,避免了内存浪费
	 * 缺点:能够被反射破坏
	 * @return
	 */
	public static synchronized LazySimpleSingleton getInstanceInnerClass() {
		return LazyHolder.INSTANCE;
	}
	/**
	 * 静态内部类
	 * @author Administrator
	 *
	 */
	private static class LazyHolder{
		private static final LazySimpleSingleton INSTANCE = new LazySimpleSingleton();
	}

通过静态内部类,利用了java本身的语法特点,技能实现线程安全,效率高,还避免了内存浪费。

静态内部类实现单例的原理:

1.jvm加载classPath的class文件

2.由于存在静态内部类,则该类在编译时,会编译为两个class文件,即LazySimpleSingleton.class与LazySimpleSingleton$LazyHolder.class

3.jvm在加载该类时,最先加载主类的class文件,当加载到LazyHolder.INSTANCE时,需要用到内部类,此时才会去加载内部类的class文件,所以可以完美实现懒汉式单例的线程安全性能问题

但是!

这种写法仍不是完美的单例模式

存在被反射攻击的问题

反射攻击如下:

/**
	 * 反射攻击
	 */
	public void reflectAttack() {
		
		try {
			Class<?> clazz = LazySimpleSingleton.class;
			Constructor<?> c = clazz.getDeclaredConstructor(null);
			c.setAccessible(true);
			Object newInstance = c.newInstance(); //反射获取实例
			Object newInstance2 = c.newInstance(); //打破单例规则
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	

解决单例模式会被反射破坏的问题:

/**
	 * 为解决反射破坏,在私有构造内进行单例判断即可
	 * 
	 * 缺点:在代码中抛出异常,代码需优化,可使用注册式单例
	 */
	private LazySimpleSingleton() {
		if (LazyHolder.INSTANCE != null) {
			throw new RuntimeException("不允许非法访问");
		}
	}

 

完整懒汉式单例代码如下:

public class LazySimpleSingleton {

	private static volatile LazySimpleSingleton instance;
	
	
	/**
	 * 为解决反射破坏,在私有构造内进行单例判断即可
	 */
	private LazySimpleSingleton() {
		if (LazyHolder.INSTANCE != null) {
			throw new RuntimeException("不允许非法访问");
		}
	}
	
	/**
	 * 代码优化:静态内部类方式优化
	 * @return
	 */
	public static synchronized LazySimpleSingleton getInstanceInnerClass() {
		return LazyHolder.INSTANCE;
	}
	/**
	 * 静态内部类
	 * @author Administrator
	 *
	 */
	private static class LazyHolder{
		private static final LazySimpleSingleton INSTANCE = new LazySimpleSingleton();
	}
	
	
}

但是,懒汉式解决反射攻击的解决方案是通过私有构造方法内判断,抛出异常的方式。而这种抛出异常做为判断方式的方法,不是最为完美的解决方案,因此,可使用注册式单例。

注册式单例

将每一个实例都缓存到统一的容器中,使用唯一标识获取实例

注册式单例之枚举式单例

枚举式单例是在Enum类声明时就已经创建好了,将单例存放在容器中。

由于Enum无法通过反射创建枚举对象,因此,枚举式单例从底层避免了反射破坏。

/**
 * 枚举式单例
 * 
 * 无法通过反射创建枚举对象,因此,Enum从底层避免反射破坏单例
 * @author Administrator
 *
 */
public enum EnumSingleton {
	INSTANCE;
	private Object data;
	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

	/**
	 * 全局访问点
	 * @return
	 */
	public static EnumSingleton getInstance() {
		return INSTANCE;
	}

}

 

枚举类式单例分析:

public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable {
           // .......
    public static <T extends Enum<T>> T valueOf(Class<T> enumType,
                                                String name) {
                        
        T result = enumType.enumConstantDirectory().get(name);
        if (result != null)
            return result;
        if (name == null)
            throw new NullPointerException("Name is null");
        throw new IllegalArgumentException(
            "No enum constant " + enumType.getCanonicalName() + "." + name);
    }


}

enumConstantDirectory()方法

Map<String, T> enumConstantDirectory() {
        if (enumConstantDirectory == null) {
            T[] universe = getEnumConstantsShared();
            if (universe == null)
                throw new IllegalArgumentException(
                    getName() + " is not an enum type");
            Map<String, T> m = new HashMap<>(2 * universe.length);
            for (T constant : universe)
                m.put(((Enum<?>)constant).name(), constant);
            enumConstantDirectory = m;
        }
        return enumConstantDirectory;
    }

返回值为enumConstantDirectory,可以理解enumConstantDirectory为枚举的常量字典。声明如下:

 private volatile transient Map<String, T> enumConstantDirectory = null;

这个map即是注册式单例的实例容器。类似于IOC容器。当枚举被声明时,枚举值被当做一个常量,存入map

 

  • 上述所有的单例模式均存在被序列化破坏的问题

序列化破坏单例分析:

序列化:

  1. 把内存中对象的状态转换为字节码的形式
  2. 把字节码通过IO输出流写到磁盘上
  3. 永久保存下来,持久化

反序列化:

  1. 将持久化的字节码内容,通过IO输入流读到内存中来
  2. 转化成 一个新的java对象

防止序列化破坏单例:

在单例对象内添加readResolve()方法

package designmodel.singleton.register;


/**
 * 枚举式单例
 * 
 * 无法通过反射创建枚举对象,因此,Enum从底层避免反射破坏单例
 * @author Administrator
 *
 */
public enum EnumSingleton {

	INSTANCE;

	private Object data;


	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

	/**
	 * 全局访问点
	 * @return
	 */
	public static EnumSingleton getInstance() {
		return INSTANCE;
	}

	/**
	 * 防止序列化破坏单例
	 * @return
	 */
	private Object readResovle() {return INSTANCE;}

}

readSovle()方法防止序列化破坏单例原理分析:

      1. 在通过序列化读取为对象时,用到了ObjectInputStream.readObject()方法
      2.readObject()方法内部调用了一个readObject0方法
      3.readObject0方法内有一个 checkResolve方法
      4.checkResolve内用一个readOrdinaryObject方法,内有个判断方法为:hasReadResolveMethod(),用于判断单例对象内部有没有resolve方法
      5.如果没有resolve方法,将会调用newInstance()方法,创建新的对象,破坏单例。
      6.如果有resolve方法,首先会去调用invokeReadResolve(obj)方法
      6.invokeReadResolve(obj)方法,通过反射机制,调用单例对象的resolve方法:readResolveMethod.invoke(obj,new Object[] null),得到对象并返回
      7.hasReadResolveMethod()方法在得到invokeReadResolve(obj)方法返回值后,赋值给单例对象。
      8.因此,如果在单例对象内有resolve()方法时,通过反序列化创建实例化对象时,始终是通过resolve方法获取的单例对象

由于一开始就声明好,如果存在大批量实例,存在内存浪费的问题,因此,spring在枚举式单例的基础上,扩展为容器式单例,即spring IOC容器。

注册式单例之spring IOC容器

ioc容器式单例demo:

public class ContainerSingleton {

	
	private ContainerSingleton() {};
	
	private static Map<String, Object> ioc = new ConcurrentHashMap<>();
	
	public static Object getInstance(String className) {
		if (!ioc.containsKey(className)) {
			Object instance = null;
			try {
				instance = Class.forName(className).newInstance();
				ioc.put(className, instance);
			} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
				e.printStackTrace();
			}
			
			return instance;
		}
		return ioc.get(className);
	}
}

spring IOC容器式单例原理分析(以AbstractBeanFactory的单例来分析)

public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport implements ConfigurableBeanFactory {
      /**
        *AbstractBeanFactory内有个getBean()方法,内有调用doGetBean(name,null,null,false)方        法
       */   
     @Override
	public Object getBean(String name) throws BeansException {
		return doGetBean(name, null, null, false);
	}
              
    //在doGetBean方法内,调用了getObjectForBeanInstance()方法
    @SuppressWarnings("unchecked")
	protected <T> T doGetBean(
			final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly)
			throws BeansException {

		final String beanName = transformedBeanName(name);
		Object bean;

		// Eagerly check singleton cache for manually registered singletons.
		Object sharedInstance = getSingleton(beanName);
		if (sharedInstance != null && args == null) {
			if (logger.isDebugEnabled()) {
				if (isSingletonCurrentlyInCreation(beanName)) {
					logger.debug("Returning eagerly cached instance of singleton bean '" + beanName +
							"' that is not fully initialized yet - a consequence of a circular reference");
				}
				else {
					logger.debug("Returning cached instance of singleton bean '" + beanName + "'");
				}
			}
            //在doGetBean方法内,调用了getObjectForBeanInstance()方法
			bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);
		}

		else {
			...
              }
			}
			catch (BeansException ex) {
				cleanupAfterBeanCreationFailure(beanName);
				throw ex;
			}
		}

	}

}


protected Object getObjectForBeanInstance(
			Object beanInstance, String name, String beanName, RootBeanDefinition mbd) {

		// Don't let calling code try to dereference the factory if the bean isn't a factory.
		if (BeanFactoryUtils.isFactoryDereference(name) && !(beanInstance instanceof FactoryBean)) {
			throw new BeanIsNotAFactoryException(transformedBeanName(name), beanInstance.getClass());
		}

		// Now we have the bean instance, which may be a normal bean or a FactoryBean.
		// If it's a FactoryBean, we use it to create a bean instance, unless the
		// caller actually wants a reference to the factory.
		if (!(beanInstance instanceof FactoryBean) || BeanFactoryUtils.isFactoryDereference(name)) {
			return beanInstance;
		}

		Object object = null;
		if (mbd == null) {
            //调用了getObjectFromFactoryBean(方法
			object = getCachedObjectForFactoryBean(beanName);
		}
		if (object == null) {
			// Return bean instance from factory.
			FactoryBean<?> factory = (FactoryBean<?>) beanInstance;
			// Caches object obtained from FactoryBean if it is a singleton.
			if (mbd == null && containsBeanDefinition(beanName)) {
				mbd = getMergedLocalBeanDefinition(beanName);
			}
			boolean synthetic = (mbd != null && mbd.isSynthetic());
           //调用了getCachedObjectForFactoryBean()方法
			object = getObjectFromFactoryBean(factory, beanName, !synthetic);
		}
		return object;
	}
//getCachedObjectForFactoryBean方法中,就直接从容器factoryBeanObjectCache中取值
protected Object getCachedObjectForFactoryBean(String beanName) {
		Object object = this.factoryBeanObjectCache.get(beanName);
		return (object != NULL_OBJECT ? object : null);
	}
//factoryBeanObjectCache 即是容器
private final Map<String, Object> factoryBeanObjectCache = new ConcurrentHashMap<String, Object>(16);

/**
* getObjectFromFactoryBean方法中,先判断factory是否为单例,如果不是单例,就new实例
*    如果factory是单例:同步方法体内取单例(线程安全操作)
*  这里用的同步代码块解决线程安全问题
*/
protected Object getObjectFromFactoryBean(FactoryBean<?> factory, String beanName, boolean shouldPostProcess) {
            //判断factory是否为单例
		if (factory.isSingleton() && containsSingleton(beanName)) {
			synchronized (getSingletonMutex()) {
				Object object = this.factoryBeanObjectCache.get(beanName);
				if (object == null) {
					object = doGetObjectFromFactoryBean(factory, beanName);
					// Only post-process and store if not put there already during getObject() call above
					// (e.g. because of circular reference processing triggered by custom getBean calls)
					Object alreadyThere = this.factoryBeanObjectCache.get(beanName);
					if (alreadyThere != null) {
						object = alreadyThere;
					}
					else {
						if (object != null && shouldPostProcess) {
							try {
								object = postProcessObjectFromFactoryBean(object, beanName);
							}
							catch (Throwable ex) {
								throw new BeanCreationException(beanName,
										"Post-processing of FactoryBean's singleton object failed", ex);
							}
						}
						this.factoryBeanObjectCache.put(beanName, (object != null ? object : NULL_OBJECT));
					}
				}
				return (object != NULL_OBJECT ? object : null);
			}
		}
		else {
			Object object = doGetObjectFromFactoryBean(factory, beanName);
			if (object != null && shouldPostProcess) {
				try {
					object = postProcessObjectFromFactoryBean(object, beanName);
				}
				catch (Throwable ex) {
					throw new BeanCreationException(beanName, "Post-processing of FactoryBean's object failed", ex);
				}
			}
			return object;
		}
	}

TheadLocal单例

线程局部变量,保证线程内部的全局唯一性,且天生线程安全

demo如下:

/**
 * 线程局部变量单例
 * @author Administrator
 *
 */
public class ThreadLocalSingleton {
	
	private static final ThreadLocal<ThreadLocalSingleton> threadLocalInstance = 
			new ThreadLocal<ThreadLocalSingleton>() {

				@Override
				protected ThreadLocalSingleton initialValue() {
					return new ThreadLocalSingleton();
				}
	};

	private ThreadLocalSingleton() {
	}
	
	public static ThreadLocalSingleton getInstance() {
		return threadLocalInstance.get();
	}
	
}

 

 

 

 

spring内ThreadLocal的应用:AbstractFactoryBean

public abstract class AbstractFactoryBean<T>
		implements FactoryBean<T>, BeanClassLoaderAware, BeanFactoryAware, InitializingBean, DisposableBean {

        /**
        *1.通过this.isSingleton判断是否为单例,如果不是,则创建实例
2.如果是单例,如果单例已初始化,则直接返回
3.如果没有初始化,就通过getEarlySingletonInstance()创建一个单例对象
        */
        @Override
	public final T getObject() throws Exception {
		if (isSingleton()) {
			return (this.initialized ? this.singletonInstance : getEarlySingletonInstance());
		}
		else {
			return createInstance();
		}
	}
}
/**
*单例对象初始化的过程
*/
@SuppressWarnings("unchecked")
	private T getEarlySingletonInstance() throws Exception {
		Class<?>[] ifcs = getEarlySingletonInterfaces();
		if (ifcs == null) {
			throw new FactoryBeanNotInitializedException(
					getClass().getName() + " does not support circular references");
		}
		if (this.earlySingletonInstance == null) {
			this.earlySingletonInstance = (T) Proxy.newProxyInstance(
					this.beanClassLoader, ifcs, new EarlySingletonInvocationHandler());
		}
		return this.earlySingletonInstance;
	}

Mybatis内的ErrorContext同样是LocalThread单例

 public static ErrorContext instance() {
    ErrorContext context = LOCAL.get();
    if (context == null) {
      context = new ErrorContext();
      LOCAL.set(context);  // 没有就创建一个放到线程局部变量
    }
    return context;
  }

 

 

 

24、条件满足技术在设计模式检测中的应用 本文探讨了条件满足技术在设计模式检测中的应用,详细介绍了其原理、操作步骤以及优缺点。通过将设计模式检测问题转化为条件满足问题,该技术能够有效识别结构相似的设计模式,具有高召回率的优势,但也存在精确率较低和复杂度较高的问题。文章结合实际案例,分析了该技术在电商平台等复杂系统中的表现,并展望了未来的发展方向。 阅读详情

相关推荐

CTFmisc-------Jack

每一个文件里面都有不一样的base64编码,我尝试将其解密,发现解出来的是乱码,所以我想到真正的flag藏在这些字符串中,所以我们要写代码把字符串提取出来。提取出来后,得到很多的base64的编码,要一个一个的解码很麻烦,猜到里面有flag字样的base64编码,所以我们将flag进行base64编码,1.下载得到Jack文件夹,里面有很多的txt文件。发现这个字符串是众多编码中唯一一个没有==然后从那些base编码中寻找Zmxh字段。

woshicainiao666的博客 1万+

深度学习设计模式(一):编写高质量代码的基础(多例子+代码)

待完善,感兴趣可以插个眼

左灯右行的爱情 1444

GD32官方资料学习体系(主要包括MCU选型、原理图PCB设计、软件开发入门及用户手册等)

大部分还未更新,先占个坑,日后更新…… 目前国外芯片涨价涨的离谱(就是在说ST),国内最好的替代就是兆易创新出的系列芯片了。但是官方资料繁杂,小白上手不易,因此边入门边记录,也给后来者根据官方资料可以有一个较为完整的学习体系。

Eddie的博客 1万+

spring源码中设计模式的使用

springboot 源码中使用了很多设计模式,本文通过实例来介绍下设计模式在 springboot 中的应用 模板方法模式 模板方法模式指的是,父类定义一个方法的骨架,主方法中的子方法在父类中可以不作具体实现,而是由子类来完成。 以大名鼎鼎的AbstractApplicationContext 中的 refresh() 方法为例,它就是一个模板方法,定义了方法的骨架,但是里面有的子方法没有在 AbstractApplicationContext 具体实现,而是交给了子类来实现。比如postPro..

修理男爵的博客 956

解决vscode无法运行npm命令的问题(cmd可行)

Powershell以及vscode中npm命令使用不了

无痕坚守本心的博客 2748

多IMU车载GNSS/INS数据集及介绍

文章目录前言非常棒的GINS数据集采集轨迹采集时间MEMS IMU详细信息IMU测量值方程及相关误差建模参考噪声参数安装参数文件格式描述 前言 “本文作者感谢武汉大学多源智能导航实验室和牛小骥教授提供了本文所需的GNSS/INS数据集。” 本博文介绍数据集链接为多IMU车载GNSS、INS数据集,欢迎大家下载,由于是开源数据集,因此下载不需要积分 非常棒的GINS数据集 这是一套非常好的用于GNSS/INS组合导航应用的车载数据集,本数据集采集于湖北省武汉市一处工业园区,为开阔天空场景,GNSS R

十八与她的博客 6438

深度学习设计模式之原型模式

本文主要学习原型模式,原型模式是一种创建对象的模式,原型实例指定创建对象的种类,通过拷贝的方式创建新的对象。原型模式,是一种对象创建型模式,使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,主要用于创建重复的对象同时又要求性能的情况。以上就是今天要讲的内容,本文介绍了原型模式的组成,实现和使用场景,并提供代码示例。

G_whang的博客 1252

手把手教你设计2bit反射型超表面:从单patch扫参到pin管配置全流程

本文提供了一份2bit反射型超表面设计的完整工程实践指南。从单贴片谐振器的参数化扫描与“270度法则”应用,到PIN二极管等效电路模型的获取与集成,再到利用参数化扫描高效仿真四种工作状态,手把手指导读者完成从单元设计到阵列布局、偏置线集成及加工考量的全流程,旨在帮助射频工程师将概念转化为可加工测试的实体模型。

java5的博客 1019

深度学习设计模式(二):基本的设计模式(例子+业务场景+八股)。

加油

左灯右行的爱情 353

机器学习---xgboost算法

问题上表现的十分顶尖,本节将较详细的介绍XGBoost的算法原理。成和剪枝分别对应了经验风险最小化和结构风险最小化, XGBoost的决策树生成是结构风险最小。式(1.1)称为经验风险最小化,训练得到的模型复杂度较高。出结果, 是模型的输出结果;等式右边第⼀部分是模型的训练误差,第⼆部分是正则化项,这里。其中,F是假设空间,假设空间是在已知属性和属性可能取值的情况下,对所有可能满足目标的情。最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测。的正则化项是K棵树的正则化项相加而来的。

weixin_43961909的博客 1万+

ISP Tuning实战指南:从基础到高级的色彩与亮度优化

本文详细介绍了ISP Tuning的基础概念与高级调优技术,包括黑电平校正(BLC)、自动白平衡(AWB)、色彩校正矩阵(CCM)和Gamma曲线调整等核心算法。通过实战案例和调试技巧,帮助工程师提升摄像头成像质量,解决高光过曝、暗部噪点等常见问题,适用于智能门铃、车载摄像头等多种场景。

weixin_30879169的博客 107

Spring源码剖析 循环注入

觉得之前那篇阅读性比价差,主要第一次用csdn博客,很多语法不懂,导致文章可读性不好,我彻底更新一下;打算把spring集合写完; 长文警告 正文开始 众所周知spring在默认单例的情况下是支持循环引用的 为了节省图片大小我把那些可以动得gif图片做成了只循环一次,如果看到图片不动了请右键选择在新标签打开,那么图片就会动,手机用户则更简单,直接手指点击图片便能看到动图,每张gif我都标识了,如果没有标识则为静态图片; Appconfig.java类的代码 @Configurable @C

qq_37419449的博客 4949

8、多导睡眠图记录中基于级联自适应滤波器的脑电图信号噪声去除

本文提出了一种基于三级级联自适应滤波器的新型方法,用于去除多导睡眠图(PSG)记录中脑电图(EEG)信号的常见伪迹,包括50/60 Hz电源线干扰、心电图(ECG)和眼电图(EOG)伪迹。该方法采用最小均方(LMS)算法,通过分阶段滤波有效分离并衰减各类噪声,在保留EEG关键神经节律信息的同时显著提升信号质量。研究利用MIT-BIH数据库中的18份真实PSG记录进行验证,结果表明该方法具有无相位失真、实现简单、自适应能力强等优势,适用于睡眠研究及脑机接口等生物医学应用领域。

banana的博客 172

深度学习设计模式之单例模式

一个类只能有一个实例,提供该实例的全局访问点;

G_whang的博客 920

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

4、(创建型设计模式)Java 单例模式深度学习指南

《Java单例模式深度学习指南》摘要: 本文系统讲解单例模式的核心概念、作用及Java实现。单例模式确保类在JVM中唯一实例,提供全局访问点,适用于数据库连接池、配置管理等场景。详细分析五种实现方式: 饿汉式(线程安全但可能浪费资源) 懒汉式(线程不安全版,禁止使用) 同步方法懒汉式(线程安全但性能差) ... 包含完整代码示例(带中文注释),涵盖Spring单例作用域、线程安全解决方案(双重检查锁、静态内部类)、典型使用场景判断标准及面试高频问题。帮助开发者掌握单例模式的正确使用姿势,避免常见陷阱。

python15397的博客 856

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

单例模式使用

单例 = 一个类永远只有一个对象 + 全局访问 + 节约资源 + 避免冲突。

qq_39697468的博客 273

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android中常见的设计模式

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。希望能够帮助到大家提升技术高级UI,自定义ViewUI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

2401_84132176的博客 493

2024年Python最新Python 高级教程之类,2024年最新模拟面试心得体会

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:① 2000多本Python电子书(主流和经典的书籍应该都有了)② Python标准库资料(最全中文版)③ 项目源码(四五十个有趣且经典的练手项目及源码)④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)⑤ Python学习路线图(告别不入流的学习)网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取

m0_61067876的博客 615

Spring源码解析----Spring思想、设计模式总结

Spring思想 Sping思想 应用场景(特点) 一句话归纳 AOP 1、Aspect Oriented Programming(面向切面编程);2、找出多个类中有一定规律的代码,开发时拆开,运行时再合并;3、面向切面编程,即面向规则编程。 解耦,专人做专事 OOP 1、Object Oriented Programming(面向对象编程);2、...

Casablanca 4466

Spring中常用的设计模式及编程思想

工厂模式 只对结果负责,封装创建过程。例:BeanFactory,Calender 单例模式 保证独一无二。例:ApplicationContext,Calender 原型模式 拔一根猴毛,吹出万千个。例:ArrayList,PrototypeBean 代理模式 找人办事,增加职责。例:ProxyFactoryBean,JdkDynamicAopProxy、CglibAopProxy 委派模式 干...

阿浩的博客 245

探索深度学习的魅力:DL-AndrewNg 项目详解

探索深度学习的魅力:DL-AndrewNg 项目详解 去发现同类优质开源项目:https://gitcode.com/ 该项目,,是一个基于 Andrew Ng 的《斯坦福大学深度学习专项课程》(deeplearning.ai)的学习资源库。它旨在为开发者和学生提供一个易用且互动性强的平台,以实践和理解深度学习的基本原理和技术。 技术分析 1. Jupyter Notebook 整个项目基于 Ju...

gitblog_00060的博客 3495

【python设计模式3】创建型模式2

抽象工厂模式:定义一个工厂类的接口让工厂子类来创建一系列相关或者相互依赖的对象。相比工厂方法模式,抽象工厂模式中的每一个具体工厂都生产一套产品。下面是生产厂商生产一部手机的例子:生产一部手机如果说只需要手机壳、CPU和操作系统这三个类对象,其中每个类对象都有不同的种类。对每个具体工厂,分别生产一部手机需要的三个对象。抽象工厂模式的角色有:抽象工厂角色、具体工厂角色、抽象产品角色、具体产品角色和客户端。抽象工厂模式的优点是:将客户端和类的具体实现相分离;每个工厂创建了一个完整的产品系列。

kaggle expert,全球排名前1000,清华计算机研究生,兴趣算法工程 392

【JAVA设计模式】- 单例模式

概念 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种设计模式属于创建型模式。保证一个类仅有一个实例,并提供一个访问它的全局访问点。常用的有饿汉式和懒汉式两种。 单例模式一般体现在类声明中,单例的类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 优点 在内存里只有一个实例,减少了内存的开销,避免对资源的多重占用。 实现方式 一个类的对象的产生是由类构造函数来完成的。如果一个类对.

ijwwio的博客 513

【Python】Python语言学习:设计模式、单例模式

01设计模式1.1 设计模式简介设计模式是解决特定问题的解决方案。设计模式的优点:1 可以在多个项目重复使用。2 问题可以在架构级别来解决。3 经过了时间的验证和良好的证明,是开发人员和架...

fengdu78的博客 231

ccmusic-database音乐分类系统架构:设计模式应用

本文介绍了如何在星图GPU平台上一键自动化部署🎵音乐流派分类Web应用ccmusic-database/music_genre镜像,实现高效的音乐流派智能识别。该应用基于深度学习技术,可对上传的音频文件进行自动分类,适用于音乐流媒体平台、数字音乐库管理等场景,大幅提升音乐内容管理的智能化水平。

weixin_30415591的博客 27

从零到一:手把手教你用SpringBoot+Vue搭建图书商城(附完整源码和部署避坑指南)

本文详细介绍了如何使用SpringBoot和Vue从零开始搭建一个完整的图书商城系统,涵盖环境配置、数据库设计、前后端交互、支付集成等关键环节,并提供完整源码和部署避坑指南。特别针对JWT认证、购物车状态管理、支付宝支付等常见问题给出实战解决方案,适合全栈开发者快速掌握在线商城开发技巧。

weixin_30781433的博客 438
上一篇: Unknown properties in plugin descriptor: [jvm, site, isolated]
下一篇: 设计模式-工厂模式学习总结
like_java_
博客等级 码龄9年 54粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值