当前位置: 首页 > news >正文

spring知识点复习--针对面试的

前言

 此内容是笔者通过B站的视频总结而来。原视频链接地址:6、Bean Factory与FactoryBean有什么区别_哔哩哔哩_bilibili

1.谈谈springIOC的理解,原理与实现

回答涉及到的点:

   控制反转:是一种理论思想,原来的对象是由使用者来进行控制的,有了spring之后,可以把整个对象交给spring来帮助我们进行管理的。

   DI:依赖注入,把对应的属性值注入到具体的对象中,在spring的应用:@Autowired,populateBean完成属性值的注入。

源码非常熟悉的时候的回答要涉及的点:

容器:具体存放对象,使用map结构来进行存储的,在spring中一般存在三级缓存,singletonObject存放完成的bean对象,我们一般取对象都会从singletonObject中进行获取。整个bean的生命周期,从创建到销毁的过程,都是由容器来进行管理的,这里可以引出一个bean的生命周期。

1.容器的创建过程,(容器最上层是一个根接口BeanFactory,实际我们用的最多的就是DefaultListableBeanFactory )向beanFactory中进行设置一些参数(BeanPostProcessor,Aware接口的子类)等等属性。

2.加载解析bean对象,准备创建bean对象的定义对象beanDefintion(xml或者注解的解析过程)

3.beanFactoryPostProcessor的处理,这里spring 提供了很多得扩展点,例如,处理占位符得PlaceHolderConfigurationSupport,ConfigurationClassPostProcessor

4,beanFactoryPostProcessor的的注册功能,方便后续对bean对象进行完成的具体的扩展功能

5.通过反射的方式将BeanDefinition对象实例化成具体的bean对象

6.bean对象的初始化过程(填充属性,调用aware子类的方法,调用beanPostProcessor的前置处理方法,调用init-method方法,调用beanPostProcessor的后置处理方法)

7.生成完成的bean对象,通过getBean对象可以直接获取

8.销毁过程

这是我对IOC的整体理解,您看下有什么问题,可以指点我一下。

源码不熟悉的回答方式:

具体的细节 我记不清楚,但是spring的bean都是通过反射来进行生成的,同时包含了很多的扩展点,比如最常用的对BeanFactory的扩展(对占位符号的处理),除此之外,ioc中最核心的也就是填充具体的bean的属性和生命周期()

2.spring IOC的底层实现 

回答的时候要涉及一些方法的名字:createBeanFactory,getBean,doGetBean,createBean,doCreateBean,populateBean,initializingBean

1.先通过createBeanFactory创建出来一个Bean工厂(DefaultListableBeanFactory)

2.开始循环创建对象,因为容器中的bean都是单例,所以优先通过getBean,doGetBean方法从容器中进行查找,找不的话,到第3步

3.通过createBean,doCreateBean方法,以反射的方式创建对象,一般情况下使用的是无参的构造方法(getDelcaredConstructor,newInstance)

4.进行对象属性的填充populateBean

5.进行其他的初始化操作(initializingBean)

3.Bean的生命周期

1.实例化bean:通过反射的方式创建bean对象

2.填充bean的属性:populateBean 循环依赖的问题(三级缓存)

3.调用Aware接口的相关方法:invokeAwareMethod(完成BeanName,BeanFactory,BeanClassLoader对象的属性设置)

4.调用BeanPostProcessor的前置方法,使用比较多的有: ApplicationContextPostProcessor 设置ApplicationContext,Environment,ResourceLoader等对象

5.调用initmethod方法,判断是否实现了initialzingBean接口,如果实现了,调用afterPropertiesSet方法,没有则不进行调用

6.调用BeanPostProcessor的后置方法,spring的Aop就是在此处实现的,AbstractAutoProxyCreator

7.获取到完整的对象,可以通过getBean的方式来进行对象的获取

8.销毁流程,判断是否实现了DispoableBean接口,实现了调用destoryMethod方法

4.spring是如何解决循环依赖的问题

