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

JobScheduler省电机制

1.前言

JobScheduler(任务调度器)是 Android 提供的一种任务调度机制,可以替代传统的 WakeLock 和 Alarm 来执行后台任务。那么,它们之间的区别是什么?JobScheduler 又有哪些特别之处呢?

0

1.1 WakeLock 和 Alarm 的局限性

WakeLock:用于保持设备唤醒状态,但每个应用的 WakeLock 是独立的,无法协调多个应用的任务执行时机。

Alarm:用于定时触发任务,但每个应用的 Alarm 也是独立的,可能导致设备频繁唤醒。

1.2 JobScheduler 的优势

系统级调度:JobScheduler 运行在操作系统层面,能够协调多个应用的任务执行时机,减少设备唤醒次数。

智能调度:JobScheduler 允许设置任务执行的时间窗口,系统可以根据设备的整体状态(如电量、网络条件等)智能调度任务,从而降低功耗。主要体现在TimerController的alarm对齐。

2.JobScheduler 的省电功能

2.1 传统方式的功耗问题

如果 100 个应用每小时都使用 WakeLock 或 Alarm 唤醒设备一次,由于这些任务的执行时机无法同步,设备在一个小时内会被唤醒 100 次!这种频繁的唤醒会显著增加设备的功耗。

2.2 JobScheduler 的优化机制

JobScheduler 是系统级别的任务调度器,能够统一管理多个应用的任务执行时机。通过智能调度,设备每小时的唤醒次数会显著减少。

2.2.1 时间窗口的灵活性

JobScheduler 允许开发者设置任务执行的时间窗口。例如,可以将任务的执行时间限制在 5 分钟后到 10 分钟之前。这种灵活性为系统提供了调整空间,使其能够更好地协调多个任务的执行时机,从而减少设备唤醒次数。

2.2.2 唤醒次数的降低

由于 JobScheduler 的智能调度机制,设备每小时的唤醒次数会大幅减少。具体减少到多少次无法精确预测,因为这取决于系统的调度策略和任务的时间窗口设置。但可以肯定的是,唤醒次数会显著低于传统方式。

2.3 省电效果

根据 2016 年 Google 开发者大会 的数据,如果所有应用都使用 JobScheduler API,设备的整体电量消耗可以降低 15% 到 20%。这种显著的省电效果得益于 JobScheduler 的系统级调度能力。

3.JobScheduler 服务启动触发选项详解

JobScheduler 是 Android 提供的一种灵活的任务调度机制,相比传统的 AlarmManager,它提供了更多的触发选项和优化策略。以下是对 JobScheduler 各种触发选项的详细分析。Android 的 JobScheduler 机制通过多个控制器类(如 AppIdleController、BatteryController、ConnectivityController 等)实现了对任务调度的精细化管理。结合最新的 Android 机制(如 App Standby、Doze 模式、任务优先级、任务配额等),开发者可以更高效地管理后台任务,同时优化设备的功耗表现。通过合理设置任务条件和优先级,开发者可以确保任务在系统省电机制下仍能正常运行,从而提升用户体验。

0

3.1网络状态

JobScheduler 允许开发者根据设备的网络状态来触发任务执行。以下是五种可选的网络条件:

NETWORK_TYPE_NONE(默认条件):

无论是否有网络连接,任务都会被执行。

NETWORK_TYPE_ANY:

需要任意一种网络连接(Wi-Fi 或蜂窝网络)才能执行任务。

NETWORK_TYPE_UNMETERED:

设备连接到非计量网络(如 Wi-Fi)时才会执行任务。

NETWORK_TYPE_NOT_ROAMING:

设备不在漫游网络时才会执行任务。

NETWORK_TYPE_METERED:

设备连接到计量网络(如蜂窝网络)时才会执行任务。

3.2电池状态

JobScheduler 支持根据设备的电池状态来触发任务执行。

3.2.1 充电状态

是否在充电时执行:

任务仅在设备充电时执行,默认值为 false。

3.2.2 电量状态

是否在电量充足时执行:

任务仅在设备电量高于 15% 时执行(默认阈值,可配置)。

3.3设备空闲状态

设备空闲时执行:

