Java开发框架和中间件面试题(8)

news2025/1/18 21:19:48

目录

82.Mybatis一级缓存,二级缓存?

83.Mybatis如何防止SQL注入?

84.mybatis中resultType和resultMap有什么区别?

85.如何在SpringBoot中禁用Actuator断点安全性?

86.什么是SpringBoot?SpringBoot有哪些优点?

87.SpringBoot中的监视器是什么?

88.什么是yaml文件?

89.如何使用SpringBoot实现异常处理? 

90.SpringBoot中有哪些常用注解?

91.SpringBoot中有哪些选择器类?

92.SpringBoot中缓存相关的注解有哪些?

93.Springboot如何进行打包和部署?

94.SpringBoot如何访问不同数据库?

95.为什么要使用hibernate?

96.hibernate中如何在控制台查看打印的SQL语句?

97.hibernate有几种查询方式?

98.hibernate实体类可以被绑定为final吗?

99.在hibernate中使用integer和int做映射有什么区别?

100.如何搭建一个高可用的系统?

101.你认为项目中最重要的过程是哪些?


82.Mybatis一级缓存,二级缓存?

1.一级缓存:指的是Mybatis中sqlSession对象的缓存,当我们执行查询以后,查询的结果会同时存入sqlSession中,再次查询的时候,先去sqlSession中查询,有的话直接拿出来,当sqlSession消失时,Mybatis的一级缓存也就消失了,当调用sqlSession的修改,添加,删除,commit(),close()等方法时,会清空一级缓存。

2.二级缓存:指的是Mybatis中的sqlSessionFactory对象的缓存,由同一个sqlSessionFactory对象创建的sqlSession共享其缓存,但是其中缓存的是数据而不是对象。当命中二级缓存时,通过存储的数据构造成对象返回。查询数据的时候,查询的流程是二级缓存>一级缓存>数据库。

3.二级缓存执行时机,如果开启了二级缓存,sqlSession进行close()后,才会把sqlSession一级缓存中数据添加到二级缓存中,为了将缓存数据取出来执行反序列化,还需要将要缓存的pojo实现Serializable接口,因为二级缓存数据存储介质多种多样,不一定只存在内存中,也可能存在硬盘中。

4.Mybatis执行步骤,Mybatis框架主要是围绕SqlSessionFactory进行的,具体步骤:

   定义一个configuration对象,其中包含数据源,事务,mapper文件资源以及影响数据库行为属性设置settings.

   通过配置对象,则可以创建一个sqlSessionFactoryBuilder对象

   通过sqlSessionFactoryBuilder获得sqlSessionFactory实例。

   通过sqlSessionFactory实例创建sqlSession实例,通过SqlSession对数据库进行操作。

83.Mybatis如何防止SQL注入?

   注意:但凡是sql注入漏洞的程序,都是因为程序要结束来自客户端用户输入的变量或者URL传递的参数,并且这个变量或者参数组成sql语句的一部分。对于用户输入的内容或传递的参数,我们应该要时刻保持警惕,这是安全领域里的【外部数据不可信任】的原则。纵观Web安全领域的各种攻击方式,大多数都是因为开发者违反了这个原则而导致的。所以自然能想到,就是变量的检测,过滤,验证下手,确保变量是开发者所预想的。

1.检查变量数据类型和格式,数据类型检查,SQL执行前,要进行数据类型检查,如果是邮箱📮,参数就必须是邮箱的格式,如果是日期,就必须是日期格式;

  只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式检查,确保变量是我们预想的格式,这样子很大程度上可以避免SQL注入攻击。如果上述例子中ID是int型的,效果会怎么样呢?无法注入,因为输入注入参数会失败。比如上述中的name字段,我们应该在用户注册的时候,就确定一个用户名规则,比如5~20个字符,只能由大小写字母,数字以及汉字组成,不包含特殊字符。此时我们应该有一个函数来完成统一的用户名检查。不过,仍然有很多场景并不能用到这个方法,比如写博客,评论系统,弹幕系统,必须允许用户可以提交任意形式的字符才行,否则用户体验感太差了。

2.过滤特殊符号

3.绑定变量,使用预编译语句