循环依赖问题的由来,A依赖B,B依赖A 就是循环依赖,

1.先创建A对象,实例化A对象,此时A对象中的b属性为空,填充属性b

2.从容器中查找B对象,如果找到了,就不会存在循环依赖的问题,找不到B对象,创建B对象,实例化B对象, 此时B对象中的a属性值为空,填充属性a

这样的话就会形成了依赖,但是我们仔细分析会发现,此时的A对象是存在的,但是不是一个完整的状态,只完成了实例化,未完成初始化。那么我们是不是可以把A对象进行提前暴露,让B对象提前引用这个还没有完整的A对象,所以解决问题的核心在于将实例化和初始化分开,这就是解决循环依赖问题的关联。

此时容器中就需要保存对象的两种状态,完成实例化但未完成初始化,完整状态,因为都在容器中进行存储,所以就要使用不同的map结构来进行存储,所以就会有一级缓存和二级缓存,一级缓存中存放的是成品对象,二级缓存中存放的是半成品对象

那为啥会有三级缓存,三级缓存的value类型是一个ObjectFactory,是一个函数式接口,存在意义是保证是在整个容器运行的过程中,只能有一个同名的bean对象。

   如果一个对象要被代理的话,会先优先生成一个普通的对象,但普通对象和代理对象是不能同时出现在容器中的,因此当一个对象需要被代理的时候,就需要使用代理对象覆盖之前的普通对象,在实际调用的过程中,是没有办法确定什么时候对象被调用的,所以就要求某个对象被调用的时候,优先判断此对象是否需要被代理,类似一种回调机制的实现,因此传入lamba表达式的时候,通过lamba表达式来执行对象的覆盖过程,getEarlyBeanReference(),

因此所有的bean对象在创建的时候,优先放到三级缓存种,在后续的使用过程中,如果需要被代理则返回代理对象,如果不需要被代理,则直接返回普通对象。

缓存的放置时机和删除时机

 三级缓存:createInstance之后  addSingleFactory

 二级缓存:第一次从三级缓存中确定对象是代理对象还是普通对象,同时删除三级缓存 getSingleton

 一级缓存:生成完整对象之后放到一级缓存,删除二级缓存和三级缓存 addSingleton

5.Bean Factoy和FactoryBean有什么区别

相同点:都是用来创建bean对象的

不同点:使用BeanFactoy创建对象的时候,必须遵循严格的生命流程,如果想要简单的自定义某个对象的创建,同时将创建好的对象将给spring管理,那么就需要实现FactoryBean接口

6.spring用到设计模式

  单例模式 bean的创建都是单例

  原型模式:指定作用域为prototype

  工厂模式:BeanFactory

  模板方法模式:postProcessBeanFactory,onRefresh,initPropertyValue

  策略模式:xmlBeanDefinitionReader,PropertiesBeanDefinitionReader

  观察者模式:listener, event事件

  适配器模式:一些以为Adapter

  装饰者模式:BeanWrapper

  责任链模式:使用aop的时候先生成一个拦截器链

  代理模式:动态代理

7.spring的AOP的底层实现原理

  aop的概念,应用场景:事务,日志等,实现原理 动态代理

 bean的创建过程中有一个步骤可以对bean进行扩展实现,aop本身就是一个扩展功能,所以在beanPostProcessor的后置处理方法中来进行实现

 1.代理对象的创建过程,advice,切面,切点

 2.通过jdk或者cglib的方式来生成代理对象

 3.在执行方法调用的时候,会调用到生成的字节码文件中,直接会找到DynamicAdvisedInterceptor中的intercept方法开始进行执行

8.spring的事务是如何回滚的

问题等同于 spring的事务管理是如何实现的?

spring的事务是由AOP实现的,首先要生成具体的代理对象,按照aop的整套流程来执行具体的操作逻辑,正常情况下是要通过通知来完成核心功能,但是事务不是通过事务来实现的,而是通过TransactionInterceptor来实现的。然后调用invoke来实现具体的逻辑

