没有合适的资源?快使用搜索试试~ 我知道了~
Spring常见面试题
资源推荐
资源详情
资源评论
设计模式常见面试题
为什么要学习设计模式?
看懂源代码:如果你不懂设计模式去看Jdk、Spring、SpringMVC、IO等等等等的源码,你会很迷茫,你会寸
步难行
看看前辈的代码:你去个公司难道都是新项目让你接手?很有可能是接盘的,前辈的开发难道不用设计模
式?
编写自己的理想中的好代码:我个人反正是这样的,对于我自己开发的项目我会很认真,我对他比对我女朋
友还好,把项目当成自己的儿子一样
设计模式有哪几类?
创建型
单例模式
工厂方法
抽象工厂
建造者
原型
结构性
适配器
代理
装饰
组合
桥接
外观
享元
行为型
访问者
模板模式
策略模式
观察者模式
责任链
等等。。。
设计模式7大设计原则?
开放封闭原则
里氏代换原则
依赖导致原则
接口隔离原则
迪米特法则
单一职责原则
在工作中你用过哪些设计模式?或者熟悉哪些设计模式?
在工作中你用过哪些设计模式?或者熟悉哪些设计模式?
我用过单例,工厂,代理,适配器,原型,建造者,策略设计模式。
追问:你说下单例模式?
单例模式是为了保证对象在jvm中对象的唯一,java对于单例模式提供了几种解决方案
第一种:懒汉式
懒汉式分为双重检查锁和静态内部类
第二种:饿汉式
饿汉式分为静态成员变量和静态代码块
第三种:注册式
枚举:官方推荐
容器:Spring中的单例就是容器式单例
第四种:ThreadLocal
在单个线程中单例
追问:哪些方式可以破坏单例,如果解决?
第一种:序列化:除了枚举的单例不会被序列化破坏,其他的都能。可以去添加readResolve方法,jdk底层会判
断是否有该方法,然后该方法返回原来的单例对象,这个缺点是还是会生成一个新的对象,只是不会返回。会导致
内存浪费。
第二种:反射:可以在构造函数中去抛异常
第三种:克隆模式:都已经是单例了,就不要去使用克隆模式了。
追问:你说下代理模式,代理分为几种?
静态代理和动态代理
追问:动态代理想要得到代理类需要哪些参数?
jdk:类加载器,接口,handler,实现被代理类实现的接口
cglib: 会继承我们的被代理类
追问:jdk代理和cglib的区别是什么?
JDK 是字节码生成快,cglib 是字节码生成慢,jdk就生成一个文件,cglib生成三个
一个实现接口,一个继承类
jdk调用慢,cglib调用快,jdk通过反射,cglib通过索引定位到方法,jdk1.8后,反射的性能很大的提高
追问:代理类可以再被代理吗?
1.jdk代理类被jdk代理: 只有一种情况下会可以,使用不用的handler的时候。其他情况不行:JDK代理后再进行一
层jdk代理,循环调用,造成代理的死循环
2.jdk代理类被cglib代理:不可以 。因为jdk代理后的类是public nal类型的,cglib不能对nal的类进行代理
3.cglib代理类被jdk代理:不可以。因为CGlib代理后已经改变了类的签名,而jdk必须知道类的接口和实现
4.cglib代理类被cglib代理:不可以。测试结果不可以 Caused by: java.lang.ClassFormatError: Duplicate
method name&signature
Spring常见面试题
1.spring的模块有哪些?
Spring Core:基础,可以说Spring其他所有的功能都依赖于该类库。主要提供IOC和DI功能。
Spring AOP:提供面向切面的编程实现。
Spring JDBC:Java数据库连接。
Spring JMS:Java消息服务。
Spring ORM:用于支持Hibernate等ORM工具。
Spring Web:为创建Web应用程序提供支持。
Spring Test:提供了对JUnit和TestNG测试的支持。
spring tx:事务
2.说下你对spring的理解?
1.Spring框架帮我们管理对象及其依赖关系
2.是基于POJO的轻量级和最小侵入性编程
3.通过依赖注入进行控制反转
4.通过依赖注入和面向接口来松耦合
3.对spring ioc的理解和使用?
以前没有spring的时候,我们需要得到一个对象,都是自己主动去new一个对象,然后通过set方法给对象注入属
性,但是这种动作其实是一个重复的动作,所以spring提供ioc的容器解决方案,在容器启动的时候就把许多需要实
例化和属性注入的bean都提前做好并放入到一个map中存储起来。这就是控制反转,原来的控制全在用户,现在
的控制权完全交给了容器,在bean实例化后,通过反射对属性进行依赖注入
有两种使用方式,一种是xml的方式,一种是注解的方式。
xml的加载方式,首先在spring的xml中通过bean标签配置我们需要注入的bean,当扫描到所有的bean后,首先把
bean包装成BeanDenition,放入到list中,然后循环这个list去创建bean,创建bean的步骤为实例化->属性注入->
初始化->aop,然后最终放入到spring的一级缓存中保存起来。
注解方式是通过在类上面加上spring的注解去扫描,比如controller,service等,后续步骤和xml基本一样。
4.Bean是如何创建的?
第一步:找到哪些bean需要去实例化 ;xml方式去找,一种注解的方式去找,封装成一个BeanDenition放入到
list中
剩余13页未读,继续阅读
资源评论
missterzy
- 粉丝: 41
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功