今天有一哥们去面试 ,哥们说自己会ssh
面试官就问了几个spring的概念性的问题 ,哥们平时只专注于写代码,回来后一脸的无奈
本人总结了一些ssh常见的面试题 例举如下 强调在回答的时候不要光回答概念,要思维扩散性的讲些相关的东西
spring 的优点?
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部
Spring AOP相关的几道面试题
1. 说出Spring的通知类型有哪些?
2. 谈谈目标对象实现接口与目标对象不实现接口有什么区别?
3. 请描述JDK动态代理和CGLI代理的区别?
4. 简述ProxyFactoryBean的作用是什么?
5. 叙述Spring中的自动代理的原理?
5. 写出创建代理对象需指定的三要素是什么?
6. 写出代理的两种方式分别是什么?
7. 请简述:什么是AOP?
8. 简述AOP核心?
9. 请叙述AOP事务的含义?
什么是DI机制?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者
因此也称为依赖注入。
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。
什么是AOP?
- 面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面
面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,
是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。
aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性
Spring IOC相关的一套面试题(选择题+简答题)
1. 下面关于spring描述错误的是:( )
A Spring支持可插入的事务管理器,使事务划分更轻松,同时无需处理底层的问题。
B Spring事务管理的通用抽象层还包括JTA策略和一个JDBC DataSource。
C 与JTA或EJB CMT一样,Spring的事务支持依赖于Java EE环境。
D Spring事务语义通过AOP应用于 POJO,通过XML或Java SE 5注释进行配置。
2. 下面选项哪个不是Spring中接口注入的方式?( )
A 接口注入
B 构造子注入
C 设值注入
D 指针注入
3. 下列关于Spring特性中IoC描述错误的是:( )
A IoC就是指程序之间的关系由程序代码直接操控。
B 所谓“控制反转”,是指控制权由应用代码转到外部容器,控制权的转移,
C IoC将控制创建的职责搬进了框架中;并把它从应用代码脱离开来
D 当使用Spring的IoC容器时只需指出组件需要的对象,在运行时Spring的IoC容器会根据XML配置数据提供给它。
简答题:
1. 请简述Spring的工作机制?
2. 请回答你为什么用Spring的工作机制?
3. 请简述Spring是什么?
4. 简述spring的组成?
5.简述Spring容器提供了哪些功能?
6. 在Spring中,bean的注入有几种方式,各是什么?
7. 请简述:Spring bean的作用域?
8. 请叙述设值注入的优点?
9. 请叙述构造注入的优点?
10. 说出bean工厂创建bean的三种方式?
11. 请写出bean的生命周期的方法?
12. 请简述你对IOC的理解?
13. 请回答:IoC最大的好处是什么?
14. 简述IoC的类型?
15. Spring中依赖注入与传统编程之间的差别是什么?
硬实力
这里说的硬实力,也就是技术上的真实积累。
怎么来体现你的技术实力?我总的分为:技术深度和技术广度这两方面。技术广度通俗的讲,就是你熟悉该技术点的使用以及基本原理。一般面试官在面试首轮会问很多技术点,来考核你是否能正确使用。
准备不充分的面试,完全是浪费时间,更是对自己的不负责(如果title很高,当我没说)。
今天给大家分享下在跳槽时需要准备的Java面试大纲,其中大部分都是面试过程中的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式。
软实力
软实力在面试过程中也尤为重要(有时候真的要更重要),主要是指和面试官的沟通,对一个问题的阐述方式和表达方式,逻辑思维能力等。
面试过程全程微笑,项目描述需要严谨的表述,个人的优缺点基本要做到随口而出..等这些其实就是软实力的体现。
知己知彼、百战不殆,面试也是如此,针对于上面的面试问到的知识点我总结出了互联网公司java程序员在面试中涉及到的绝大部分架构面试题及答案做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
资料领取方式:关注+转发后,私信关键词 【架构资料】即可获取!
重要的事情说三遍,转发、转发、转发后再发私信,才可以拿到哦!
最后针对于互联网公司java程序员涉及到的绝大部分难题我做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以关注我一下以后会有更多干货分享。
资料领取方式:
关注+转发后,私信关键词 【资料或者java】免费获取!
重要的事情说三遍,转发、转发、转发后再发私信,才可以拿到!
网友评论