1.先做准备工作,解析各个方法上事务相关的属性,根据具体的属性,是否开启新的事务,

2.当需要开启的时候,获取数据库链接,关闭自动提交功能,开启事务

3.执行具体的sql操作

4.在操作的过程中,如果执行失败了,那么会通过completeTransactionAfterThrowing来完成事务的回滚操作,回滚的具体逻辑是通过doRollBack方法实现的,实现的逻辑也是先获取连接,通过链接对象来回滚

5.如果执行过程中,没有任何意外情况发生,通过completeTransactionAfterReturning来完成事务的提交操作,提交的具体逻辑是通过doCommit方法实现的,实现的逻辑也是先获取连接,通过链接对象来提交

6.当事务执行完毕之后,需要清除线相关的事务信息 cleanTransationInfo

9.spring事务的传播特性

传播特性有几种?7种

Rquired,Requires_new,nested,support,not_support,never,mandatory

A方法调用B方法,AB方法都有事务,并且传播特性不同,那么A如果有异常的话,B怎么办,B如果有异常,A怎么办?

事务的传播特性是指不同方法的嵌套调用的时候,事务应该如何进行处理,是用同一个事务,还是不同的事务,当出现异常的时候,是回滚还是提交。

1.事务的不同分类 可以分为三类,支持当前事务,不支持当前事务,嵌套事务

2.如果外层方法是required,内层方法是required,requires_new,nested

3.如果外层方法是requires_new,内层方法是required,requires_new,nested

4.如果外层方法是nested,内层方法是required,requires_new,nested

相关文章:

spring知识点复习--针对面试的

前言 此内容是笔者通过B站的视频总结而来。原视频链接地址:6、Bean Factory与FactoryBean有什么区别_哔哩哔哩_bilibili 1.谈谈springIOC的理解,原理与实现 回答涉及到的点: 控制反转:是一种理论思想,原来的对象是由…...

Web前端学习_CSS盒子模型

content padding border margin <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS盒子模型</title><style></style> </head> <body> <div class"demo&quo…...

ajax基础

一&#xff1a;express框架 在终端输入nodejs文件名 // 引入express const express require(express); //创建应用对象 const app express(); //创建路由规则 app.get(/,(request,response) > {//设置响应response.send(Hello Express); }); // 监听3000端口 app.lis…...

Python轴承故障诊断 (21)基于VMD-CNN-BiTCN的创新诊断模型

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…...

强化学习导论 -章9 基于函数逼近的同轨策略预测

基于函数逼近的同轨策略预测 我们前面已经完成了基于表格的学习任务&#xff0c;基于表格的就是每个s是独立学习的&#xff0c;基本上不考虑泛化的能力&#xff0c;但是也对于每个任务状态学习的非常好。考虑到状态空间越来越大&#xff0c;我们必须考虑到函数逼近的情况。 1…...

Ubuntu环境中RocketMQ安装教程

参考教程 https://blog.csdn.net/weixin_56219549/article/details/126143231 1、安装JDK&#xff0c;并配置环境变量&#xff08;略&#xff09; 2、下载RocketMQ安装包 RocketMQ下载地址&#xff0c;选择二进制包下载 unzip rocketmq-all-5.0.0-ALPHA-bin-release.zip 使…...

Linux操作系统2-进程控制3(进程替换,exec相关函数和系统调用)

上篇文章&#xff1a;Linux操作系统2-进程控制2(进程等待&#xff0c;waitpid系统调用&#xff0c;阻塞与非阻塞等待)-CSDN博客 本篇代码Gitee仓库&#xff1a;Linux操作系统-进程的程序替换学习 d0f7bb4 橘子真甜/linux学习 - Gitee.com 本篇重点&#xff1a;进程替换 目录 …...

ThinkPHP Nginx 重写配置

目录 NGINX 重写 Admin项目隐藏入口文件&#xff0c;且禁用Admin模块&Admin.php 1️⃣配置仅用模块 2️⃣新增admin_xyz.php文件&#xff08;自定义入口文件名&#xff09;&#xff0c;并绑定admin模块 3️⃣配置nginx 重写规则 NGINX 重写 在Nginx低版本中&#xff0…...

