感谢牛客网网友提供的面试经验!

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. 单例模式懒汉式和饿汉式区别?

  1. 饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,懒汉式本身是非线程安全的,为了实现线程安全可以加synchronized锁。
  2. 资源加载和性能:饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成。而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。

原文链接: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;}
}
  1. 静态内部类【推荐】
public class Singleton {private static class SingletonHolder{private static final Singleton INSTTANCE = new Singleton();}private Singleton(){};public static final Singleton getInstance(){return SingletonHolder.INSTTANCE;}
}
  1. 双重校验锁【推荐】
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后台开发面试实战(四):设计模式相关推荐

  1. java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手

    感谢牛客网网友提供的面试经验! 1. 解释一下TCP三次握手四次挥手 图片来源于微信公众号:码农求职小助手 答: 嗯(稍作思考)- 三次握手简单来说,在数据传输开始前: 第一次握手:客户端向服务端发送 ...

  2. 记录一次美团+小米+VIPKId+CVTE的Java后台开发面试经历

    有些我记不清了,大概记得的就这些 一面: 给了一道编程题,从方格中的某一点怎么去到另外的点,有多少种走法 数据库联合索引,比如用的是A_B_C,给出几种场景,问在搜索的时候会什么时候会用到索引,讲讲一 ...

  3. 记录美团java后台开发面试经历

    有些我记不清了,大概记得的就这些 一面: 1.给了一道编程题,从方格中的某一点怎么去到另外的点,有多少种走法 2.数据库联合索引,比如用的是A_B_C,给出几种场景,问在搜索的时候会什么时候会用到索引 ...

  4. 广州华工信息软件Java后台开发面试

    记得是10.23号左右做的线上笔试,还以为这么久了应该是被刷了,没想到11.7号早上9点多接到hr小姐姐邀请我面试的电话,约了今天早上十点半的.公司离我学校很近,两个地铁站+10分钟走路就可以到了.早 ...

  5. 平安科技Java后台开发面试

    记得是10月10日晚上9点到10点半做的笔试题,做完还觉得挺简单的,不过因为时间的关系,最后一道编程题没写...可能是选择题做得挺好的,11号中午就收到了面试通知.还挺有意思的,面试时间可以自己选择, ...

  6. Java校招面经_校招面经:阿里天猫Java后台开发面试历程

    分享一波阿里天猫超市一面到hr面的面经,觉得自己还是蛮幸运的.本人广东双非大学本科生. 一面(35分钟) 一面都是聊项目,聊了半个小时,主要包括这几个问题: 1.项目介绍 2.项目中如何对数据库进行优 ...

  7. 58java面试题_58同城java后台开发面试经验|面试题 - 职朋职业圈

    面试过程: 1. Integer和int的区别,各自的存储方式,回收方法 2. HashMap.HashMap如何保证线程安全.ConcurrentHashMap 3. JVM中堆和栈的区别 4. 手 ...

  8. 阿里Java后台开发是怎么面试的

    最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位. 考虑到我只工作了一年,现在去阿里肯定要降薪,因此也没有太强烈的意愿.但出于提升自我的角度考虑,参加了面试 ...

  9. 面试经验:阿里Java后台开发

    最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位. 考虑到我只工作了一年,现在去阿里肯定要降薪,因此也没有太强烈的意愿.但出于提升自我的角度考虑,参加了面试 ...

最新文章

  1. 实用比较,帮你决策到底选择Vue还是Angular4、5
  2. 安装 CocoaPods Alcatraz
  3. MySQL入门之访问控制与安全
  4. 我的设计模型之适配器模式
  5. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
  6. 速修复!开源 IT 基础设施管理解决方案 Salt 被曝多个严重漏洞
  7. selenium之键盘操作
  8. Google NIK插件的介绍及使用
  9. 新手入门教程:关于网站建设的主要流程和步骤
  10. java电子签名_java实现pdf文件电子签名
  11. kubernetes部署分布式存储longhorn
  12. 外贸怎么开发客户?这些你不一定知道
  13. Java开发的医院门诊挂号系统
  14. Elasticsearch Index Lifecycle Management (ILM)
  15. 【转】VB6和VB.NET的区别
  16. python自学成才之路 miniconda创建虚拟环境
  17. 雨阳打字通 v1.0 发布
  18. Looksery Cup 2015 F - Yura and Developers 单调栈+启发式合并
  19. QT全平台支持——开始学习
  20. 误删的文件不在回收站如何找回?2招任选,完成恢复

热门文章

  1. 浙江大学 工程伦理 第四章单元测试答案
  2. 东欧黑客入侵港股造市图利 半年涉款5300万
  3. jenkins网页打不开问题解决方法
  4. 【视频架构day1】美拍短视频系统架构:1亿流量的应对之道
  5. idea设置代码提示
  6. 华硕服务器主板型号命名规则,装机指南 华硕主板新命名规则解读
  7. [DB2]DB2备份和恢复
  8. 高通平台读取USB ID
  9. swift4.0语法杂记
  10. 让职场人早下班的PDF转Word技巧,速戳!