java面试07——设计模式
1.什么是设计模式
设计模式就是经过前人无数次的实践总结出的,设计过程可以反复使用的,可以解决特定问题的设计方法。
2.常用的设计模式有哪些
2.1单例模式(饱汉模式、饿汉模式、双重锁模式)
https://blog.csdn.net/zhangliangzi/article/details/52438401
1.构造方法私有化,让除了自己类中能创建外,其他地方不能创建;
2.在自己类中创建一个单实例(饱汉模式是一出来就创建单实例,而饿汉模式需要的时候才创建);
3.提供一个方法获取该实例对象(饿汉模式创建时需要进行方法同步)。
//饿汉模式,很饿很着急,所以类加载时即创建实例对象
public class Singleton1 { private static Singleton1 singleton = new Singleton1(); private Singleton1(){ } public static Singleton1 getInstance(){
return singleton;
}
}
//饱汉模式,很饱不着急,延迟加载,啥时候用啥时候创建实例,存在线程安全问题
public class Singleton2 { private static Singleton2 singleton; private Singleton2(){ } public static synchronized Singleton2 getInstance(){
if(singleton == null)
singleton = new Singleton2();
return singleton;
}
}
//饱汉模式的双重锁模式,提高效率
public class Singleton3 {
private static Singleton3 singleton; private Singleton3(){ } public static Singleton3 getInstance(){
if(singleton == null){
synchronized(Singleton3.class){
if(singleton == null){
singleton = new Singleton3();
}
}
}
return singleton;
}
}
1、饿汉模式是线程安全的,因为实例对象在类加载过程中就会被创建,在getInstance()方法中只是直接返回对象引用。之所以被称为“饿汉”,是因为这种模式创建实例对象比较“急”,真的是饿坏了……
好处:简单明了,无需关注线程安全问题。
缺点:如果在一个大环境下使用了过多的饿汉单例,则会生产出过多的实例对象,无论你是否要使用他们。
2、饱汉模式不是线程安全的,因为是在需要的时候才会产生实例对象,生产之前会判断对象引用是否为空,这里,如果多个线程同时进入判断,就会生成多个实例对象,这是不符合单例的思想的。所以饱汉模式为了保证线程安全,就用synchronized关键字标识了方法。之所以被称为“饱汉”,因为它很饱,不急着生产实例,在需要的时候才会生产。
好处:延时加载,用的时候才会生产对象。
缺点:需要保证同步,付出效率的代价。
3、双重锁模式,是饱汉模式的优化,进行双重判断,当已经创建过实例对象后就无需加锁,提高效率。也是一种推荐使用的方式。
2.2工厂模式
Spring IOC就是使用的工厂模式
对象的创建交给一个工厂去创建,自己不用创建
https://www.cnblogs.com/xinmomoyan/p/11996590.html
2.3代理模式
Spring AOP就是使用的代理模式
2.4包装模式
java面试07——设计模式的更多相关文章
- Java面试16|设计模式
1.单例模式: 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式有以下几个要素: 私有的构造方法 指向自己实例的私有静态引用 以自己实例为返回值的静态的公有的方法 单例模式根 ...
- Java面试07|Redis数据库
1.Redis持久化的几种方式 (1)RDB(Redis DataBase)持久化 (2)AOF(Append Only File)持久化 2.Redis的缓存失效策略 主要涉及到expire对主键过 ...
- Java面试系列
如果你的面试简历是如下这样写的,请务必准备回答下面的所有问题. 面试职位:Java高级工程师 专业技能: (1)牢固掌握Java基础知识,如集合.并发.I/O等,并对Java源码有一定的研究. (2) ...
- java面试和笔试大全 分类: 面试 2015-07-10 22:07 10人阅读 评论(0) 收藏
2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型 ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java面试,如何在短时间内做突击
面试前很有必要针对性的多刷题,大部分童鞋实战能力强,理论不行,面试前不做准备很吃亏.这里整理了很多常考面试题,希望对你有帮助. 面试技术文 Java岗 面试考点精讲(基础篇01期) Java岗 面 ...
- Java面试知识点汇总
Java面试知识点汇总 置顶 2019年05月07日 15:36:18 温柔的谢世杰 阅读数 21623 文章标签: 面经java 更多 分类专栏: java 面试 Java面试知识汇总 版权声明 ...
- 转:最近5年133个Java面试问题列表
最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来 ...
- JAVA面试精选【Java基础第一部分】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...
随机推荐
- java面试要点
基础篇 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区别 说说反射的用途及实现 说说自 ...
- 浏览器端-W3School-HTML:HTML DOM Audio 对象
ylbtech-浏览器端-W3School-HTML:HTML DOM Audio 对象 1.返回顶部 1. HTML DOM Audio 对象 Audio 对象 Audio 对象是 HTML5 中的 ...
- kotlin之字符类型
kotlin语言中,字符类型用Char表示,与java区别在于,kotlin中字符不能直接看成数字,如下: java中: void check (char c){ if(c==97){ } } kot ...
- python中unicode utf-8的互换
比较简单明了,直接上例子 # -*- coding: utf-8 -*- t0 = u'测试' #u'\u6d4b\u8bd5' t1 = '测试' #'\xe6\xb5\x8b\xe8\xaf\x9 ...
- 考虑以下 Python 代码,如果运行结束,命令行中的运行结果是什么?
l = [] for i in xrange(10): l.append({‘num’:i}) print l在考虑以下代码,运行结束后的结果是什么? l = [] a = {‘num’:0} fo ...
- C#学习笔记一(概念,对象与类型,继承)
一.基础 1.CLR为公共语言运行库,类似于JVM 2..NET Framwork是一个独立发布的程序包,其包含了CLR,类库及相关的语言编辑器等工具,类似于JDK,除了C#,还有其他几种语言在CLR ...
- P1936 【水晶灯火灵】
lalala~~(才不会告诉你这是题面呢) 这题确实有点坑,第一遍穷举超时,然后就开始了漫漫找规律之路... 终于,在经过5分钟的纠结之后,我终于发现了这个神奇的规律,那就是 Fabonacci!!! ...
- Vue --》this.$set()的神奇用法
作为一名开发者,我们都知道: data中数据,都是响应式.也就是说,如果操作data中的数据,视图会实时更新: 但在实际开发中,遇到过一个坑:若data中数据类型为对象,方法methods中改变对象的 ...
- PERCONA-TOOLKIT 安装 使用
1.基于MySQL主从环境 可以参考https://www.cnblogs.com/xianglei_/p/12068241.html 上传rpm包 并安装 1 2 cd /usr/local/src ...
- HDU 4585 Shaolin (STL map)
Shaolin Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...