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

APP自动化实战

APP自动化能做什么?

请看示例(实现批量的视频,封面功能复用能力(实现效果参考抖音号:71403700901

APP自动化实战-操作剪映APP

PO模式

1. PO模式介绍

PO(Page Object)模式是一种在自动化测试中广泛使用的设计模式。

其主要思想是将页面元素的操作和页面的业务逻辑封装到一个单独的类中,以提高测试代码的可读性、可维护性和可重用性。

PO 模式的优点包括:

  1. 减少代码重复:相同页面的操作只需在对应的页面对象中定义一次。
  2. 提高代码可读性:测试用例专注于业务流程,而页面操作的细节被隐藏在页面对象中。
  3. 便于维护:如果页面元素或操作有变化,只需在相应的页面对象中进行修改。

2. PO模式应用

  1. PO模式可以把一个页面分为三层,对象库层、操作层、业务层。
    • 对象库层:封装定位元素的方法。
    • 操作层:封装对元素的操作。
    • 业务层:将一个或多个操作组合起来完成一个业务功能。比如登录:需要输入帐号、密码、点
      击登录三个操作。
  1. PO模式的Base基类封装
    • 比如针对元素定位封装到操作的基类当中,使代码更加简洁

实战应用

说明:Android平台&剪映APP为例,仅做简单演示。效果参考(抖音号:71403700901)

1. 主要代码结构

(参考上一篇文章:基于 Python 的自动化框架示例_python框架模板-CSDN博客)

my_app_auto_test/
├── app_lib/
│   ├── base/
│   │   ├── __init__.py
│   │   ├── base_driver.py
│   │   └── base_page.py
│   ├── pages/
│   │   ├── __init__.py
│   │   └── main_page.py
│   └── operations/
│       ├── __init__.py
│       └── main_operations.py
├── app_test/
│   ├── __init__.py
│   ├── test_main.py
│   └── conftest.py
├── config/
│   ├── __init__.py
│   └── config.ini
└── run_tests.py

2. PO模式封装

主要介绍main_page模块

import time
from selenium.webdriver.common.by import By
from app_lib.android.Base.base_page import BasePageMain# 抽象出元素定位信息的基类
class ElementLocator:def __init__(self, by: By, value: str):self.by = byself.value = value# 对象库层,用来定位元素
class PageMain(BasePageMain):def __init__(self):super().__init__()# 定位元素self.cut_cap = ElementLocator(By.XPATH, '//android.widget.TextView[@resource-id="com.lemon.lv:id/tab_name" and @text="剪辑"]')self.scissors = ElementLocator(By.XPATH, '(//android.view.View[@resource-id="com.lemon.lv:id/radioButton"])[1]')self.start_do = ElementLocator(By.XPATH, '//android.widget.ImageView[@resource-id="com.lemon.lv:id/ic_creation_new"]')self.choose_color = ElementLocator(By.XPATH, '')self.choose_color = ElementLocator(By.XPATH, '')# 剪辑按钮def find_cut_cap(self):return  self.get_element((self.cut_cap.by, self.cut_cap.value))# 剪刀按钮def find_scissors(self):return self.get_element((self.scissors.by, self.scissors.value))# 开始创造按钮def find_start_do(self):return self.get_element((self.start_do.by, self.start_do.value))# 操作层,通过依赖注入接收对象库层实例,降低耦合度
class HandMain:def __init__(self, page_main_:PageMain):self.page_main = page_main_# 开始创作def start_do(self):if self.page_main.find_cut_cap() is not None:self.page_main.find_cut_cap().click()if self.page_main.find_scissors() is not None:self.page_main.find_scissors().click()self.page_main.find_start_do().click()time.sleep(3)# 业务层
class MainProxy:def __init__(self, handle_main_: HandMain):self.main_handle = handle_main_def start_do_(self):# 开始创作self.main_handle.start_do()# 使用示例
if __name__ == "__main__":page_main = PageMain()handle_main = HandMain(page_main)main_proxy = MainProxy(handle_main)main_proxy.start_do_()

上述代码中,如果页面元素或操作有变化,只需在相应的页面对象中进行修改即可。

附:Windows电脑从0到1实现APP自动化

引言

前几日回购了一台windows电脑,8成新,系统已重装。因为之前一直用的是MAC电脑,这次就这个机会用Windows电脑从0到1实现一下APP的自动化。

环境搭建

在Windows电脑上进行Python+Appium自动化测试环境搭建,主要有以下步骤:

1. 安装Java JDK

  1. 下载:前往Oracle官网或国内镜像站(如华为镜像),下载JDK 1.8及以上版本,安装过程中选择合适路径,避免中文和空格。
  2. 配置环境变量:右键点击“此电脑”,选择“属性”,进入“高级系统设置”,点击“环境变量”。新建“JAVA_HOME”变量,变量值为JDK安装路径;编辑“Path”变量,添加%JAVA_HOME%\bin
  3. 验证:在命令提示符输入“java -version”,显示版本信息则安装成功。

2. 安装Android SDK

  1. 下载:访问Android SDK官网,下载SDK安装包。
  2. 安装与配置环境变量:解压到指定目录,新建“ANDROID_HOME”变量,变量值为SDK解压路径;编辑“Path”变量,添加%ANDROID_HOME%\platform-tools%ANDROID_HOME%\build-tools%ANDROID_HOME%\tools等目录(用英文分号隔开)。
  3. 验证:在命令提示符输入“adb”和“adb devices”,能正确显示相关信息则安装成功。

3. 安装安卓模拟器

可选择夜神模拟器、天天模拟器、Genymotion、网易MUMU等。以夜神模拟器为例:

  1. 下载安装:访问夜神模拟器官网,下载并安装。
  2. 配置:开启模拟器的开发者模式,在模拟器中,进入“设置”->“关于手机”->连续点击“版本号”5次激活开发者选项,接着在“设置”->“开发者选项”中启用USB调试。将Android SDK中的platform-tools文件夹下的adb.exe文件拷贝到夜神模拟器安装路径下的bin目录下,覆盖原有的adb文件。

4. 安装Node.js

  1. 下载:访问Node.js官网,下载适合Windows系统的安装包。
  2. 安装:点击安装包,按照提示点击“Next”按钮,勾选“I accept the terms in the License Agreement”,可自定义安装路径,之后默认点击“Next”,再点击“install”和“finish”完成安装。
  3. 验证:打开命令提示符,输入“node -v”,显示版本号则安装成功。

5. 安装Appium

有客户端安装和远程安装两种方式,推荐客户端安装。

  1. 客户端安装:前往Appium官网下载Windows安装包,选择第一个选项点击“安装”,点击“完成”。双击打开Appium客户端,host输入127.0.0.1,Appium默认端口是4723,点击“Start Server”开启服务。
  2. 远程安装:在命令提示符中输入npm install -g appium。也可使用淘宝镜像源加快速度,先执行npm install -g cnpm --registry=https://registry.npm.taobao.org,再执行cnpm install -g appium

6. 安装Appium-doctor

在命令提示符中输入npm install -g appium-doctor。安装完成后,通过在命令提示符中输入appium-doctor进行环境检查。

7. 安装Python

  1. 下载:访问Python官网,下载适合Windows系统的安装包。
  2. 安装:运行安装包,在安装过程中,建议勾选“Add Python to PATH”,将Python添加到环境变量。
  3. 验证:打开命令提示符,输入“python”,若显示Python版本信息,则安装成功。

8. 安装Appium-Python-Client

打开命令提示符,输入pip install Appium-Python-Client

9. 安装集成开发环境(IDE)

可选择Pycharm等,前往Pycharm官网下载安装包,按照提示进行安装。

APP自动化测试

1. 启动 Appium Server

    • 打开命令提示符:在 Windows 系统中,按下Win + R键,输入 “cmd” 并回车,打开命令提示符窗口。
    • 输入启动命令:在命令提示符中输入appium命令,即可启动 Appium Server。如果需要指定一些特殊参数,如指定端口号、绑定 IP 地址等,可以使用相应的参数选项,例如appium -p 4724表示将 Appium Server 启动在 4724 端口上。
    • 查看启动信息:命令执行后,会在命令行中输出 Appium Server 的启动日志信息,显示服务器是否成功启动以及相关的配置信息等。

2. 准备测试设备与APP

  • 连接真机:用USB线将手机连接到电脑,确保手机开启USB调试模式,电脑能识别手机。若用模拟器,启动之前安装好的安卓模拟器。
  • 安装APP,可以提前安装好,就不需要下面步骤了
    • 获取APP安装包:获取要测试的APP安装包文件(.apk格式),可从项目组获取或从应用商店下载后提取。
    • 安装APP:使用命令行工具如adb install <app_path>,将APP安装到测试设备上,其中<app_path>是APP安装包的路径。也可在Appium的启动配置中指定app参数为APP安装包路径,让Appium在测试前自动安装。

3. 编写测试脚本

  • 导入必要的库:在Python脚本中,导入appium.webdriver相关模块及其他可能用到的模块,如By用于定位元素,WebDriverWait用于等待元素加载。
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
  • 配置Desired Capabilities:设置设备和APP相关的参数,如平台名称、平台版本、设备名称、APP包名、启动活动等。
desired_caps = {"platformName": "Android","platformVersion": "11","deviceName": "emulator-5554","appPackage": "com.example.app","appActivity": "com.example.app.MainActivity"
}
  • 初始化驱动:创建WebDriver实例,与Appium服务器建立连接,启动APP。
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)

from appium.options.android import UiAutomator2Options

# 创建Appium驱动实例
options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote(config.get('Appium', 'server_url'), options=options)
  • 注意:
  • 如果新版本的Appium不兼容,需要引用UiAutomator2Options。
  • 与Appium服务器建立连接,启动APP。
  • 编写测试用例:使用Appium提供的API来定位APP中的元素,并对元素进行操作,如点击、输入文本等。
# 等待并点击某个按钮
button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "button_id")))
button.click()# 输入文本到输入框
input_box = driver.find_element(By.ID, "input_box_id")
input_box.send_keys("test text")
  • 断言与验证:使用断言来验证操作结果是否符合预期,如验证页面标题、元素是否显示等。
