附:问而知

结合JDK谈谈了解的设计模式

单例模式:JDK的lang包中Runtime类的getRuntime()对Runtime实例的获取就是饿汉式单例的体现

抽象工厂:JDK的sql包中的Connection接口就将一个产品族的构建方法进行了统一定义

工厂方法:JDK的util包中的Collection接口中的iterator()方法就是一个工厂方法,使用这个方法来返回一个由子类实现的Iterator对象

建造者模式:JDK的lang包中的StringBuilder类

原型模式:JDK的lang包中Object的clone()方法,如果一个类的初始化要消耗较多资源或者new产生一个对象需要非常繁琐的过程,以及一个循环体中产生大量对象时就可以使用

适配器模式:javax.xml.bind.annotation.adapters.XMLAdapter

装饰者模式:比如BufferedInputStream(InputStream)继承了InputStream类,同时需要传入的参数也是InputStream类,通过DataInputStream这种继续在原有方法的基础上附加职责

代理模式:JDK中的lang.reflect包下的Proxy类,通过反射实现的动态代理

策略模式:JDK中util包下的Comparator接口就是一个实现策略模式的接口,在需要进行比较的时候实现对应的比较器,之后便会按照比较器对应的比较策略进行比较排序等等工作

观察者模式:JDK中Observable类和Observer接口就是实现这种模式的典型,通过继承Observable进行事件记录派发,实现Observer接口进行事件监听达到监听方法的目的

命令模式:JDK中的lang包下的Runnable接口

 

讲几个设计模式,哪些地方用到了,为什么要用 ?

单例模式:JDK中的getRuntime()

工厂方法模式:ThreadPoolExcutor用到ThreadFactory

观察者模式Java.util包下面的Observable和Observer

 

说一下单例模式和多例模式(也叫原型模式)的区别及联系

联系:

在GoF(Gang of four:四人组,23种设计模式的提出者)的23种设计模式中均是属于创建型模式,用于构建对象实例

同时为了让对象的具体实例化操作对用户不可见(即封装具体实例化细节),两种模式的构造方法不对外开放,均需要设置访问权限为private

区别:

首先是获取对象的方式不同,单例模式多次进行对象实例获取操作时,会返回同一个实例对象,而多例模式则会返回不同的对象实例

 

单例模式是如何实现线程安全的?

由于单例模式的实现有多种类型,因此分类讨论

首先是线程安全的懒汉式,可以通过使用synchronized关键字修饰静态的单例获取方法来对类进行加锁,保证线程安全,以及由它优化演进而来的双重校验锁,也能保证线程安全

然后是线程安全的饿汉式,可以在类的加载过程中进行单例对象的构建(具体的构建过程分别是:在链接的准备阶段进行内存分配,初始化阶段进行初始化赋值,这儿即是对象的真正实例化),后面获取的时候直接进行调用即可,保证线程安全

也可以通过静态内部类的方式,将线程安全交给虚拟机进行保证

最后可以通过枚举类来保证线程安全,底层实现依旧是和类似于饿汉式在类加载过程中实例化单例对象来保证线程安全的

 

有一个方法接收一个消息类型数据,通过if-else处理,如何优化?

可以结合工厂模式和策略模式来进行优化,将if-else中的业务代码抽象出一个策略接口,再通过这个策略接口将各类业务代码转化为对应的执行策略类,将用来判断的逻辑做为关键字,通过对应的策略工厂来构建对应的策略,最后执行策略即可。

 

对于单例模式,有什么使用场景?

比如JDK中的Runtime实例,就是通过饿汉式来实现的线程安全的单例模式。

Spring中的AbstractFactoryBean获取

分布式id生成器也是单例的。

网站的在线人数、文章阅读数的统计器。

 

除了单例模式,知道适配器模式怎么实现么?有什么用?

首先适配器要做的工作就是将一个被适配的接口或类转化为另一个类能够使用的接口

因此有两种方法可以实现这种工作:

第一种是通过继承实现的类适配模式,继承被适配的类,同时实现目标接口,实现目标接口方法,在该方法中执行被适配类的对应方法

第二种是通过组合实现的对象适配模式,直接在适配器中创建出被适配类的实例,实现目标接口,在目标接口中调用被适配类实例对象的对应方法

能提高类的透明性和复用,现有的类复用但不需要改变,提高目标类和适配器类解耦,提高程序扩展性,符合开闭原则

全部评论

相关推荐

2025-12-25 10:16
已编辑
合肥工业大学 后端工程师
如题,在历经了长达多月的焦急等待,楼主也算是如愿以偿收到了梦中情司的意向了,秋招也终于是落下了帷幕,虽然手中的offer不够打牌,但已经满足了。华为时间线:9.3 笔试环节,惊险通过10.15 线下面试,前两轮技术面手撕都比较轻松,面试官态度也很好,最后一轮主管面,向主管表达了强烈的意愿,主管很和蔼,面试体验非常棒,1125定律后入池成功11.19 收到接口人的保温电话12.9 接到部门hr的保温电话,介绍了一下部门负责的工作12.23 收到华为的意向书,成为华孝子一枚~期间收到了之前实习过的公司的offer,害怕华子泡不出来就先签三方了,这下不得不毁约了,在此向前司道个歉,也感谢前司对我的认可和托举,祝业务蒸蒸日上~感谢从今年三月开始找暑期实习以来,所有朋友和家人的鼓励,我们宿舍的就业氛围相当好,大家会分享各种有用的信息以及面试中遇到刁钻的面试题,在有人收到offer的时候我们都会发自内心的高兴和祝福,在我去线下面的时候也借我穿过西服.....能在大学四年分入这么好的宿舍拥有这么这么好的舍友除了幸运我找不出其他的形容词。还要感谢我的父母,在我每一次面试前都给予鼓励,也在失败的时候安慰我,他们的托底是我前进的基石,以后有工资了要给父母买很多东西最感谢的是我的女朋友,我们从大一相识,一直坚持到大四,她是一个非常优秀也异常坚定的女生,也正是因为她的实力出众早再年初就定好了要去上海的一家外企。我为了也去上海,从暑期实习开始投了不少上海的岗位但无一例外的都被拒之门外,但这期间她从来没有嫌弃过我,反而一直鼓励我相信我,如果说父母的托底是我前进的基石,那女朋友的鼓励和信任则是我前进的动力和方向。在如今这个充满戾气和对立的社会,能找到一个一心一意彼此喜欢的人实在是很难得,我深知这种珍贵所以更会加倍珍惜也感谢自己吧,在经历了无数个失眠的夜晚和面试失败的打击下,最终还是迎来了最好的结果,记得在华为线下面的前几周我几乎回到了高三时期的作息,那真是一段充实美好的时光,好在最后的结果也没有辜负这份努力也想跟所有的牛友说:不要因为一时的失败而自怨自艾,妄自菲薄,只要坚持下去,总会有柳暗花明又一村的惊喜在等待着你,机会总是垂青于有准备的人,要相信否极泰来,相信自己。朋友,坚定地相信未来吧,相信不屈不挠的努力,相信战胜死亡的年轻,相信未来、热爱生命。
小肥罗:有这样的女朋友真是幸福
秋招白月光
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务