当设备处于空闲状态(如熄屏一段时间后),任务才会被执行。

默认空闲时间为 71 分钟(4260000 毫秒)。

唤醒窗口时间为 5 分钟(300000 毫秒),即在 71 至 76 分钟之间可能被执行。

这些参数可在配置中调整。

日志示例:

如果日志中出现 tag=com.android.server.ACTION_TRIGGER_IDLE,说明有任务在设备空闲时被执行。

3.4URI 改变时执行

URI 变化触发任务:

当应用添加了一个 URI 并监控其变化时,任务会在 URI 发生变化时执行。

如果添加了多个 URI,系统会按顺序处理。

注意:此条件不能与重复执行时间条件同时使用,否则任务设置无效。

示例:

如果监控了联系人的 URI,当联系人信息发生变化时,任务会被触发执行。

3.5重试方案

JobScheduler 提供了灵活的重试机制,开发者可以自定义重试策略。

3.5.1 默认重试间隔

系统默认重试间隔为 30 秒。

最小重试间隔为 10 秒。

最大重试间隔为 5 小时。

3.5.2 重试策略

指数增长方式(默认):

下一次重试时间按失败次数的指数倍增长。

公式:

retry_time = current_time + initial_backoff_millis * 2 ^ (num_failures - 1)

线性增长方式:

下一次重试时间按失败次数的倍数增长。

公式:

retry_time = current_time + initial_backoff_millis * num_failures

示例:

如果设置初始重试时间为 10 分钟:

指数增长:10 分钟 → 20 分钟 → 40 分钟 → 80 分钟……

线性增长:10 分钟 → 20 分钟 → 30 分钟 → 40 分钟……

3.6 时间控制

JobScheduler 提供了多种时间控制选项,以优化任务的执行时机。

3.6.1 最小延迟时间

最小延迟时间:

任务在条件满足后,仍需等待设定的最小延迟时间才会执行。

示例:

如果任务设置为在连接 Wi-Fi 后延迟 5 分钟执行,则任务会在连接 Wi-Fi 后 5 分钟才可能被执行。

3.6.2 最大延迟时间

最大延迟时间:

无论条件是否满足,任务在达到最大延迟时间时一定会被执行。

示例:

如果任务设置为在连接 Wi-Fi 后最多延迟 30 分钟执行,则任务会在 30 分钟时强制执行。

3.6.3 重复执行时间

重复执行时间间隔:

任务可以按设定的时间间隔重复执行,最小间隔为 15 分钟。

执行窗口时间:

任务在重复执行时间间隔内的某个时间窗口内执行,最小窗口时间为 5 分钟。

公式:

最大延迟执行时间 = 当前时间 + 重复执行时间间隔

最小延迟执行时间 = 最大延迟执行时间 - 执行窗口时间

示例:

如果设置任务每 60 分钟执行一次,执行窗口时间为 10 分钟,则任务会在 50 至 60 分钟之间执行。

3.7多任务调度优化

当多个任务设置了执行窗口时间时,系统会智能调整任务的执行时机,以减少设备唤醒次数,从而优化功耗。

示例:

假设有三个任务在 00:00 同时被调度:

任务 A:每 30 分钟执行一次,执行窗口时间为 10 分钟(20 至 30 分钟)。

任务 B:每 15 分钟执行一次,执行窗口时间为 5 分钟(10 至 15 分钟)。

任务 C:每 40 分钟执行一次,执行窗口时间为 12 分钟(28 至 40 分钟)。

调度优化:

如果任务 A 和任务 C 的执行时间有重叠,系统可能会将它们合并执行。

如果任务 B 的执行时间与任务 A 和任务 C 重叠,系统可能会将它们一起执行。

日志示例:

job.delay:表示任务被推迟执行(最小延迟)。

job.deadline:表示任务在最大延迟时间点被执行。

4.Job 服务与系统省电机制的交互

开发者可以通过 JobScheduler 手动设置应用的任务在网络状态、电池状态、设备空闲、URI 变化、时间控制等条件下的运行策略。然而,Job 服务的执行不仅受开发者设置的策略影响,还会受到系统级省电机制(如 Doze 模式 和 App Standby)的控制。以下是结合当前 Android 最新机制的详细说明。