SpringBoot小知识(2):日志

日志是开发项目中非常重要的一个环节&#xff0c;它是程序员在检查程序运行的手段之一。 1.日志的基础操作 1.1 日志的作用 编程期调试代码运营期记录信息&#xff1a; * 记录日常运营重要信息(峰值流量、平均响应时长……) * 记录应用报错信息(错误堆栈) * 记录运维过程数据(…...

深度学习:利用GPU进行训练

深度学习&#xff1a;利用GPU进行训练 在现代深度学习框架中&#xff0c;如PyTorch&#xff0c;利用GPU加速模型训练是一种常见的做法。GPU&#xff08;图形处理单元&#xff09;由于其并行处理能力&#xff0c;特别适合执行大量的矩阵运算&#xff0c;这在训练神经网络时尤为…...

PHP 生成分享海报

因为用户端有多个平台&#xff0c;如果做分享海报生成&#xff0c;需要三端都来做&#xff0c;工作量比较大。 所以这个艰巨的任务就光荣的交给后端了。经过一定时间的研究和调试&#xff0c;最终圆满完成了任务&#xff0c;生成分享海报图片实现笔记如下。 目录 准备字体文件…...

A050-基于spring boot物流管理系统设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…...

【docker】8. 镜像仓库实战

综合实战一&#xff1a;搭建一个 nginx 服务 Web 服务器 Web 服务器&#xff0c;一般是指“网站服务器”&#xff0c;是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客户端提供文档&#xff0c;也可以放置网站文件&#xff0c;让全世界浏览&#xf…...

基于Springboot在线招投标系统【附源码】

基于Springboot在线招投标系统 效果如下&#xff1a; 系统主页面 系统登陆页面 招标人信息管理页面 招标信息管理页面 招标信息页面 评标信息页面 中标信息页面 研究背景 随着互联网技术的不断发展&#xff0c;传统的招投标方式已经无法满足现代企业的需求。传统的招投标流程…...

elasticsearch集群部署及加密通讯

原文地址&#xff1a;elasticsearch集群部署及加密通讯 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 第零步&#xff0c;准备 给各台设备配置虚拟主机名&#xff0c;这样集群不依赖IP&#xff0c;即使IP变动&#xff0c;改动也更方便。参考…...

yolov5的pt模型转化为rk3588的rknn,并在rk3588上调用api进行前向推理

当使用yolov5进行目标检测且进行边缘计算的场景时&#xff0c;要考虑性价比或者国产化的话&#xff0c;rk3588板子是个不错的选择。 本篇介绍yolov5的pytorch模型转化为rknn的流程&#xff0c;并展示在rk板子上如何调用相关api来使用转好的rknn模型进行前向推理。 pt转rknn流程…...

【机器学习】—PCA(主成分分析)

主成分分析&#xff08;PCA&#xff09;详解 引言 主成分分析&#xff08;PCA&#xff09;是一种统计方法&#xff0c;它可以通过正交变换将一组可能相关的变量转换为一组线性不相关的变量&#xff0c;这些变量称为主成分。PCA经常用于降维&#xff0c;数据压缩&#xff0c;以…...

【Linux】vim

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、Linux开发工具 &#x1f31f;vim的基本概念 二、Linux编译器-gcc/g使用 &#x1f31f;gcc如何完成&#xff08;ESc - iso&#xff09; 1、预处理&#xff08;进行宏替换&#xff…...

virtualbox给Ubuntu22创建共享文件夹

1.在windows上的操作&#xff0c;创建共享文件夹Share 2.Ubuntu22上的操作&#xff0c;创建共享文件夹LinuxShare 3.在virtualbox虚拟机设置里&#xff0c;设置共享文件夹 共享文件夹路径&#xff1a;选择Windows系统中你需要共享的文件夹 共享文件夹名称&#xff1a;挂载至wi…...

