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

中间件(上)

1、何为中间件:

中间件(Middleware)是指位于操作系统和应用程序之间的一层软件层,用于提供各种服务和功能,以帮助不同的应用程序、系统或组件进行通信、交互和协作。中间件可以看作是在不同计算机或系统之间建立连接和通信的桥梁,简化了应用程序开发和系统集成的复杂性。

(1)、中间件的常见特点和用途:

  • 通信:中间件为应用程序提供了一种通信机制,使得分布在不同计算机或设备上的应用程序可以交换数据、消息和命令。
  • 数据传输:中间件支持可靠的数据传输,包括点对点通信、发布-订阅模型等,以满足不同应用程序的需求。
  • 分布式系统:中间件支持分布式操作系统的构建,允许多台计算机协同工作,共享资源和数据。
  • 并发性:中间件处理多个并发操作,确保数据的一致性和可靠性。
  • 异构性:中间件支持在不同操作系统、编程语言或硬件平台之间进行通信。
  • 安全性:中间件提供安全性功能,包括加密、认证和授权,以保护通信数据。
  • 事务处理:中间件支持事务管理,确保在分布式环境中的数据操作的一致性。
  • 持久性:中间件可以提供持久性存储,以保留重要数据,即使应用程序关闭或系统重启。
  • 消息传递:中间件允许应用程序通过消息传递进行通信,以实现解耦和可扩展性。
  • 远程调用:中间件允许应用程序在远程计算机上调用函数或方法,实现分布式计算。
  • 实时性:某些中间件专注于提供实时通信和实时数据传输,满足实时性要求。
    中间件在许多领域中都有广泛的应用,包括分布式系统、物联网、通信、金融交易、工业自动化、游戏开发等。

(2)、常见的中间件及其功能:

i、消息队列中间件:

  • 功能:用于异步通信和解耦。发布者将消息发布到队列,订阅者从队列中获取消息。
  • 代表性实现:RabbitMQ、Apache Kafka、ActiveMQ、ZeroMQ、NATS。

ii、远程调用中间件:

  • 功能:支持不同系统间的远程函数调用,实现分布式计算。
  • 代表性功能:gRPC、Apache Thrift、CORBA、XML-RPC。

iii、数据分发中间件:

  • 功能:在分布式系统中传递数据,提供高性能的实时数据分发。
  • 代表性实现:DDS(Data Distribution Service)、Fast DDS、OpenSplice DDS、RTI Connext DDS。

iv、Web中间件:

  • 功能:处理Web请求,提供静态和动态内容的服务。
  • 代表性实现:Apache HTTP Server、Nginx、Microsoft IIS、Tomcat。

v、数据库中间件:

  • 功能:提供数据库连接池、负载均衡、缓存等功能,优化数据库访问。
  • 代表性实现:MySQL Proxy、PgBouncer、Oracle Database Gateway、Microsoft SQL Server Linked Servers。

vi、缓存中间件:

  • 功能:提供内存中数据存储,加速数据访问和响应时间。
  • 代表性实现:Redis、Memcached、Apache Ignite、Hazelcast。

vii、事务中间件:

  • 功能:管理分布式事务,确保跨多个资源的操作的一致性和可靠性。
  • 代表性实现:Atomikos、Narayana、Bitronix。

viii、流处理中间件:

  • 功能:处理数据流,支持实时分析和处理。
  • 代表性实现:Apache Flink、Apache Storm、Apache Beam、Spark Streaming。

ix、消息传递中间件:

  • 功能:支持物联网设备之间的通信,传递传感器数据等。
  • 代表性实现:MQTT、AMQP。

x、分布式协调中间件:

  • 功能:管理分布式系统中的协调和同步,提供可靠的分布式锁等。
  • 代表性实现:Apache ZooKeeper、etcd、Consul。

2、中间件与库的区别:

中间件(Middleware)和库(Library)是两个软件概念,它们在功能和用途上有一些区别。以下是它们之间的主要区别:

(1)、用途:

  • 中间件:中间件是一种位于应用程序和操作系统之间的软件层,用于提供通信、数据传输、协作和交互等功能。它通常用于构建分布式系统、实现异步通信、处理并发操作等。中间件常常面向大规模、复杂的系统架构。
  • 库:库是一组预先编写好的代码和函数,可以被其他应用程序引用和调用。它们用于提供特定领域的功能,如数据结构、算法、图形界面等。库通常用于在单个应用程序中添加特定功能。

