软件测试基础十九 (接口相关知识详解)

接口相关知识详解

一、接口概述

(一)接口定义

接口是指系统或组件之间的交互点,是实现数据交互的通道。它就像是不同部分之间沟通的桥梁,使得数据能够在各个系统或组件之间顺畅地流动。

(二)接口的类型

  1. 按范围划分
    • 系统之间的接口
      • 多个内部系统之间的交互,例如企业内部不同业务部门的系统之间需要进行数据共享和业务协作,就通过这些接口实现。比如财务系统和人力资源系统之间可能会通过接口传递员工薪资等相关信息。
      • 内部系统与外部系统之间的交互,比如企业的电商系统与第三方支付系统的接口,用于完成支付流程。
    • 程序内部的接口
      • 方法与方法之间的交互,在一个软件模块中,不同的方法可能需要相互调用并传递数据,这就通过接口来完成。例如,一个图像处理模块中,图像缩放方法和图像裁剪方法之间可能通过接口传递图像数据和相关参数。
      • 模块与模块之间的交互,不同功能模块之间为了协同工作,通过接口进行数据交换和功能调用。比如在一个游戏开发中,角色控制模块和场景渲染模块之间的接口,用于传递角色的位置、状态等信息,以实现角色在场景中的正确显示和操作。

二、接口测试

(一)接口测试定义

接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换、传递和控制管理过程,以及相互逻辑依赖关系。它就像是对接口这个“桥梁”的质量检测,确保数据能够安全、准确地通过。

(二)接口测试原理

模拟客户端向服务器发送请求,服务器接收请求后进行相应的业务处理,并向客户端返回响应数据,然后检查响应数据是否符合预期。例如,在一个用户登录接口测试中,模拟用户输入用户名和密码发送请求,服务器验证后返回登录成功或失败的信息,测试人员检查返回的信息是否与预期一致。

(三)接口测试的特点

  1. 测试提前介入与Bug发现
    • 可以提前介入,提早发现Bug,符合质量控制前移的理念。在软件开发的早期阶段,接口一旦确定,就可以进行接口测试,及时发现接口设计和实现中的问题,避免问题在后期集成或系统测试时才暴露,减少修复成本和时间。
    • 能够发现一些页面操作发现不了的问题。因为页面操作可能受到前端界面的限制,有些底层的逻辑问题或接口数据处理问题在页面上无法直接体现,而通过接口测试可以直接针对接口进行深入的测试,发现这些隐藏的问题。
  1. 低成本高效益与自动化
    • 接口测试低成本高效益。底层的一个Bug能够引发上层8个左右Bug,通过接口测试可以在底层发现问题,避免问题在系统上层扩散,从而减少修复成本。而且接口测试可以实现自动化,提高测试效率,降低人工测试的成本和工作量。
    • 不同于传统的单元测试,接口测试是从用户的角度对系统进行全面的检测。它更关注系统整体的功能和接口之间的交互,能够更全面地验证系统的正确性和稳定性。

(四)接口测试的实现方式

  1. 使用接口测试工具
    • 比如JMeter,它可以用于模拟各种请求,对接口进行性能测试和功能测试。可以设置不同的请求参数、并发用户数等,来测试接口在不同负载下的性能表现,以及验证接口的功能是否正确。
    • Postman也是常用的接口测试工具,它提供了友好的界面,方便用户创建、发送请求,并查看响应结果。可以用于快速测试接口的基本功能,以及进行接口调试。
  1. 通过编写代码实现
    • 例如使用Python + Requests。Python是一种强大的编程语言,Requests库则提供了方便的HTTP请求功能。通过编写Python代码,可以灵活地构建各种请求,处理请求和响应数据,实现更复杂的测试逻辑。比如可以编写自动化测试脚本,对多个接口进行批量测试,对响应数据进行深度验证和分析等。

三、接口自动化测试

(一)概念

自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。接口自动化测试则是让程序或工具代替人工自动地完成对接口进行测试的一种过程。它可以提高测试效率,减少人工测试的重复性工作,并且能够在无人值守的情况下持续运行测试,快速发现接口的问题。例如,在项目的持续集成过程中,每次代码提交后都可以自动运行接口自动化测试,及时反馈接口是否受到代码变更的影响。

四、HTTP协议