84.mybatis中resultType和resultMap有什么区别?

     1.resultType是直接表示返回类型的(对应着我们的Model对象中的实体)

     2.resultMap则是对外部ResultMap的引用(提前定义了db和Model之间的映射key,value关系),但是resultType跟resultMap不能同时存在。

85.如何在SpringBoot中禁用Actuator断点安全性?

    默认情况下,所有敏感的HTTP端点都是安全的,只有具有Actuator角色的用户才能访问他们。安全性是使用标准的HTTPServletRequest.isUserInRole方法实施的。

   我们可以使用managerment.security.enable=false来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

86.什么是SpringBoot?SpringBoot有哪些优点?

    1.SpringBoot简介

    基于Spring4.x的设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,引用的不稳定性得到了解决。

  2.SpringBoot有哪些优点?

   快速构建项目,可以选择一些必要的组件;

   对主流框架的无配置集成;

   内嵌Tomcat容器,项目可独立运行;

   删除了繁琐的xml配置文件;

  极大地提高了开发和部署效率;

  提供starter,简化Maven配置;

3.SpringBoot有哪些缺点?

版本迭代速度快,一些模块改动很大;

由于无需配置,报错时很难定位。

87.SpringBoot中的监视器是什么?

    监视器也叫listener,是servlet的监听器,可以用于监听Web应用程序中某些对象的创建,销毁增加,修改,删除等动作的发生,然后做出相应的响应处理。当范围对象的状态发生改变时,服务器自动调用监听器对象中的方法,常用于系统加载时进行信息初始化,统计在线人数和在线用户,统计网站的访问量。配置监听器的方法:

    通过@Component把监听器加入Spring容器中管理;

    在application.properties中添加context.listener.class配置

    在方法上加上@EventListener注解

88.什么是yaml文件?

 yaml是JSON的一个超集,可以非常方便的将外部配置以层次结构形式存储起来。yaml可以作为properties配置文件的替代。

yaml使用的注意事项:

 在properties文件中是以“."进行分割的,在yml中是用"."进行分割的;

 yml的数据格式和json的格式很像,都是KV格式,并且通过":"进行赋值;

 每个冒号后面一定要加一个空格;

89.如何使用SpringBoot实现异常处理? 

     1.使用@ExceptionHandler注解处理局部异常,该方式只能处理当前Controller中的ArithmeticException和NullPointerException异常,缺点就是只能处理单个controller的异常。

   2.使用@ControllerAdvice+@ExceptionHandler注解处理全局异常

   3.配置SimpleMappingExceptionResolver类处理异常

   4.实现HandlerExceptionResolver接口处理异常

90.SpringBoot中有哪些常用注解?

 1.@SpringBootApplication替代@SPringBootConfiguration,@EnableAutoConfiguration,@ComponentScan

2.@ImportAutoConfiguration导入配置类,一般做测试的时候用,正常优先使用@EnableAutoConfiguration.

3.@SpringBootConfiguration 替代@Configuration

4.@ImportResource将资源导入容器

5.@PropertySource导入properties文件

6.PropertySource   @PropertySource的集合

7.@Role Bean 角色定义为ROLE APPLICATION(默认值),ROLE SUPPORT(辅助角色),ROLE INFRASTRUCTURE(后台角色,用户无感)

8.@scope 指定bean的作用域,默认singleton,其他包括prototype,request,session,globalSession。

9.@Lazy使bean懒加载,取消bean与初始化。

10.@Primary自动装配时出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常。

11.@Profile指定Bean在哪个环境下被激活

12.@DependsOn依赖的bean注册完成,才注册当前类,依赖bean不存在会报错。用于控制bean加载顺序。

13.@PostConstruct  bean的属性都注入完毕后,执行注解标注的方式进行初始化工作

14.@Autowired默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。

15.@Lookup根据方法返回的类型,去容器中捞出对应

16.@Qualifier申明bean名字,且可以按bean名字加载bean。

17.@Required检查bean的属性setXXX()方法,要求属性在配置阶段必须已经配置。

18.@Description添加bean的文字描述。

19.@EnableAspectConfiguration启动AspectJ自动配置

20.EnableLoadTimeWeaving启动类加载器动态增强功能,使用instrucmentation实现