4.1Doze 模式对 Job 服务的影响

Doze 模式是 Android 引入的一种深度省电机制,旨在设备长时间未使用时减少后台活动,从而延长电池续航时间。

4.1.1 Doze 模式的触发条件

设备处于静止状态(如放在桌面上)。屏幕关闭一段时间(默认约为 30 分钟)。

4.1.2 Doze 模式对 Job 服务的限制

网络访问限制:在 Doze 模式下,Job 服务无法访问网络,除非任务被标记为 豁免(exempt)。

任务执行延迟:Job 服务的执行会被推迟到设备的维护窗口(Maintenance Window)中。维护窗口通常每隔几小时才会开启一次。

豁免任务:如果任务被标记为 重要任务(如高优先级通知或紧急任务),系统可能会允许其在 Doze 模式下执行。

4.1.3 开发者适配建议

对于需要实时执行的任务,开发者可以通过 setExpedited(true) 将任务标记为 紧急任务,以绕过 Doze 模式的限制。

对于非紧急任务,建议设置合理的时间窗口,以适配 Doze 模式的维护窗口。

4.2App Standby 对 Job 服务的影响

App Standby 是 Android 引入的一种应用级省电机制,旨在限制不常用应用的后台活动。

4.2.1 App Standby 的触发条件

应用长时间未被用户主动使用(默认约为 24 小时)。

4.2.2 App Standby 对 Job 服务的限制

网络访问限制:处于 App Standby 状态的应用,其 Job 服务无法访问网络。

任务执行延迟:Job 服务的执行会被推迟到设备的充电状态或用户主动使用应用时。

豁免任务:如果任务被标记为 重要任务(如高优先级通知或紧急任务),系统可能会允许其在 App Standby 状态下执行。

4.2.3 开发者适配建议

对于需要频繁执行的任务,开发者可以通过 setImportantWhileForeground(true) 将任务标记为 前台重要任务,以绕过 App Standby 的限制。

对于非紧急任务,建议设置合理的时间窗口,以适配 App Standby 的限制。

4.3应用群组(App Buckets)对 Job 服务的影响

Android 引入了 应用群组(App Buckets) 机制,将应用分为不同的优先级组,以进一步优化资源分配和功耗管理。

4.3.1 应用群组的分类

Active:用户正在使用的应用。

Working Set:用户经常使用的应用。

Frequent:用户偶尔使用的应用。

Rare:用户很少使用的应用。

4.3.2 应用群组对 Job 服务的影响

任务执行优先级:高优先级群组(如 Active 和 Working Set)的应用,其 Job 服务更容易被系统调度执行。

任务执行延迟:低优先级群组(如 Frequent 和 Rare)的应用,其 Job 服务的执行可能会被延迟或限制。

4.3.3 开发者适配建议

对于需要实时执行的任务,开发者应尽量将应用保持在较高优先级群组中(如通过用户交互或高优先级通知)。

对于非紧急任务,建议设置合理的时间窗口,以适配应用群组的限制。

相关文章:

JobScheduler省电机制

1.前言 JobScheduler(任务调度器)是 Android 提供的一种任务调度机制,可以替代传统的 WakeLock 和 Alarm 来执行后台任务。那么,它们之间的区别是什么?JobScheduler 又有哪些特别之处呢? 1.1 WakeLock 和 …...

设计模式学习笔记——命令模式

2025年3月13日,周四下午 相同的保存逻辑在各个组件中重复出现。 且需要修改保存逻辑时,各个组件的保存逻辑都需要进行相应修改。 使用了命令模式把保存逻辑从三个组件中独立出来后,减少了代码冗余。 可以通过“保存命令”来使用保存逻辑&am…...

[TPCTF 2025] crypto 复现两题

周末很忙。比赛都没怎么看。晚上把密码复现两个。 randomized random 这题在小鸡块博客里见过,稍有区别。 # FROM python:3 import random with open("flag.txt","rb") as f:flagf.read() for i in range(2**64):print(random.getrandbits(3…...

电子元器件选型与实战应用—16 怎么选一个合适的MCU芯片?

