首页 > 编程知识 正文

java线程池面试题,java面试老是面试不上

时间:2023-05-04 15:48:50 阅读:173990 作者:2451

1 .简约工厂(非23种设计模式之一)的实现方式) BeanFactory。 Spring的BeanFactory表示一种简单的工厂模式,通过传递唯一标识符来检索Bean对象,但在传递参数之前是否进行创建取决于具体情况。

实质:根据某个工厂类传入的参数,动态决定应该生成哪个产品类。

实现原理:bean容器的启动阶段:

读取bean的xml配置文件,并将每个bean元素转换为一个BeanDefinition对象。 然后,通过BeanDefinitionRegistry在beanFactory中注册这些bean,并将其保存在ConcurrentHashMap中。 在beanFactory中注册BeanDefinition后,这里Spring为我们提供了一个扩展的切入点,使我们可以实现接口BeanFactoryPostProcessor来在此插入我们定义的代码典型的例子是PropertyPlaceholderConfigurer,我们通常在配置数据库dataSource时使用的占位符值是用它填充的。容器中bean的实例化阶段:

实例化阶段主要是通过反射或CGLIB实例化bean,在此阶段Spring还暴露了许多扩展点。

各种的Aware接口,例如BeanFactoryAware,是在实例化bean时Spring对实现这些Aware接口的bean的实例BeanPostProcessor接口是一个实现了BeanPostProcessor接口的bean,Spring将在实例化bean时调用该接口中的方法。InitializingBean接口是实现了InitializingBean接口的bean,Spring将在实例化bean时调用该接口中的方法。DisposableBean接口是一个实现了BeanPostProcessor接口的bean,当此bean死亡时,Spring将调用该接口中的方法。 设计的含义(**松散耦合。 *可以通过名为Spring的beanFactory工厂将原本硬编码的依赖注入到依赖中。 也就是说,原本只有依赖方和依赖方,现在引入了第三方—— spring beanfactory,解决了bean之间的依赖问题,达到了松散耦合的效果。

**bean的添加处理。 *通过公开*Spring接口,可以在实例化bean的阶段进行其他处理,只要在bean中实现相应的接口即可。 然后,spring将调用在bean生命周期中实现的接口来处理该bean。 [非常重要]

2 .工厂方法实现方式: FactoryBean接口。

实现原理:实现FactoryBean接口的bean是一个称为factory的bean。 其特征在于,在spring使用getBean ()调用检索其bean时,会自动调用该bean的getObject ) )方法,因此不会调用factory bean,而是此bean.getOjbect

例如:作为典型的例子,有spring和mybatis的组合。

代码示例:

说明:

让我们看看上面的bean。 由于实现了FactoryBean接口,因此返回的不是SqlSessionFactoryBean的实例,而是该sqlsessionfactorybean.getobject ()的返回值。

3 .单实例模式Spring依赖于注入Bean实例,缺省情况下为单实例模式。

Spring的依赖注入(包括lazy-init方式)全部发生在AbstractBeanFactory的getBean上。 getBean的doGetBean方法调用getSingleton来创建bean。

