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.rhkb.cn/news/226102.html

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

相关文章

腾讯云轻量应用服务器性能评测——CPU内存带宽流量系统盘

腾讯云轻量应用服务器性能如何?轻量服务器CPU采用什么型号?处理器计算性能如何?轻量应用服务器会不会比云服务器CVM性能差?腾讯云服务器网txyfwq.com详解轻量CPU型号主频、处理器性能、内存、公网带宽、月流量、不同地域速度测试、…

ASUS华硕ROG幻16 2023款GU603VU VV VI笔记本电脑原厂Win11.22H2系统

链接:https://pan.baidu.com/s/1AgevUZleCHBJgCBcIp5CFQ?pwdhjxy 提取码:hjxy 华硕笔记本2023款幻16原厂Windows11系统自带所有驱动、出厂主题壁纸、Office办公软件、MyASUS华硕电脑管家、Armoury Crate奥创控制中心等预装程序 文件格式&#xff1…

前端基本性能指标及lighthouse使用

文章目录 1、基本指标介绍2、Performace分析2.1 performance属性2.2 使用performace计算2.3 Resource Timing API2.4 不重复的耗时时段区分2.5 其他组合分析2.6 JS 总加载耗时2.7 CSS 总加载耗时 3、lighthouse基本使用3.1 使用Chrome插件lighthouse3.2 使用Chrome浏览器开发者…

2022年全国职业院校技能大赛高职组云计算正式赛卷第三场-公有云

2022 年全国职业院校技能大赛高职组云计算赛项试卷 【赛程名称】云计算赛项第三场-公有云 目录 2022 年全国职业院校技能大赛高职组云计算赛项试卷 【赛程名称】云计算赛项第三场-公有云 【任务 1】公有云服务搭建[10 分] 【任务 2】公有云服务运维[10 分] 【任务 3】公有云运维…

laravel5.8中实现验证码组件的安装和验证

本篇文章主要讲解使用laravel5.8自带的验证码库实现验证码验证的效果教程。通过本教程你可以快速接入到自己的项目中开发相应的验证功能。 作者:任聪聪 (rccblogs.com) 日期:2023年12月17日 实际效果 安装步骤 步骤一、输入命令 composer require mews…

数据结构学习 Leetcode322 零钱兑换

关键词:动态规划 完全背包 记忆化搜索 一个套路: 01背包:空间优化之后dp【target1】,遍历的时候要逆序遍历完全背包:空间优化之后dp【target1】,遍历的时候要正序遍历 题目: 方法一&#xff…

构建搜索引擎,而非向量数据库(Vector DB) [译]

原文:Build a search engine, not a vector DB 作者: Panda Smith 在过去 12 个月中,我们见证了向量数据库(Vector DB)创业公司的迅猛增长。我此刻并不打算深入探讨它们各自的设计取舍。相反,我更想探讨和…

字符串转成时间的SQL,一个多种数据库通用的函数

select date 2010-10-06 from dual; date 函数,此函数适用于: 1.MySQL数据库 2.Oracle数据库 3.达梦数据库 4.人大金仓数据库

中间件系列 - Redis入门到实战(原理篇)

前言 学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记,如有侵扰,联系删除 学习目标 Redis数据结构Redis网…

【网络安全 | 指纹识别工具】WhatWeb使用详析

前言 WhatWeb 是一款用于识别 Web 应用程序和 Web 服务器的开源工具。它可以识别网站使用的编程语言、Web 框架、Web 服务器软件、Web 应用程序等信息,从而帮助安全测试人员快速了解目标网站的技术特征,发现可能存在的漏洞。 本文将对 WhatWeb 的使用方法…

STM32 IIC开发学习

1IIC总线时序图 ① 起始信号 当 SCL 为高电平期间,SDA 由高到低的跳变。起始信号是一种电平跳变时序信号,而不是 一个电平信号。该信号由主机发出,在起始信号产生后,总线就会处于被占用状态,准备数据 传输。 ② 停止信…

数据结构学习 Leetcode494 目标和

关键词:动态规划 01背包 dfs回溯 一个套路: 01背包:空间优化之后dp【target1】,遍历的时候要逆序遍历完全背包:空间优化之后dp【target1】,遍历的时候要正序遍历 题目: 解法一: …

Python 爬取 哔站视频弹幕 并实现词云图可视化

嗨喽,大家好呀~这里是爱看美女的茜茜呐 环境介绍: python 3.8 解释器 pycharm 编辑器 第三方模块: requests >>> pip install requests protobuf >>> pip install protobuf 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命…

Cross-Drone Transformer Network for Robust Single Object Tracking论文阅读笔记

Cross-Drone Transformer Network for Robust Single Object Tracking论文阅读笔记 Abstract 无人机在各种应用中得到了广泛使用,例如航拍和军事安全,这得益于它们与固定摄像机相比的高机动性和广阔视野。多无人机追踪系统可以通过从不同视角收集互补的…

uni-app uni.scss内置全局样式变量

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

记录使用minikube部署web程序,并灰度发布不同版本

1. 安装软件 1.1安装docker desktop 下载地址 重点:配置镜像加速 1.2 安装k8s&minikube 这里参考阿里社区的配置 minikube1.24.0版本下载地址 重点:安装版本问题【因为后面要用阿里云的服务来获取所需Docker镜像,一直不成功使用的高版…

vue项目中实现预览pdf

vue项目中实现预览pdf 1. iframe <iframe :src"pdfSrc"></iframe> ​data() {return {pdfSrc: http://192.168.0.254:19000/trend/2023/12/27/5635529375174c7798b5fabc22cbec45.pdf,}},​iframe {width: 100%;height: calc(100vh - 132px - 2 * 20px -…

使用pytorch搭建ResNeXt并基于迁移学习训练

冻结除最后全连接层以外的所有权重&#xff0c;只去单独训练它最后一层的的权重&#xff0c;这个方法&#xff0c;冻结了所有网络的权重。 for param in net.parameters():param.requires_grad False

【已解决】vs2015下c++对sqlite的操作

本博文源于笔者操作sqlite3&#xff0c;借鉴了很多文章的思路&#xff0c;这里并整理了c常用的对数据库的操作供大家点赞收藏以后备用。包含了&#xff1a;c对sqlite3的创建数据库、创建数据表、写入数据表、读取数据表、删除数据表。也包括了最基础的让c运行sqlite3.内容供读者…

大数据Doris(四十二):使用物化视图

文章目录 使用物化视图 一、​​​​​​​创建物化视图