(2)、范围和复杂性:

  • 中间件:中间件通常涉及广泛的功能,用于支持多个应用程序或系统之间的通信和协作。它们可能包含多个模块、服务和组件,用于处理复杂的分布式任务。
  • 库:库通常提供特定功能的小组件,帮助开发者在单个应用程序中实现特定功能。它们可能是某个领域中的工具集。

(3)、抽象级别:

  • 中间件:中间件通常在更高的抽象级别上操作,处理与底层通信、协议、分布式管理等相关的问题。它们隐藏了底层复杂性,使应用程序开发者能够专注于业务逻辑。
  • 库:库在较低的抽象级别上操作,提供了特定功能的API供开发者调用。开发者通常需要了解底层逻辑和细节。

(4)、应用场景:

  • 中间件:中间件主要用于构建复杂的分布式系统、通信和协作任务。它们在多个应用程序之间提供连接和通信。
  • 库:库主要用于在单个应用程序中添加特定功能,如数据库访问、图形绘制、数学运算等。

总之,中间件和库都是为了提供特定的功能,但它们的应用场景、复杂性和抽象级别不同。中间件更适合构建大规模分布式系统,而库更适合在单个应用程序中添加特定功能。

3、为什么使用中间件:

使用中间件有多种原因,特别是在构建分布式系统、实现异步通信、处理并发操作等复杂场景中。以下是一些使用中间件的主要原因:

(1). 分布式系统

中间件使得在分布式系统中进行通信、协作和数据交换变得更加容易。它们提供了高级别的抽象,隐藏了底层通信细节,使不同节点之间的交互更加简单和可靠。

(2). 解耦应用程序

中间件通过发布-订阅、消息队列等模式,实现了应用程序的解耦。这意味着一个应用程序的变化不会直接影响其他应用程序,从而提高了系统的灵活性和可维护性。

(3). 异步通信

中间件允许应用程序进行异步通信,这对于处理并发操作、实现实时性和提高响应速度非常重要。异步通信可以让应用程序在不需要等待响应的情况下继续执行。

(4). 复杂性管理

中间件提供了对复杂任务(如分布式数据传输、事务管理)的抽象,减少了开发人员需要处理的底层细节。这有助于降低开发成本和错误率。

(5). 数据共享

中间件使得不同应用程序之间共享数据变得更加容易。这在需要多个应用程序协同工作、共享信息的情况下非常有用。

(6). 性能优化

某些中间件专注于提供高性能的数据传输和通信,使分布式系统能够处理大量的数据和请求。

(7). 可扩展性

中间件通常设计为支持系统的可扩展性。通过添加新的节点或应用程序,系统可以轻松地适应变化的需求。

(8). 标准化通信

中间件可以基于通用的协议和标准进行通信,使不同平台和应用程序之间能够交换数据。

(9). 支持异构环境

中间件使得在不同操作系统、编程语言和硬件平台之间进行通信变得更加容易。

总之,使用中间件可以简化复杂的分布式系统开发、提高通信效率、降低系统的复杂性、提高可扩展性和性能,使应用程序更加灵活和可维护。它们在处理分布式通信、异步操作和协作等方面提供了强大的支持。

4、中间件是如何在应用程序中工作的:

中间件在应用程序中工作的方式取决于其类型和用途。不同类型的中间件在应用程序中的集成和工作方式可能会有所不同。以下是一般情况下中间件在应用程序中的工作流程:

(1)、集成和引入:

首先,开发者需要将中间件的库或组件引入到应用程序中。这可以通过导入库、添加依赖或安装插件等方式完成。

(2)、初始化和配置:

在应用程序启动时,需要初始化和配置中间件。这可能包括设置连接参数、配置通信协议、定义主题、配置QoS等。

(3)、创建实例:

根据中间件的类型,可能需要创建相关的实例,如消息队列、发布者、订阅者、连接对象等。这些实例将用于与中间件进行交互。

(4)、交互操作:

在应用程序运行期间,通过使用中间件提供的API,应用程序可以执行各种交互操作,如发送消息、接收消息、发布数据、订阅数据、调用远程函数等。

(5)、数据交换:

对于消息队列、发布-订阅等中间件,应用程序可以通过发送和接收消息来进行数据交换。消息可以是文本、二进制数据或特定格式的数据。

(6)、异步通信:

对于支持异步通信的中间件,应用程序可以发送消息并继续执行其他操作,而不需要等待响应。中间件会在合适的时机处理消息。

(7)、事件处理:

对于某些中间件,应用程序可以注册回调函数或事件处理程序,以在接收到数据或事件时触发特定的操作。

(8)、错误处理和监控:

应用程序需要处理中间件可能引发的错误,如连接失败、消息丢失等。一些中间件提供监控和错误处理机制,以便应用程序可以监视其状态。

(9)、关闭和资源释放:

在应用程序关闭时,需要关闭中间件的连接、释放资源和清理实例。这是为了确保没有未处理的数据和连接。
总之,中间件在应用程序中通过引入、初始化、创建实例和使用API来实现不同的功能。应用程序通过与中间件交互,实现通信、数据交换、协作和异步操作等任务。不同类型的中间件可能具有不同的工作方式和用法。

5、中间件如何处理错误和异常:

中间件通常具有处理错误和异常的机制,以确保系统的稳定性和可靠性。不同的中间件可能有不同的方式来处理错误和异常,但一般来说,它们会采取以下一些常见的方法:

(1)、错误码和异常类:

中间件可能定义了一套错误码或异常类,用于标识不同类型的错误和异常。应用程序可以通过检查返回的错误码或捕获异常来判断是否发生了问题。

(2)、错误回调和事件处理:

一些中间件允许应用程序注册错误回调函数或事件处理程序。当出现错误或异常时,中间件会调用这些回调函数或处理程序,以通知应用程序并采取适当的措施。

(3)、重试机制:

中间件可能会实现自动的重试机制,以尝试重新执行失败的操作。这可以在网络不稳定或临时问题出现时提高操作的成功率。

(4)、错误日志和监控:

中间件通常会生成错误日志,记录错误和异常的详细信息。应用程序可以监控这些日志来了解中间件的健康状态和问题。

(5)、超时设置:

中间件可能允许应用程序设置操作的超时时间。如果操作在指定的时间内未能成功完成,中间件可以报告错误或异常。

(6)、数据丢失处理:

对于消息队列等中间件,可能会涉及数据丢失的情况。中间件可以提供配置选项,以决定在数据丢失时采取的行动,如丢弃消息还是尝试重新发送。

(7)、故障转移:

对于某些中间件,可能支持故障转移和冗余配置。在出现错误或故障时,系统可以自动切换到备用中间件节点。

(8)、可靠性和保证性质(QoS):

一些中间件提供可配置的服务质量(QoS)选项,以确保消息的可靠传输。这可以包括消息持久化、保证交付、重复消除等。

(9)、手动干预:

在某些情况下,应用程序可能需要手动干预,例如关闭连接、重启中间件实例等,以恢复正常运行。

总之,中间件的错误和异常处理机制是确保系统稳定性和可靠性的重要组成部分。开发者在使用中间件时,应了解其提供的错误处理机制,并根据应用程序的需求来适当地处理错误和异常情况。

6、中间件如何实现身份验证和授权:

中间件实现身份验证(Authentication)和授权(Authorization)是为了确保系统的安全性,只允许合法用户访问特定资源和功能。以下是中间件如何实现身份验证和授权的一般步骤:

(1)、身份验证(Authentication):

身份验证是确认用户是否是其所声称的身份的过程。它确保用户是合法的、经过授权的用户。

  • 用户凭证:用户提供用户名和密码、令牌、证书等用于身份验证的凭证。
  • 中间件验证:中间件接收凭证并与存储在系统中的用户凭证进行比较。这可以是数据库、LDAP服务器或其他身份存储。
  • 令牌验证:对于令牌(如JWT)的情况,中间件验证令牌的有效性、签名和过期时间。
  • 多因素认证:某些中间件支持多因素认证,需要用户提供多个验证因素(如密码和短信验证码)。
  • 认证成功:如果用户凭证有效,则中间件标识用户为经过身份验证的用户。

(2)、授权(Authorization):