# 验证某个元素是否显示
assert driver.find_element(By.ID, "element_id").is_displayed()# 验证页面标题是否正确
assert driver.title == "Expected Title"

运行测试脚本

  • 直接运行:在Pycharm等集成开发环境中,直接运行编写好的测试脚本。也可在命令行中进入脚本所在目录,执行python <script_name>.py命令来运行脚本,其中<script_name>是测试脚本的文件名。
  • 使用测试框架:若使用unittestpytest等测试框架来组织和管理测试用例,可在命令行中执行相应的命令来运行测试套件。如使用unittest时,可在命令行中执行python -m unittest discover -s tests -p "test_*.py",其中tests是测试用例所在的目录,test_*.py是测试用例文件的命名模式。

查看测试结果

  • 查看控制台输出:在运行脚本的控制台中,查看测试执行过程中的输出信息,包括测试用例的执行情况、断言结果等。若测试失败,会显示详细的错误信息和堆栈跟踪,帮助定位问题。
  • 生成测试报告:可使用HTMLTestRunner等工具生成HTML格式的测试报告,直观地展示测试结果,包括测试用例的执行时间、通过率、失败用例的详细信息等。

相关文章:

APP自动化实战

APP自动化能做什么&#xff1f; 请看示例&#xff08;实现批量的视频&#xff0c;封面功能复用能力&#xff08;实现效果参考抖音号&#xff1a;71403700901&#xff09; APP自动化实战&#xff0d;操作剪映APP PO模式 1. PO模式介绍 PO&#xff08;Page Object&#xff09;…...

