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

OpenHarmony子系统开发 - 调测工具(二)

OpenHarmony子系统开发 - 调测工具(二)


三、hiperf使用指导

hiperf是为开发人员提供性能采样分析的工具,基于内核perf机制进行的用户态能力的扩展,可以对指定的程序或者整个系统进行性能采样。

hiperf支持的命令有:list、stat、record、report等,可以通过hiperf -h进行查看。

下面对hiperf的常用命令进行详细说明:

list 命令

参数说明

列出设备上支持的所有perf事件名称,事件名称用于 stat 和 record命令的 -e 和 -g 参数。

Usage: hiperf list [event type]
参数功能说明
hw列出支持的 hardware 事件(PMU支持)
sw列出支持的 software 事件
tp列出支持 tracepotint 事件
cache列出支持的 cache 事件(PMU支持)
raw列出支持的原始PMU事件

使用示例

下面列出了设备支持的hardware事件,并且会提示哪些事件此设备不支持。

hiperf list hw
event not support hw-stalled-cycles-backend
event not support hw-stalled-cycles-frontend
event not support hw-ref-cpu-cyclesSupported events for hardware:hw-cpu-cycleshw-instructionshw-cache-referenceshw-cache-misseshw-branch-instructionshw-branch-misseshw-bus-cycles

stat 命令

参数说明

监听指定目标程序,周期性打印性能计数器的值。

Usage: hiperf stat [options]Collect performance counter information.
参数功能说明
-a采集监听整个系统的所有线程和默认的性能计数器的值。
-c指定cpu id,可以是0,1,2用逗号分隔。
-d <sec>指定监听的时间,单位为秒。
-i <ms>指定监听事件的间隔打印时间,单位毫秒。
-e指定监听的事件,可以通过list命令查看支持的所有事件,其中event:u 或者 :k 表示限制事件为用户空间或者内核空间。
-g指定需要在同一组监听的事件,同一组事件会被放入同一个PMU监听。
--no-inherit不监听目标线程/进程启动的子线程。
-p指定需要监听的进程pid。
-t指定需要监听的线程tid。
--verbose显示详细的报告内容,包括一些原始的时间数据等等。

使用示例

下面是通过 stat 监听整个系统3秒的示例:

hiperf stat -d 3 -a
this is root mode, perfEventParanoid assume as -1
Start Profiling...
Timeout exit (total 3009 ms)count                           name | comment                          | coverage132523         hw-branch-instructions | 15.750 M/sec                     | (100%)62554               hw-branch-misses | 47.202372% miss rate             | (100%)6994768                  hw-cpu-cycles | 0.832068 GHz                     | (100%)1237627                hw-instructions | 5.651758 cycles per instruction  | (100%)248            sw-context-switches | 29.959 K/sec                     | (100%)0                 sw-page-faults | 0.000 /sec                       | (100%)9402580                  sw-task-clock | 0.002758 cpus used               | (100%)

字段说明

字段名含义
count表示事件发生的次数。
name事件的名称,在 list 命令中可以看到所有支持的命令,hw 和 sw 的前缀分别代表是hardware事件还是software事件。
comment一些经过计算的方便用户阅读的值。例如 CPU 的相对主频,千位进制换算等等。
coverage该事件在PMU中的 enable 百分比,受限于PMU数量,每次装载的PMU监听事件是有限的。

record 命令

参数说明

采样指定目标程序,并且将采样数据保存到指定的文件中(默认为perf.data)

