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

目录

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.你认为项目中最重要的过程是哪些?

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

     

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【docker实战】02 用docker安装mysql

本示例采用bitnami的镜像进行安装MySQL 一、镜像搜索 先搜索一下mysql有哪些镜像 [rootlocalhost ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql …

边缘计算网关在温室大棚智能控制系统应用,开启农业新篇章

项目需求 ●目前大棚主要通过人为手动控温度、控水、控光照、控风,希望通过物联网技术在保障产量的前提下,提高作业效率,降低大棚总和管理成本。 ●释放部分劳动力,让农户有精力管理更多大棚,进而增加农户收入。 ●…

Azure 学习总结

文章目录 1. Azure Function1.1 Azure Function 概念1.2 Azure Function 实现原理1.3 Azure Function 本地调试1.4 Azure Function 云部署 2. Azure API Managment 概念 以及使用2.1 Azure API 概念2.2 Azure API 基本使用 3. Service Bus 应用场景及相关特性3.1 Service Bus 基…

golang并发安全-sync.map

sync.map解决的问题 golang 原生map是存在并发读写的问题,在并发读写时候会抛出异常 func main() {mT : make(map[int]int)g1 : []int{1, 2, 3, 4, 5, 6}g2 : []int{4, 5, 6, 7, 8, 9}go func() {for i : range g1 {mT[i] i}}()go func() {for i : range g2 {mT[…

Flink1.17实战教程(第七篇:Flink SQL)

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

2023年12月27日学习记录_加入噪声

目录 1、今日计划学习内容2、今日学习内容1、add noise to audio clipssignal to noise ratio(SNR)加入 additive white gaussian noise(AWGN)加入 real world noises 2、使用kaggel上的一个小demo:CNN模型运行时出现的问题调整采样率时出现bug 3、明确90dB下能否声…

[递归回溯枚举] 装载问题

装载问题 题目描述 有一批共 n 个集装箱要装上 2 艘载重量分别为 c1和 c2的轮船,其中集装箱 i 的重量为 wi,且 装载问题要求确定,是否有一个合理的装在方案可将这 n 个集装箱装上这 2 艘轮船。如果有,找出最优装载方案。 关于输…

14 Arbitration in sequencer(仲裁)

uvm_sequencer 有一个内置机制,可以在sequencer上同时运行的sequence中进行仲裁。基于仲裁算法,sequencer将得到仲裁权的sequence的sequence_item发送到driver。 每个sequence发送的sequence_items也有自己的id来区别于其他sequence。 要设置特定的仲裁…

Apipost-Helper使用流程

Apipost-Helper是由Apipost推出的IDEA插件,写完接口可以进行快速调试,且支持搜索接口、根据method跳转接口,还支持生成标准的API文档,注意:这些操作都可以在代码编辑器内独立完成,非常好用!这里…

JavaWeb——监听器Listener 过滤器Filter——韩顺平学习笔记

文章目录 JavaWeb 三大组件之监听器 ListenerListenerJavaWeb 的监听器ServletContextListener 监听器ServletContextAttributeListener 监听器其它监听器-使用较少HttpSessionListener 监听器HttpSessionAttributeListener 监听器ServletRequestListener 监听器ServletRequest…

泰迪智能科技分享:AI大模型发展趋势分析

大规模预训练语言模型,也被称为“大模型”或“基座模型”,其特点在于拥有巨大的参数量,构成了复杂的人工神经网络模型。大模型具有规模性(参数量大)、涌现性(产生预料之外的新能力)以及通用性&a…

uni-app condition启动模式配置

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

Java EE 网络原理之HTTP 响应详解

文章目录 1. 认识"状态码"(status code)2. 通过 form 表单构造 HTTP 请求3. 通过 ajax 构造 HTTP 请求 1. 认识"状态码"(status code) 表示了这次请求对应的响应,是什么样的状态 (成功,失败,其他的情况&…

Graph Transformer2023最新研究成果汇总,附15篇必看论文

图Transformer是一种结合了Transformer模型和图神经网络(GNN)的框架,用于在图形结构数据上执行预测任务。在图Transformer中,Transformer的自注意力机制被用来学习节点之间的关系,而GNN则被用来生成节点的嵌入表示。通…

数据结构与算法(C语言版)P10——图

1、图的基本概念和术语 前面学过: 线性是一对一树形是一对多 而今天要学习的图形结构是多对多。 图的定义: G(V,E) V:顶点(数据元素)的__有穷非空__集合。E:边的有穷集合。 __有向图:__每条边都是有方向的 __无…

【linux】touch的基本使用

碎碎念 刚接触linux时候的几个最基础的命令之一,用来创建文件。如果使用touch --help的时候会发现作者对于touch的简介:Update the access and modification times of each FILE to the current time.用于修改文件的访问和时间戳 带我的leader属于那种…

rsync的介绍与使用

rsync的介绍与使用 一、简介 rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。它能够以非常高效的方式传输和同步文件,它可以将一个目录的文件快速地同步到另一个目录,还可以通过网络快速同步多台主机间的文件…

使用Python Flask搭建一个简单的Web站点并发布到公网上访问

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务,本期教程…

springBoot整合redis做缓存

一、Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache的不足。和Memcache一样,R…

TDengine 公布 2023 年发展“成绩”,六大亮点引人瞩目

今天,我们进行了 2023 年重大成就和发展成绩盘点,主要归纳为产品创新、市场发展、开源社区、生态建设、活动布道与奖项荣誉六大维度。在元旦前夕,我们也想把这份“2023 年成绩单”分享给所有关注 TDengine 的朋友们。 在今年,最值…