文章目录 1. 选型要素1.1 价格1.2 技术支持1.3 厂家优势1.4 功耗1.5 特殊功能1.6 统计外设1.7 确定外设占用的内存和flash大小1.8 确定外设通信接口1.9 确定外设通信接口的电平1.10 确定外设的GPIO数量1.11 确定外设的供电和功耗1.12 确定外设GPIO的种类1.13 确定ADC的数量1.14…...

第6关:牛牛鱼缸-附加题

任务描述 本关任务:问题描述:牛牛有一个鱼缸,鱼缸里面已经有n条鱼,每条鱼的大小为fishSizei,牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸里存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼…...

go中间件学习

本博文源于笔者正在学习go中间件,罗列了较为常用的中间件,例如日志记录、认证授权、跨域资源共享、请求体解析、静态文件处理、错误处理、性能分析、速率限制、session 1、日志记录中间件 可以追加打印用,例如,将请求进行打印 …...

若依RuoYi-Cloud-Plus微服务版(完整版)前后端部署

一.目标 在浏览器上成功登录进入 二.源码下载 后端源码:前往Gitee下载页面(https://gitee.com/dromara/RuoYi-Cloud-Plus)下载解压到工作目录。 前端源码: 前往Gitee下载页面(https://gitee.com/JavaLionLi/plus-ui)下载解压到工作目录。 文档地址&a…...

航空电动力系统适航标准要点手册

航空电动力系统适航标准要点手册 1.标准制定背景与必要性1.1 为什么需要制定和遵循标准?1.2 标准制定依据与发布机构 2.关键核心标准概述2.1 电动航空与电推进系统2.2 混合动力系统2.3 硬件与通用要求 3.标准详细解读与应用场景3.1 DO-160G:环境适应性测…...

深入理解JavaScript构造函数与原型链:从原理到最佳实践

一、开篇:为什么需要理解原型链? 在JavaScript开发中,90%以上的"诡异"bug都与原型链机制相关。理解构造函数与原型链的运行原理,不仅能帮助我们写出更优雅的代码,还能在框架源码阅读、性能优化等场景中游刃…...

java每日精进 3.12 【WebSocket进阶】

基于 SpringWebSocket 进行二次封装,实现了更加简单的使用方式。例如说,WebSocket 的认证、Session 的管理、WebSocket 集群的消息广播等等。 1. 用户认证与登录用户信息传递 1.1 Token 过滤器 (TokenAuthenticationFilter) ① 在 WebSocket 连接建立…...

国家网络安全事件应急预案

目 录 1 总则 1.1 编制目的 1.2 编制依据 1.3 适用范围 1.4 事件分级 1.5 工作原则 2 组织机构与职责 2.1 领导机构与职责 2.2 办事机构与职责 2.3 各部门职责 2.4 各省(区、市)职责 3 监测与预警 3.1 预警分级 3.2 预警监测 3.3 预警研判…...

Markdown:Mermaid 画图

目录 安装基本语法流程图时序图甘特图总结 Mermaid 是一款用于生成流程图、时序图、甘特图等图表的 JavaScript 库。它可以将简单的文本描述转化为美观的图表,方便开发者进行可视化展示。 安装 Mermaid 可以直接在浏览器中使用,也可以在 Node.js 环境中…...

【视频】ffmpeg、Nginx搭建RTMP、HLS服务器

1、源码安装Nginx 1)源码下载 因为要使用Nginx的模块nginx-rtmp-module,所以要下载 nginx 和 nginx-rtmp-module 的源码。 下载地址: http://nginx.org/en/download.html https://github.com/arut/nginx-rtmp-module/tags2)解压、配置 在同一个目录中解压 nginx 和 nginx…...

时间有限,如何精确设计测试用例?5种关键方法

精确设计测试用例能够迅速识别并修复主要缺陷,确保产品质量,降低后期维护成本,并通过专注于核心功能来提升用户体验,为项目的成功奠定坚实基础。若未能精确设计测试用例,可能会导致关键功能测试不充分,使得…...

【算法】图论

⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 持续更新中...1、DFS2、BFSN 叉树的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度 3、多源BFS腐烂的苹果 4、拓扑排序 持续更新中…...