Usage: hiperf record [options]Collect performance sampling information.
参数功能说明
-a对整个系统的所有进程和线程进行采样。
--exclude-hiperf不采样hiperf自身进程。
-c指定采样的cpu id。
--cpu-limit <percent>限定采样过程占用的CPU最大百分比。
-d <sec>指定采样时长,单位秒。
-f <freq>设置采样事件的触发频率,默认为4000。
说明:该频率越高cpu负载会越高,但是数据采样会越多。
--period <num>设置采样事件触发周期,以次数为单位,即发生指定的次数后采样一次。
-e指定监听的事件,可以通过list命令查看支持的所有事件,其中event:u 或者 :k 可以表示限制事件为用户空间或者内核空间。
-g指定需要在同一组监听的事件,同一组事件会被放入同一个PMU监听。
--no-inherit不监听目标线程或者进程启动的子线程。
-p指定需要监听的进程。
-t指定需要监听的线程。
--offcpu监听CPU调度事件,它等价于 --period 1 -e sched:sched_switch 事件。
-j <branch_filter1>[,branch_filter2]...监听分支预测事件。分支预测就是指令存在多个if else判定的情况下,CPU去预测下一步即将执行哪一条指令。
-s / --call-stack <fp | dwarf[,size]>设置用户栈的回栈方式,支持fp和dwarf两种方式。dwarf 后面可以指定采样的用户堆栈大小,默认是 65528。
--delay-unwind延迟回栈,等到采样结束再进行回栈。
--disable-unwind不进行回栈,用户的寄存器和堆栈数据会保存在perf.data中,供离线回栈使用。
--disable-callstack-expend默认会对回栈的调用栈信息进行合并扩展,此选项会关闭该功能。
--clockid <clock type>设置采样数据的时钟源,支持monotonic、boottime、realtime等。
--symbol-dir <dir>指定符号表路径,如果指定了回栈时会优先使用该路径下的符号表。
-m <mmap pages>指定缓存的大小,默认值为1024,以页为单位。参数需要为2的幂,范围为 [2 - 1024]。
说明:该值越高,事件丢失率会越低,但是内存占用会增大。
--app <package name>指定采样的目标应用的包名,默认超时等待时间为10秒。
--data-limit <SIZE[K|M|G]>指定采样结果的最大容量,支持K/M/G(B)为单位,默认无大小限制。
-o <output file name>指定采样数据结果文件名,默认为/data/local/tmp/perf.data。
-z启动压缩模式,在保存到文件的时候,会用gzip进行压缩。
--verbose采样的时候显示更详细的日志信息。

使用示例

  • 对全系统所有进程采样3秒,并且显示详细的日志信息

    hiperf record -d 3 -a --verbose
    
  • 指定使用fp方式进行回栈

    hiperf record -s fp -d 3 -a
    
  • 指定使用dwarf方式进行回栈

    hiperf record -s dwarf -d 3 -a
    
  • 指定采样offcpu事件

    hiperf record --offcpu -s dwarf -d 3 -a
    
  • 指定延迟回栈

    hiperf record -d 3 -s dwarf --delay-unwind -a
    
  • 禁止回栈,此时会保存堆栈数据到perf.data文件

    hiperf record -d 3 -s dwarf --disable-unwind -a
    
  • 指定追踪的包名,如果指定的包名对应的进程不存在则会延时等待10秒,超时后进程退出

    hiperf record -d 3 -s dwarf --app com.ohos.launch
    
  • 指定对采样结果数据进行压缩保存

    hiperf record -z -s dwarf -d 3  -a
    

report 命令

参数说明

此命令主要用于展示record中抓取的采样数据

Usage: hiperf report [option]     Report sampling information from perf.data.
参数功能说明
--symbol-dir <dir>指定符号表路径。
--limit-percent <number>指定展示结果的最低百分比(低于的不显示)。
-s / --call-stack指定该选项后结果数据中会包含详细的调用栈信息。
--call-stack-limit-percent <number>调用栈的百分比最小值(低于的不显示)。
--proto将输入的 perf.data 文件转换为 proto 格式,默认文件名为 perf.proto。
--json将输入的 perf.data 文件转换为 json 格式,默认文件名为 perf.json。
--branch按分支预测的结果地址来展示报告,而不是调用栈的IP地址。
--<keys> <keyname1>[,keyname2][,...]按给出的关键字来过滤展示报告,keys支持:comms、pids、tids等 例如 --comms hiperf,hilog 表示仅显示进程/线程名称为 hiperf或者hilog的记录条目。
--sort <key1>[,key2][,...]按照给出的关键字来排序和显示,支持:pid、tid、comm等,可以指定多个关键字。
-i <filename>指定输入的采样数据(默认为perf.data)。
-o <filename>指定输出的报告文件名。

使用示例

  • 输出采样数据的报告,默认读取perf.data文件

    hiperf report
    

    输出结果举例:

    Heating count    comm            pid  tid  dso                                func5.68%  15073949 hiperf_example_ 1085 1091 /system/lib/ld-musl-arm.so.1       malloc2.57%   6834119 hiperf_example_ 1085 1091 [kernel.kallsyms]                  vector_swi2.27%   6013910 hiperf_example_ 1085 1087 /system/lib/ld-musl-arm.so.1       malloc2.19%   5805738 hiperf_example_ 1085 1091 /system/lib/ld-musl-arm.so.1       vfprintf2.09%   5543362 hiperf_example_ 1085 1091 [kernel.kallsyms]                  ktime_get_ts64
    report done
    
  • 输出采集数据的调用栈报告

    hiperf report -s
    
  • 指定符号表路径

    hiperf report -s --symbol-dir /data/local/tmp
    
  • 指定结果过滤的关键字,指定后会只显示包含该关键字的信息。比如过滤libutils.z.so则命令如下:

    hiperf report --dsos libuitls.z.so
    
  • 指定按照特定的关键字进行排序展示,比如按照dso进行排序:

    hiperf report --sort dso
    

