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

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

     

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

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

相关文章

go 使用 - sync.Metux

[TOC](sync.metux 使用) 简介 简述使用metux使用的方法, 使用的注意点, 以及使用情况使用方法 提供的方法 Lock() 方法用于获取锁 Unlock() 方法用于释放锁 TryLock()方法尝试获取锁 对共享资源进行加锁, 例 &#…

数据库(Database)基础知识

什么是数据库 数据库是按照数据结构来组织、存储和管理数据的仓库,用户可以通过数据库管理系统对存储的数据进行增删改查操作。 数据库实际上是一个文件集合,本质就是一个文件系统,以文件的方式,将数据保存在电脑上。 什么是数据…

阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战

作者:贤维 马建波 古九 五花 刘佳旭 引言 2023 年 7 月,阿里云容器服务 ACK 成为首批通过中国信通院“云服务稳定运行能力-容器集群稳定性”评估的产品, 并荣获“先进级”认证。随着 ACK 在生产环境中的采用率越来越高,稳定性保…

leaflet学习笔记-地图图层控制(二)

图层介绍 Leaflet的地图图层控件可控制两类图层:一类是底图图层(Base Layers),一次只能选择一个图层作为地图的背景图层,即底图图层,在地图图层控件中用单选按钮控制;另一类是覆盖图层&#xff…

大数据与人工智能|信息技术产业架构、行业发展与前沿技术(第2节)

内容链接:信息技术产业架构、行业发展与前沿技术(大数据与人工智能系列课程 第2节) 声明:学习使用,侵权必删! 主要内容:1. 从算盘到量子计算机,介绍了半导体行业的发展历程和技术原…

吓一跳!哈佛大学最受欢迎的课程,我不敢相信我的眼睛!

文件销毁、硬盘销毁、数据销毁以及物料销毁是四个相互关联且在企业或组织运营中至关重要的环节。这四个方面都涉及信息安全和保密管理的核心内容,关乎企业的商业秘密、客户的个人信息以及各种敏感数据的保护。随着信息化和数字化的快速发展,如何安全、有…

thinkcmf 文件包含 x1.6.0-x2.2.3 已亲自复现

thinkcmf 文件包含 x1.6.0-x2.2.3 CVE-2019-16278 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议总结 漏洞名称 漏洞描述 ThinkCMF是一款基于PHPMYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。ThinkCMF提出灵活的应用机制&a…

微信小程序登录(生成token,token校验)——后端

写在前面:如果想自己开发微信小程序,需要先到微信小程序官方平台注册账号,地址为:https://mp.weixin.qq.com/wxopen/waregister?actionstep1. 登录流程 其中,开发者服务器就是我们的后端服务器,微信接口服…

传感器基础:传感器使用与编程使用(三)

目录 常用传感器讲解九--雨滴传感器具体讲解电路连接代码实现 常用传感器讲解十--光传感器根据亮度安排灯具体讲解电路连接代码实现 常用传感器讲解七--light cup(KY-008)具体讲解电路连接代码实现 常用传感器讲解十二--倾斜开关传感器(KY-02…

Java版企业电子招标采购系统源码——鸿鹄电子招投标系统的技术特点

在数字化时代,采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术,打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…

旧衣回收小程序搭建,稳占回收市场

近几年我国大众的消费水平不断提升,闲置物品也相应增加了不少,尤其是闲置衣服,为了减少资源浪费,旧衣服回收回收行业受到了大众的关注。 目前我国旧衣服回收行业的市场规模达到了300多亿元,旧衣回收行业的商业价值非常…

Linux 查看系统类型和版本(内核版本 | 发行版本)

Linux 查看系统类型和版本 首先普及下linux系统的版本内容1. 查看linux系统内核版本2. 查看linux系统发行版本 首先普及下linux系统的版本内容 内核版本和发行版本区别 内核版本就是指 Linux 中最基层的代码,版本号如 Linux version 3.10.0-327.22.2.el7.x86_64发行…

JavaSE50题:26. (数组练习题)使奇数位于偶数之前

概述 调整数组顺序使得奇数位于偶数之前,调整之后,不关心大小顺序。 如数组:{1,2,3,4,5,6} 调整后可能是:{1,5,3,4,2,6} 方法 定义 left 和 right,二者分别…

第16章Java

通过java的反射机制,程序员可以更深入的控制程序的运行过程。例如,可在程序运行时对象用户输入的信息进行验证,还可以逆向控制程序的执行过程,讲解了反射,另外java还提供了Annotation注解功能,该功能建立在…

PYTHON基础:线性算法--线性回归|岭回归|套索回归模型

常用的三种线性模型算法–线性回归模型、岭回归模型、套索回归模型 线性模型基本概念 线性模型的一般预测模型是下面这个样子的,一般有多个变量,也可以称为多个特征x1、x2、x3 … 最简单的线性模型就是一条直线直线的方程式,b0是截距&#…

vue3 根据用户权限控制左侧菜单和路由拦截

目录 前言 整体思路 详细开发 1.左侧菜单的显隐控制 2.控制路由权限 补充权限控制 总结 前言 我这里是vue3开发的一个后台管理系统,所以涉及用户权限管理,以及页面权限等,其他模块部分可以查看专栏,这里只对怎么实现根据用…

[Redis实战]优惠券秒杀

三、优惠券秒杀 3.1 全局唯一ID 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这种表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显受单表数据量的限制 场景分析一&…

Word2Vec详解: CBOW Skip-gram和负采样

Word2Vec: CBOW & Skip-gram 如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 CBOW 模型。 而如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做 Skip-gram 模型。 CBOW 模型 连续词袋模…

简单实现一个自定义loader

webpack定义的loader需要遵循单一功能原则,也就是一个loader只实现一个功能。在实现开发中,我们会直接使用诸如蓝湖等生成的样式,比如 button{background: rgb(255, 85, 46); }但为了考虑主题换肤,我们实现的想要的可能是 butto…

在用Vite开发时静态图片放哪里,才能保证显示,不出现找不到资源

在用Vite开发时静态图片放哪里 在用Vite开发时静态图片(资源)放哪里呢 ? 如果你想直接全部显示的那么请你把静态资源放到public目录下面,这样你一打包所有的静态资源都会放到打包根目录下。但是此时你在项目中引用的地址一定要是…