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

news2024/12/26 10:37:57
   27.如何自定义Spring Boot Starter?

     1.实现功能

      2.添加Properties

    

3.添加AutoConfiguration

   

4.添加spring.factory

在META  INF下创建spring.factory文件

6.install

28.为什么需要spring  boot maven plugin?

    spring  boot  maven  plugin 提供了一些像jar一样打包或者运行应用程序的命令。

   1.spring boot:run   运行Spring Boot应用程序。

   2.spring  boot:repackage 重新打包你的jar包或者war包使其可执行。

  3.spring  boot:start和spring  boot :stop 管理SpringBoot应用程序的生命周期。

  4.spring boot :build info 生成执行器可以使用的构造信息。

29.Spring Boot打成的jar和普通的jar有什么区别?

 SpringBoot项目最终打包成的jar是可执行jar,这种jar可以直接通过java  jar  XXX.jar命令来运行,这种jar不可以作为普通的jar被项目依赖,即使依赖了也无法使用其中的类。

 SpringBoot的jar无法被其他项目依赖,主要还是他和普通jar的结构不同。普通的jar包,解压后直接就是包名,包里面就是我们的代码,而SpringBoot打包成的可执行jar解压后,在\BOOT\classes目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在pom.xml文件中增加配置,将SpringBoot项目打包成两个jar,一个可执行,一个可引用。

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

Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法,    通过实现一个Controller Advice类,来处理控制类抛出的所有异常。

31.Spring Boot实现热部署有哪几种方式?

  主要有两种方式:

   Spring  Loaded

   Spring boot devtools

32.Spring boot中的监视器是什么?

  SpringBoot  acuator是Spring启动框架中重要功能之一。Spring Boot监视器可以帮助您访问生产环境中正在运行的应用程序的当前状态。

有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP  URL访问的REST端点来检查状态。

33.SpringBoot可以兼容老Spring项目吗?

   可以兼容,使用@ImportResource注解导入老Spring项目配置文件。

34.什么是Spring  Security?核心功能?

  Spring Security是基于Spring的安全框架。他提供全面的安全性解决方案,同时在Web请求级别和调用级别确认和授权。在Spring Framework基础上,Spring Security 充分利用了依赖注入(DI)和面向切面编程(AOP)功能,为应用系统提供声明式的安全访问控制功能,是一个轻量级的安全框架,并且很好集成Spring MVC。

  Spring Security的核心功能主要包括:

       认证:指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。

       授权:指的是验证某个用户是否有权限执行某个操作。

      攻击防护:指的是防止伪造身份。

35.Spring Security的原理?

    1.基于Filter技术实现?

     首先Spring Security是基于Filter技术实现的。Spring通过DelegatingFilterProxy建立Web容器和Spring  ApplicationContext的联系,而SpringSecurity使用FilterChainProxy注册SecurityFilterChain。

    

2.认证模块的实现?

  SecurityContextHolder(用于存储授权信息)

手动授权的例子:

   (SecurityContextHolder.getContext().setAuthentication(authentication)这种授权方式多线程不安全):

   除了手动授权外,SpringSecurity通过

AuthenticationManager和ProviderManager进行授权。其中AuthenticationProvider代表不同的认证机制(最常用的账号/密码)。

    ProviderManager

        

    AuthenticationManager

3.授权模块的实现?

   认证完成之后,Spring Security通过AccessDecisionManager完成授权操作。除了全局的授权配置以外,也可以通过@PreAuthorize,@PreFilter,@PostAuthorize,@PostFilter注解实现方法级别的权限控制。

36.SpringSecurity基于用户名和密码的认证模式流程?

     请求的用户名密码可以通过表单登陆,基础认证,数字认证三种方式从HttpServletRequest中获取,用于认证的数据源策略有内存,数据库,ldap,自定义灯。

  拦截未授权的请求,重定向到登陆页面。

    表单登陆的过程,进行账号密码认证。

37.什么是日志系统和日志门面?分别有哪些框架?

  日志系统是具体的日志框架,日志门面是不提供日志的具体实现,而是在运行时动态绑定日志实现组件来工作,是一种外观模式。

  日志系统

1.java.util.logging(JUL),JDK1.4开始,通过java.util.logging提供日志功能。虽然是官方自带的loglib,JUL的使用的确不广泛。

