【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(三)

简介: 【前言】别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 ……   【下载】个人结合诸多资料,总结的一些JavaEE常见面试题,主要针对初/中级程序员。想要word完整版下载的,评论里留言留下你的邮箱! 31.Spring中的BeanFactory和Applicati

【前言】别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 ……  

【下载】个人结合诸多资料,总结的一些JavaEE常见面试题,主要针对初/中级程序员想要word完整版下载的,评论里留言留下你的邮箱!

31.Spring中的BeanFactoryApplicationContext有什么联系?

答:Spring通过配置文件描述Bean以及Bean之间的依赖关系,利用Java的反射机制实现Bean的实例化,并建立Bean之间的依赖关系,在此基础上,SpringIoC容器还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布等高级服务。

BeanFactorySpring框架最核心的接口,它提供了IoC容器的配置机制。

ApplicationContext建立在BeanFactory之上,提供了更多面向应用功能,包括国际化和框架事务体系的支持。

④通常将BeanFacory称为IoC容器,而ApplicationContext称之为应用上下文,前者更倾向于Spring本身,后者更倾向于开发者,因此被使用得更多。

32.SpringBean的作用域有哪些?

答:(1)在Spring的早期版本中,仅有两个作用域:singletonprototype,前者表示Bean以单例模式存在;后者表示多例,每次从容器中调用Bean时,都会返回一个新的实例;

2Spring 2.x中针对WebApplicationContext新增了3个作用域,分别是:request(每次HTTP请求都会创建一个新的Bean)、session(同一个HttpSession共享同一个Bean,不同的HttpSession使用不同的Bean)和globalSession(同一个全局Session共享一个Bean)。

33.你如何理解AOP中的连接点(Joinpoint)、切入点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?

答:  ①连接点(Joinpoint):所谓连接点是指那些被拦截到的点。在spring,这些点指的是方法,因为spring只支持方法类型的连接点;

  ②切入点(Pointcut):所谓切入点是指我们要对哪些连接点(Joinpoint)进行拦截的定义;

 

  ③增强/通知(Advice):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)

  ④引介(Introduction):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field

  Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程;

  Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类;

  Aspect(切面):是切入点和通知的结合,以后咱们自己来编写和配置的;

34.代理模式与装饰者模式的区别:

答:(1)相同点:

①都要与基础对象实现相同的接口;

②都要在自身对象中引入被代理对象或被装饰对象的引用。

2)不同点:

①装饰者模式定义:动态的将责任附加到被装饰者对象上,用于扩展对象的功能。比继承的 灵活性大,典型的如IO的设计,就是典型的装饰者模式;

②代理模式的定义:对其他对象进行代理,以控制对被代理对象的访问。Spring的为业务层方法生成的 代理类,主要是进行一些事物控制等;

③由定义,我们可以看出:装饰的责任是扩展功能;而代理主要是控制访问。

 

35.阐述Spring框架中Bean的生命周期?

答:

 

Spring IoC容器找到关于Bean的定义并实例化该Bean

Spring IoC容器对Bean进行依赖注入。

③如果Bean实现了BeanNameAware接口,则将该Beanid传给setBeanName方法。

④如果Bean实现了BeanFactoryAware接口,则将BeanFactory对象传给setBeanFactory方法。

⑤如果Bean实现了BeanPostProcessor接口,则调用其postProcessBeforeInitialization方法。

⑥如果Bean实现了InitializingBean接口,则调用其afterPropertySet方法。

⑦如果有和Bean关联的BeanPostProcessors对象,则这些对象的postProcessAfterInitialization方法被调用。

⑧当销毁Bean实例时,如果Bean实现了DisposableBean接口,则调用其destroy方法。

36. Spring中的自动装配有哪些限制?

答:①如果使用了构造器注入或者setter注入,那么将覆盖自动装箱的依赖关系。

②基本数据类型的值、字符串字面量、类字面量无法使用自动装箱来注入。

③有先考虑使用显示的装配来进行更精确的依赖注入而不是使用自动装配。

37.和自动装配相关的注解有哪些?

答:@Required:该依赖关系必须装配(手动或自动装备),否则将抛出BeanInitializationException异常。

@Autowired:自动装配,默认按类型进行自动装配。

@Qualifier:如果按类型自动装配时,有不止一个匹配的类型,那么可以使用该注解指定名字来消除歧义。

38.如何使用HibernateDaoSupport整合SpringHibernate

答:①在Spring中配置Hibernate的会话工厂(LocalSessionFactoryBeanAnnotationSessionFactoryBean)。

②让DAO的实现类继承HibernateDaoSupport(继承getHibernateTemplate方法来调用模板方法)。

③让Spring来管理Hibernate的事务(推荐使用声明式事务)。

39.你是如何理解“横切关注”这个概念的?

答:“横切关注”是会影响到整个应用的关注功能,它跟正常的业务逻辑是正交的,没有必然的联系,但是几乎所有的业务逻辑都会涉及到这些关注功能。通知、事务、日志、安全性等关注就是应用的横切关注功能。

40.如何理解Spring AOPAdvice这个概念的?

答:Advice在国内的很多书面资料中都被翻译为“通知”,但是很明显这个翻译无法表达其本质,有少量的读物上将这个词翻译为“增强”,这个翻译是对Advice较为准确的诠释,我们通过AOP将横切关注功能加到原有的业务逻辑上,这就是对原有业务逻辑的一种增强,这种增强可以是前置增强、后置增强、返回后增强、抛异常时增强和包围型增强。

41.Web项目中如何获得SpringIoC容器?

答:WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContextservletContext);

42.JSP中的静态包含和动态包含的区别?

答:①代码如下:

       <%-- 静态包含 --%>

       <%@ include file="..." %>


       <%-- 动态包含 --%>

      <jsp:include page="...">

               <jsp:param name="..." value="..." />

       </jsp:include>

②静态包含是通过JSPinclude指令包含页面的;而动态包含是通过JSP<jsp: forward>标签进行包含的。

③静态包含是编译时包含,如果包含的页面不存在,则会产生编译错误,而且两个页面的“contentType”属性应保持一致,因为这两个页面会合二为一,产生一个class文件,并且静态包含不会检查所含文件的变化,适用于包含静态页面。

④动态包含是运行时包含,可以向被包含的页面传递参数,包含页面和被包含页面是独立的,会编译出两个class文件,如果被包含的页面不存在,不会产生编译错误,也不影响页面其他部分的执行。

43.Servlet中如何获取用户提交的查询参数或表单数据?

答:HttpServletRequestgetParameter()方法。

HttpServletRequestgetParameterValues()方法。

HttpServletRequestgetParameterMap()方法。

44.什么是Web ServiceWeb服务)?

答:Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API

②它是基于HTTP协议传输数据,这使得运行在不同机上的不同应用程序,无须借助附加的、专门的第三方软件或硬件,就可以相互交换数据或集成。

45.什么是ORM

答:①对象关系映射(Object-Relation Mapping,简称ORM)是一种为解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;

ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者注解),将程序中的对象自动持久化到关系数据库中,或者将关系数据库表中的行转换成Java对象,其本质就是将数据从一种形式转换到另一种形式。

相关文章
|
8天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
31 2
|
13天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
18天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
15天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
39 4
|
15天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
55 4
|
16天前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
32 1
|
24天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
31 7
|
21天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
36 3
|
22天前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
12 2
|
24天前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
27 4