Java开发技术面试考点--JavaEE部分

二、JavaEE部分

❤1、Spring

1、说一下IOC和AOP?
ioc,控制反转,将对象的控制权交给容器.
aop切面编程
2、介绍一下bean的生命周期
Bean的生命周期,从Spring容器的创建开始,到Spring容器销毁结束。主要生命周期下图:
1.实例化Bean对象
2.装配:填充属性
3.回调:(可选,如果实现了Aware系列的接口,则会调用回调函数)
4.调用预初始化方法(可选,如果实现了BeanPost-Processor的预初始化方法)
5.初始化(init-method)
6.调用预初始化后置方法(如果实现了BeanPost-Processor的初始化后方法)
7.使用bean
8.容器关闭
9.如果实现了DisposableBean接口,则调用该方法的destory()方法。
10.调用自定义的destory方法。
在这里插入图片描述
3、Spring里面注解用过没有?autowired 和resource区别?
1.共同点 两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
2.不同点 (1)@Autowired @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。 @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。 (2)@Resource @Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
4、@Controller和@RestController的区别?
.使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面
若返回json等内容到页面,则需要加@ResponseBody注解
:@RestController注解相当于@ResponseBody + @Controller合在一起的作用
5、依赖注入的方式有几种,哪几种?
常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入。
6、springIOC原理?自己实现IOC要怎么做,哪些步骤?
OC全称控制反转。在使用对象时不需要自己去new对象,而是交给容器去管理对象的创建和生命周期。在spring项目启动时,会扫描需要管理bean,通过生产bean的工厂初始化好对应的对象,然后可以通过set方法来注入到使用的位置。
7、Spring中BeanFactory和ApplicationContext的区别?、

  1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期。
  2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:
    a. 国际化支持
    b. 资源访问:Resource rs = ctx. getResource(“classpath:config.properties”), “file:c:/config.properties”
    c. 事件传递:通过实现ApplicationContextAware接口
    8、什么是IoC和DI?DI是如何实现的?
    ioc:是控制反转,对象的管理权,全部交给spring来管理, di的实现方法有三种 1.set注入 2.构造注入 3. p命名空间
    9、请问Spring中Bean的作用域有哪些?
    Spring中Bean的作用域有五个:
    1.singleton为默认值,IOC容器中仅存在一个Bean实例,Bean都以单例模式存在
    2.prototype,在每次获取bean的时候,都会创建一个新的bean的实例,它在容器初始化的时候不会创建实例,采用的是延迟加载的形式注入bean。
    3.request:每次http请求是会创建一个实例,该实例仅在当前http request有效
    4.session:每次http请求时会创建一个实例,该实例仅在当前http session有效
    5.globalsession,全局session,仅在portlet应用中使用
    request、session、globalsession是Web型应用中能够使用
    10、谈谈Spring中自动装配的方式有哪些?
    1.no:不进行自动装配,手动设置Bean的依赖关系。
    2.byName:根据Bean的名字进行自动装配。
    3.byType:根据Bean的类型进行自动装配。
    4.constructor:类似于byType,不过是应用于构造器的参数,如果正好有一个Bean与构造器的参数类型相同则可以自动装配,否则会导致错误。
    5.autodetect:如果有默认的构造器,则通过constructor的方式进行自动装配,否则使用byType的方式进行自动装配。
    11、aop的应用场景?
    日志、全局异常处理、权限控制、链路跟踪
    12、AOP的原理是什么?
    Spring AOP 面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装一个模块,而这个模块被命名切面,这样做减少了系统的重复代码,降低了模块间的耦合度,提高了系统的可维护性,可用于权限认证,日志打印,事务处理
    13、你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?
    连接点:程序执行的某个特定位置(如:某个方法调用前、调用后,方法抛出异常后)。一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就是连接点。Spring仅支持方法的连接点。
    切点:如果连接点相当于数据中的记录,那么切点相当于查询条件,一个切点可以匹配多个连接点。Spring AOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点。
    增强:增强是织入到目标类连接点上的一段程序代码。Spring提供的增强接口都是带方位名的,如:BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等。很多资料上将增强译为“通知”,这明显是个词不达意的翻译,让很多程序员困惑了许久。
    引介:引介是一种特殊的增强,它为类添加一些属性和方法。这样,即使一个业务类原本没有实现某个接口,通过引介功能,可以动态的未该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
    织入:织入是将增强添加到目标类具体连接点上的过程,AOP有三种织入方式:
    编译期织入:需要特殊的Java编译期(例如AspectJ的ajc)
    类装载期织入:要求使用特殊的类加载器
    动态代理织入:在运行时为目标类生成代理实现增强
    14、Spring支持的事务管理类型有哪些?你在项目中使用哪种方式?
    Spring支持事务类型:
    程序化事务管理:在此过程中,在编程的帮助下管理事务。它为您提供极大的灵活性,但维护起来非常困难。
    声明式事务管理:在此,事务管理与业务代码分离。仅使用注解或基于 XML 的配置来管理事务。
    选择声明式事务管理,因为这种方式和应用程序的关联较少,因此更加符合轻量级容器的概念。
    15、介绍一下spring?
    Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架
    ◆目的:解决企业应用开发的复杂性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能◆范围:任何Java应用
    16、Struts拦截器和Spring AOP区别?
    拦截器是AOP的一种实现,struts2 拦截器采用xwork2的interceptor!而spring的AOP基于IoC基础,其底层采用动态代理与CGLIB代理两种方式结合的实现方式。
    17、spring框架的优点?
    1.轻量:基础版本只有2MB
    2.控制反转:通过控制反转,实现松散耦合,对象们给出他们的依赖,而不是通过创建或查找对象的依赖
    3.面向切面编程:通过面向切面编程,实现业务逻辑和系统服务分开,支持面向切面编程
    4.事务管理:spring提供事务管理接口,实现本地事务和全局事务的管理
    5.异常处理:提供异常处理接口,把hibernate或者jdbc的异常转为一致的unchecked异常
    6.容器:spring包含并管理应用中对象的生命周期和配置
    7.MVC框架:spring的web框架是一个优秀的框架,是web框架的替代品
    18、选择使用Spring框架的原因(Spring框架为企业级开发带来的好处有哪些)?
    1.IoC容器:IoC容器帮助应用程序管理对象以及对象之间的依赖关系,对象之间的依赖关系如果发生了改变只需要修改配置文件而不是修改代码,因为代码的修改可能意味着项目的重新构建和完整的回归测试。有了IoC容器,程序员再也不需要自己编写工厂、单例,这一点特别符合Spring的精神“不要重复的发明轮子”。
    2.AOP:面向切面编程,将所有的横切关注功能封装到切面(aspect)中,通过配置的方式将横切关注功能动态添加到目标代码上,进一步实现了业务逻辑和系统服务之间的分离。另一方面,有了AOP程序员可以省去很多自己写代理类的工作。
    3.MVC:Spring的MVC框架是非常优秀的,从各个方面都可以甩Struts 2几条街,为Web表示层提供了更好的解决方案。
    4.事务管理:Spring以宽广的胸怀接纳多种持久层技术,并且为其提供了声明式的事务管理,在不需要任何一行代码的情况下就能够完成事务管理。
    19、持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些?
    持久层设计的目标包括:
  • 数据存储逻辑的分离,提供抽象化的数据访问接口。
  • 数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现。
  • 资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)。
  • 数据抽象,提供更面向对象的数据操作。
    持久层框架有:
  • Hibernate
  • MyBatis
  • TopLink
  • Guzz
  • jOOQ
  • Spring Data
  • ActiveJDBC