Unity基础——资源导入

一.资源来源 1.Assert Store&#xff08;Unity资源官方网站&#xff09; &#xff08;1&#xff09;用于制作游戏的优质资源 | Unity Asset Store &#xff08;2&#xff09;或则通过Unity项目打开 2.外部资源 &#xff08;1&#xff09;淘宝 &#xff08;2&#xff09;找外…...

JMeter性能问题

性能测试中TPS上不去的几种原因 性能测试中TPS上不去的几种原因_tps一直上不去-CSDN博客 网络带宽 连接池 垃圾回收机制 压测脚本 通信连接机制 数据库配置 硬件资源 压测机 业务逻辑 系统架构 CPU过高什么原因 性能问题分析-CPU偏高 - 西瓜汁拌面 - 博客园 US C…...

形式化数学编程在AI医疗中的探索路径分析

一、引言 1.1 研究背景与意义 在数字化时代,形式化数学编程和 AI 形式化医疗作为前沿领域,正逐渐改变着我们的生活和医疗模式。形式化数学编程是一种运用数学逻辑和严格的形式化语言来描述和验证程序的技术,它通过数学的精确性和逻辑性,确保程序的正确性和可靠性。在软件…...

DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!

项目地址&#xff1a;GitHub - deepseek-ai/FlashMLA 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天&#xff01; ​ 一、开源周震撼启幕 继上周预告后&#xff0c;DeepSeek于北京时间今晨9点准时开源「FlashMLA」&#xff0c;打响开源周五连…...