四、HiDumper概述

功能简介

HiDumper是OpenHarmony为开发、测试人员、IDE工具提供的系统信息获取工具,帮助开发者分析、定位问题。本章节内容适用于标准系统。

源码目录说明

/base/hiviewdfx/hidumper
├── frameworks           # 框架代码
│   ├── native           # 导出功能核心代码
│   │  │── include       # 头文件目录
│   │  │── src           # 源文件目录
│   │      │── common    # 通用功能代码
│   │      │── executor  # 导出过程执行器代码
│   │      │── factory   # 跟进导出项生成导出执行器
│   │      │── manager   # 导出管理核心代码
│   │      │── util      # 工具类源代码
│── sa_profile           # Hidumper sa属性文件
│── services             # Hidumper服务源码
│   │── native           # 服务C++源码
│   │── zidl             # 通讯功能源码目录
│   │   │── include      # 通讯功能头文件
│   │   │── src          # 通讯功能源代码
├── test                 # 测试用例目录
│   ├── unittest         # 单元测试代码
│   ├── moduletest       # 模块级别测试代码

HiDumper使用指导

命令参数说明

表1 HiDumper命令参数说明

选项描述
-h查看帮助信息。
-t [timeout]超时时间,单位:秒。默认值是30s。如果设置为0表示无超时限定。
-lc查看系统信息簇列表。
-ls查看系统元能力列表。
-c导出系统簇信息。
-c [base system]以base或system标签区分的系统簇信息导出。
-s导出全部系统元能力信息。
-s [SA0 SA1]导出SA0、SA1等元能力id对应的元能力信息。
-s [SA] -a ['-h']以-h为参数导出SA指定的系统元能力信息。
-e导出Faultlog模块生成的崩溃日志。
--net [pid]导出网络信息。如果指定了进程的pid,则只获取该进程的网络流量使用信息。
--storage [pid]导出存储信息。如果指定了进程的pid,则只获取该进程的io信息。
-p导出进程列表及全部进程信息。
-p [pid]导出指定进程号的进程全部信息。
--cpuusage [pid]导出CPU使用信息。如果指定pid则导出该进程的CPU使用信息。
--cpufreq导出实际的CPU频率。
--mem [pid]导出内存使用信息。如果指定pid则导出该进程的内存使用信息。
--zip将导出信息压缩到固定文件夹下。

使用实例

HiDumper可以为开发者导出系统当前基本信息,通过这些基本信息可以定位分析问题。给子服务和元能力传递复杂参数时,参数需要加双引号。