21.@AutoConfigurationPackage包含该注解的package会被AutoConfigurationPackages注册

22.@AutoConfigureBefore在指定配置类初始化前加载

23.@AutoConfigureAfter在指定配置类初始化后加载

24.AutoConfigureOrder指定配置类初始化顺序,越小初始化越早。

25.@ModelAttribute   注解可以被应用到方法上和方法参数上。

91.SpringBoot中有哪些选择器类?

    常用的选择器如下:

@Conditional,当指定的条件都满足时,组件才被注册

@ConditionalOnBean,指定bean在上下文中时,才注册当前bean。用在方法上,则默认依赖类为方法的返回类型。

@ConditionalOnClass,指定类在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型。

@ConditionalOnCloudPlateform,在指定云平台才注册配置。

@ConditionalOnExpression,指定spel为true时注册配置。

@ConditionalOnJava,在指定Java版本时注册配置;

@ConditionalOnMissingClass,指定类不在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型。

@ConditionalOnNotWebApplication,不是在Web环境才注册配置。

@ConditionalOnProperty,配置文件中的值与指定值是否相等,相等才注册配置

@ConditionalOnRespurce,指定resources都在classpath上才注册配置。

@ConditionalOnSingleCondidate,上下文中只有一个候选者bean时才注册配置

@ConditionalOnWebApplication,是在Web环境才注册配置。

92.SpringBoot中缓存相关的注解有哪些?

    缓存相关注解如下:

@EnableCaching,开启缓存配置,支持子类代理或者Aspect增强;

@CacheConfig,在一个类下,提供公共缓存配置

@Cacheable,放在方法和类上,缓存方法或者类下所有方法的返回值

@CachePut,每次先执行方法,再将结果放入缓存

@CacheEvict,删除缓存

@Caching,可以配置@Cacheable,@CachePut,@CacheEvict

93.Springboot如何进行打包和部署?

   Spring和SpringBoot都支持Maven和gradle通用打包管理技术。SpringBoot相对Spring的一些优点:

  提供嵌入式容器支持;

 

部署时可以灵活指定配置文件;

最近项目是分布式的项目,都是通过分项目打包部署,然后部署在docker中运行。

94.SpringBoot如何访问不同数据库?

可以使用druidDataSource创建DataSource,然后通过jdbcTemplate执行sql.

95.为什么要使用hibernate?

   hibernate对JDBC进行了封装,简化了JDBC的重复性代码;

  hibernate对dao有一个封装类hibernateTemplate,可以继承他,实现简单的CRUD接口。

  hibernate使用注解和配置文件,可以对实体类和映射文件进行映射;

 hibernate有事务管理机制,保证了数据的安全性;

  hibernate有一级缓存和二级缓存。

96.hibernate中如何在控制台查看打印的SQL语句?

     需要在配置文件中进行如下配置:

  

97.hibernate有几种查询方式?

 1.导航对象图查询:根据已加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用他的getOrders().iterator()方法就可以导航到所有关联的Order对象,假如在关联级别使用了延迟加载检索策略,那么首次执行此方法时,hibernate会从数据库中加载关联的Order对象,否则就从缓存中获得Order对象。

 2.OID方式:按照对象的OID来检索对象Session的get()和load()方法提供了这种功能,如果在应用程序先知道了OID,就可以使用这种方式检索对象。get()和Load()的用法完全一样,都需要两个参数,一个是持久化对象类名class,一个是行号OID,返回固定的某一行的数据,但是需要注意的是,当输入的OID不存在时,get()会返回一个空对象,Load()则直接报错。

3.HQL检索方式使用面向对象的HQL查询语言,session的find()方法用于执行HQL查询语句。此外,hibernate还提供了query接口,他是hibernate提供的专门的HQL查询接口,能够执行各种复杂的HQL查询语句。

 它具备以下功能:

    在查询语句中设定各种查询条件

   支持投影查询,即仅检索出对象的部分属性

  支持链接查询

支持分页查询

支持分组查询

支持内置函数

能够调用用户自定义的SQL函数

支持子查询

支持动态绑定参数

4.QBC检索方式:Query By Criteria的API来检索对象,这种API封装了基于字符串形式的查询语句,提供了更加面向对象的接口。