SQLModel与FastAPI结合:构建用户增删改查接口

SQLModel简介 SQLModel是一个现代化的Python库&#xff0c;旨在简化与数据库的交互。它结合了Pydantic和SQLAlchemy的优势&#xff0c;使得定义数据模型、进行数据验证和与数据库交互变得更加直观和高效。SQLModel由FastAPI的创始人Sebastin Ramrez开发&#xff0c;专为与FastA…...

数据库日志

MySQL中有哪些日志 1&#xff0c;redo log重做日志 redo log是物理机日志&#xff0c;因为它记录的是对数据页的物理修改&#xff0c;而不是SQL语句。 作用是确保事务的持久性&#xff0c;redo log日志记录事务执行后的状态&#xff0c;用来恢复未写入 data file的已提交事务…...

力扣第 71 题 简化路径

一、题目描述 给定一个字符串 path&#xff0c;表示一个由目录名和斜杠 "/" 组成的绝对路径&#xff0c;请简化该路径&#xff0c;使其变为规范路径。 在 Unix 风格的文件系统中&#xff1a; 一个点 "." 表示当前目录本身&#xff1b;两个点 "..&q…...

Android 性能优化:内存优化(理论篇)

内存作为App程序运行最重要的资源之一&#xff0c;需要运行过程中做到合理的资源分配与回收&#xff0c;不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏&#xff0c;重则导致用户应用程序发生 OOM&#xff08;out of memory&#xff09;崩溃。喜马直播随着近些年的业…...

Flink四大基石之窗口(Window)使用详解

目录 一、引言 二、为什么需要 Window 三、Window 的控制属性 窗口的长度&#xff08;大小&#xff09; 窗口的间隔 四、Flink 窗口应用代码结构 是否分组 Keyed Window --键控窗 Non-Keyed Window 核心操作流程 五、Window 的生命周期 分配阶段 触发计算 六、Wi…...

Easy Excel 通过【自定义批注拦截器】实现导出的【批注】功能

目录 Easy Excel 通过 【自定义批注拦截器】实现导出的【批注】功能需求原型&#xff1a;相关数据&#xff1a;要导出的对象字段postman 格式导出对象VO 自定义批注拦截器业务代码&#xff1a; 拦截器代码解释&#xff1a;详细解释&#xff1a;格式优化&#xff1a; Easy Excel…...

PHP 去掉特殊不可见字符 “\u200e“

描述 最近在排查网站业务时&#xff0c;发现有数据匹配失败的情况 肉眼上完全看不出问题所在 当把字符串 【M24308/23-14F‎】复制出来发现 末尾有个不可见的字符 使用删除键或左右移动时才会发现 最后测试通过 var_dump 打印 发现这个"空字符"占了三个长度 &#xf…...

Flume和kafka的整合:使用Flume将日志数据抽取到Kafka中

文章目录 1、Kafka作为Source【数据进入到kafka中&#xff0c;抽取出来】2、kafka作为Sink 【数据从别的地方抽取到kafka里面】 1、Kafka作为Source【数据进入到kafka中&#xff0c;抽取出来】 kafka源 --> memory --> 控制台&#xff1a; a1.sources r1 a1.sinks k1…...

Flutter:启动屏逻辑处理02:启动页

启动屏启动之后&#xff0c;制作一个启动页面 新建splash&#xff1a;view 视图中只有一张图片sliding.png就是我们的启动图 import package:flutter/material.dart; import package:get/get.dart; import index.dart; class SplashPage extends GetView<SplashController…...

【MySQL】自动刷新flush privileges命令

在 MySQL 中&#xff0c;执行 FLUSH PRIVILEGES 命令的主要作用是使权限表中的更改立即生效。下面是关于这个命令的一些关键点&#xff1a; 1. 什么是 FLUSH PRIVILEGES 当你使用 SET PASSWORD 或其他 SQL 语句直接修改了用户的密码或权限&#xff08;例如&#xff0c;使用 U…...

