互联网Java工程师面试题·Spring篇·第七弹

news2024/12/25 23:54:30

目录

36、什么是基于 Java 的 Spring 注解配置? 给一些注解的例子.

37、什么是基于注解的容器配置?

38、怎样开启注解装配?

39、Required 注解

40、Autowired 注解

41、Qualifier 注解

42、在 Spring 框架中如何更有效地使用 JDBC?

43、JdbcTemplate

44、Spring 对 DAO 的支持

45、使用 Spring 通过什么方式访问 Hibernate?

46、Spring 支持的 ORM

47.如何通过HibernateDaoSupport将Spring和Hibernate结合起来?

48、Spring 支持的事务管理类型

49、Spring 框架的事务管理有哪些优点?

50、你更倾向用那种事务管理类型?

51、解释 AOP

52、Aspect 切面

52、在 Spring AOP 中,关注点和横切关注的区别是什么?

54、连接点

55、通知

56、切点

57、什么是引入?

58、什么是目标对象?

59、什么是代理?

60、有几种不同类型的自动代理?


36、什么是基于 Java 的 Spring 注解配置? 给一些注解的例子.

        基于 Java 的配置,允许你在少量的 Java 注解的帮助下,进行你的大部分 Spring配置而非通过 XML 文件。

        以Configuration 注解为例,它用来标记类可以当做一个 bean 的定义,被Spring IOC 容器使用。另一个例子是@Bean 注解,它表示此方法将要返回一个对象,作为一个 bean 注册进 Spring 应用上下文。


37、什么是基于注解的容器配置?

        相对于 XML 文件,注解型的配置依赖于通过字节码元数据装配组件,而非尖括号的声明。

        开发者通过在相应的类,方法或属性上使用注解的方式,直接组件类中进行配置,而不是使用 xml 表述 bean 的装配关系。


38、怎样开启注解装配?

        注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在 Spring 配置文件中配置 context:annotation-config/元素。


39、Required 注解

        这个注解表明 bean 的属性必须在配置的时候设置,通过一个 bean 定义的显式的属性值或通过自动装配,若Required 注解的 bean 属性未被设置,容器将抛出BeanInitializationException。


40、Autowired 注解

        Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和Required 一样,修饰 setter 方法、构造器、属性或者具有任意名称和/或多个参数的 PN 方法。


41、Qualifier 注解

        当有多个相同类型的 bean 却只有一个需要自动装配时,将Qualifier 注解和Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的 bean。


42、在 Spring 框架中如何更有效地使用 JDBC?

        使用 SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。所以开发者只需写 statements 和 queries 从数据存取数据,JDBC 也可以在 Spring 框架提供的模板类的帮助下更有效地被使用,这个模板叫 JdbcTemplate (例子见这里here)


43、JdbcTemplate

        JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理。


44、Spring 对 DAO 的支持

        Spring 对数据访问对象(DAO)的支持旨在简化它和数据访问技术如 JDBC,Hibernate or JDO 结合使用。这使我们可以方便切换持久层。编码时也不用担心会捕获每种技术特有的异常。


45、使用 Spring 通过什么方式访问 Hibernate?

在 Spring 中有两种方式访问 Hibernate:

(1)控制反转 Hibernate Template 和 Callback。

(2)继承 HibernateDAOSupport 提供一个 AOP 拦截器。


46、Spring 支持的 ORM

Spring 支持以下 ORM:

Hibernate

iBatis

JPA (Java Persistence API)

TopLink

JDO (Java Data Objects)

OJB


47.如何通过HibernateDaoSupport将Spring和Hibernate结合起来?

用 Spring 的 SessionFactory 调用 LocalSessionFactory。集成过程分三步:

(1)配置 the Hibernate SessionFactory。

(2)继承 HibernateDaoSupport 实现一个 DAO。

(3)在 AOP 支持的事务中装配。


48、Spring 支持的事务管理类型

Spring 支持两种类型的事务管理:

编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。

声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和 XML 配置来管理事务。


49、Spring 框架的事务管理有哪些优点?

它为不同的事务 API 如 JTA,JDBC,Hibernate,JPA 和 JDO,提供一个不变的编程模式。

它为编程式事务管理提供了一套简单的 API 而不是一些复杂的事务 API

如:

    它支持声明式事务管理。

    它和 Spring 各种数据访问抽象层很好得集成。


50、你更倾向用那种事务管理类型?

        大多数 Spring 框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许你通过代码控制事务)少了一点灵活性。


51、解释 AOP

        面向切面的编程,或 AOP, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。