(一)HTTP协议介绍

HTTP(HyperText Transfer Protocol)超文本传输协议,是一个基于请求与响应模式的、应用层的协议,也是互联网上应用最为广泛的一种网络协议。它是Web通信的基础,负责在客户端和服务器之间传输超文本数据,如网页、图片、视频等。

(二)HTTP协议的特点

  1. 支持客户端/服务器模式
    • 客户端(如浏览器)向服务器发送请求,服务器接收请求并处理后返回响应给客户端。这种模式使得资源的分布和管理更加高效,客户端可以专注于用户界面和交互,服务器则负责数据的存储和处理。
  1. 简单快速
    • 协议设计简单,使得它在传输数据时效率较高。客户端和服务器之间的通信过程相对简洁,能够快速地完成请求和响应的交互,适用于互联网上大量的信息传输。
  1. 灵活
    • 支持多种类型的数据传输,如文本、图片、音频、视频等。可以通过不同的请求方法和头部信息来适应不同的应用场景和需求。
  1. 无连接
    • 每次连接只处理一个请求,服务器处理完客户端的请求并收到客户端的应答后,即断开连接。这种方式可以节省服务器资源,但对于需要频繁交互的应用,可能会导致一定的连接开销。
  1. 无状态
    • 服务器不会保存客户端的状态信息。每个请求都是独立的,服务器不会因为之前的请求而对后续请求有特殊的处理。这使得服务器的处理更加简单高效,但对于需要保持状态的应用(如购物车),需要通过其他方式(如Cookie、Session)来实现状态管理。

(三)URL

  1. 定义
    • URL(Uniform Resource Locator)统一资源定位符,是互联网上标准资源的地址。HTTP使用URL来建立连接和传输数据。
  1. URL格式
    • 协议部分:“http”,常见的协议还有HTTPS、FTP等。HTTPS用于安全的网络通信,FTP用于文件传输。
    • 域名部分:“www.weather.com.cn”,也可以使用IP地址作为域名使用。域名是为了方便用户记忆和访问,而IP地址是网络中设备的实际地址。
    • 端口部分:“8080”,端口可以省略,默认端口(HTTP:80,HTTPS:443,FTP:21)。不同的端口用于区分不同的服务或应用程序在服务器上的监听位置。
    • 资源路径部分:“/weather1d/101010100.shtml#search”,指定服务器上的具体资源路径。
    • 查询参数部分:“uid=123&page=1”,可以允许有多个参数,多个之间用“&”作为分隔符。用于向服务器传递额外的信息,例如在查询数据库时传递条件参数。
  1. 示例
    • 查询天气信息:北京天气预报,北京7天天气预报,北京15天天气预报,北京天气查询

(四)HTTP请求

  1. 组成部分
    • HTTP请求由三部分组成,分别是请求行、请求头、请求体。
  1. 请求行
    • 用来说明请求方法、要访问的资源以及所使用的协议版本。
    • 常用请求方法
      • GET:从服务器获取资源(一项或多项),常用于获取网页内容、查询数据等。例如在浏览器中输入网址访问网页,就是使用GET方法向服务器请求网页资源。
      • POST:在服务器新建一个资源,常用于提交表单数据、上传文件等。比如用户注册时,将用户信息提交到服务器创建新用户记录。
      • PUT:在服务器更新资源(客户端提供改变后的完整资源),用于更新已有资源的全部内容。
      • DELETE:从服务器删除资源,用于删除服务器上的指定资源。
    • 其他请求方法(了解)
      • HEAD:请求获取由Request - URI所标识的资源的响应消息报头,常用于获取资源的元信息,而不获取实际内容,可用于检查资源是否存在、获取资源的修改时间等。
      • TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断,可用于查看请求在网络中的传输路径和处理情况。
      • CONNECT:保留将来使用,通常用于代理服务器或隧道技术。
      • OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求,可用于了解服务器支持的请求方法、头部信息等。
  1. 请求头
    • 紧接着请求行,请求头部由键值对组成,每行一对。请求头部通知服务器有关于客户端请求的信息。
    • 典型的请求头
      • User - Agent:产生请求的浏览器类型,服务器可以根据这个信息来优化响应内容,例如为不同类型的浏览器提供不同格式的网页。
      • Accept:客户端可识别的内容类型列表,告诉服务器客户端能够接受的响应数据类型,如text/html表示客户端能够接受HTML格式的网页,image/jpeg表示能够接受jpg图片格式等。
      • Content - Type:请求体数据的类型,常见的类型有:
        • text/html:HTML格式,用于传输网页内容。
        • text/plain:纯文本格式,用于传输简单的文本数据。
        • image/jpeg:jpg图片格式,用于传输图片数据。
        • application/json:JSON数据格式,常用于前后端数据交互,具有简洁、易读、易于解析等特点。
        • application/x - www - form - urlencoded:form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据格式),常用于传统的网页表单提交。
        • 7/form - data:在表单中进行文件上传时使用,它可以将文件和其他表单数据一起提交。
  1. 请求体
    • 不在GET方法中使用,经常在POST、PUT方法中使用。
    • 请求体的数据可以是:表单数据、文本、XML、JSON等。例如在POST请求中,可能会将用户输入的表单数据(如用户名、密码等)作为请求体发送给服务器。与请求数据相关的最常使用的请求头是Content - Type和Content - Length,Content - Type用于指定请求体数据的类型,Content - Length用于表示请求体数据的长度,服务器可以根据这些信息来正确处理请求数据。