2.log4j,log4j是apache的一个开源项目,创始人Ceki Gulcu。log4j应该是java领域资格最老,应用最广的日志工具。log4j是高度可配置的,并可通过在运行时的外部文件配置。他根据记录的有限级别,并提供机制,以指示记录信息到许多的目的地,诸如:数据库,文件,控制台,UNIX系统日志等。Log4j的短板在于性能,在Log back和Log4j2出来之后,Log4j的使用也减少了。

3.Log back,Log back是由Log4j创始人设计的又一个开源的日志组件,是作为Log4j的继承者来开发的,提供了性能更好的实现,异步logger,Filter等更多的特性。

4.Log4j2,维护Log4j的人为了性能又搞出了Log4j2。Log4j2和Log4j1.X并不兼容,设计上很大程度上模仿了SLF4J/Logback,性能上也获得了很大的提升。Log4j也做了Facade/implementation分离的设计,分成了log4j api和log4j core。

日志门面

1.common logging,common logging是apache的一个开源项目。也成Jakarta Commons Logging,缩写JCL。

2.slf4j,全称为Simple Logging Facade for Java,即Java简单日志门面。作者又是Ceki Gulcu!这位大神写了Log4j,Log back和slf4j.类似于Common Logging,slf4j是对不同日志框架提供的一个API封装,可以在部署的时候怒修改任何配置即可接入一种日志实现方案。但是,slf4j在编译时静态绑定真正的Log库。使用SLF4j时,如果你需要使用某一种日志实现,那么你必须选择正确的SLF4J的jar包的集合(各种桥接包)。

38.什么是桥接呢?

    假如你正在开发应用程序所调用的组件当中已经使用了common logging,这时你需要jcl  over  slf4j.jar把日志信息输出重定向到slf4j api ,slf4j api再去调用slf4j实际依赖的日志组件。这个过程称为桥接。下面是官方的slf4j桥接策略图:

从图中应该可以看出,无论你的老项目中使用的是common logging或者直接使用log4j,java.util.logging,都可以使用对应的桥接jar包来解决兼容问题。

1.slf4j兼容common logging

2.slf4j兼容log4j

39.在日志配置时会考虑哪些点?

1.支持日志路径,日志level等配置;

2.日志控制配置通过application.yml下发;

3.按天生成日志,当天的日志>50MB回滚;

4.最多保存10天日志;

5.生成的日志中Pattern自定义;

6.Pattern中添加用户自定义的MDC字段,比如用户信息(当前日志是由哪个用户的请求产生),request信息。此种方式可以通过AOP切面控制,在MDC中添加requestID,在Spring logback.xml中配置Pattern。

7.根据不同的运行环境设置Profile dev,test,product;

8.对控制台,Err和全量日志分别配置;

9.对第三方包路径日志控制。

40.对Java日志组件选型的建议?

slf4j已经成为了Java日志组件的明星选手,可以完美替代JCL,使用JCL桥接库也能完美兼容一切使用JCL作为日志门面的类库,现在的新系统已经没有不使用slf4j作为日志API的理由了。

日志记录服务方面,log4j在功能上输于log back和log4j,在性能方面log4j则全面超越logback和log4j。所以新系统应该在logback和log4j中作出选择,对于性能有很高要求的系统,应优先考虑log4j。

41.对日志框架使用比较好的实践?

说几个点:

   1.总是使用Log  Facade,而不是具体的Log  implementation

   2.只添加一个Log implementation依赖

  3.具体的日志实现依赖应该设置为optional和使用runtime scope

  4.如果有必要,排除依赖的第三方库中的Log  implementation依赖

  5.避免为不会输出的log付出代价

  6.日志格式中最好不要使用行号,函数名等字段。

42.对现有系统日志架构的改造建议?

  如果现有系统使用JCL作为日志门面,又确实面临着JCL的ClassLoader机制带来的问题,完全可以引入slf4j并通过桥接库将JCL api输出的日志桥接至slf4j,再通过适配库配置至现有的日志输出服务(log4j),如下图:

这样子做不需要任何代码级的改造,就可以解决JCL的ClassLoader带来的问题,但没有办法享受日志模板等slf4j的api带来的有点。不过之后在现系统上开发的新功能就可以使用slf4j的api了,来代码也可以分批进行改造。