具体步骤如下:

  1. 进入设备命令行,输入 hidumper -h 获取基本信息介绍,功能语法介绍。

    hidumper -h
    
  2. 输入 hidumper -lc 获取系统信息分类列表。

    hidumper -lc
    
  3. 输入 hidumper -c 获取系统base、system等所有分类信息。

    hidumper -c
    
  4. 输入 hidumper -c [base | system] 按 base 或 system 分类获取系统簇信息。

    hidumper -c base
    hidumper -c system
    
  5. 输入 hidumper -ls 命令获取系统中元能力列表。

    hidumper -ls
    
  6. 输入 hidumper -s 命令获取系统全部元能力信息。

    hidumper -s
    
  7. 运行 hidumper -s 3301 -a "-h" 命令获取id为3301的元能力的帮助。

    hidumper -s 3301 -a "-h"
    
  8. 运行 hidumper -s 3008命令获取id为3008的元能力的全部信息。

    hidumper -s 3008
    
  9. 运行 hidumper -e 命令获取Faultlog模块生成的崩溃历史信息。

    hidumper -e
    
  10. 运行 hidumper --net [pid] 命令获取网络信息;如果指定了进程的pid,则只获取该进程的网络流量使用信息。

    hidumper --net
    hidumper --net 1024
    
  11. 运行 hidumper --storage [pid] 命令获取存储相关信息;如果指定了进程的pid,则只获取该进程的io信息。

    hidumper --storage
    hidumper --storage 1024
    
  12. 运行 hidumper -p 命令获取进程信息,包括进程、线程的列表和信息。

    hidumper -p
    
  13. 运行 hidumper -p 1024 命令获取pid为1024的进程信息。

    hidumper -p 1024
    
  14. 运行 hidumper --cpuusage [pid] 命令获取CPU的使用信息。如果指定了进程的pid,则只获取该进程的CPU使用信息。

    hidumper --cpuusage
    hidumper --cpuusage 1024
    
  15. 运行 hidumper --cpufreq 命令获取每一个CPU核实际运行的频率。

    hidumper --cpufreq
    
  16. 运行 hidumper --mem [pid] 命令获取全部的内存使用信息。如果指定进程的pid,只获取该进程的内存使用情况。

    hidumper --mem [pid]
    

    当携带pid参数时输出结果中第一列标题的详细说明如下:

    名称描述
    GLGPU内存
    Graph图形内存
    ark ts heapArkTS堆的内存占用
    guard保护段所占内存
    native heap堆内存
    AnonPage other其它没有被映射到文件的页所占内存
    stack栈内存
    .hap应用程序所占内存
    .db进程加载的.db数据文件所占内存
    .so进程加载的.so动态库所占内存
    .ttf进程加载的.ttf字体文件所占内存
    dev进程加载的以/dev开头的文件所占内存
    FilePage other其它有被映射到文件的页所占内存
  17. 运行 hidumper --zip 命令压缩信息数据到/data/dumper目录下。

    hidumper --zip
    
  18. 运行 hidumper -t timeout 命令设置超时时间,单位:秒。默认值是30s。如果设置为0表示无超时限制。

    hidumper -t [timeout]
    
  19. 运行 hidumper --mem-smaps pid [-v] 命令获取指定进程内存信息的详细使用情况。

    hidumper --mem-smaps pid [-v]
    

相关文章:

OpenHarmony子系统开发 - 调测工具(二)

OpenHarmony子系统开发 - 调测工具&#xff08;二&#xff09; 三、hiperf使用指导 hiperf是为开发人员提供性能采样分析的工具&#xff0c;基于内核perf机制进行的用户态能力的扩展&#xff0c;可以对指定的程序或者整个系统进行性能采样。 hiperf支持的命令有&#xff1a;l…...

keil ERROR: L6220E 如何解决

最近调试MK8000方案&#xff0c;增加code后遇到&#xff1a; keil ERROR: L6220E: Execution region RW_RAM1 size (24592 bytes) execeeds limit (24568 bytes) .region contains 93 bytes of padding and 0 bytes of veneers (total 93 bytes of linker generated content) …...

c++比较器——priority_queue用 ; unordered_map 自定义哈希函数

文章目录 priority_queue自定义比较方法对 比较对象结构体 重载 <仿函数为什么是传一个类std::less<T> 和 std::greater<T> lambda unordered_map自定义哈希函数仿函数lambda priority_queue template<class T,class Container std::vector<T>,class…...

centos-LLM-生物信息-BioGPT安装

参考&#xff1a; GitHub - microsoft/BioGPT https://github.com/microsoft/BioGPT BioGPT&#xff1a;用于生物医学文本生成和挖掘的生成式预训练转换器 |生物信息学简报 |牛津学术 — BioGPT: generative pre-trained transformer for biomedical text generation and mini…...

esp32cam远程图传:AI Thinker ESP32-CAM -》 服务器公网 | 服务器 -》 电脑显示

用AI Thinker ESP32-CAM板子访问公网ip的5112端口并上传你的摄像头拍摄的图像视频数据&#xff0c;并写一段python程序打开弹窗接受图像实现超远程图像传输教程免费 1. 首先你要有一个公网ip也就是去买一台拥有公网的服务器电脑&#xff0c;我买的是腾讯云1年38元的服务器还可…...

今日踩坑之@Autowired与@Resource区别

案例说明 今天算是体验到了这俩注解的区别了&#xff0c;真所谓不报错就记不住这两注解区别&#xff0c;其实之前本人也是知道这俩注解的区别的只是我们往往项目上用习惯了Autowired就忘了&#xff0c;看来只有真正体会到报错才能记忆犹新o(╥﹏╥)o。 说明一下本人的踩坑情况&…...