授权是确定经过身份验证的用户是否有权访问特定资源和执行特定操作的过程。

  • 角色和权限:中间件通常使用角色和权限模型,将用户分配到不同的角色,每个角色拥有不同的权限。
  • 访问控制列表(ACL):中间件可能使用ACL来定义哪些用户或角色可以访问特定资源。
  • API保护:对于API,中间件可能使用API密钥或令牌,控制哪些应用程序可以调用特定API。
  • 动态授权策略:一些中间件支持动态授权策略,可以根据用户角色、上下文等因素决定访问权限。
  • 认证与授权的分离:中间件通常将身份验证和授权分开,这样可以更灵活地定义访问控制策略。

(3)、实施安全层级:

中间件通常实施多层级的安全性,以保护敏感信息和资源。

  • 应用程序层安全:在应用程序代码中实施一些基本的安全性,如输入验证、防止SQL注入等。
  • 传输层安全:通过使用SSL / TLS等加密协议保护数据在网络上传输过程中的安全性。
  • 数据存储层安全:保护存储在数据库或其他存储中的敏感数据,如使用加密存储。

总之,中间件通过身份验证和授权来确保只有合法用户可以访问系统的资源和功能。不同的中间件可能有不同的机制和配置选项来实现这些安全性措施。开发者需要根据应用程序的需求选择适当的安全机制并正确配置中间件。

7、如何创建自定义中间件:

创建自定义中间件通常涉及编写一些代码,以便在应用程序处理请求和响应时执行特定的操作。中间件可以用于处理请求、响应、日志记录、身份验证、授权等各种功能。以下是一个通用的步骤来创建自定义中间件:

  • 选择编程语言和框架:选择适合你应用程序的编程语言和框架。不同的框架可能有不同的中间件机制和API。
  • 创建中间件文件:在你的项目中创建一个新的中间件文件,通常以类或函数的形式存在。
  • 定义中间件逻辑:在中间件文件中编写中间件的逻辑。这可能包括处理请求、修改响应、执行特定任务等。你可以定义一个函数或类,具体取决于框架的要求。
  • 配置中间件:在应用程序的配置中,将你的自定义中间件添加到中间件链中。通常,你可以指定中间件的执行顺序。
  • 中间件执行流程:在请求到达应用程序时,框架将按照中间件链的顺序执行中间件。中间件可以在请求到达控制器之前或之后执行,也可以修改响应内容。
  • 中间件函数或方法:如果使用函数形式,中间件函数可能会接收请求和响应作为参数,并在其中执行特定的逻辑。如果使用类形式,可能会有类构造函数和一个特定的方法(如__call__方法),来执行中间件的逻辑。
  • 编写测试:为你的中间件编写测试用例,以确保其功能正常,并处理各种情况。
  • 调试和优化:在实际应用程序中测试中间件,调试和优化它以确保它按预期工作。
  • 文档和示例:提供文档和示例代码,以便其他开发者了解如何使用你的自定义中间件。
  • 集成到应用程序:将你的自定义中间件集成到你的应用程序中,确保它按预期工作。

总之,创建自定义中间件涉及编写逻辑、配置和测试。你需要了解你所使用的框架的中间件机制,以确保你的中间件可以正确地被调用和执行。这样,你就可以在应用程序中实现特定的功能,例如身份验证、授权、日志记录等。

相关文章:

中间件(上)

1、何为中间件: 中间件(Middleware)是指位于操作系统和应用程序之间的一层软件层,用于提供各种服务和功能,以帮助不同的应用程序、系统或组件进行通信、交互和协作。中间件可以看作是在不同计算机或系统之间建立连接和…...

Python快速检验数据分布

假设检验的前提是确定数据的分布,本文介绍Python检验数据样本是否服从一定分布。使用方法是柯尔莫可洛夫-斯米洛夫检验(Kolmogorov–Smirnov test,K-S test),K-S检验方法适用于探索连续型随机变量的分布,对…...

uniapp微信小程序点击右上角菜单分享功能权限配置

个人项目地址: SubTopH前端开发个人站 (自己开发的前端功能和UI组件,一些有趣的小功能,感兴趣的伙伴可以访问,欢迎提出更好的想法,私信沟通,网站属于静态页面) SubTopH前端开发个人站…...

【OpenVINOSharp】在英特尔® 开发者套件爱克斯开发板使用OpenVinoSharp部署Yolov8模型