如果现有系统使用JCL作为日志门面,又头疼JCL不支持log back和log4j2等新的日志服务,也可以通过桥接库以slf4j替代JCL,但是同样无法直接享受slf4j API的优点。

如果想要使用slf4j的API,那么就不得不进行代码改造了,当然改造也可以参考1中提到的方式逐步进行。

如果现系统面临着log4j的性能问题,可以使用Apache Logging提供的log4j到log4j2的桥接库log4j 1.2 api,把通过log通过log4j api输出的日志桥接至log4j2.这样子可以最快地使用上log4j2的先进性能,但是组件中缺失了slf4j,对后续进行日志框架改造的灵活性有影响。另一种办法是先把log4j桥接至slf4j,再使用slf4j到log4j2的适配库。这样子做稍微麻烦了点,但可以逐步将系统中的日志输出标准化为使用slf4j的API,为后面的工作打好基础。

43.Tomcat 整体架构的设计?

从组件的角度看:

1.Server:表示服务器,他提供了一种优雅的方式来启动和停止整个系统,不必单独启停连接器和容器;他是Tomcat构成的顶级构成元素,所有一切均包含在Server中;

2.Service:表示服务,Server可以运行多个服务。比如一个Tomcat里面可以运行订单服务,支付服务,用户服务等等;Server的实现累StandardServer可以包含一个到多个Services,Service的实现类为StandardService调用了容器(Container)接口,其实是调用了Servlet Engine(引擎),而且StandardService类中也指明了该Service归属Service;

3.Container:表示容器,可以看作Servlet容器;引擎(Engine),主机(Host),上下文(Context)和Wraper均即继承子Container接口,所以他们都是容器。

    Engine:引擎

   Host:主机

   Context:上下文

  Wrapper:包装器

4.Connector:表示连接器,他将Service和Container连接起来,首先他需要注册到一个Service,他的作用就是把来自客户端的请求转发到Container(容器),这就是他为什么乘坐连接器,他支持的协议如下:

  支持AJP协议

  支持Http协议

  支持Https协议

5.Service内部还有各种支撑组件,下面简单罗列一下这些组件。

    Manager:管理器,用于管理会话Session

    Logger:日志器,用于管理日志

   Loader:加载器,和类加载有关,只会开放给Context所使用

   Pipeline:管道组件,配合Value实现过滤器功能

  Valve:阀门组件,配合Pipeline实现过滤功能

   Realm:认证授权组件

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

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

相关文章

方舟开发框架(ArkUI)概述

目录 1、基本概念 2、两种开发范式 3、开发框架的特性 4、UI开发(ArkTS声明式开发范式)概述 4.1、特点 4.2、整体架构 4.3、开发流程 方舟开发框架(简称ArkUI)为HarmonyOS应用的UI开发提供了完整的基础设施,包…

注解的理解、使用、原理,Java小白入门(三)

背景 随便点开一些Java代码,发现在代码的注释下,有这样的符号 Component , Autowired ,Override , 等等,这些符号从字面看也能估计出一点来含义,比如 Override 方法是否为重写方法,但是这个符号具体的语境是什么呢&am…

C++ 之LeetCode刷题记录(二)

😄😊😆😃😄😊😆😃 从今天开始cpp刷题之旅,多学多练,尽力而为。 先易后难,先刷简单的。 9、回文数 给你一个整数 x ,如果 x 是一个…

nacos配置中心配置已经常见错误总结

💻目录 前言1、基础架构2、依赖3、配置文件3.1、bolg-product配置文件3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.1.3、nacos远程配置 3.2、bolg-system3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.2.3、nacos远程配置 4、测试…

饥荒Mod 开发(二二):显示物品信息

饥荒Mod 开发(二一):超大便携背包,超大物品栏,永久保鲜 饥荒中的物品没有详细信息,基本上只有一个名字,所以很多物品的功能都不知道,比如浆果吃了也不知道恢复什么, 采集的胡萝卜也不知道什么功…

DataProcess-VOC数据图像和标签一起进行Resize

VOC数据图像和标签一起进行Resize 参加检测比赛的时候,很多时候工业原始数据尺度都比较大,如果对数据不提前进行处理,会导致数据在加载进内存时花费大量的时间,所以在执行训练程序之前需要将图像提前进行预处理。对于目标检测的数…