在 M1 芯片的 Mac 电脑上安装 Redis 可以通过 ​​Homebrew​​ 快速完成

以下是详细步骤&#xff1a; 1. 安装 Homebrew&#xff08;若未安装&#xff09; 打开 ​​终端​​&#xff0c;执行以下命令安装 Homebrew&#xff08;已安装可跳过&#xff09;&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/…...

【从零开始学习JVM | 第一篇】快速认识JVM

什么是JVM&#xff1f; JVM--Java虚拟机&#xff0c;它是Java实现平台无关性的基石。 Java程序运行的时候&#xff0c;编译器将Java代码编译为平台无关的Java字节码文件&#xff08;.class&#xff09;&#xff0c;接下来对应平台的JVM对字节码进行运行解释&#xff0c;翻译成…...

linux 里的创建了一个tomcat用户 怎么禁止该用户使用crontab 功能

在 Linux 系统中&#xff0c;可以通过以下方法禁止 tomcat 用户使用 crontab 功能&#xff1a; 方法 1&#xff1a;通过 /etc/cron.deny 文件限制 这是 最推荐的标准方法&#xff0c;适用于所有主流 Linux 发行版&#xff08;CentOS、Ubuntu 等&#xff09;。 操作步骤&#…...

Elasticsearch入门指南(二)

一、RestClient操作索引库 什么是RestClient&#xff1f; ES官方提供了各种不同语言的客户端&#xff0c;用来操作ES。这些客户端的本质就是组装DSL语句&#xff0c;通过http请求发送给ES。官方文档地址&#xff1a; https://www.elastic.co/guide/en/elasticsearch/client/in…...

Mac监控新风尚:酷炫界面,性能监控更直观!

你是否曾经希望自己的Mac能够像Windows那样&#xff0c;轻松一按就能查看任务管理器来监控性能状态呢&#xff1f; 对于Mac用户来说&#xff0c;系统性能监控一直是个挑战——苹果公司并没有提供一个直观的性能监控工具&#xff0c;用户往往需要通过复杂的活动监视器来获取这些…...

碰一碰发视频源码开发深度解析,定制化开发

在移动应用开发领域&#xff0c;便捷的数据分享功能始终备受关注。碰一碰发视频这一创新功能&#xff0c;借助近场通信&#xff08;NFC&#xff09;技术&#xff0c;为用户提供了一种快速、直观的视频分享体验。本文将深入剖析碰一碰发视频功能的源码开发过程&#xff0c;涵盖从…...

基于 AI智能体、大模型、RAG、Agent 等技术构建公司内部闭环智能问答系统的详细方案,结合 Spring Boot + Vue 管理系统 的改造思路

以下是基于 AI智能体、大模型、RAG、Agent 等技术构建公司内部闭环智能问答系统的详细方案&#xff0c;结合 Spring Boot Vue 管理系统 的改造思路&#xff1a; 1. 系统架构设计 核心组件 数据源层 内部文档库&#xff1a;公司知识库&#xff08;如操作手册、FAQ、流程文档&a…...

红宝书第三十四讲:零基础学会单元测试框架:Jest、Mocha、QUnit

红宝书第三十四讲&#xff1a;零基础学会单元测试框架&#xff1a;Jest、Mocha、QUnit 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、单元测试是什么&#xff1f; 就像给代码做“体检”&#xff0c;帮你检查…...

视觉分析AI赋能智慧水务多场景应用

利用视觉分析的方式智慧水务的AI算法方案 一、背景 在传统水务监管中&#xff0c;面临着诸多痛点。例如&#xff0c;对于河道污染、水面异常、河湖四乱问题以及水生态环境差等情况&#xff0c;传统监管效率低下&#xff0c;预警不及时&#xff0c;资源分散&#xff0c;监控功…...

网络2 IP与MAC IP地址

IP地址与MAC地址 一 1.关系&#xff1a; 网卡有唯一的物理地址&#xff1a;MAC地址&#xff0c;IP是配置在网卡上的逻辑地址。 IP地址、MAC地址是进行网络通信必不可少的 2.MAC地址是物理地址&#xff0c;不可更改&#xff0c;通常与IP地址绑定 3.MAC地址&#xff1a;48位 IP地…...

spark-Core

运行架构 核心组件 由上图可以看出&#xff0c;对于 Spark 框架有两个核心组件&#xff1a; Driver&#xff0c;Spark 驱动器节点 其中Spark 驱动器节点&#xff0c;用于执行 Spark 任务中的 main 方法&#xff0c;负责实际代码的执行工作。 Driver 在 Spark 作业执行时主要…...