(五)HTTP响应

  1. 组成部分
    • HTTP响应也由三个部分组成,分别是状态行、响应头、响应体。
  1. 状态行
    • 由协议版本号、状态码、状态消息三部分组成。
    • 状态码
      • 有三位数字组成,第一个数字定义了响应的类别:
        • 1xx:指示信息,表示请求已接收,继续处理,例如100 Continue表示客户端应继续发送请求。
        • 2xx:成功,表示请求已被成功接收、理解、接受,如200 OK表示服务器成功返回用户请求的数据,201 CREATED表示用户新建或修改数据成功。
        • 3xx:重定向,要完成请求必须进行更进一步的操作,例如301 Moved Permanently表示资源已被永久移动到新位置,客户端应使用新的URL访问。
        • 4xx:客户端错误,请求有语法错误或请求无法实现,如400 Bad Request表示客户端请求有语法错误,不能被服务器所理解,404 Not Found表示请求资源不存在。
        • 5xx:服务器端错误,服务器未能实现合法的请求,如500 INTERNAL SERVER ERROR表示服务器发生错误,用户将无法判断发出的请求是否成功,503 Server Unavailable表示服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
  1. 响应头
    • 用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理响应数据。例如,Content - Type响应头告诉客户端响应体数据的类型,以便客户端正确解析;Cache - Control响应头用于控制缓存策略,指示客户端是否可以缓存响应数据以及缓存的时间等。
  1. 响应体
    • 响应的消息体,数据可以是普通文本、XML、JSON、HTML源码等。服务器将处理请求后得到的数据以响应体的形式返回给客户端。例如,当客户端请求一个网页时,服务器将网页的HTML源码作为响应体返回;当客户端请求一个数据接口时,服务器可能将JSON格式的数据作为响应体返回,客户端可以根据需要解析和使用这些数据。

(六)状态码(Status Codes)[科普]

服务器向用户返回的状态码和提示信息,常见的有:

状态码

状态消息

动词

说明

200

OK

[GET]

服务器成功返回用户请求的数据

201

CREATED

[POST/PUT]

用户新建或修改数据成功

202

Accepted

[]

表示一个请求已经进入后台排队(异步任务)

204

NO CONTENT

[DELETE]

用户删除数据成功

400

Bad Request

[POST/PUT]

客户端请求有语法错误,不能被服务器所理解

401

Unauthorized

[]

表示用户没有权限(令牌、用户名、密码错误)

403

Forbidden

[]

表示用户得到授权(与401错误相对),但是访问是被禁止的

404

Not Found

[]

请求资源不存在,eg:输入了错误的URL

406

Not Acceptable

[GET]

用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)

410

Gone

[GET]

用户请求的资源被永久删除,且不会再得到的

500

INTERNAL SERVER ERROR

[*]

服务器发生错误,用户将无法判断发出的请求是否成功

503

Server Unavailable

[*]

服务器当前不能处理客户端的请求,一段时间后可能恢复正常

五、接口规范

RESTful