ADQ32 5G采集卡

ADQ32是一款高端12位双通道数据采集板,针对高通量科学应用进行了优化。ADQ32具有以下特性: 一个和两个模拟输入通道包括每通道5和2.5 GSPS7GB/s的持续数据传输速率至GPU7GB/秒的持续数据传输速率两个外部触发器通用输入/输出(GPIO)开放式FPG…...

机器人领域专业名词汇总

1. 电机与驱动 电机类型 DC Motor(直流电机):通过直流电源驱动的电机。Stepper Motor(步进电机):通过脉冲信号控制旋转角度的电机。Servo Motor(伺服电机):带有反馈控制的…...

拆解 “ES 已死“ 伪命题:Agentic RAG 时代搜索引擎的终极形态

作者:来自 Elastic 李捷 xxx:“ES已死,#%#……” 我:??? 最近,某厂商发了一堆公关文章,翻来覆去地炒作 “ES 已死”,“放弃 ES”。这哪是什么正经的技术文章&…...

eNSP中路由器的CON/AUX接口、GE Combo接口、Mini USB接口、USB接口、WAN侧uplink接口、FE接口、GE接口介绍

路由器常见接口的详细介绍及其应用示例: 1. CON/AUX 接口 全称:Console/Auxiliary(控制台/辅助接口)作用: CON(Console):通过命令行界面(CLI)直接配置路由器…...

平面的四种方程及一些应用

平面的四种方程及一些应用 点法式方程一般式方程三点式方程截距式方程一些应用已知平面方程,找出平面上不共线的三个点 点法式方程 平面经过点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0​,y0​,z0​)且法向量为 ( a , b , c ) (a,b,c) (a,b,c),则平面的点…...

记录一个SQL自动执行的html页面