前端开发中的问题排查与定位:HTML、CSS、JavaScript(报错的解决方式)

目录 1.html 1. 结构错误调试&#xff1a;标签未正确嵌套 2. 语法问题调试&#xff1a;缺失引号 3. 断点调试&#xff1a;动态生成内容时的 JavaScript 错误 4. 网络调试&#xff1a;资源加载错误 5. 性能调试&#xff1a;页面加载性能 总结&#xff1a; 2.CSS 1. 定位…...

VMware Fusion Pro 13 for Mac虚拟机

VMware Fusion Pro 13 for Mac虚拟机 文章目录 VMware Fusion Pro 13 for Mac虚拟机一、介绍二、效果下载 一、介绍 VMware Fusion Pro for Mac&#xff0c;是一款mac虚拟机软件&#xff0c;跟Parallels Desktop一样&#xff0c;都可以让你的 Mac 同时运行一个或多个不同的操作…...

使用cline(VSCode插件)、continue(IDEA插件)、cherry-studio玩转MCP

安装环境 uv&#xff08;python&#xff09; 为什么不用pip&#xff1f; 使用 uv 时无需进行特定安装。使用 uvx 直接运行。 ⚡️ 比pip快10-100x https://github.com/pypa/pip https://ossinsight.io/analyze/pypa/pip?vsastral-sh%2Fuv#overview 安装 https://github…...

Kotlin FragmentTransaction多容器管理多个fragment

在Activity中管理五个Fragment的切换显示和隐藏&#xff0c;并且希望将这部分逻辑进行封装。之前已经教过他们如何在Kotlin中使用FragmentTransaction进行基本的添加、隐藏、显示和替换操作&#xff0c;现在需要进一步封装这些操作&#xff0c;提高代码的可维护性和复用性。 管…...

PyCharm显示主菜单和工具栏

显示主菜单 新版 PyCharm 是不显示主菜单的&#xff0c;要想显示主菜单和工具栏&#xff0c;则通过 “视图” → “外观” &#xff0c;勾选 “在单独的工具栏中显示主菜单” 和 “工具栏” 即可。 设置工具栏 此时工具栏里并没有什么工具&#xff0c;因此我们需要自定义工具…...

WebView2最低支持.NET frame4.5,win7系统

WebView2最低支持.NET frame什么版本 ‌WebView2 对 .NET Framework 的最低版本要求‌ ‌基础支持范围‌ WebView2 官方支持的 .NET Framework ‌最低版本为 4.5‌&#xff0c;同时兼容 ‌.NET Core 3.0‌ 及以上版本‌18。对于 WPF、WinForms 等桌面应用开发&#xff0c;需确…...

ClickOnce 部署

1、在远程服务器172.16.9.252共享文件文件夹Bluetooth. 2、设置版本自动更新. 3、设置部署 4、设置创建桌面菜单 二、远程发布IIS即可...

Kotlin 中 集合 Collection 的扩展方法完全指南

Kotlin 中 Collection 的扩展方法完全指南 “代码是最美的诗篇”——本文将带你进入 Kotlin 集合扩展函数的世界&#xff0c;帮助你写出既高效又优雅的代码 &#x1f680; 一、引言 &#x1f914; 在 Android 开发中&#xff0c;集合&#xff08;Collection&#xff09;的操作…...

STM32F407使用ESP8266连接阿里云并上传数据

文章目录 前言一、ESP01S介绍1.ESP01S2.MQTT固件烧录3.WIFI连接 二、阿里云平台介绍1.创建产品及添加设备2.连接云平台 三、数据上报四、命令下发五、完整工程 前言 在实现OTA功能我们必须学会如何连接云平台&#xff0c;本文会仔细介绍使用STM32F407和ESP8266连接阿里云平台&…...

TorchServe部署模型-index_to_name.json

在TorchServe部署模型时&#xff0c;若要将模型输出结果映射到指定标签&#xff08;如分类任务的类别名称&#xff09;&#xff0c;需通过index_to_name.json文件定义索引与标签的映射关系&#xff0c;并在打包模型时将其作为额外文件包含。以下是完整流程和命令示例&#xff1…...

每日一题——BMN3 小红炸砖块