在英特尔 开发者套件爱克斯开发板使用OpenVinoSharp部署Yolov8模型 一、英特尔开发套件 AIxBoard 介绍1. 产品定位2. 产品参数3. AI推理单元 二、配置 .NET 环境1. 添加 Microsoft 包存储库2. 安装 SDK3. 测试安装4. 测试控制台项目 三、安装 OpenVINO Runtime1. 下载 OpenVINO…...

Django的模型层

Django的模型层1.Model的开发流程2.定义Model模型3.Model模型的实例4.Model模型的实战操作笔记开发流程1.在models.py中定义模型类,要求继承自models.Model2.生成迁移文件3.执行迁移5.定义属性1.字段类型2.字段选项3.关系模型实例1.类的属性2.创建对象3.实例的属性模…...

idea 新建servlet 访问提示404 WebServlet注解找不到包 报错

检查访问路径是否设置正确 如果设置为name “/testServlet”,则会404 WebServlet注解报错找不到包 检查是否引入了tomcat依赖包...

【EA-ISET协会】Elsevier|2区智慧农业类SCIEI, 进展顺,3个月左右录用~

一、期刊简介 2区智慧农业类SCI&EI 【期刊简介】IF: 3.0-4.0, JCR2区, 中科院4区; 【检索情况】SCI&EI双检,正刊; 【终审周期】走期刊部系统,3个月左右录用; 二、征稿范围 大数据和遥感技术在智慧农业中…...

Class类getName获取类名方法详细说明

1.说明 在java.lang.Class类中有一个获取类名的方法: public String getName() 其返回的是该对象表示的类或接口的名称。 返回由这个Class对象表示的实体的字符串名称, 这个实体可以是: class, interface, array class, primitive type, vo…...

凉而不冷 柔而不弱 三菱重工海尔舒适风科技助您整夜安眠

古人云:安寝乃人生乐事。可随着夏天的到来,昼长夜短,家里的老人、儿童、父母都存在不同的入睡苦恼。对于儿童来说,空调温度调的太低容易踢被子着凉,温度调的高又怕孩子满头大汗;父母自身也会因为半夜帮孩子…...

YOLOv5基础知识入门(7)— NMS(非极大值抑制)原理解析

前言:Hello大家好,我是小哥谈。NMS是指非极大值抑制(non maximum suppression),它是一种常用于物体检测任务的算法。在物体检测中,通常会有多个预测框(bounding box)被提议出来&…...

Gpt微信小程序搭建的前后端流程 - 后端基础框架的搭建(三)

Gpt微信小程序搭建的前后端流程 - 后端基础框架的搭建(三) Gpt微信小程序 只需要几个API,API上一小节也有讲到。直接用 gin 或者 beego 简单搭web服务器就够了。我们这里还用 go-micro微服务 去搭建,主要也是为了学以致用,把之前go-micro系列…...

jstat(JVM Statistics Monitoring Tool):虚拟机统计信息监视工具

jstat(JVM Statistics Monitoring Tool):虚拟机统计信息监视工具 用于监视虚拟机各种运行状态信息的命令行工具。 它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据,在没有GUI图形界面、只提…...

【ARM】Day6 cotex-A7核UART总线实验

cotex-A7核UART总线实验 1. 键盘输入一个字符‘a’,串口工具显示‘b’ 2. 键盘输入一个字符串"nihao",串口工具显示“nihao” uart.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_rcc.h" #include "stm3…...

HTTPS代理搭建技巧分享

今天我们来分享一下如何搭建一个能够实现中间人 检测和防护的HTTPS代理。保护我们的网络通信安全是至关重要的,让我们一起学习如何构建一个安全可靠的HTTPS代理吧! 什么是中间人 ? 首先,让我们来了解一下什么是中间人 。中间人 是…...

第四章:树形结构的关联式容器(map+set)

系列文章目录 文章目录 系列文章目录前言1、关联式容器与序列式容器1.1 键值对 2、set的介绍3、multiset的介绍3.1 接口count与容器multiset 4、map的介绍4.1 接口insert4.2 operator[]和at 5、multimap的介绍 前言 根据应用场景的不桶,STL总共实现了两种不同结构的…...

SpringBoot +Vue3 简单的前后端交互

前端&#xff1a;Vue3 创建项目&#xff1a; npm create vuelatest > cd <your-project-name> > npm install > npm run dev 项目结构图如下&#xff1a; 1、查看入口文件内容&#xff1a;main.js 代码如下&#xff1a; import ./assets/main.css impor…...