nginx 配置https

参考文档&#xff1a;nginx 文档 -- nginx官网|nginx下载安装|nginx配置|nginx教程 配置 HTTPS 服务器 HTTPS 服务器优化 SSL 证书链 单个 HTTP/HTTPS 服务器 基于名称的 HTTPS 服务器 具有多个名称 的 SSL 证书 服务器名称指示 兼容性 要配置 HTTPS 服务器&#xff0c;ssl…...

GhostBottleneck; InvertedResidual;Squeeze and Excite 是什么,怎么用

GhostBottleneck; InvertedResidual;Squeeze and Excite 是什么,怎么用 目录 GhostBottleneck; InvertedResidual;Squeeze and Excite 是什么,怎么用GhostBottleneckInvertedResidualSqueeze and Excite(SE)GhostBottleneck 概念: GhostBottleneck 是在轻量级神经网…...

Docker启动ES容器打包本地镜像

文章目录 1、安装 Docker2、下载镜像3、查看已下载的镜像4、 保存和加载镜像5、.tar 文件与 Docker 镜像的关系6、如何从 .tar 文件加载 Docker 镜像7、为什么需要 .tar 文件&#xff1f;8、ES 8.x版本无法启动8.1 问题原因8.2 解决方案8.3 提交容器为新镜像 1、安装 Docker 如…...

XXE漏洞:原理、危害与修复方法详解

