【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对象,其本质就是将数据从一种形式转换到另一种形式。

相关文章
|
13天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
43 11
|
23天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
59 7
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
77 2
|
5天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
29天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
67 14
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
23天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
3天前
|
存储 缓存 前端开发
JavaEE初阶——初识EE(Java诞生背景,CPU详解)
带你从零入门JAVAEE初阶,Java的发展历程认识什么是cpu,cpu的工作原理,cpu是如何进行计算的,cpu的架构,指令集,cpu的核心,如何提升cpu的算力,cpu的指令,,cup的缓存,cpu的流水线
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道

热门文章

最新文章