2024免费天气接口(无废话版)

免费接口1&#xff1a;http://t.weather.sojson.com/api/weather/city/101030100 免费接口2&#xff1a;http://t.weather.itboy.net/api/weather/city/101030100 至于后面那个城市编码 请自行查询&#xff1a;如图 注意&#xff01;&#xff01;&#xff01; 点击下载时 可能…...

fpga 时序分析基础

目录 触发器的动态参数 同步时序电路分析 1. 时钟脉冲的特性 2. 同步时序电路分析 Timing Analyzer的应用 异步时序与亚稳态问题 时序分析就是对时序电路进行时序检查&#xff0c;通过分析电路中所有寄存器之间的路径延迟以检查电路的传输延迟是否会导致触发器的建立时间…...

Laravel8.5+微信小程序实现京东商城秒杀方案

一、商品秒杀涉及的知识点 鉴权策略封装掊口访问频次限制小程序设计页面防抖接口调用订单创建事务使用超卖防御 二、订单库存系统方案&#xff08;3种&#xff09; 下单减库存 优点是库存和订单的强一致性&#xff0c;商品不会卖超&#xff0c;但是可能导致恶意下单&#xff…...

Git——本地仓库链接并推送到多个远程仓库

步骤 1. 新建仓库init 或 删除已有仓库远程链接 // 1.新建init git init// 2.已有仓库&#xff0c;查看链接的远程仓库 git remote -v// 3.已有远程连接仓库&#xff0c;需要删除连接 git remote rm origin(或对应远程仓库名) 2.新建远程仓库 在gitee、github等托管平台创建…...

llama-factory 系列教程 (七),Qwen2.5-7B-Instruct 模型微调与vllm部署详细流程实战

文章目录 介绍llama-factory 安装装包下载模型 微调模型数据集训练模型 微调后的模型推理 介绍 时隔已久的 llama-factory 系列教程更新了。本篇文章是第七篇&#xff0c;之前的六篇&#xff0c;大家酌情选看即可。 因为llama-factory进行了更新&#xff0c;我前面几篇文章的实…...

Spring Boot的理解

一、什么是Spring Boot? Spring Boot是一个用于构建基于Spring框架的应用程序的开源框架。它简化了Spring应用程序的开发过程&#xff0c;使开发者能够更容易地创建独立运行的、生产级别的Spring应用程序。Spring Boot提供了许多功能和约定&#xff0c;可以帮助开发者快速搭建…...

QT QFormLayout控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...

系统性能定时监控PythonLinux

系统性能定时监控 1.系统监控概述 ⽤Python来编写脚本简化⽇常的运维⼯作是Python的⼀个重要⽤途。在Linux下&#xff0c;有许多系统命令可以让我们时刻监控系统运⾏的状态&#xff0c;如 ps &#xff0c; top &#xff0c; free 等等。要获取这些系统信息&#xff0c;Python…...

python学习——列表的相关操作

在 Python 中&#xff0c;列表&#xff08;list&#xff09;是一种非常灵活的数据结构&#xff0c;可以用来存储一系列的元素。以下是列表的一些常见操作&#xff1a; 文章目录 创建列表访问元素修改元素列表切片添加元素删除元素列表推导式其他操作pop基本用法指定索引使用场…...

HTML CSS 魔法秀:打造翻转卡片登录注册页面

这段 HTML 和 CSS 代码创建了一个具有翻转卡片效果的登录和注册页面。下面是对重点标签和 CSS 样式的解释和总结&#xff1a; 一键复制 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"…...

Web day04 SpringBoot

目录 1.Spring概念&#xff1a; 2. spring程序快速入门&#xff1a; 3.HTTP协议&#xff1a; 特点&#xff1a; 基于TCP 协议&#xff1a; 基于请求响应模型&#xff1a; HTTP协议是无状态协议&#xff1a; 请求协议&#xff1a;为浏览器向服务器发出的消息 获取请求数据…...

selinux和防火墙实验