Log4net 教程

一、Log4net 教程 在CodeProject上找到一篇关于Log4net的教程:log4net Tutorial,这篇博客的作者是:Tim Corey ,对应源代码地址为: https://github.com/TimCorey/Log4netTutorial,视频地址为:Ap…

案例144:基于微信小程序的自修室预约系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

C/C++图形化编程(2)

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 站在巨人的肩上是为了超过巨人&#x…

esp32使用lvgl,给图片取模显示图片

使用LVGL官方工具。 https://lvgl.io/tools/imageconverter 上传图片,如果想要透明效果,那么选择 输出格式C array,点击Convert进行转换。 下载.c文件放置到工程下使用即可。

Py之tensorflow-addons:tensorflow-addons的简介、安装、使用方法之详细攻略

Py之tensorflow-addons:tensorflow-addons的简介、安装、使用方法之详细攻略 目录 tensorflow-addons的简介 tensorflow-addons的安装 tensorflow-addons的使用方法 1、使用 TensorFlow Addons 中的功能: tensorflow-addons的简介 TensorFlow Addon…

本地搜索文件太慢怎么办?用Everything搜索秒出结果(附安装包)

每次用电脑本地的搜索都慢的一批,后来发现了一个搜索利器 基本上搜索任何文件都不用等待。 并且页面非常简洁,也没有任何广告,用起来非常舒服。 软件官网如下: voidtools 官网提供三个版本,用起来差别不大。 网盘链…

Javacv-利用Netty实现推流直播复用(flv)

前言 上一篇文章《JavaCV之rtmp推流(FLV和M3U8)》介绍了javacv的基本使用,今天来讲讲如何实现推流复用。 以监控摄像头的直播为例,通常分为三步: 从设备获取音视频流利用javacv进行解码(例如flv或m3u8&am…

(2021|CoRR,AugCLIP,优化)FuseDream:通过改进的 CLIP+GAN 空间优化实现免训练文本到图像生成

FuseDream: Training-Free Text-to-Image Generation with Improved CLIPGAN Space Optimization 公众:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料) 目录 0. 摘要 1. 简介 2. CLIPGAN 文本到图…

如何使用kali来进行一次ddos攻击

本文章用于记录自己的学习路线,不用于其他任何途径! ! ! 哈喽啊!又是好久不见,本博主在之前发过一个ddos攻击的介绍。 emm…虽然那篇文章也提到了ddos攻击的方式,但太过于简陋,好像也没有什么用,so&#…

金蝶云星空权限项表结构

文章目录 金蝶云星空权限项表结构BOS平台【权限项】MSSQL脚本使用场景优点减少手工一个个创建的人工成本,还容易出错保留内码,可以在代码层级使用,方便 金蝶云星空权限项表结构 BOS平台【权限项】 MSSQL脚本 --权限项主表 SELECT * FROM db…

快速学习 webpack

目录 1. webpack基本概念 webpack能做什么? 2. webpack的使用步骤 2.1_webpack 更新打包 3. webpack的配置 3.1_打包流程图 3.2_案例-webpack隔行变色 3.3_插件-自动生成html文件 3.4_加载器 - 处理css文件问题 3.5_加载器 - 处理css文件 3.6_加载器 - 处…

大数据----基于sogou.500w.utf8数据的MapReduce编程

目录 一、前言二、准备数据三、编程实现3.1、统计出搜索过包含有“仙剑奇侠传”内容的UID及搜索关键字记录3.2、统计rank<3并且order>2的所有UID及数量3.3、上午7-9点之间&#xff0c;搜索过“赶集网”的用户UID3.4、通过Rank&#xff1a;点击排名 对数据进行排序 四、参…

jQuery: 整理4---创建元素和添加元素

1.创建元素&#xff1a;$("内容") const p "<p>这是一个p标签</p>" console.log(p)console.log($(p)) 2. 添加元素 2.1 前追加子元素 1. 指定元素.prepend(内容) -> 在指定元素的内部的最前面追加内容&#xff0c;内容可以是字符串、…

代码随想录算法训练营 | day60 单调栈 84.柱状图中最大的矩形

刷题 84.柱状图中最大的矩形 题目链接 | 文章讲解 | 视频讲解 题目&#xff1a;给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 1 < heights.len…