5.利用原生SQL语句进行查询

98.hibernate实体类可以被绑定为final吗?

     可以将hibernate的实体类定义为final,但这种做法不好。

    因为hibernate会使用代理模式在延迟关联的情况下提高性能。如果你把实体类定义成final类之后,因为Java不允许对final类进行扩展,所以hibernate就无法再使用代理了,如此一来就限制了使用可以提升性能的手段。

不过,如果你的持久化类实现了一个接口,而且在该接口中声明了所有定义实体类中的所有public的方法的话,就能避免出现前面所说的不利后果。

99.在hibernate中使用integer和int做映射有什么区别?

  hibernate是面向对象的ORM,所以一般定义成封装类型,要看数据库中的定义。

如果数据库中有对应字段存在null值,就要定义integer。也可以定义基本类型,在配置文件中写清楚即可。

100.如何搭建一个高可用的系统?

  高可用系统,就是说要保证系统在几乎任何时候都要有正常运行,功能正常。我们来看下哪些情况会造成系统不可用。

单机系统下的可用性问题,单点问题会影响系统高可用,比如要是这个链路其中一个单点挂了,那么整个系统都不可用了。所以引申出来主备/集群模式,防止单点问题。

高并发场景下,请求过多也会因为后端瓶颈点引起整个系统down掉,所以一般情况下应对高并发场景我们会限流,比如肖战演出抢票。

通过采用mq等队列形式削峰,保证后端系统不会down掉。

熔断机制。容灾机制,多机房部署。

综上所述:

1.主备/集群模式,防止单点故障。

2.限流,削峰,防止后端压力过大。

3.熔断机制,类似于限流。

4.容灾机制,多机房/异地部署。

101.你认为项目中最重要的过程是哪些?

分析,设计阶段,尽量找出进度的优先级。

     

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

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

相关文章

1.3MySQL中的自连接

自己的表和自己连接,核心:一张表拆为两张一样的表。 语法:select 字段列表 from 表 [as] 表别名1,表 [as] 表别名2 where 条件...; 关于怎样把一个表拆分成一个表,只要给它们分别取别名就行 categoryidpidcategoryname21信息…

单片机外设矩阵键盘之行列扫描识别原理与示例

单片机外设矩阵键盘之行列扫描识别原理与示例 1.概述 这篇文章介绍单片机通过行列扫描的方式识别矩阵键盘的按键,通过程序执行相应的操作。 2.行列扫描识别原理 2.1.独立按键识别原理 为什么需要矩阵按键 独立按键操作简单,当数量较多时候会占用单片机…

Flink1.17实战教程(第二篇:DataStream API)

系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…

MYSQL一一外键约束