1 、 selinux 的说明 SELinux 是 Security-Enhanced Linux 的缩写&#xff0c;意思是安全强化的 linux 。 SELinux 主要由美国国家安全局&#xff08; NSA &#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用。 系统资源都是通过程序进行访问的&#xff0c;如…...

ClamAV 在 CentOS 的开发版本 `clamav-devel`

是的&#xff0c;ClamAV 在 CentOS 上有开发版本&#xff08;通常称为 clamav-devel&#xff09;&#xff0c;它包含了开发 ClamAV 应用程序所需的头文件和库文件。以下是如何在 CentOS 上安装 ClamAV 及其开发版本的步骤。 ### 1. **安装 EPEL 仓库** ClamAV 通常在 EPEL&am…...

C++《二叉搜索树》

在初阶数据结构中我学习了树基础的概念以及了解了顺序结构的二叉树——堆和链式结构二叉树该如何实现&#xff0c;那么接下来我们将进一步的学习二叉树&#xff0c;在此会先后学习到二叉搜索树、AVL树、红黑树&#xff1b;通过这些的学习将让我们更易于理解后面set、map、哈希等…...

⭐️ GitHub Star 数量前十的工作流项目

文章开始前&#xff0c;我们先做个小调查&#xff1a;在日常工作中&#xff0c;你会使用自动化工作流工具吗&#xff1f;&#x1f64b; 事实上&#xff0c;工作流工具已经变成了提升效率的关键。其实在此之前我们已经写过一篇博客&#xff0c;跟大家分享五个好用的工作流工具。…...

uni-app中的样式尺寸单位,px,rpx,vh,vw

uni-app 支持less、sass、scss、stylus等预处理器。 尺寸单位 uni-app 支持的通用 css 单位包括 px、rpx px 即屏幕像素rpx 即响应式 px&#xff0c;一种根据屏幕宽度自适应的动态单位。以 750 宽的屏幕为基准&#xff0c;**750rpx 恰好为屏幕宽度。**屏幕变宽&#xff0c;r…...

跳表(Skip List)

跳表&#xff08;Skip List&#xff09; 跳表是一种用于快速查找、插入和删除的概率型数据结构&#xff0c;通常用于替代平衡二叉搜索树&#xff08;如 AVL 树或红黑树&#xff09;。跳表通过在有序链表的基础上增加多层索引&#xff0c;使得查找操作的平均时间复杂度降低&…...

103.【C语言】数据结构之建堆的时间复杂度分析

1.向下调整的时间复杂度 推导 设树高为h 发现如下规律 按最坏的情况考虑(即调整次数最多) 第1层,有个节点,最多向上调整h-1次 第2层,有个节点,最多向上调整h-2次 第3层,有个节点,最多向上调整h-3次 第4层,有个节点,最多向上调整h-4次 ... 第h-1层,有个节点,最多向上调整1次 第…...

数字信号处理实验报告四:IIR数字滤波器设计及软件实现

1.实验目的 (1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法; (2)学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具fdatool)设计各种IIR数字滤波器,学会根据滤波需求确定滤波器指标参数。 (3)掌握IIR数字滤波器的MATLAB实现方法。 (3)…...

Flutter:encrypt插件 AES加密处理

1、pubspec.yaml导入插件 cupertino_icons: ^1.0.8 # 密码加密 encrypt: 5.0.3encrypt封装 import package:encrypt/encrypt.dart; /// 加密类 class EncryptUtil {static final EncryptUtil _instance EncryptUtil._internal();factory EncryptUtil() > _instance;Encrypt…...

软银集团孙正义再度加码OpenAI,近屿智能专注AI人才培养

11月28日凌晨&#xff0c;全球最大财经CNBC报道&#xff0c;软银集团创始人兼CEO孙正义再次向人工智能领域的领军企业OpenAI投资了15亿美元。软银对OpenAI的投资已不是首次。就在上个月&#xff0c;软银已在OpenAI的上一轮融资中注入了5亿美元的资金。但他一直寻求获得OpenAI更…...