【Android】Mobile-Security-Framework-MobSF Manifest 静态扫描规则

前言 移动安全框架&#xff08;MobSF&#xff09;是一个自动化的一体化移动应用程序&#xff08;Android/iOS/Windows&#xff09;测试、恶意软件分析和安全评估框架&#xff0c;能够执行静态和动态分析。MobSF支持移动应用程序二进制文件&#xff08;APK、XAPK、IPA和APPX&am…...

【C++】初谈迭代器

文章目录 前言一、什么是迭代器二、迭代器的分类三、迭代器的用法总结 前言 迭代器是一种可以访问和遍历容器中元素的对象&#xff0c;它类似于指针&#xff0c;但是具有更多的功能和灵活性。本文将介绍C迭代器的基本概念、分类、用法和注意事项。 一、什么是迭代器 迭代器&a…...

PL端案例开发手册

目 录 前 言 1 工程编译、程序加载方法 1.1 工程编译 1.2 程序加载 2 led-flash 2.1 案例说明 2.2 操作说明 2.3 关键代码 更多帮助 前 言 本文主要介绍PL端案例的使用说明&#xff0c;适用开发环境&#xff1a;Windows 7/10 64bit、Xilinx Unified 20…...

华为OD-整数对最小和

题目描述 给定两个整数数组array1、array2&#xff0c;数组元素按升序排列。假设从array1、array2中分别取出一个元素可构成一对元素&#xff0c;现在需要取出k对元素&#xff0c;并对取出的所有元素求和&#xff0c;计算和的最小值 代码实现 # coding:utf-8 class Solution:…...

Ubuntu 22LTS 配置静态IP

可行方法&#xff0c;需界面配置 转载自&#xff1a;哔哩哔哩链接地址 命令行配置&#xff1a;待补充...

【Python】Python爬虫:网络数据的提取利器

随着互联网的快速发展&#xff0c;网络数据已经成为了一项重要的资源。如何从海量的网络数据中提取出我们需要的信息&#xff0c;就成为了各个行业都需要解决的问题。而Python爬虫&#xff0c;就是解决这个问题的利器。 首先&#xff0c;让我们了解一下什么是Python爬虫。Pyth…...

20.图的遍历

目录 一. 深度优先遍历 二. 广度优先遍历 图的遍历算法和二叉树不同的是&#xff0c;图中可能存在回路&#xff0c;且图的任一顶点都可能与其它顶点相通&#xff0c;在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。为了避免重复访问&#xff0c;我们的解决思…...

ARM DIY(一)电源、SD卡座、SOC 调试

文章目录 前言加热台焊接热风枪吹焊电烙铁补焊电源调试SD 卡座调试DRAM 电路调试串口电路调试SOC 调试成品 前言 之前打样的几块 ARM 板&#xff0c;一直放着没去焊接。今天再次看到&#xff0c;决定把它焊起来。 加热台焊接 为了提高焊接效率&#xff0c;先使用加热台焊接…...

数学建模知识之小白入门篇

数学建模知识--小白入门篇 一、数学模型的定义二、建立数学模型的方法和步骤1. 模型准备2. 模型假设3. 模型构成4. 模型求解5. 模型分析 三、数模竞赛出题的指导思想四、竞赛中的常见题型1. 实际问题背景2&#xff0e;若干假设条件3&#xff0e;要求回答的问题 五、提交一篇论文…...

【日常积累】Linux下ftp服务安装

概述 FTP是一种在互联网中进行文件传输的协议&#xff0c;基于客户端/服务器模式&#xff0c;默认使用20、21号端口&#xff0c;其中端口20用于进行数据传输&#xff0c;端口21用于接受客户端发出的相关FTP命令与参数。FTP服务器普遍部署于内网中&#xff0c;具有容易搭建、方…...

确定了,TikTok将于9月12日正式关闭美国半闭环

外媒报道称&#xff0c;TikTok已对其官网的常见问题页面进行了更新。消息显示&#xff0c;其在美国和英国市场运营的半封闭模式将于9月12日正式结束&#xff0c;并将全力推进TikTok闭环小店业务。尽管我们早在本月初就获悉了这一消息&#xff0c;但实际得知后仍不免有些感慨。曾…...

ATFX汇评:英国7月零售销售年率大降,GBPUSD仍未升破1.3000