RESTful 是 “Representational State Transfer”(表述性状态转移)的衍生词,它是一种软件架构风格,用于构建分布式超媒体系统(如 Web 应用程序)。

“Representational State Transfer” 这个术语描述了一种架构原则,在这种架构中,资源(如数据对象、服务等)通过统一的接口(通常是基于 HTTP 协议)进行访问和操作,并且系统的状态变化通过资源的表述(如 JSON、XML 等数据格式)在客户端和服务器之间进行转移。

  1. RESTful架构特点
    • 资源的标识与访问:RESTful架构强调通过统一的接口来访问和操作资源。资源通过URL进行标识,每个资源都有一个唯一的URL地址。例如,一个用户资源可以用/users/{userId}的URL来表示,其中{userId}是用户的唯一标识。通过不同的HTTP方法(如GET、POST、PUT、DELETE)对资源进行相应的操作,如GET请求用于获取资源,POST请求用于创建资源,PUT请求用于更新资源,DELETE请求用于删除资源。
    • 无状态性:服务器不保存客户端的状态信息。每个请求都是独立的,包含了服务器处理该请求所需的所有信息。这使得服务器可以更轻松地扩展和处理大量并发请求,同时也提高了系统的可靠性和可维护性。例如,在用户登录后,后续的请求中不会在服务器端保存用户的登录状态,而是通过在请求中携带认证信息(如Token)来进行身份验证。
    • 可缓存性:RESTful架构鼓励对资源进行缓存。客户端可以缓存服务器返回的响应数据,以提高性能和减少网络带宽的使用。服务器可以通过设置合适的缓存控制头(如Cache - Control)来指示客户端如何缓存数据。例如,对于不经常变化的资源,服务器可以设置较长的缓存时间,让客户端在下次请求相同资源时直接使用缓存数据,而不需要再次向服务器发送请求。
    • 分层系统:RESTful架构通常是分层的,客户端和服务器之间可以有中间层(如代理服务器、缓存服务器等)。这有助于提高系统的可扩展性和性能。中间层可以对请求和响应进行处理,如缓存数据、负载均衡、安全验证等。例如,代理服务器可以缓存经常访问的资源,减少服务器的负载;负载均衡器可以将请求分发到多个服务器上,提高系统的并发处理能力。
    • 统一的接口:客户端和服务器之间通过统一的HTTP协议进行通信,使用标准的HTTP方法和状态码。这使得不同的客户端和服务器可以相互理解和交互,提高了系统的互操作性。例如,无论使用哪种编程语言编写的客户端,都可以按照相同的方式向服务器发送请求并处理响应。同时,开发者也可以更容易地理解和维护系统,因为接口的规范是统一的。

六、接口测试流程目标

