第六种方式:反射和反序列化破坏单例 第七种方式:最后一招,使用枚举 总结 ---- 什么是单例模式 什么是单例模式呢? 我们引用一下维基百科: 单例模式,也叫单子模式,是一种常用的软件设计模式。...比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。...我们引用一下维基百科: 实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用...首先我们定义一个Set对实例进行去重,然后创建1000个线程(Windows每个进程最多1000个线程,Linux每个进程最多2000个线程),每个线程都去获取实例,并添加到set中,实际上,我们应该使用...我们回忆一下饿汉式有什么问题,饿汉式的问题是:在你没有使用该单例的时候,该单例却被加载了,如果该单例很大的话,将会浪费很多的内存.但是,我们现在引入了内部类的方式,虚拟机的机制是,如果你没有访问一个类,
那对象的唯一性的作用范围是什么呢?是指线程内只允许创建一个对象,还是指进程内只允许创建一个对象?答案是后者,也就是说,单例模式创建的对象是进程唯一的。这里有点不好理解,我来详细地解释一下。...,实际上,对于 Java 语言来说,单例类对象的唯一性的作用范围并非进程,而是类加载器(Class Loader) 要回答这个问题,要理解classloader和JDK8中使用的双亲委派模型。...用于将class文件加载到JVM中;2. 确认每个类应该由哪个类加载器加载,并且也用于判断JVM运行时的两个类是否相等。...双亲委派模型的原理是当一个类加载器接收到类加载请求时,首先会请求其父类加载器加载,每一层都是如此,当父类加载器无法找到这个类时(根据类的全限定名称),子类加载器才会尝试自己去加载。...联系到课后的问题,所以用户定义了单例类,这样JDK使用双亲委派模型加载一次之后就不会重复加载了,保证了单例类的进程内的唯一性,也可以认为是classloader内的唯一性。
voilte关键字的使用 静态内部类进行实现 我们平时所说的单列模式是进程间的单例模式 那我们如何实现一个线程间单列呢?其中thradlocal的实现方式。...使用一个hashmap 进行存储,使用线程ID作为key,value为对应的单例 实现一个分布式的单例模式,在多个服务间只能创建一个实例,通过外部存储和分布式锁实现。...hashMapkey 和list对象 fail-fast 的设计原则 有问题提早暴露 单例类对象的唯一性的作用范围并非进程,而是类加载器(Class Loader)类加载器的双亲委派机制,委托父加载器读取对象...一个进程的启动前就得依赖于加载器进行读取对象。 工厂模式 简单工厂 根据某些条件去创建对象、就两个类一个factory 一个条件类。...通过多态和委托达到代理类进行进程,这就是静态代理模式。 但是静态代理会因为每个类都要去实现每个函数也都得委托,所以需要写很多的类似于模板的代码。
final的用途。 写出三种单例模式实现 。 如何在父类中为子类自动完成所有的hashcode和equals实现?这么做有何优劣。...在自己的代码中,如果创建一个java.lang.String类,这个类是否可以被类加载器加载?为什么。 说一说你对java.lang.Object对象中hashCode和equals方法的理解。...简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。 讲讲JAVA的反射机制。 你们线上应用的JVM参数有哪些。 g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择。 怎么打出线程栈信息。...Linux下IO模型有几种,各自的含义是什么。 epoll和poll有什么区别。 平时用到哪些Linux命令。 用一行命令查看文件的最后五行。 用一行命令输出正在运行的java进程。...spring的controller是单例还是多例,怎么保证并发的安全。 用三个线程按顺序循环打印abc三个字母,比如abcabcabc。
x轴上有n个点,已知每个点的位置p和速度v(正表示向右,负表示向左),每当两个点相碰就消失,问最后碰撞的时间t和两个点 n个无符号整数找第k大,要求最坏O(n)时间复杂度,O(1)空间复杂度 游戏 +...析构应该注意什么(virtual) 构造函数中可以调用虚函数方法吗 dynamic_cast const char * fff(const char* const t ) const 每个const的含义...添加了那些内存屏障,内存屏障有哪几种 单例模式中为什么加volatile synchorized、可重入锁的区别 创建线程的方式有哪四种? Callable怎么获取返回值的?...JVM 内存回收算法 GC root有那些 栈上的内存怎么回收(作用域 jvm操控) 强软弱虚 虚引用有什么用 类加载过程?初始化都做了什么?为何要把符号引用转换为直接引用 方法区存在哪里?....class文件的组成 静态绑定和动态绑定 Spring AOP 为什么使用SSM 为什么选择单例?什么时候选择单例?(无状态或状态不可变) android 不止一次被问可以演示下你做的app吗?
final的用途。 写出三种单例模式实现 。 如何在父类中为子类自动完成所有的hashcode和equals实现?这么做有何优劣。...在自己的代码中,如果创建一个java.lang.String类,这个类是否可以被类加载器加 载?为什么。 说一说你对java.lang.Object对象中hashCode和equals方法的理解。...简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。 讲讲JAVA的反射机制。 你们线上应用的JVM参数有哪些。 g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择。 怎么打出线程栈信息。...开源框架知识 简单讲讲tomcat结构,以及其类加载器流程,线程模型等。 tomcat如何调优,涉及哪些参数 。 讲讲Spring加载流程。 Spring AOP的实现原理。...spring的controller是单例还是多例,怎么保证并发的安全。 用三个线程按顺序循环打印abc三个字母,比如abcabcabc。
String类为什么被final定义 2. JVM的类加载过程,有几个阶段 3. 为什么类加载的时候static代码块中的变量可以赋值,但不能引用 4. 什么是主动引用,什么是被动引用 5....使用类名直接调用final修饰的常量时,类会正常初始化吗 9. 什么是类加载器 10. 什么是双亲加载机制 11. 以jdk11为例,怎么破坏双亲加载机制 12. 什么是spi 13....什么是原语 17. wait和signal 两个原语在操作系统中的含义 18. 操作系统中线程是怎么进行同步的 19. 进程是怎么通信的,有几种通信方式 20. 什么是IO多路复用 21....请求报文和响应报文的格式是什么样子的 44. 什么是Redis 45. redis的基本数据结构 46. redis的String类型是怎么设计的 47....在try-catch-finally中如果在catch中return,finally中的代码块会执行吗 48. 算法题 1.反转链表 2.手写单例模式
数组和 List 之间如何转换 Queue 中 poll()和 remove()的区别 哪些集合类是线程安全的 迭代器 Iterator 是什么 Iterator 怎么使用,有什么特点 Iterator...进程间通信的方式 什么是多线程上下文切换 Java 中用到的线程调度算法是什么 什么是线程饥饿 你对线程优先级的理解是什么 sleep、join、yield 方法有什么区别 ThreadLocal变量...由哪些部分组成 JVM运行时内存区域划分 内存溢出OOM和堆栈溢出SOE的示例及原因、如何排查与解决 如何判断对象是否可以回收或存活 常见的GC回收算法及其含义 常见的JVM性能监控和故障处理工具类:...jps、jstat、jmap、jinfo、jconsole等 JVM如何设置参数 JVM性能调优 类加载器、双亲委派模型、一个类的生命周期、类是如何加载到JVM中的 类加载的过程:加载、验证、准备、解析...常见的单例模式以及各种实现方式的优缺点,哪一种最好 单例模式的9种写法(闭着眼睛写不出来的去面壁) 设计模式在实际场景中的应用 Spring中用到了哪些设计模式 MyBatis中用到了哪些设计模式 你项目中有使用哪些设计模式
hashCode的作用是什么? for-each与常规for循环的效率对比 写出几种单例模式实现,懒汉模式和饿汉模式区别 请列出 5 个运行时异常。...描述动态代理的几种实现方式,它们分别有什么优缺点 在自己的代码中,如果创建一个java.lang.String类,这个类是否可以被类加载器加载?为什么。...为什么等待和通知是在 Object 类而不是 Thread 中声明的? 每个对象都可上锁,这是在 Object类而不是 Thread 类中声明,为什么呢?...Spring框架中的单例bean是线程安全的吗? 你可以在Spring中注入一个null 和一个空字符串吗?...说说Ioc容器的加载过程 为什么 Spring 中的 bean 默认为单例?
双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应有自己的父类加载器。这些类加载器的父子关系不是以继承的关系实现,而都是使用组合关系来复用父加载器的代码。...双亲委派模型的工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每个层次的类加载器都是如此。...因此所有的加载请求最终都应该传达到顶层的启动类加载器中,只有当父加载器反馈无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。...(29)如何创建单例模式?说了双重检查,他说不是线程安全的。如何高效的创建的一个高效的单例?...因此,该实现方式同时兼备延迟加载和非延迟加载的优点。 注意:序列化和反序列化可能会破坏单例,一般来说,对单例进行序列化和反序列化的场景并不多见,但如果存在,就要多加注意。
讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候, 他们的执行顺序。 此题考察的是类加载器实例化时进行的操作步骤(加载–>连接->初始化)。...懒汉式单例,饿汉式单例,双重检查等 参考:https://my.oschina.net/dyyweb/blog/609021 如何在父类中为子类自动完成所有的 hashcode 和 equals 实现...同上 在自己的代码中,如果创建一个 java.lang.String 对象,这个对象是否可以被类加载器加载?为什么 类加载无须等到“首次使用该类”时加载,jvm允许预加载某些类。。。。...单例注入是通过单例beanFactory进行创建,生命周期是在创建的时候通过接口实现开启,循环注入是通过后置处理器,aop其实就是通过反射进行动态代理,pointcut,advice等。...controller 是单例还是多例,怎么保证并发的安全。
6.2.2 静态内部类形式存储单例类对象 1、线程概述 线程是进程中一个小的执行单位,线程是不能脱离进称独立存在的,一个进程中可以有一个或多个线程。...每个进程都具有一定的独立功能,操作系统会给每个进程分配独立的内存等资源,即进程是操作系统资源分配、调度和管理的最小单位。 ...进程有如下三个特性: 独立性:进程是操作系统进行资源分配和调度的一个独立单位,每个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。...它是某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式。例如,代表JVM运行环境的Runtime类。 根据创建单例类对象的时机,单例设计模式可分为饿汉式和懒汉式两种。...饿汉式单例设计模式的优点是不存在线程安全问题,因为Java的类加载和初始化的机制绝对可以保证线程安全;缺点是不管是否需要该实例对象,都会创建,这会使得类初始化时间及对象占用内存时间加长。
4)线程和进程的区别:(必考) 答: 进程是一个 “执行中的程序”,是系统进行资源分配和调度的一个独立单位; 线程是进程的一个实体,一个进程中拥有多个线程,线程之间共享地址空间和其它资源(所以通信和同步等操作线程比进程更加容易...(1)进程切换时,涉及到当前进程的 CPU 环境的保存和新被调度运行进程的 CPU 环境的设置。 (2)线程切换仅需要保存和设置少量的寄存器内容,不涉及存储管理方面的操作。 面试官:进程间如何通讯?...解析:有多种方法,但重点掌握的是双重校验锁。 答: 1.饿汉式单例 饿汉式单例是指在方法调用前,实例就已经创建好了。...lazy loading 的效果),而这种方式是 Singleton 类被加载了,instance 不一定被初始化。...5.使用 static 代码块实现单例 静态代码块中的代码在使用类的时候就已经执行了,所以可以应用静态代码块的这个特性的实现单例设计模式。
背景 单例模式是最常用的设计模式之一。其目的是保证一个类在进程中仅有一个实例,并提供一个它的全局访问方式。那什么场景下一个进程里需要单例类的两个对象呢?很明显这破坏了单例模式的设计初衷。...由此可以判断出不同加载器加载同一个类,这两个类也是不相同的。 因为不同类加载器的加载的类是不同的,所以我们可以在一个 JVM 里通过自定义类加载器来将一个单例类实例化两次。...前面我们提到每个 Class 对象里面都有一个 classLoader 属性记录了当前的类是由谁来加载的。...").newInstance(); 因为类加载器的传递性,依赖类的加载器也会使用当前类的加载器,当我们利用自定义类加载器来将一个单例类实例化两次的时候,能保证两个单例对象是完全隔离。...在 JVM 中,要唯一确定一个对象,是由类加载器和全类名两者共同确定的,考虑到各层级的类加载器之间仍然由重叠的类资源加载区域,通过向上抛的方式可以避免一个类被多个不同的类加载器加载,从而形成重复加载。
17.final的用途。 18.写出三种单例模式实现 。 19.如何在父类中为子类自动完成所有的hashcode和equals实现?这么做有何优劣。 20....在自己的代码中,如果创建一个java.lang.String类,这个类是否可以被类加载器加载?为什么。 26....41.简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。 42. 讲讲JAVA的反射机制。 43. 你们线上应用的JVM参数有哪些。...44.g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择。 45. 怎么打出线程栈信息。 开源框架 46. 简单讲讲tomcat结构,以及其类加载器流程,线程模型等。...Spring怎么配置事务(具体说出一些关键的xml 元素)。 53 说说你对Spring的理解,非单例注入的原理?它的生命周期?
除非你是做系统级别的超高要求的App,才用多套资源对不同dpi的设备。 android中单例模式的使用场景一般有哪些?需要注意哪些问题?...单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点 1)应用中某个实例对象需要频繁的被访问。 2)应用中每次启动只会存在一个实例。如账号系统,数据库系统。...很多同学喜欢用static变量,可以在不同的包和类中调用,省的传来传去的。 这个我是不建议使用,因为 一是有被回收的危险,导致值为空,二是会有值需要清理的问题。 什么意思呢?...这个说来话长 ,简单来说 是因为静态变量和类一样都是在进程加载的时候被加载,在进程结束的时候被结束。...Android 开发过程中 常用的设计模式都有哪些? 1)单例模式 2)观察者模式 这两个是我用的最多的。
有什么限制 简单说说你了解的类加载器。...类加载器都有哪些 JVM如何加载字节码文件 内存管理 JVM内存分哪几个区,每个区的作用是什么 一个对象从创建到销毁都是怎么在这些部分里存活和转移的 解释内存中的栈(stack)、堆(heap)和方法区...什么是线程局部变量 线程和进程有什么区别?...哪些设计模式可以增加系统的可扩展性 单例模式 除了单例模式,你在生产环境中还用过什么设计模式?...写 Singleton 单例模式 单例模式的双检锁是什么 如何创建线程安全的 Singleton 什么是类的单例模式 写出三种单例模式实现 适配器模式 适配器模式是什么?
46:进程和线程的区别是什么? 47:进程的几种状态分别是什么? 48:JDK和JRE的关系区别是什么? 49:SpringMVC运行原理是什么? 50:用户在浏览器中输入URL之后,发什么了什么?...(单例模式) 67:构造器(constructor)是否可被重写(override)?是否可被重载?是否可被继承? 68:JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?...:进程和线程的区别是什么?...单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。...网站计数器,一般是采用单例模式实现 - 由于配置文件一般都是共享资源,即web应用的配置对象的读取,一般采用单例模式来实现。
领取专属 10元无门槛券
手把手带您无忧上云