ATFX汇评&#xff1a;7月季调后零售销售年率&#xff0c;最新值-3.2%&#xff0c;前值-1.6%&#xff0c;降幅扩大&#xff1b;7月季调后核心零售销售年率&#xff0c;最新值-3.4%&#xff0c;前值-1.6%&#xff0c;降幅扩大。零售销售综合衡量除服务业外包括所有主要从事零售业…...

CTFhub-sqli注入-Referer注入

在最后添加 Referer: (注意 R 大写&#xff0c; Referer后面是 &#xff1a;&#xff0c;Content-Length: 与 Referer: 之间没有空行) 1 2 3 1 union select 1,database() -1 union select 1,database() -1 union select 1,group_concat(table_name)from information_sche…...

【案例】登录注册

<template><div class"loginhome"><Header :butShow"butShow"></Header><div class"formdiv"><div style"text-align:center;padding:10px;"><h3>你好登录账号{{ stauts 3? 注册:登录 }}…...

Unity 物体的运动之跟随鼠标

你想让鼠标点击哪里&#xff0c;你的运动的对象就运动到哪里吗&#xff1f; Please follow me ! 首先&#xff0c;你要先添加一个Plane ,以及你的围墙&#xff0c;你的移动的物体 想要实现跟随鼠标移动&#xff0c;我们先创建一个脚本 using System.Collections; using Syst…...

C++基础Ⅱ变量

目录儿 4 变量4.1 原始数据类型字符 char整型 short整型 int整型 long整型 long long单精度浮点型 float双精度浮点型 double布尔型 bool 4.2 sizeof 关键字 5 指针和引用 4 变量 4.1 原始数据类型 原始数据类型是构建C程序的最基础数据类型 所有数据都是基于这些原始数据类型…...

Linux管理SpringBoot应用shell脚本实现

Liunx系统如何部署和管理SpringBoot项目应用呢&#xff1f;最简单的方法就是写个shell脚本。 Spring Boot是Java的一个流行框架&#xff0c;用于开发企业级应用程序。下面我们将学习如何在Linux服务器上部署Spring Boot应用&#xff0c;并通过一个脚本实现启动、停止、重启等操…...

一篇搞懂浏览器的工作原理(万字详解)

摘要 本文是学习极客时间上的课程&#xff0c;进而整理出的浏览器工作原理。 第一部分&#xff1a;浏览器的进程和线程 &#xff08;1&#xff09;进程和线程的区别&#xff1f; 在浏览器中&#xff0c;各个进程负责处理自己的事情&#xff0c;而不同的进程中&#xff0c;也…...

C语言调用python训练的机器学习模型(项目需求轻体量)

问题描述 机器学习模型基本上都是python下的实现与使用&#xff0c;有关C如何调用训练好的模型或是C实现模型的相关教程相对较少 同时&#xff0c;项目需求整个模型大小尽可能小&#xff0c;大概在几十Kb 由于是表格类型的数据&#xff0c;因此主要考虑树模型 一般而言&#…...

get和post请求的区别以及post请求的url参数问题

1.主要区别 1.GET请求方法有以下几个特点&#xff1a; 默认的请求方法&#xff1b;GET请求通常用于获取信息&#xff0c;所以应该是安全的、幂等的&#xff1b;请求数据表现在URL上&#xff0c;以名称/值的形式发送。对请求的长度有限制&#xff1b;在IE和Opera等浏览器会产生…...

android NullPointerException externalCacheDir

先看代码&#xff1a; fun Context.getMyCacheDir(): String {return externalCacheDir!!.absolutePath "/my_cache" }如上代码&#xff0c;在某些手机可能会出现crash。 原因详细阅读api&#xff0c;注意他有一个大大的注解Nullable&#xff1a; Nullablepublic a…...

设计模式-过滤器模式(使用案例)

过滤器模式&#xff08;Filter Pattern&#xff09;或标准模式&#xff08;Criteria Pattern&#xff09;是一种设计模式&#xff0c;这种模式允许开发人员使用不同的标准来过滤一组对象&#xff0c;通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式…...

成功解决修改已经push到远程git仓库的commit message

1.使用 Git 命令行进入要修改的项目目录。 2.运行 git log 命令查看提交历史&#xff0c;找到要修改的提交的哈希值&#xff08;commit hash&#xff09;。 3.运行 git rebase -i <commit hash> 命令&#xff0c;将 <commit hash> 替换为要修改的提交的哈希值。这将…...

Ubuntu18.04 交叉编译openssl-1.1.1

源码下载地址&#xff1a; openssl 此处使用的是openssl-1.1.1-pre5.tar.gz 解压: $tar -zxvf openssl-1.1.1-pre5.tar.gz $cd openssl-1.1.1-pre5/ 执行配置生成Makefile&#xff1a; $./config no-asm shared --prefix$PWD/__install 或者 $./config no-asm shared no-…...

七夕学算法

目录 P1031 [NOIP2002 提高组] 均分纸牌 原题链接 : 题面 : 思路 : 代码 : P1036 [NOIP2002 普及组] 选数 原题链接 : 题面 : 思路 : 代码 : P1060 [NOIP2006 普及组] 开心的金明 原题链接 : 题面 : 思路 : 01背包例题 : 代码 : P1100 高低位交换 原题…...

在C++中利用rapidjson实现Python中的字典(Dict)

python 中的dict如下: Dicts = {"Stain":{"ResultType": "Physics","Results": [{"Key": "KeyPoints","Title": "瑕疵区域","Unit": "","Value": stainlist…...

数组和指针练习(3)

题目&#xff1a; int main() { int a[5][5]; int(*p)[4]; p a; printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]); return 0; } 思路分析&#xff1a; int(*p)[4]; 定义了指针变量p是一个数组指针&#xff0c;且该数组指…...

如何用树莓派Pico针对IoT编程?

目录 一、Raspberry Pi Pico 系列和功能 二、Raspberry Pi Pico 的替代方案 三、对 Raspberry Pi Pico 进行编程 硬件 软件 第 1 步&#xff1a;连接计算机 第 2 步&#xff1a;在 Pico 上安装 MicroPython 第 3 步&#xff1a;为 Thonny 设置解释器 第 4 步&#xff…...

【填坑向】MySQL常见报错及处理系列(ERROR! The server quit without updating PID file)

本系列其他文章 【填坑向】MySQL常见报错及处理系列&#xff08;Communications link failure & Access denied for user ‘root‘‘localhost‘&#xff09;_AQin1012的博客-CSDN博客翻一下大致的意思就是默认会按照如下的顺序读取配置文件&#xff0c;我上面贴出的配置文…...

如何处理MySQL自增ID用完

​ 检查当前自增ID的最大值&#xff1a;你可以使用以下SQL查询语句来获取当前最大的自增ID值&#xff1a; SELECT MAX(id) FROM your_table;假设你的表名为 your_table 和自增ID列名为 id。 确定使用的自增ID类型&#xff1a;根据当前最大值来判断你使用的自增ID类型。如果当前…...

Docker 安装教程【菜鸟级】

文章目录 前言1.安装及环境1.1.Linux安装1.2.Windows安装 2.初识Docker2.1.进入docker2.2.命令行基本操作 Docker实例Docker安装Centos使用启动、关闭、删除容器将主机中的文件放入容器中的方式查看容器日志 前言 1.安装及环境 1.1.Linux安装 1.2.Windows安装 2.初识Docker…...

centos7.9 用docker安装mysql8.0

一.安装docker 切换到root1.安装依赖包 $ yum install -y yum-utils2.registry更换阿里源 $ yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo$ sed -i s/download.docker.com/mirrors.aliyun.com\/docker-ce/g /etc/yum.…...

JVM和消息队列面经(自用)

JVM和消息队列面试八股文&#xff0c;自用。 Minor GC、Young GC、Full GC、Old GC、Major GC、Mixed GC 一文搞懂 - 知乎 32 道 JVM 面试题总结&#xff08;含答案解析和思维导图&#xff09; - 知乎 百度安全验证 JVM面经汇总_所幸你是例外的博客-CSDN博客 38道精品JVM面…...

四、pikachu之文件包含

文章目录 1、文件包含漏洞概述1.1 文件包含漏洞1.2 相关函数1.3 文件包含漏洞分类 2、File Inclusion(local)3、File Inclusion(remote) 1、文件包含漏洞概述 1.1 文件包含漏洞 文件包含漏洞&#xff1a;在web后台开发中&#xff0c;程序员往往为了提高效率以及让代码看起来更…...