(一)接口测试流程

  1. 需求分析
    • 接口测试的第一步是需求分析,这主要依据详细的需求文档进行。测试人员需要认真研读需求文档,深入理解系统的整体功能以及各个接口在系统中的作用和相互关系。例如,在一个电商系统中,需求文档可能描述了用户注册、登录、商品浏览、购物车操作、订单提交等一系列功能流程,而接口测试人员需要从中梳理出涉及这些功能的接口,明确每个接口的输入和输出要求,以及接口在整个业务流程中的逻辑关系。通过对需求的分析,确定需要测试的接口范围,为后续的测试工作奠定基础。
  1. 接口文档解析
    • 通常情况下,接口文档由开发人员编写,也被称为 API 文档。它详细描述了接口的各种信息,是接口测试的重要依据。测试人员要仔细阅读和理解接口文档的内容,包括接口的地址、请求方法(如 GET、POST、PUT、DELETE 等)、请求参数(参数名称、类型、是否必填、取值范围等)、响应格式(数据结构、字段含义、状态码等)。以一个用户信息查询接口为例,接口文档可能会说明其地址为https://api.example.com/user/{userId},请求方法为 GET,其中{userId}为路径参数,表示要查询的用户 ID,必须为正整数。响应格式为 JSON,包含用户的基本信息如姓名、年龄、性别等字段。测试人员只有准确理解了这些信息,才能正确地设计测试用例和执行测试。
  1. 设计测试用例
    • 根据需求分析和接口文档解析的结果,进行测试用例的设计。测试用例应全面覆盖各种情况,包括正常情况和异常情况。正常情况的测试用例用于验证接口在符合预期输入时的正确功能,如输入合法的用户 ID 查询用户信息,应返回正确的用户数据。异常情况的测试用例则用于检查接口对各种错误输入的处理能力,例如输入无效的用户 ID(非整数或负数)、缺失必填参数、参数值超出合法范围等情况,接口应返回相应的错误提示信息。同时,还需要考虑边界值测试,如查询用户信息时,使用最小和最大合法的用户 ID 值进行测试。此外,对于一些涉及多个参数组合的接口,还需要进行参数组合测试,以确保不同参数组合下接口的功能正确性。
  1. 执行测试
    • 使用接口测试工具实现
      • 有许多专门的接口测试工具可供选择,如 JMeter、Postman 等。以 Postman 为例,测试人员可以在其界面中创建请求,填写接口地址、选择请求方法、设置请求头和请求参数等,然后发送请求并查看响应结果。对于需要进行性能测试或并发测试的场景,JMeter 则是一个强大的工具。它可以模拟多用户并发请求,设置不同的线程数和循环次数,测量接口的响应时间、吞吐量等性能指标,以评估接口在高负载情况下的性能表现。
    • 通过编写代码实现
      • 例如使用 Python + Requests 库来编写测试代码。Python 具有丰富的库和强大的灵活性,Requests 库使得发送 HTTP 请求变得非常简单。测试人员可以使用 Python 编写脚本来自动化执行测试用例,实现更复杂的测试逻辑和数据处理。比如,可以编写代码从文件中读取大量的测试数据,然后循环发送请求并对响应进行断言验证。还可以结合其他库,如 unittest 或 pytest 来进行测试框架的搭建,实现测试用例的组织、执行和结果报告。
  1. 接口缺陷管理与跟踪
    • 在测试过程中,一旦发现接口存在问题或缺陷,需要及时进行记录和管理。通常会使用缺陷管理工具,如 Jira、Bugzilla 等,将发现的缺陷详细记录下来,包括缺陷的描述(如在什么情况下出现,具体的错误表现是什么)、重现步骤(如何操作可以复现该缺陷)、预期结果和实际结果等信息。然后,将缺陷分配给相应的开发人员进行修复。测试人员需要跟踪缺陷的修复进度,在开发人员修复后,及时进行回归测试,以确保缺陷已经被正确修复,并且没有引入新的问题。通过有效的缺陷管理与跟踪,可以保证接口的质量不断提高,减少系统中的潜在风险。
  1. 生成测试报告
    • 测试完成后,需要生成测试报告来总结测试的结果。测试报告应包含测试的基本信息,如测试的接口范围、测试时间、测试环境等;测试用例的执行情况,包括通过的测试用例数量、未通过的测试用例数量及原因分析;接口的缺陷情况,列出发现的所有缺陷及其严重程度和修复状态;以及对接口整体质量的评估和建议。测试报告可以以文档形式(如 Word、PDF)或在测试管理平台上生成,以便相关人员(如项目经理、开发团队、质量保证人员等)能够清晰地了解接口测试的结果,为项目的决策和后续工作提供依据。
  1. 接口自动化持续集成(可选)
    • 在一些项目中,会采用接口自动化持续集成的方式来提高测试效率和质量。这涉及将接口自动化测试脚本集成到持续集成工具(如 Jenkins)中,每当代码发生变更时,自动触发接口自动化测试的执行。通过持续集成,可以及时发现代码变更对接口功能的影响,快速反馈问题,减少人工干预,提高软件开发的迭代速度和质量。例如,在一个敏捷开发项目中,开发人员每次提交代码后,Jenkins 会自动拉取最新代码,执行接口自动化测试脚本,并将测试结果发送给相关人员。如果测试失败,开发人员可以及时了解情况并进行修复,确保代码的质量和稳定性。