目录 一、XXE漏洞概述二、XXE漏洞原理三、XXE漏洞危害1. 任意文件读取2. 命令执行3. 拒绝服务攻击(DoS)4. SSRF攻击四、XXE漏洞修复方法1. 禁用外部实体JavaPythonPHP2. 输入验证和过滤3. 安全配置服务器4. 升级解析器版本五、总结一、XXE漏洞概述 XXE(XML External Entity…...

android keystore源码分析

架构 Android Keystore API 和底层 Keymaster HAL 提供了一套基本的但足以满足需求的加密基元&#xff0c;以便使用访问受控且由硬件支持的密钥实现相关协议。 Keymaster HAL 是由原始设备制造商 (OEM) 提供的动态加载库&#xff0c;密钥库服务使用它来提供由硬件支持的加密服…...

状态模式

状态&#xff08;State&#xff09;模式属于行为型模式的一种。 状态模式允许对象在其内部状态改变时改变其行为&#xff0c;使其看上去就像改变了自身所属的类一样。 状态模式是为了把一大串if...else...的逻辑给分拆到不同的状态类中&#xff0c;使得将来增加状态比较容易。…...

C++ | 面向对象 | 类

&#x1f47b;类 &#x1f47e;语法格式 class className{Access specifiers: // 访问权限DataType variable; // 变量returnType functions() { } // 方法 };&#x1f47e;访问权限 class className {public:// 公有成员protected:// 受保护成员private:// 私有成员 }…...

鸿蒙-AVPlayer

compileVersion 5.0.2&#xff08;14&#xff09; 音频播放 import media from ohos.multimedia.media; import common from ohos.app.ability.common; import { BusinessError } from ohos.base;Entry Component struct AudioPlayer {private avPlayer: media.AVPlayer | nu…...

Android移动应用开发实践-1-下载安装和简单使用Android Studio 3.5.2版本(频频出错)

一、下载安装 1.Android Studio3.5.2下载地址&#xff1a;Android Studio3.5.2下载地址 其他版本下载地址&#xff1a;其他版本下载地址 2.安装教程&#xff08;可以多找几个看看&#xff09; 安装 | 手把手教你Android studio 3.5.2安装&#xff08;安装教程&#xff09;_a…...

从.m3u8到.mp4:使用批处理脚本完成视频处理的完整指南

这里介绍一个Windows批处理脚本&#xff08;Windows Batch Script&#xff09;&#xff0c;主要用于处理 .m3u8 ts 视频文件的下载和合并功能。 以下是程序的主要功能和逻辑流程&#xff1a; 功能概述 参数检查与路径处理&#xff1a; 检查是否传递了文件或文件夹路径作为参数…...

qt5的中文乱码问题,QString、QStringLiteral 为 UTF-16 编码

qt5的中文乱码问题一直没有很明确的处理方案。 今天处理进程间通信时&#xff0c;也遇到了qt5乱码问题&#xff0c;一边是设置的GBK&#xff0c;一边设置的是UTF8&#xff0c;单向通信约定采用UTF8。 发送端保证发的是UTF8字符串&#xff0c;因为UTF8在网络数据包中没有字节序…...

Gurobi 并行计算的一些问题

最近尝试用 gurobi 进行并行计算&#xff0c;即同时用多个 cpu 核计算 gurobi 的 model&#xff0c;但是发现了不少问题。总体来看&#xff0c;gurobi 对并行计算的支持并不是那么好。 gurobi 官方对于并行计算的使用在这个网址&#xff0c;并有下面的大致代码&#xff1a; i…...

Vue3 中如何实现响应式系统中的依赖收集和更新队列的解耦?

一、问题解析&#xff1a;为什么需要解耦&#xff1f; 在响应式系统中&#xff0c;依赖收集​&#xff08;追踪数据与视图的关联关系&#xff09;和更新队列​&#xff08;批量处理数据变化带来的副作用&#xff09;是两个核心但职责不同的模块。 Vue3 通过以下设计实现解耦&…...

vue项目中动态添加类名样式不生效问题

一、问题描述 在vue项目中使用:class{tableContent: summary}给元素动态添加了类名tableContent&#xff0c;运行代码后查看类名已经添加成功但样式并未生效。 二、问题产生原因并解决 刚开始把样式写在了<style lang"scss" scoped></style>中&#x…...

供应链管理系统--升鲜宝门店收银系统功能解析,登录、主界面、会员 UI 设计图(一)

供应链管理系统--升鲜宝门店收银系统功能解析&#xff0c;登录、主界面 会员 UI 设计图&#xff08;一&#xff09;...

用AI写游戏3——deepseek实现kotlin android studio greedy snake game 贪吃蛇游戏

项目下载 https://download.csdn.net/download/AnalogElectronic/90421306 项目结构 就是通过android studio 建空项目&#xff0c;改下MainActivity.kt的内容就完事了 ctrlshiftalts 看项目结构如下 核心代码 MainActivity.kt package com.example.snakegame1// MainA…...

设计模式的引入

面向对象设计原则 1. 软件设计固有的复杂性2. 面向对象设计原则2.1 引入2.2 依赖倒置原则2.3 开放封闭原则2.4 单一职责原则2.5 Liskov 替换原则&#xff08; LSP&#xff09;2.6 接口隔离原则&#xff08; ISP&#xff09;2.7 优先使用对象组合&#xff0c;而不是类继承2.8 封…...

P8697 [蓝桥杯 2019 国 C] 最长子序列

P8697 [蓝桥杯 2019 国 C] 最长子序列 题目 分析代码 题目 分析 先分析一波xdm 题意呢就是在s中找有多少个能和t匹配的字符&#xff0c;注意&#xff1a;连续匹配&#xff0c;输出连续的次数 欧克&#xff0c;开始分析&#xff0c;首先&#xff0c;哎~字母&#xff01;还强调…...

基于阿里云PAI平台快速部署DeepSeek大模型实战指南

一、DeepSeek大模型&#xff1a;企业级AI应用的新标杆 1.1 为什么选择DeepSeek&#xff1f; 近期&#xff0c;DeepSeek系列模型凭借其接近GPT-4的性能和开源策略&#xff0c;成为全球开发者关注的焦点。在多项国际评测中&#xff0c;DeepSeek-R1模型在推理能力、多语言支持和…...

【java进阶】java多态深入探讨

前言 在Java的编程宇宙中,多态是极为关键的概念,它宛如一条灵动的纽带,串联起面向对象编程的诸多特性,赋予程序宛如生命般的动态活力与高度灵活性。透彻理解多态,不仅是提升代码质量的关键,更是开启高效编程大门的钥匙。 一、多态的定义与本质 多态,从概念层面来讲,…...

蓝桥杯备赛-拔河

问题描述 小明是学校里的一名老师&#xff0c;他带的班级共有 nn 名同学&#xff0c;第 ii 名同学力量值为 aiai​。在闲暇之余&#xff0c;小明决定在班级里组织一场拔河比赛。 为了保证比赛的双方实力尽可能相近&#xff0c;需要在这 nn 名同学中挑选出两个队伍&#xff0c…...

Zookeeper(67) Zookeeper在HBase中的应用是什么?

Zookeeper 在 HBase 中起到了至关重要的作用&#xff0c;主要用于协调和管理 HBase 集群中的多个组件。具体来说&#xff0c;Zookeeper 在 HBase 中的应用包括以下几个方面&#xff1a; Master 选举&#xff1a;HBase 集群中可以有多个 Master 节点&#xff0c;但只有一个处于…...

java后端开发day20--面向对象进阶(一)--static继承

&#xff08;以下内容全部来自上述课程&#xff09; 1.static–静态–共享 static表示静态&#xff0c;是java中的一个修饰符&#xff0c;可以修饰成员方法&#xff0c;成员变量。 1.静态变量 被static修饰的成员变量&#xff0c;叫做静态变量。 特点&#xff1a; 被该类…...

IDEA使用Maven方式构建SpringBoot项目

1、环境准备 确保你已经安装了以下工具&#xff1a; Java JDK&#xff08;推荐 JDK 8 或更高版本&#xff09; IntelliJ IDEA&#xff08;推荐使用最新版本&#xff09; 2、创建 Spring Boot 项目 &#xff08;1&#xff09; 打开 IntelliJ IDEA。 &#xff08;2&#xff09…...

Spring Boot2.0之十 使用自定义注解、Json序列化器实现自动转换字典类型字段

前言 项目中经常需要后端将字典类型字段值的中文名称返回给前端。通过sql中关联字典表或者自定义函数不仅影响性能还不能使用mybatisplus自带的查询方法&#xff0c;所以推荐使用自定义注解、Json序列化器&#xff0c;Spring的缓存功能实现自动转换字典类型字段。以下实现Spri…...

C#问题解决方案 --- 生成软件hash,生成文件hash

生成软件hash值&#xff1a; private string GetEXEHashString() {//获得软件哈希值Process currProcess Process.GetCurrentProcess();string filePath currProcess.MainModule.FileName;string hashEXE string.Empty;using (FileStream fs new FileStream(filePath, Fil…...

云计算如何解决延迟问题?

在云计算中&#xff0c;延迟&#xff08;latency&#xff09;指的是从请求发出到收到响应之间的时间间隔。延迟过高可能会严重影响用户体验&#xff0c;特别是在需要实时响应的应用中&#xff0c;如在线游戏、视频流、金融交易等。云计算服务如何解决延迟问题&#xff0c;通常依…...

多模态人物视频驱动技术回顾与业务应用

一种新的商品表现形态&#xff0c;内容几乎存在于手淘用户动线全流程&#xff0c;例如信息流种草内容、搜索消费决策内容、详情页种草内容等。通过低成本、高时效的AIGC内容生成能力&#xff0c;能够从供给端缓解内容生产成本高的问题&#xff0c;通过源源不断的低成本供给倒推…...

鸿蒙中连接手机可能遇到的问题

连接权限问题&#xff1a;手机开启了严格的权限管理机制&#xff0c;若未授予鸿蒙设备连接所需的权限&#xff0c;如蓝牙连接时未开启蓝牙权限&#xff0c;或者 USB 连接时未允许设备进行调试、文件传输等操作&#xff0c;就会导致连接失败。例如&#xff0c;当使用鸿蒙平板通过…...

15.代码随想录算法训练营第十五天|(递归)110. 平衡二叉树,257. 二叉树的所有路径*,404. 左叶子之和,222.完全二叉树的节点个数[打卡自用]

15.代码随想录算法训练营第十五天|&#xff08;递归&#xff09;110. 平衡二叉树&#xff0c;257. 二叉树的所有路径*&#xff0c;404. 左叶子之和&#xff0c;222.完全二叉树的节点个数 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xf…...

H5 火柴人科目三和GitHub获取仓库点星星的用户列表发生了艺术的碰撞

先看效果&#xff0c;代码写的比较乱&#xff0c;有待优化 效果 https://linyisonger.github.io/H5.Examples/?name./089.%E7%9C%8B%E6%98%9F%E6%98%9F%E7%9A%84%E8%88%9E%E8%80%85.html 思路 看起来很简单&#xff0c;实则也不是很难&#xff0c;就是需要思路要打开。 一…...

使用消息队列怎样防止消息重复?

大家好&#xff0c;我是君哥。 使用消息队列时&#xff0c;我们经常会遇到一个可能对业务产生影响的问题&#xff0c;消息重复。在订单、扣款、对账等对幂等有要求的场景&#xff0c;消息重复的问题必须解决。 那怎样应对重复消息呢&#xff1f;今天来聊一聊这个话题。 1.三…...

06.【C++】模板初阶(template<typename T>,充分复用函数,函数模板和类模板的使用)

目录 一. 泛型编程 二. 函数模板&#xff08;template的使用&#xff09; 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 三. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 一. 泛型编程 如何实现一个通用…...

深入理解 并查集LRUCaChe

并查集&LRUCaChe 个人主页&#xff1a;顾漂亮 文章专栏&#xff1a;Java数据结构 1.并查集的原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后根据一定规律将归于同一组元素的…...

在 macOS 系统上安装 kubectl

在 macOS 系统上安装 kubectl 官网&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-macos/ 用 Homebrew 在 macOS 系统上安装 如果你是 macOS 系统&#xff0c;且用的是 Homebrew 包管理工具&#xff0c; 则可以用 Homebrew 安装 kubectl。 运行…...

如何设置HTTPOnly和Secure Cookie标志?

设置HttpOnly和Secure标志于Cookie中是增强Web应用安全性的重要措施。这两个标志帮助防止跨站脚本攻击&#xff08;XSS&#xff09;和中间人攻击&#xff08;MitM&#xff09;。下面是关于如何设置这些标志的具体步骤&#xff1a; 设置方法 在服务器端设置 根据你的服务器端…...

seacmsv9注入管理员账号密码+orderby+limi

1&#xff1a;mysql默认存储引擎innoDB携带的表 1&#xff0c;mysql.innodb_table_stats 2,mysql.innodb_index_stats SELECT table_name FROM mysql.innodb_table_stats WHERE database_name DATABASE(); 2&#xff1a; 关键字做处理 HEX编码:0x696E666F726D6174696F6E5F7…...

Orange 开源项目 - 集成百度智能云-千帆大模型

1 集成百度智能云-千帆大模型 百度智能云-千帆ModelBuilder百度智能云千帆大模型服务与开发平台ModelBuilder&#xff08;以下简称千帆ModelBuilder&#xff09;是面向企业开发者的一站式大模型开发及服务运行平台。千帆ModelBuilder不仅提供了包括文心一言底层模型和第三方开源…...

mac 安装Eclipse,汉化及安装ERMaster

1、下载Eclipse 进入官网直接下载 https://www.eclipse.org/downloads/ 2、Eclipse 汉化 以下是 Eclipse 2024-12 汉化的具体方法&#xff1a; 1、打开安装新软件界面&#xff1a;打开 Eclipse&#xff0c;点击菜单栏中的 “Help”&#xff0c;选择 “Install New Software……...

C++程序员内功修炼——Linux C/C++编程技术汇总

在软件开发的宏大版图中&#xff0c;C 语言宛如一座巍峨的高山&#xff0c;吸引着无数开发者攀登探索。而 Linux 操作系统&#xff0c;以其开源、稳定、高效的特性&#xff0c;成为了众多开发者钟爱的开发平台。将 C 与 Linux 相结合&#xff0c;就如同为开发者配备了一把无坚不…...

Unity3D 战斗系统架构与设计详解

引言 战斗系统是许多游戏的核心玩法之一&#xff0c;尤其是在动作游戏、角色扮演游戏&#xff08;RPG&#xff09;和策略游戏中。Unity3D 作为一款强大的游戏引擎&#xff0c;提供了丰富的工具和 API 来帮助开发者实现复杂的战斗系统。本文将详细探讨 Unity3D 中战斗系统的架构…...

Apache Commons Chain 与 Spring Boot 整合:构建用户注册处理链

文章目录 概述1. 环境准备2. 创建自定义上下文3. 创建命令验证用户输入保存用户数据发送欢迎邮件 4. 构建并执行处理链5. 使用处理链6. 运行结果7. 总结 概述 本文档旨在展示如何在 Spring Boot 应用中使用 Apache Commons Chain 来实现一个用户注册的处理链。我们将通过 Chai…...

数据结构:二叉树的数组结构以及堆的实现详解

目录 一.树与二叉树 1.树的概念与相关术语&#xff1a; 2.二叉树&#xff1a; &#xff08;1&#xff09;定义&#xff1a; &#xff08;2&#xff09;特殊的二叉树&#xff1a; &#xff08;3&#xff09;完全二叉树 &#xff08;4&#xff09;二叉树的存储结构&#x…...

机器学习01

机器学习的基本过程如下&#xff1a; 1.数据获取 2.数据划分 3.特征提取 4.模型选择与训练 5.模型评估 6.模型调优 一、特征工程&#xff08;重点&#xff09; 0. 特征工程步骤为&#xff1a; 特征提取(如果不是像dataframe那样的数据&#xff0c;要进行特征提取&#…...

常见锁类型介绍

下面结合代码详细介绍 Mutex、RW Lock、Futex、自旋锁、信号量、条件变量 和 synchronized&#xff0c;并分析它们的适用场景、特点以及为什么这些锁适用于特定场景。我们将从锁的实现机制和性能特点出发&#xff0c;解释其适用性。 1. Mutex&#xff08;互斥锁&#xff09; 代…...