2018-02-24电话面试总结
记一次电话面试。
先抛出题目:
1. 应用怎么知道spring已经加载好了
2. beanfactory factorybean区别
3. mybatis 防止sql注入
4. redis在项目中是做什么的,有哪几种基本的对象类型,缓存如何保持数据一致性
5. 多线程交换两个线程的数据方式
6. 你最深入学习的项目
下面是具体回顾细节:
- 应用怎么知道spring已经加载好了
spring上下文初始化完后会触发事件,发出通知;使用自定义的类继承实现ApplicationListener.onApplicationEvent()即可。
- beanfactory factorybean区别
BeanFactory是个 Factory ,也就是 IOC 容器或对象工厂, FactoryBean 是个 Bean 。在 Spring 中,所有的 Bean 都是由 BeanFactory( 也就是 IOC 容器 ) 来进行管理的。但对 FactoryBean 而言,这个 Bean 不是简单的 Bean ,
而是一个能生产或者修饰对象生成的工厂 Bean, 它的实现与设计模式中的工厂模式和修饰器模式类似。
- mybatis 防止sql注入
通过转义符号#会对传入的数据进行PreparedStatement预编译。
通过$则不进行转义
- redis在项目中是做什么的
作为内存缓存
- 有哪几种基本的对象类型
对象类型有
String,
Hash,
List,
Set,
Sorted set,
pub/sub,
Transactions
- 缓存如何保持数据一致性
缓存内容与数据库的一致性,这里一般有两种做法:
只在数据库查询后将对象放入缓存,如果对象发生了修改或删除操作,直接清除对应缓存(或设为过期)。在数据库新增和查询后将对象放入缓存,修改后更新缓存,删除后清除对应缓存(或设为过期)。
- 多线程交换两个线程的数据方式
静态数据变量可以交换数据
通过Exchanger也可以进行交换。
- 你最深入学习的项目
讲了下CAS的项目的设计。
总结:
从面试官问的问题可以联想出来的问题:
- ApplicationListener.onApplicationEvent()什么时候被调用,被谁调用。
- spring 的启动的时候的调用链是怎么样的
- factorybean应用场景
- beanfactory初始化流程
- redis的每个数据类型的作用及其应用场景
- Exchanger项目的应用场景
- spring 的启动的时候的调用链是怎么样的ApplicationListener.onApplicationEvent()什么时候被调用,被谁调用。
答:入口启动代码如下
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:application-context.xml");
容器启动 时序图
参见链接:http://blog.csdn.net/yamorn/article/details/44078377
在org.springframework.context.support.AbstractApplicationContext.finishRefresh()
中发出了事件通知
- factorybean应用场景
- org.springframework.beans.factory.FactoryBean<T>是一种特殊的Bean,跟普通Bean不同,其返回的对象不是指定类的一个实例,而是该FactoryBean的getObject方法所返回的对象。
- FactoryBean 通常是用来创建比较复杂的bean,一般的bean 直接用xml配置即可,但如果一个bean的创建过程中涉及到很多其他的bean 和复杂的逻辑,用xml配置比较困难,这时可以考虑用FactoryBean。
- FactoryBean有三个实现方法:
- Object getObject():返回本工厂创建的对象实例。此实例也许是共享的,依赖于该工厂返回的是单例或者是原型。
- boolean isSingleton():如果FactoryBean返回的是单例,该方法返回值为true,否则为false
- Class getObjectType():返回对象类型。对象类型是getObject()方法返回的对象的类型,如果不知道的类型则返回null。
- 当使用ApplicationContext的getBean()方法获取FactoryBean实例本身而不是它所产生的bean,则要使用&符号+id。比如,现有FactoryBean,它有id,在容器上调用getBean("myBean")将返回FactoryBean所产生的bean,调用getBean("&myBean")将返回FactoryBean它本身的实例。
- 经典的factorybean应用场景:搭配InitializingBean的afterPropertiesSet使用,在初始化bean的时候执行。
- 具体的例子见:https://www.jianshu.com/p/b9439edb8408
- beanfactory是什麽。
- BeanFactory接口定义了ioc容器的最基本的形式,并且提供了ioc容器所应该遵守的基本的服务契约,同时,这也是我们使用ioc容器所应该遵守的最顶层和最基本的编程规范,这些接口定义勾画了ioc的基本轮廓,很显然,在Spring的代码实现中,BeanFactory只是一个接口类,并没有
- ApplicationContext是 spring 中较高级的容器。它扩展了BeanFactory接口,它可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。 另外,它增加了企业所需要的功能,比如,从属性文件从解析文本信息和将事件传递给所指定的监听器。这个容器在 org.springframework.context.ApplicationContext interface 接口中定义。
面试总结:
面试开始的时候找了一会儿建立,很致命,在约好时间前要找到自己的简历。
面试的时候的介绍要自己准备准备,面试官会按照这个来准备问题来问。
任凭弱水三千,我只取一瓢饮