概念:外键用来让两张表的数据之间建立联系,从而保证数据的一致性和完整性 建立外键: ①这是在建立表的时候建立外键的方法 ②这是在建立完表之后建立外键的方法: 删除外键: 现在有一张员工表(emp&#xf…

【easy-ES使用】1.基础操作:增删改查、批量操作、分词查询、聚合处理。

easy-es、elasticsearch、分词器 与springboot 结合的代码我这里就不放了,我这里直接是使用代码。 基础准备: 创建实体类: Data // 索引名 IndexName("test_jc") public class TestJcES {// id注解IndexId(type IdType.CUSTOMI…

C#获取windows系统资源使用情况

1.前言 之前有一篇博客介绍如何获取Linux服务器上的资源使用情况《Java 获取服务器资源(内存、负载、磁盘容量)》,这里介绍如何通过C#获取Window系统的资源使用。 2.获取服务器资源 2.1.内存 [DllImport("kernel32.dll")][retu…

CSDN规则详解——csdn那些你不知道的事儿(点赞、评论、收藏)

文章目录 每日一句正能量前言点赞评论收藏原力等级和博客等级后记 每日一句正能量 “只有奋斗者才能成为胜利者,只有坚持者才能创造奇迹。” - 迈克尔乔丹 这句话来自于世界著名篮球运动员迈克尔乔丹,他以无与伦比的天赋和努力成为了篮球界的传奇人物。他…

产品经理如何培养思维模式和创新能力?

作为一名产品经理,我们需要具备一定的思维模式和创新能力,以应对不断变化的市场和技术环境。在本文中,我将分享一些培养产品经理思维模式和创新能力的方法。 一、培养市场洞察力 作为产品经理,我们需要深入了解市场和用户需求&a…

表单(HTML)

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>个人信息</title></head><body><h1>个人信息</h1><form><fieldset><legend>基本信息</legend><label for"…

【日常聊聊】编程语言的未来:趋势、多样性、人工智能融合、教育与生态系统

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言&#xff1a; 正文 1. 编程语言的发展趋势 1.1 新语言和编程范式的涌现 1.2 影响和挑战 2. 编程语言的多样性 2.1 互操作性和可移…

爬虫工作量由小到大的思维转变---<第三十章 Scrapy Redis 第一步(配置同步redis)>

前言: 要迈向scrapy-redis进行编写了;首要的一步是,如何让他们互通?也就是让多台电脑连一个任务(这后面会讲); 现在来做一个准备工作,配置好redis的同步!! 针对的是windows版本的redis同步,实现主服务和从服务共享一个redis库; 正文: 正常的redis for windows 的安装这里就…

制作gif动图软件,视频转gif动图生成器

生活在这个快节奏的时代&#xff0c;我们总是希望能够抓住那些转瞬即逝的美好。而gif动图&#xff0c;正是这样一种能够让时间静止、让美好定格的存在。从视频到gif动图&#xff0c;不仅仅是格式的转换&#xff0c;更是情感的传递与分享。 所需工具&#xff1a; 一个【媒体梦…

Fiddler工具 — 2.补充:HTTP协议介绍(一)

1、HTTP协议介绍 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写&#xff0c;是用于从万维网(WWW:World Wide Web )服务器传输超文本&#xff08;也可以说是资源&#xff09;到本地浏览器的传送协议。 HTTP协议是基于TCP协议的应用层协议&#xff0c;它不关心…

K8S 全局架构图 —— 筑梦之路

kube-apiserver&#xff1a; Kubernetes API 服务器验证并配置 API 对象的数据&#xff0c; 这些对象包括 pods、services、replicationcontrollers 等。API 服务器为 REST 操作提供服务&#xff0c;并为集群的共享状态提供前端&#xff0c; 所有其他组件都通过该前端进行交互。…

docker学习笔记01-安装docker

1.Docker的概述 用Go语言实现的开源应用项目&#xff08;container&#xff09;&#xff1b;克服操作系统的笨重&#xff1b;快速部署&#xff1b;只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统&#xff1b;Docker通过隔离机制&#xff0c;每个容器间是互相隔离…

Java可视化物联网智慧工地云平台源码支持人脸识别考勤

智慧工地是指利用云计算、大数据、物联网、移动互联网、人工智能等技术手段&#xff0c;为建筑施工现场提供智能硬件及物联网平台的解决方案&#xff0c;以实现建筑工地的实时化、可视化、多元化、智慧化和便捷化。智慧工地通过全新的工程全生命周期管理理念&#xff0c;利用物…

克魔助手:方便查看iPhone应用实时日志和奔溃日志工具

查看ios app运行日志 摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和奔溃日志。同时还提供了奔溃日志分析查看模块&#xff0c;可以对苹果奔溃日志进行符号化、格式化和分析&#xff0c;极…

QML —— Slider示例(附完整源码)

示例 - 效果 实例 - 源码 import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Layouts 1.12 import QtQuick.Controls 2.5Window {id: rootIdvisible: truewidth: 640height: 480title: qsTr("Hello World")Column{spacing: 50anchors.centerIn: paren…

无公网IP环境如何实现远程访问家里内网威联通QNAP NAS中存储的文件

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xf…

Node.js--》node环境配置及nvm和nvm-desktop安装教程

博主最近换了台新电脑&#xff0c;环境得从零开始配置&#xff0c;所以以下是博主从一台纯净机中配置环境&#xff0c;绝对的小白教程&#xff0c;大家第一次安装完全可以参考我的过程&#xff0c;闲话少说&#xff0c;直接开始&#xff01;&#xff01;&#xff01; 接下来介绍…