(二)技术架构(了解)

  1. 技术栈
    • 前端:采用以 Node.js 为核心的 Vue.js 前端技术生态架构。Vue.js 是一种流行的前端框架,它具有轻量级、高效、易于上手等特点,能够帮助开发人员构建交互式的用户界面。Node.js 则在服务器端运行,用于处理前端的请求和数据交互,提供了强大的异步 I/O 和事件驱动编程模型,使得前端和后端的通信更加高效。在这种架构下,前端可以通过发送 HTTP 请求与后端接口进行通信,获取数据并展示给用户,同时也可以将用户的操作数据发送回后端进行处理。例如,在一个电商网站的前端页面中,用户点击商品搜索按钮,前端会通过 AJAX 请求将搜索关键词发送到后端接口,后端接口查询数据库后将搜索结果返回给前端,前端再将结果展示在页面上。
    • 后端
      • 使用 Spring Boot + Spring Cloud + Spring MVC + Spring Data(Spring 全家桶)作为后端开发框架。Spring Boot 简化了 Spring 应用的初始搭建和开发过程,它提供了自动配置功能,使得开发人员可以快速创建独立的、生产级别的 Spring 应用。Spring Cloud 则用于构建分布式系统,提供了服务注册与发现、配置管理、断路器、路由等功能,方便了微服务架构的开发和管理。Spring MVC 是 Spring 框架中的一个模块,用于处理 Web 请求和响应,实现了模型 - 视图 - 控制器(MVC)模式,使得代码结构更加清晰,易于维护。Spring Data 则为各种数据存储提供了统一的访问接口,简化了数据库操作。
      • 搭配 MySQL + Redis + RabbitMQ 作为数据存储和消息队列组件。MySQL 是一种关系型数据库管理系统,用于存储系统中的结构化数据,如用户信息、商品信息、订单信息等。Redis 是一种内存数据库,它具有快速的读写性能,常用于缓存热点数据、减轻数据库压力,以及实现一些需要高性能读写的功能,如会话管理、排行榜等。RabbitMQ 是一种消息队列中间件,用于实现异步通信和系统解耦。例如,在一个订单处理系统中,当用户下单后,订单信息可以先发送到 RabbitMQ 队列中,然后由后台的消费程序逐步处理,这样可以提高系统的响应速度和吞吐量,同时也避免了因订单处理过程中的复杂业务逻辑导致系统阻塞。

通过这样的技术架构,前端和后端能够协同工作,实现系统的各种功能,并且在接口测试过程中,测试人员需要了解这些技术架构的特点和交互方式,以便更好地设计和执行测试用例,确保接口的质量和系统的稳定性。

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

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

相关文章

小白初入Android_studio所遇到的坑以及怎么解决