❤2、Hibernate
1、阐述实体对象的三种状态以及转换关系。
2、Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)?
3、Hibernate中Session的load和get方法的区别是什么?
4、如何理解Hibernate的延迟加载机制?在实际应用中,延迟加载与Session关闭的矛盾是如何处理的?
4、简述Hibernate常见优化策略。
5、锁机制有什么用?简述Hibernate的悲观锁和乐观锁机制。
6、Hibernate如何实现分页查询?
7、谈一谈Hibernate的一级缓存、二级缓存和查询缓存。
❤3、Struts
1、说说STRUTS的应用

❤4、Mybatis

1、解释一下MyBatis中命名空间(namespace)的作用。
1.用于区分不同的mapper。全局唯一。
2.绑定Dao接口的,即面向接口编程。当namespace绑定某接口后,可以不用写接口实现类,mybatis会通过接口的完整限定名查找到对应的mapper配置来执行SQL语句,因此namespace的命名必须跟接口同名。
2、MyBatis中的动态SQL是什么意思?
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。
MyBatis中用于实现动态SQL的元素主要有:

  1. if
  2. choose(when,otherwise)
  3. trim
  4. where
  5. set
  6. foreach

❤5、MVC
1、Spring MVC注解的优点
2、springmvc和spring-boot区别?
3、SpringMVC的运行机制,运行机制的每一部分的相关知识?
4、谈谈Spring MVC的工作原理是怎样的?
❤6、各框架对比与项目优化
1、Mybatis和Hibernate区别?
2、介绍一下你了解的Java领域的Web Service框架。
❤7、JPA
1、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。
2、EJB与JAVA BEAN的区别?
3、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
4、EJB的角色和三个对象是什么?
5、说说EJB规范规定EJB中禁止的操作有哪些?
6、EJB的激活机制是什么?
7、EJB的几种类型分别是什么
8、EJB需直接实现它的业务接口或Home接口吗,请简述理由。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值