“落下”操作只会对y轴有影响&#xff0c;所以注意y轴的变化即可 只要给出的坐标有砖块&#xff0c;就遍历查找他的上面是否有砖块&#xff0c;每一层都是这样&#xff0c;直到到没有砖块的那一层&#xff1b; 注意&#xff1a;定义矩阵时要注意&#xff0c;给出的坐标都是大…...

AWS服务器 磁盘空间升级到100G后,怎么使其生效?

在AWS&#xff08;Amazon Web Services&#xff09;上扩展EBS&#xff08;Elastic Block Store&#xff09;卷的大小后&#xff0c;服务器操作系统并不会自动识别新增的空间。要使操作系统识别并使用新增的磁盘空间&#xff0c;您需要进行一些额外的步骤。以下是详细的指导和说…...

AWS弹性容器服务(AWS Elastic Container Service,ECS)概述

李升伟 编译 标签&#xff1a;AWS | ECS | 容器 | Docker AWS弹性容器服务&#xff08;AWS Elastic Container Service&#xff0c;ECS&#xff09;简介 AWS弹性容器服务&#xff08;ECS&#xff09;是一项完全托管的容器编排服务&#xff0c;支持运行、管理和扩展容器化应用…...

【消息队列kafka_中间件】一、快速入门分布式消息队列

在当今大数据和分布式系统盛行的时代&#xff0c;消息队列作为一种关键的中间件技术&#xff0c;发挥着举足轻重的作用。其中&#xff0c;Apache Kafka 以其卓越的性能、高可扩展性和强大的功能&#xff0c;成为众多企业构建分布式应用的首选消息队列解决方案。本篇文章将带你深…...

【Axure元件分享】移动端滑动拨盘地区级联选择器

在移动端产品设计中&#xff0c;地区级联选择器&#xff08;省/市/区&#xff09;是用户信息录入场景的核心组件&#xff0c;尤其在电商收货地址、政务信息填报等高频业务中直接影响表单转化率。本文将介绍一款基于Axure的三级动态联动机型地区选择器&#xff0c;通过仿真级联滚…...

宁德时代25年校招演绎数字推理SHL测评题库题型及真题分析

非常感谢您对宁德时代的关注。祝贺您通过宁德时代校园招聘的专业面试环节&#xff0c;现邀请您参与完成以下测评。本轮共两份测评&#xff0c;每份测评对您的最终结果都非常重要&#xff0c;请务必在收到测评后48小时内完成!本测评需要进行远程监考&#xff0c;如果您无法或不愿…...

Python-Django+vue宠物服务管理系统功能说明

❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目…...

洛谷普及B3691 [语言月赛202212] 狠狠地切割(Easy Version)

题目&#xff1a;[语言月赛202212] 狠狠地切割(Easy Version) 题号&#xff1a;B3691 难度&#xff1a;普及一 末尾包含对二分法优化的详细解释 题目分析 最后一句应该是本题的考查关键&#xff0c;关于筛选算法的时间优化&#xff0c; 但从功能理论上&#xff0c;我找到了…...

FPGA_BD Block Design学习(一)

PS端开发流程详细步骤 1.第一步&#xff1a;打开Vivado软件&#xff0c;创建或打开一个工程。 2.第二步&#xff1a;在Block Design中添加arm核心&#xff0c;并将其配置为IP核。 3.第三步&#xff1a;配置arm核心的外设信息&#xff0c;如DDR接口、时钟频率、UART接口等。 …...

Collection vs Collections:核心区别与面试指南

Collection vs Collections&#xff1a;核心区别与面试指南 一、本质区别&#xff08;核心记忆点&#xff09; 维度CollectionCollections身份集合框架的根接口操作集合的工具类包位置java.utiljava.util是否可实例化❌ 接口✅ 类&#xff08;但构造器私有&#xff0c;不可实…...

sqlite3基本语句