1. 安装Android_studio 参考:Android Studio 安装配置教程 - Windows(详细版)-CSDN博客 Android Studio超级详细讲解下载、安装配置教程(建议收藏)_androidstudio-CSDN博客 想下旧版本的android_studio的地址(仅供参考&#xf…

Uubntu下的Boost库安装及使用

一、Boost库介绍 Boost库是为C语言标准库提供扩展的一些C程序库的总称。 Boost库由Boost社区组织开发、维护。其目的是为C程序员提供免费、同行审查的、可移植的程序库。Boost库可以与C标准库共同工作,并且为其提供扩展功能。Boost库使用Boost License来授权使用&…

【王木头】最大似然估计、最大后验估计

目录 一、最大似然估计(MLE) 二、最大后验估计(MAP) 三、MLE 和 MAP 的本质区别 四、当先验是均匀分布时,MLE 和 MAP 等价 五、总结 本文理论参考王木头的视频: 贝叶斯解释“L1和L2正则化”&#xff…

「QT」几何数据类 之 QPointF 浮点型点类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

数据结构与算法——Java实现 54.力扣1008题——前序遍历构造二叉搜索树

不要谩骂以前的自己 他当时一个人站在雾里也很迷茫 ​​​​​​​ ​​​​​​​ ​​​​​​​—— 24.11.6 1008. 前序遍历构造二叉搜索树 给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并返回其根。 保证 对于给定…

【Leecode】Leecode刷题之路第46天之全排列

题目出处 46-全排列-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 46-全排列-官方解法 预备知识 回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解…

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日,由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能,探索制造业数字化转型之路。 在苏州站活动开场,达索系统专业客户事业部华东区渠道经理马腾飞…

CatLIP,加速2.7倍!采用分类损失的CLIP水准的预训练视觉编码器

CatLIP,加速2.7倍!采用分类损失的CLIP水准的预训练视觉编码器 FesianXu 20241018 at Wechat Search Team 前言 传统的CLIP采用对比学习的方式进行预训练,通常需要汇聚多张节点的多张设备的特征向量以进行打分矩阵的计算,训练速度…

linux笔记(selinux)

一、概述 定义SELinux(Security - Enhanced Linux)是一种基于 Linux 内核的强制访问控制(MAC)安全机制。它为 Linux 系统提供了更细粒度的安全策略,增强了系统的安全性。目的主要目的是限制进程对系统资源(…

江西省补贴性线上职业技能培训管理平台(刷课系统)

江西省补贴性线上职业技能培训管理平台(刷课系统) 目的是为了刷这个网课 此系统有两个版本一个是脚本运行,另外一个是可视化界面运行 可视化运行 技术栈:flask、vue3 原理: 通过分析网站接口,对某些接口加密的参数进行逆向破解,从而修改请求…

Scala 中 set 的实战应用 :图书管理系统

1. 创建书籍集合 首先,我们创建一个可变的书籍集合,用于存储图书馆中的书籍信息。在Scala中,mutable.Set可以用来创建一个可变的集合。 val books mutable.Set("朝花惜拾", "活着") 2. 添加书籍 我们可以使用操作符…

简单介绍一下mvvm mvc mvp以及区别、历史

MVC(Model - View - Controller) 因MVC架构的灵活性,架构图形式很多,仅供参考 历史: MVC 是最早出现的软件架构模式之一,其历史可以追溯到 20 世纪 70 年代,最初被用于 Smalltalk - 80 环境。…

“高级Java编程复习指南:深入理解并发编程、JVM优化与分布式系统架构“

我的个人主页 接下来我将方享四道由易到难的编程题,进入我们的JavaSE复习之旅。 1:大小写转换------题目链接 解题思路: 在ASCII码表中,⼤写字⺟A-Z的Ascii码值为65- 90,⼩写字⺟a-z的Ascii码值为97-122。每个字 ⺟…

设备租借系统(源码+文档+部署+讲解)

本文将深入解析“设备租借系统”的项目,探究其架构、功能以及技术栈,并分享获取完整源码的途径。 系统概述 本项目名称为设备租借系统,是对企业内部设备进行信息化管理的系统,可以实现设备的借用、归还、状态跟踪等功能&#xff…

使用 PageHelper 在 Spring Boot 项目中实现分页查询

目录 前言1. 项目环境配置1.1 添加 PageHelper 依赖1.2 数据库和 MyBatis 配置 2. 统一的分页响应类3. 使用 PageHelper 实现分页查询3.1 Service 层分页查询实现3.2 PageHelper 分页注意事项 4. 控制层调用示例5. 常见问题与解决方案5.1 java.util.ArrayList cannot be cast t…

【C++】C++移动语义、左值右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符

二十五、C移动语义、左值和右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符 本部分讨论一些更高级的C特性:C移动语义。但是讲移动语义之前我们得先了解什么左值右值、左值引用和右值引用。 1、C的左值和右值、左值引用和右值引用左值是有地址的…

【国内中间件厂商排名及四大中间件对比分析】

国内中间件厂商排名 随着新兴技术的涌入,一批国产中间件厂商破土而出,并在短时间内迅速发展,我国中间件市场迎来洗牌,根据市占率,当前我国中间件厂商排名依次为:东方通、宝兰德、中创股份、金蝶天燕、普元…

Android自启动管控

1. 自启动管控需求来源 自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外,还会导致占用过多的系统CPU和内存资源,造成系统卡顿、发热、电池消耗过快;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动&…

C++上机实验|多态性编程练习

1.实验目的 (1)理解多态性的概念。 (2)掌握如何用虚函数实现动态联编 (3)掌握如何利用虚基类。 2.实验内容 设计一个飞机类 plane,由它派生出歼击机类fighter和轰炸机类 bomber,歼击机类fighter 和轰炸机类bomber 又共同派生出歼轰机(多用途战斗机)。利用虚函数和虚基类描述…

ctfshow(328)--XSS漏洞--存储型XSS

Web328 简单阅读一下页面。 是一个登录系统,存在一个用户管理数据库。 那么我们注册一个账号,在账号或者密码中植入HTML恶意代码,当管理员访问用户管理数据库页面时,就会触发我们的恶意代码。 思路 我们向数据库中写入盗取管理员…