getSingleton (方法分析

publicobjectgetsingleton (string beanname ) /参数true设置标志允许早期依赖于returngetsingleton (beanname,true )。 } protectedobjectgetsingleton (string beanname, 布尔对象(booleanallowEarlyReference )//检查缓存中是否存在实例objectsingletonobject=this.single nce 同步(this.singleton objects ) {

   //如果此bean正在加载,则不处理            singletonObject = this.earlySingletonObjects.get(beanName);            if (singletonObject == null && allowEarlyReference) {                  //当某些方法需要提前初始化的时候则会调用addSingleFactory 方法将对应的ObjectFactory初始化策略存储在singletonFactories                ObjectFactory<?> singletonFactory = this.singletonFactories.get(beanName);                if (singletonFactory != null) {                    //调用预先设定的getObject方法                    singletonObject = singletonFactory.getObject();                    //记录在缓存中,earlysingletonObjects和singletonFactories互斥                    this.earlySingletonObjects.put(beanName, singletonObject);                    this.singletonFactories.remove(beanName);                }            }        }    }    return (singletonObject != NULL_OBJECT ? singletonObject : null);}

getSingleton()过程图

ps:spring依赖注入时,使用了 双重判断加锁 的单例模式

总结

**单例模式定义:**保证一个类仅有一个实例,并提供一个访问它的全局访问点。

**spring对单例的实现:**spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为spring管理的是任意的java对象。

4.适配器模式 实现方式:

SpringMVC中的适配器HandlerAdatper。

实现原理:

HandlerAdatper根据Handler规则执行不同的Handler。

实现过程:

DispatcherServlet根据HandlerMapping返回的handler,向HandlerAdatper发起请求,处理Handler。

HandlerAdapter根据规则找到对应的Handler并让其执行,执行完毕后Handler会向HandlerAdapter返回一个ModelAndView,最后由HandlerAdapter向DispatchServelet返回一个ModelAndView。

实现意义:

HandlerAdatper使得Handler的扩展变得容易,只需要增加一个新的Handler和一个对应的HandlerAdapter即可。

因此Spring定义了一个适配接口,使得每一种Controller有一种对应的适配器实现类,让适配器代替controller执行相应的方法。这样在扩展Controller时,只需要增加一个适配器类就完成了SpringMVC的扩展了。

5.装饰器模式 实现方式:

Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。

实质:

动态地给一个对象添加一些额外的职责。

就增加功能来说,Decorator模式相比生成子类更为灵活。

6.代理模式 实现方式:

AOP底层,就是动态代理模式的实现。

动态代理:

在内存中构建的,不需要手动编写代理类

静态代理:

需要手工编写代理类,代理类引用被代理对象。

实现原理:

切面在应用运行的时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象创建动态的创建一个代理对象。SpringAOP就是以这种方式织入切面的。

织入:把切面应用到目标对象并创建新的代理对象的过程。

7.观察者模式 实现方式:

spring的事件驱动模型使用的是 观察者模式 ,Spring中Observer模式常用的地方是listener的实现。

最后

分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。

面试经验技巧篇 经验技巧1 如何巧妙地回答面试官的问题经验技巧2 如何回答技术性的问题经验技巧3 如何回答非技术性问题经验技巧4 如何回答快速估算类问题经验技巧5 如何回答算法设计问题经验技巧6 如何回答系统设计题经验技巧7 如何解决求职中的时间冲突问题经验技巧8 如果面试问题曾经遇见过,是否要告知面试官经验技巧9 在被企业拒绝后是否可以再申请经验技巧10 如何应对自己不会回答的问题经验技巧11 如何应对面试官的“激将法”语言经验技巧12 如何处理与面试官持不同观点这个问题经验技巧13 什么是职场暗语

面试真题篇 真题详解1 某知名互联网下载服务提供商软件工程师笔试题真题详解2 某知名社交平台软件工程师笔试题真题详解3 某知名安全软件服务提供商软件工程师笔试题真题详解4 某知名互联网金融企业软件工程师笔试题真题详解5 某知名搜索引擎提供商软件工程师笔试题真题详解6 某初创公司软件工程师笔试题真题详解7 某知名游戏软件开发公司软件工程师笔试题真题详解8 某知名电子商务公司软件工程师笔试题真题详解9 某顶级生活消费类网站软件工程师笔试题真题详解10 某知名门户网站软件工程师笔试题真题详解11 某知名互联网金融企业软件工程师笔试题真题详解12 国内某知名网络设备提供商软件工程师笔试题真题详解13 国内某顶级手机制造商软件工程师笔试题真题详解14 某顶级大数据综合服务提供商软件工程师笔试题真题详解15 某著名社交类上市公司软件工程师笔试题真题详解16 某知名互联网公司软件工程师笔试题真题详解17 某知名网络安全公司校园招聘技术类笔试题真题详解18 某知名互联网游戏公司校园招聘运维开发岗笔试题

需要这份文档的朋友可以点击蓝色传送门即可免费获取!

资料整理不易,点个关注再走吧

解16 某知名互联网公司软件工程师笔试题

真题详解17 某知名网络安全公司校园招聘技术类笔试题真题详解18 某知名互联网游戏公司校园招聘运维开发岗笔试题

[外链图片转存中…(img-KP7lRgBt-1626678825441)]

需要这份文档的朋友可以点击蓝色传送门即可免费获取!

资料整理不易,点个关注再走吧

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。