52、Aspect 切面

        AOP 核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组 API 提供横切功能。比如,一个日志模块可以被称作日志的 AOP 切面。根据需求的不同,一个应用程序可以有若干切面。在 Spring AOP 中,切面通过带有Aspect 注解的类实现。


52、在 Spring AOP 中,关注点和横切关注的区别是什么?

        关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。

        横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个用,比如日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。


54、连接点

        连接点代表一个应用程序的某个位置,在这个位置我们可以插入一个 AOP 切面,它实际上是个应用程序执行 Spring AOP 的位置。


55、通知

通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过SpringAOP 框架触发的代码段。

Spring 切面可以应用五种类型的通知:

before:前置通知,在一个方法执行前被调用。

after: 在方法执行之后调用的通知,无论方法执行是否成功。

after-returning: 仅当方法成功完成后执行的通知。

after-throwing: 在方法抛出异常退出时执行的通知。

around: 在方法执行之前和之后调用的通知。


56、切点

切入点是一个或一组连接点,通知将在这些位置执行。可以通过表达式或匹配的方式指明切入点。


57、什么是引入?

引入允许我们在已存在的类中增加新的方法和属性。


58、什么是目标对象?

被一个或者多个切面所通知的对象。它通常是一个代理对象。也指被通知(advised)对象。


59、什么是代理?

代理是通知目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。


60、有几种不同类型的自动代理?

BeanNameAutoProxyCreator

DefaultAdvisorAutoProxyCreator

Metadata autoproxying


要想了解更多:

千题千解·Java面试宝典_时光の尘的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1183544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全(黑客)-零基础自学

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…

NowCoder | 环形链表的约瑟夫问题

NowCoder | 环形链表的约瑟夫问题 OJ链接 思路&#xff1a; 创建带环链表带环链表的删除节点 代码如下&#xff1a; #include<stdlib.h>typedef struct ListNode ListNode; ListNode* ListBuyNode(int x) {ListNode* node (ListNode*)malloc(sizeof(ListNode));node…

基于springboot+vue的图书馆管理系统

图书馆管理系统 springboot32阿博图书馆管理系统 源码合集&#xff1a; www.yuque.com/mick-hanyi/javaweb 源码下载&#xff1a;博主私 摘 要 随着社会的发展&#xff0c;计算机的优势和普及使得阿博图书馆管理系统的开发成为必需。阿博图书馆管理系统主要是借助计算机&…

vue3高德地图+搜索+点击获取经纬度

首先 安装依赖 npm i amap/amap-jsapi-loader --save html&#xff08;设置一个容器&#xff09;点击位置控制台可以打印到数据 如果想要回显到input 只需在input内绑定v-modal即可 <template><div><input style"width: 80%; height: 30px" v-mode…

Java进阶篇--线程池之ScheduledThreadPoolExecutor

目录 ScheduledThreadPoolExecutor简介 构造方法 特有方法 可周期性执行的任务-ScheduledFutureTask DelayedWorkQueue 什么是DelayedWorkQueue&#xff1f; 为什么要使用DelayedWorkQueue呢&#xff1f; DelayedWorkQueue的数据结构 ScheduledThreadPoolExecutor执行…

uniApp页面通讯

Uniapp 是一款基于 Vue.js 开发的框架&#xff0c;它可以用来开发多端应用&#xff0c;包括微信小程序、H5、APP 等。在 Uniapp 中&#xff0c;页面通讯分为三种方式&#xff1a;事件总线、Vuex 和 uni.$emit。 事件总线&#xff08;EventBus&#xff09;&#xff1a;事件总线是…

挖掘非结构化数据潜能——向量数据库的探索之路

“ 摸着石头过河&#xff0c;一直向前&#xff0c;不断尝试 ” 整理 | 小白 出品&#xff5c;极新 IDC 预测&#xff0c;到 2025 年&#xff0c;中国的数据量将增长到 48.6ZB&#xff0c;80% 是非结构化数据&#xff0c;并且将成为全球最大的数据圈。在我们的日常生活中&…

rancher或者其他容器平台使用非root用户启动jar

场景&#xff1a; java程序打成镜像&#xff0c;在rancher上运行&#xff0c;默认是root账户&#xff0c;发现hdfs或者hive不允许root账户操作&#xff1b;所以打算用费root账户启动jar&#xff0c;使其具有hive和hdfs的操作权限。 Dockerfile entrypoint.sh 思路就是上面这样…

git and svn 行尾风格配置强制为lf