创建表 CREATE TABLE student ( id INTEGER PRIMARY KEY, -- 学号&#xff0c;主键 name TEXT NOT NULL, -- 姓名&#xff0c;不能为空 age INTEGER, -- 年龄 gender TEXT -- 性别 ); SQLite常用数据类型 主键 …...

jupyter notebook 显示conda虚拟环境

使用 nb_conda_kernels 安装 nb_conda_kernels&#xff1a;这个包可以自动从你的 Conda 环境中发现并列出内核。 conda activate base # 确保你在 base 环境或任何其他环境中安装 conda install nb_conda_kernels显示jupyternotebook当前所在的位置。...

华为海思IC前端中后端(COTXPU)岗位笔试机考题

近期华为海思即将开始IC设计实现实习岗位机考。小编今天给大家分享下华为海思相关机考题目。 华为海思2025届校招笔试面试经验分享 每年IC秋招笔试其实也是从题库中随机抽出一些题。 华为海思2025届校招笔试面试经验分享华为海思机考主要分三个方向&#xff0c;分别是物理方向…...

HarmonyOS NEXT 实现滑动拼图验证码功能

大家好&#xff0c;我是 V 哥。 在 Gitee 上看到一个用 Java 实现的 HarmonyOS 滑动拼图验证码功能&#xff0c;已经太老了&#xff0c;鸿蒙开发推荐使用 ArkTS 语言&#xff0c;V 哥来改造一下。 以下是基于 ArkTS 的实现方案。由于鸿蒙系统的特性差异&#xff0c;这里提供核…...

【XML基础-1】深入理解XML:介绍、语法规则与实际应用

XML&#xff08;可扩展标记语言&#xff09;作为数据表示和交换的标准格式&#xff0c;自1998年问世以来已成为现代计算领域不可或缺的一部分。本文将全面介绍XML的基础概念、详细语法规则以及它在各领域中的实际应用。 1. 什么是XML&#xff1f; XML&#xff08;eXtensible …...

STM32 HAL库扩大USB CDC的输入缓冲区

STM32 HAL库,使用USB, 扩大输入暂存区的方法 使用STM32的USB通讯CubeMX建立配置Serial Wire时钟配置USB配置时钟频率设置代码编写运行效果总结使用STM32的USB通讯 STM32可以不用使用串口转换直接和USB通讯。这给串口调试提供了极大的方便。编程,我使用了STM32CubeIDE编程。这…...

迭代器模式深度解析与实战案例

一、模式定义 迭代器模式&#xff08;Iterator Pattern&#xff09; 是一种行为设计模式&#xff0c;提供一种方法顺序访问聚合对象的元素&#xff0c;无需暴露其底层表示。核心思想是将遍历逻辑从聚合对象中分离&#xff0c;实现 遍历与存储的解耦。 二、核心组件 组件作用…...

Kotlin协程实用模版合集

目录 ✅ Kotlin 协程实用模板合集&#xff08;适合 Android 项目&#xff09; &#x1f4e6; 1. 基础挂起函数封装&#xff08;Repository 层&#xff09; ⚙️ 2. ViewModel 中使用协程 状态处理 ⏱️ 3. 带超时控制的挂起操作 &#x1f91d; 4. 并发请求合并&#xff0…...

基于Flask的Windows事件ID查询系统开发实践

基于Flask的Windows事件ID查询系统开发实践 一、项目背景与功能概述 Windows操作系统的事件日志系统记录了数百种不同的事件ID&#xff0c;每个ID对应特定的系统事件。本文介绍如何构建一个基于Web的事件ID查询系统&#xff0c;主要实现以下功能&#xff1a; 数据可视化展示…...

机器人编程基础---C语言中的运算符

C语言中的运算符 算术运算符关系运算符逻辑运算符位运算符C语言提供了多种运算符来执行不同的操作。 算术运算符 + 加法- 减法* 乘法/ 除法% 取模(求余)++ 自增-- 自减int a = 10, b = 5; int sum = a + b;...

设计模式之迭代器模式:遍历的艺术与实现

引言 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种顺序访问聚合对象中各个元素的方法&#xff0c;而又不暴露其底层实现。迭代器模式将遍历逻辑与聚合对象解耦&#xff0c;使得我们可以用统一的方式处理不同的集合结构。…...

React七案例中

代码下载 地图找房模块 顶部导航栏 封装NavHeader组件实现城市选择&#xff0c;地图找房页面的复用&#xff0c;在 components 目录中创建组件 NavHeader&#xff0c;把之前城市列表写过的样式复制到 NavHeader.scss 下&#xff0c;在该组件中封装 antd-mobile 组件库中的 N…...

消息中间件篇——RabbitMQ,Kafka

RabbitMQ 如何保证消息不丢失&#xff1f; 生产者确认机制 消息持久化 消费者确认机制 RabbitMQ如何保证消息不丢失&#xff1f; RabbitMQ的重复消费问题如何解决&#xff1f; RabbitMQ中死信交换机&#xff08;RabbitMQ延迟队列有了解过吗&#xff1f;&#xff09; 延迟队列…...