Java后台开发面试实战(四):设计模式
感谢牛客网网友提供的面试经验!
1. 设计模式的六大原则?
- 单一职责原则(Single responsibility principle,SRP):单一职责规定了一个类应该只有一个发生变化的原因。如果一个类承担了多个职责,则会导致多个职责耦合在一起。但部分职责发生变化的时候,可能会导致其余职责跟着受到影响,也就是说我们的程序耦合性太强,不利于变化。
- 里氏替换原则(Liskov Substitution Principle,LSP):里氏替换是指所有父类可以出现的地方,子类就都可以出现,使用子类来替换父类,调用方不需要关心目前传递的父类还是子类。
- 依赖倒置原则(Dependence Inversion Principle,DIP):依赖倒置原则是指高层模块不应该依赖于底层模块,抽象不应该依赖细节,细节应该依赖抽象。在Java中,接口和抽象类都是抽象,而其实现类就是细节。也就是说,我们应该做到面向接口编程,而非面向实现编程。
- 接口隔离原则(Interface Segregation Principle, ISP):接口隔离原则是指客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。
- 迪米特法则(Law of Demeter,LoD):迪米特法则也叫最少知识原则,是指一个对象应该对其依赖的对象有最少的了解。该类不需要知道其依赖类的具体实现,只需要依赖类给其提供一个公开对外的public方法即可,其余一概不需要了解。
迪米特法则的核心就是解耦合,减弱类间的各个耦合,提高类的复用率。 - 开闭原则(Open Close Principle,OCP):开闭原则是指一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。也就是说,通过开闭原则,我们可以通过扩展行为来实现新的功能,而不是通过修改已有的代码。开闭原则可以帮助我们构建一个稳定,灵活的软件系统。
2. 常见的设计模式有哪些?
- 工厂方法模式:工厂方法模式是一种常见的设计模式。工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。
- 模板方法模式:模板方法模式也是一个常见的模式。模板方法模式定义了一个框架,将一些步骤延迟到其子类中实现,子类可以在不改变框架的前提下重新定义某些特定的执行步骤。
3. 单例模式懒汉式和饿汉式区别?
- 饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,懒汉式本身是非线程安全的,为了实现线程安全可以加synchronized锁。
- 资源加载和性能:饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成。而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。
原文链接:https://blog.csdn.net/qq_35098526/article/details/79893628
4. 请手写一下单例模式?
创建单例类的步骤:
1、私有化该类的构造函数。
2、通过new在本类中创建一个本类对象。
3、提供一个公有的静态方法,将创建的对象返回。
单例类因为不允许其他程序用new来创建该类对象,所以只能将单例类中的方法定义成静态的(随类的加载而加载),静态方法不能访问非静态的成员,故只能> > 将该类中new的本类对象变成静态的。
1. 懒汉式:用到时再去创建
public class Singleton {private static Singleton instance;private Singleton(){};//同步代码块用的锁是单例的字节码文件对象,且只能用这个锁public static synchronized Singleton getInstance(){/*如果第一个线程获取到了单例的实例对象,后面的线程再获取实例的时候不需要进入同步代码块中了*/if(instance == null){instance = new Singleton();}return instance;}
}
2. 饿汉式:初始化时即创建,用到时直接返回
public class Singleton {//1.私有化构造器private Singleton(){};//2.在类中创建一个类的实例,私有化,静态的private static Singleton instance = new Singleton();// 3.通过公共方法调用,此公共方法只能类调用,因为设置了 staticpublic static Singleton getInstance(){return instance;}
}
- 静态内部类【推荐】
public class Singleton {private static class SingletonHolder{private static final Singleton INSTTANCE = new Singleton();}private Singleton(){};public static final Singleton getInstance(){return SingletonHolder.INSTTANCE;}
}
- 双重校验锁【推荐】
public class Singleton {private volatile static Singleton singleton; private Singleton(){};public static Singleton getSingleton(){if(singleton == null){synchronized(Singleton.class){if(singleton == null){singleton = new Singleton();}}}return singleton;}
}
5. SVN知道吗?
SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
Java后台开发面试实战(四):设计模式相关推荐
- java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手
感谢牛客网网友提供的面试经验! 1. 解释一下TCP三次握手四次挥手 图片来源于微信公众号:码农求职小助手 答: 嗯(稍作思考)- 三次握手简单来说,在数据传输开始前: 第一次握手:客户端向服务端发送 ...
- 记录一次美团+小米+VIPKId+CVTE的Java后台开发面试经历
有些我记不清了,大概记得的就这些 一面: 给了一道编程题,从方格中的某一点怎么去到另外的点,有多少种走法 数据库联合索引,比如用的是A_B_C,给出几种场景,问在搜索的时候会什么时候会用到索引,讲讲一 ...
- 记录美团java后台开发面试经历
有些我记不清了,大概记得的就这些 一面: 1.给了一道编程题,从方格中的某一点怎么去到另外的点,有多少种走法 2.数据库联合索引,比如用的是A_B_C,给出几种场景,问在搜索的时候会什么时候会用到索引 ...
- 广州华工信息软件Java后台开发面试
记得是10.23号左右做的线上笔试,还以为这么久了应该是被刷了,没想到11.7号早上9点多接到hr小姐姐邀请我面试的电话,约了今天早上十点半的.公司离我学校很近,两个地铁站+10分钟走路就可以到了.早 ...
- 平安科技Java后台开发面试
记得是10月10日晚上9点到10点半做的笔试题,做完还觉得挺简单的,不过因为时间的关系,最后一道编程题没写...可能是选择题做得挺好的,11号中午就收到了面试通知.还挺有意思的,面试时间可以自己选择, ...
- Java校招面经_校招面经:阿里天猫Java后台开发面试历程
分享一波阿里天猫超市一面到hr面的面经,觉得自己还是蛮幸运的.本人广东双非大学本科生. 一面(35分钟) 一面都是聊项目,聊了半个小时,主要包括这几个问题: 1.项目介绍 2.项目中如何对数据库进行优 ...
- 58java面试题_58同城java后台开发面试经验|面试题 - 职朋职业圈
面试过程: 1. Integer和int的区别,各自的存储方式,回收方法 2. HashMap.HashMap如何保证线程安全.ConcurrentHashMap 3. JVM中堆和栈的区别 4. 手 ...
- 阿里Java后台开发是怎么面试的
最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位. 考虑到我只工作了一年,现在去阿里肯定要降薪,因此也没有太强烈的意愿.但出于提升自我的角度考虑,参加了面试 ...
- 面试经验:阿里Java后台开发
最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位. 考虑到我只工作了一年,现在去阿里肯定要降薪,因此也没有太强烈的意愿.但出于提升自我的角度考虑,参加了面试 ...
最新文章
- 实用比较,帮你决策到底选择Vue还是Angular4、5
- 安装 CocoaPods Alcatraz
- MySQL入门之访问控制与安全
- 我的设计模型之适配器模式
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
- 速修复!开源 IT 基础设施管理解决方案 Salt 被曝多个严重漏洞
- selenium之键盘操作
- Google NIK插件的介绍及使用
- 新手入门教程:关于网站建设的主要流程和步骤
- java电子签名_java实现pdf文件电子签名
- kubernetes部署分布式存储longhorn
- 外贸怎么开发客户?这些你不一定知道
- Java开发的医院门诊挂号系统
- Elasticsearch Index Lifecycle Management (ILM)
- 【转】VB6和VB.NET的区别
- python自学成才之路 miniconda创建虚拟环境
- 雨阳打字通 v1.0 发布
- Looksery Cup 2015 F - Yura and Developers 单调栈+启发式合并
- QT全平台支持——开始学习
- 误删的文件不在回收站如何找回?2招任选,完成恢复