git CLI配置&#xff1a; // 提交时转换为LF&#xff0c;检出时转换为CRLF git config --global core.autocrlf true // 提交时转换为LF&#xff0c;检出时不转换 git config --global core.autocrlf input // 提交检出均不转换 git config --global core.autocrlf f…

C# wpf 实现任意控件(包括窗口)更多拖动功能

系列文章目录 第一章 Grid内控件拖动 第二章 Canvas内控件拖动 第三章 任意控件拖动 第四章 窗口拖动 第五章 附加属性实现任意拖动 第六章 拓展更多拖动功能&#xff08;本章&#xff09; 文章目录 系列文章目录前言一、添加的功能1、任意控件MoveTo2、任意控件DragMove3、边…

19 款Agent产品工具合集

原文&#xff1a;19 款Agent产品工具合集 什么是Agent? 你告诉GPT完成一项任务&#xff0c;它就会完成一项任务。 如果你不想为GPT提出所有任务怎么办&#xff1f;如果你想让GPT自己思考怎么办&#xff1f; 想象一下&#xff0c;你创建了一个AI&#xff0c;你可以给它一个…

第一章:IDEA

系列文章目录 文章目录 系列文章目录前言一、IDEA 的使用1.1 IDEA 工作界面1.2 IDEA 的基本介绍和使用1.3 IDEA 使用技巧和经验1.4 IDEA编译与源文件1.5 IDEA 常用快捷键1.6 IDEA模板/自定义模板 总结 前言 IDEA 全称 IntelliJ IDEA&#xff0c;在业界被公认为最好的 Java 开发…

C++进阶-模板

模板 模板的概念函数模板函数模板语法函数模板注意事项案例-实现数据的排序函数模板与普通函数的区别普通函数与函数模板的调用规则 模板的局限性类模板的基本语法类模板与函数模板的区别类模板中成员函数创建时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板…

模拟量指令

这里写自定义目录标题 模拟量scale指令导入模拟量输入原理硬件组态 指令运用信号发生器使用S_ITR(integer to real) 整数转换浮点数 模拟量输入信号输出信号标准信号非标准信号RTD&#xff08;Resistance Temperature Detector&#xff0c;热电阻&#xff09;实物图接线方法 TC…

顶板事故防治vr实景交互体验提高操作人员安全防护技能水平

建筑业在我国各行业中属危险性较大且事故多发的行业&#xff0c;在建筑业“八大伤害”(高处坠落、坍塌、物体打击、触电、起重伤害、机械伤害、火灾爆炸及其他伤害)事故中&#xff0c;高处坠落事故的发生率最高、危险性极大。工地现场培训vr坠落体验利用虚拟现实技术还原各种情…

数据结构(c语言版) 栈

顺序栈 要求&#xff1a;实现顺序栈的入栈&#xff0c;出栈&#xff0c;显示栈 代码 #include <stdio.h> #define MAXSIZE 100struct liststack{int data[MAXSIZE];int top; };//初始化栈 void init(struct liststack * LS){LS->top -1; }//入栈操作 void instack…

小程序制作(超详解!!!)第十四节 计时器

1.案例描述 设计一个实现倒计时功能的小程序&#xff0c;小程序运行后&#xff0c;首先显示空白界面&#xff0c;过2秒后才显示计时界面点击“开始计时”按钮后开始倒计时&#xff0c;点击“停止计时”按钮后停止计时。 2.index.wxml <view class"box" hidden&…

Docker安装、卸载,以及各种操作

docker是一个软件&#xff0c;是一个运行与linux和windows上的软件&#xff0c;用于创建、管理和编排容器&#xff1b;docker平台就是一个软件集装箱化平台&#xff0c;是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xf…

服务器数据恢复—云服务器mysql数据库表被truncate的数据恢复案例

云服务器数据恢复环境&#xff1a; 阿里云ECS网站服务器&#xff0c;linux操作系统mysql数据库。 云服务器故障&#xff1a; 在执行数据库版本更新测试时&#xff0c;在生产库误执行了本来应该在测试库执行的sql脚本&#xff0c;导致生产库部分表被truncate&#xff0c;还有部…

【达梦数据库】mysql与达梦整数类型对比关系

最近遇了mysql 和达梦整数类型的数据范围对比&#xff0c;做了个表格供大家分享 对比表格 要说明的是我整理的时候&#xff0c;达梦貌似没有无符号整数类型&#xff08;防杠保护&#xff09;&#xff0c;也就是只能将mysql/dm 的有符号整数类型的的范围值进行对比 MYSQL - t…