在实际工作场景中,需要运用到大量SQL语句更新业务逻辑,对程序员本身,写好的sql语句执行没有多大问题(图1),但是对于普通用户来说还是有操作难度的。因此我们需要构建一个HTML页面(图2&#xff0…...

SpringBoot——Maven篇

Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的工具。它具有许多特性,其中一些重要的特性包括: 1. 自动配置:Spring Boot 提供了自动配置的机制,可以根据应用程序的依赖和环境自动配置应用程序的各种组件&#xff…...

数据批处理(队列方式)

数据批处理&#xff08;队列方式&#xff09; public class DataProcessor {private static final int THREAD_COUNT 4;private static final int QUEUE_SIZE 10;private LinkedBlockingQueue<Data> queue new LinkedBlockingQueue<>(QUEUE_SIZE);public DataP…...

从零开始搭建搜索推荐系统(五十四)多路召回之万剑归宗

聊的不止技术。跟着小帅写代码&#xff0c;还原和技术大牛一对一真实对话&#xff0c;剖析真实项目筑成的一砖一瓦&#xff0c;了解最新最及时的资讯信息&#xff0c;还可以学到日常撩妹小技巧哦&#xff0c;让我们开始探索主人公小帅的职场生涯吧&#xff01; &#xff08;PS…...

c++介绍函数指针 十

指针代表内存中地址标识符&#xff0c;变量&#xff0c;数组都是存储内存中的数据。所以可以获得它们的地址&#xff0c;用指针来表示这块内存。 如图输出内存中的地址。 对于一个函数来说&#xff0c;也是内存中存储这段数据&#xff0c;所以我们也可以获取函数的地址。 函数…...

redis数据库

一、redis数据库介绍 NoSQL Not Only SQL 非关系型数据库 1、关系型数据库与非关系型数据库的区别 非关系型数据库性能高、速度快、支持高并发连接 1、非关系型数据库基于内存存储数据 2、摒弃了关系型数据的约束限制 3、采用o1算法进行设计开发 2、作用 关系型数…...

关于 NoC 中数据安全传输的设计与实现的详细介绍

片上网络&#xff08;Network-on-Chip&#xff0c;NoC&#xff09;作为一种新兴的片上通信架构&#xff0c;解决了传统总线架构在大规模集成电路设计中面临的诸多问题。然而&#xff0c;随着芯片系统的复杂性和应用场景的多样化&#xff0c;NoC 中数据安全传输变得至关重要。以…...

OpenGL(4)着色器

文章目录 一、着色器1、什么是着色器&#xff1f;2、着色器类型2.1、顶点着色器&#xff08;Vertex Shader&#xff09;2.2、片段着色器&#xff08;Fragment Shader&#xff09; 3、着色器属性3.1、layout 属性3.2、in 属性3.3、out 属性3.4、总结 4、示例 前言&#xff1a; 在…...

PHP批量去除Bom头的方法

检查的代码&#xff1a; <?php$dir __DIR__; $files new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));foreach ($files as $file) {if ($file->isFile() && pathinfo($file, PATHINFO_EXTENSION) php) {$content file_get_contents(…...

51单片机的keil c51软件安装教程

Keil&#xff08;C51&#xff09;介绍、下载、安装与注册_keil c51-CSDN博客 参考 安装 不一定是这个大小&#xff0c;也可以下载别的版本KEID C51 注册 加入芯片型号 …...

JavaScript基本知识

文章目录 一、JavaScript基础1.变量&#xff08;重点&#xff09;1-1 定义变量及赋值1-2 变量的命名规则和命名规范判断数据类型&#xff1a; 2.数据类型转换2-1 其他数据类型转成数值2-2 其他数据类型转成字符串2-3 其他数据类型转成布尔 3.函数3-1函数定义阶段3-2函数调用阶段…...

导数,积分及常用公式

导数定义&#xff1a; ​ 求导是数学计算中的一个计算方法&#xff0c;它的定义就是&#xff0c;当自变量的增量趋于零时&#xff0c;因变量的增量与自变量的增量之商的极限。在一个函数存在导数时&#xff0c;称这个函数可导或者可微分。可导的函数一定连续。不连续的函数一定…...

鸿蒙应用开发—ZDbUtil高效使用数据库

文章目录 介绍下载安装基本使用注解TableIdColumnOneToOne 使用方法定义实体类初始化数据库并根据被Table注解的类创建表创建表查数据插入数据删除数据清空数据 参考 介绍 ZDbUtil是一款基于SQLite的鸿蒙数据库框架&#xff0c;通过注解标注实体类与属性&#xff0c;让数据更能…...

强化学习(赵世钰版)-学习笔记(7.时序差分学习)

本章是课程算法与方法中的第四章&#xff0c;介绍的时序差分学习算法是基于随机近似方法设计的强化学习方法&#xff0c;也是model-free的方法。 时序差分算法是一种近似估计策略状态值的算法&#xff0c;具体的形式如下&#xff1a; 本质上是在当前t时刻&#xff0c;被访问到的…...

正则表达式入门及常用的正则表达式

正则表达式&#xff08;Regular Expression&#xff0c;简称 Regex&#xff09;是一种强大的文本处理工具&#xff0c;用于匹配、查找和替换字符串中的特定模式。以下是入门指南和常用正则表达式示例&#xff1a; 一、正则表达式入门 1. 基本语法 符号说明示例.匹配任意单个字…...

大白话如何在 Vue 项目中进行路由懒加载?

大白话如何在 Vue 项目中进行路由懒加载&#xff1f; 在 Vue 项目里&#xff0c;路由懒加载是种很实用的技术&#xff0c;它能让你在需要的时候再去加载对应的路由组件&#xff0c;而不是在项目启动时就把所有组件都加载进来&#xff0c;这样能加快项目的启动速度。下面就详细…...

手动实现一个RTTI系统

在 C 中&#xff0c;RTTI&#xff08;Runtime Type Information&#xff0c;运行时类型信息&#xff09;是一组允许程序在运行时获取对象类型信息的机制 。虽然C通过虚接口的方式提供了良好的抽象&#xff0c;但是对于一个复杂的系统&#xff0c;过于依赖抽象而忽略业务的复杂性…...

智能化水利监管:无人机视频在违章行为识别中的应用

随着我国经济社会的快速发展&#xff0c;水利工程建设规模不断扩大&#xff0c;但随之而来的违章建设行为也日益增多。传统的人工巡查方式效率低下&#xff0c;难以满足当前监管需求。无人机技术以其灵活性和高效性&#xff0c;为水利工程建设监管提供了新的解决方案。本文将探…...

力扣练习之确定两个字符串是否接近

目录 题目&#xff1a; 题解&#xff1a; 详细题解 题目&#xff1a; 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。 例如&#xff0c;abcde -> aecdb 操作 2&#xff1…...

Word 小黑第21套

对应大猫22 设置表格为页面的80%&#xff1a;表布局 -属性 -表格 指定宽度80% 度量单位改成百分比 段落组 -中文版式 在表格上下方留一行空段&#xff08;如果表格太大改一下样式&#xff09;插入横线 边框线 &#xff08;右击横线 -图片 修改样式&#xff09; 段落 -取消对于…...

mingw32编译ffmpeg

ffmpeg https://gitee.com/mirrors/ffmpeg.git 使用msys2的mingw32 pacman -S mingw-w64-x86_64-toolchain compile ./confiure --enable-static --disable-shared --enable-gpl --target-oswin32 mingw32-make -j4 提示编译错误&#xff0c;msys2里面的路径是/d/tools/msys2…...

设计模式C++

针对一些经典的常见的场景, 给定了一些对应的解决方案&#xff0c;这个就叫设计模式。 设计模式的作用&#xff1a;使代码的可重用性高&#xff0c;可读性强&#xff0c;灵活性好&#xff0c;可维护性强。 设计原则&#xff1a; 单一职责原则&#xff1a;一个类只做一方面的…...

使用 Excel 实现绩效看板的自动化

引言 在日常工作中&#xff0c;团队的绩效监控和管理是确保项目顺利进行的重要环节。然而&#xff0c;面临着以下问题&#xff1a; ​数据分散&#xff1a;系统中的数据难以汇总&#xff0c;缺乏一个宏观的团队执行情况视图。​看板缺失&#xff1a;系统本身可能无法提供合适…...

ngx_openssl_conf_t

ngx_openssl_conf_t 定义在 src\event\ngx_event_openssl.c typedef struct {ngx_uint_t engine; /* unsigned engine:1; */ } ngx_openssl_conf_t; 1. 这个结构体的目的是存储与 OpenSSL 引擎相关的配置信息。 2. engine 字段用于标识是否启用 OpenSSL 的硬件加速引擎…...

深度学习环境配置指令大全

文章目录 环境配置官网/博客合集清华镜像站anaconda官网pytorch官网pytorch历史库官网pytorch与cuda对应版本下载博客torch与torchvision与python对应关系python与pytorch对应关系 环境相关创建环境激活环境退出环境删除环境检查环境冲突 安装相关安装requirementsconda安装con…...

Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析

学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…...

<03.13>八股文补充知识

import java.lang.reflect.*; public class Main {public static void main(String[] args) throws Exception {// 获取 Class 对象//1. 通过类字面量Class<?> clazz Person.class;//2 通过对象实例化String str "Hello";Class<?> clazz_str str.ge…...

[HUBUCTF 2022 新生赛]messy_traffic

下载附件 看到文件类型直接用wireshark打开&#xff0c;对MySQL协议进行追踪流&#xff0c;并没有什么发现&#xff0c;后面对NO.437发现有用信息&#xff0c;http追踪流 发现**system(‘cat passwd.txt’);**这里是在打开查看passwd.txt&#xff0c;密码是"SignUpForHUBU…...

条款1:理解模版性别推导

目录 问题引出 情况1&#xff1a;ParamType是个指针或引用&#xff0c;但不是个万能引用。 情况2&#xff1a;ParamType是个万能引用 情况3&#xff1a;ParamType既非指针也非引用 问题引出 函数模板大致形如&#xff1a; template<typename T> void f(ParamType p…...

kafka连问

1&#xff0c;kafka多消费者指部署多个服务消费节点吗 2&#xff0c;多个消费节点自动组成消费组吗 3&#xff0c;消费者组与多消费节点关系 4&#xff0c;一个分区&#xff0c;多个消费者&#xff0c;可以保证有序消费吗 5&#xff0c;kafka如何实现顺序消费&#xff0c;一…...