学习influxDB的安装和使用
influxDB的使用场景
nfluxDB 是一种时序数据库,时序数据库通常被用在监控场景,用来收集各个节点采集到的监控指标,以及监控指标产生的时间点.比如我们收集的主机的监控数据,可以通过查询语句,统计查询过去30分钟内cpu的平均使用率是多少.
相比关系型数据库与时序数据库差距:
- 写入性能,关系数据库也有可以基于时间戳进行查询,但是数据库通常采用B+树的数据结构,在数据写入时候可能会触发叶裂变,从而产生对磁盘的随机读写,降低了读写速度,而且关系型数据库对于通过时间范围进行检索的性能支持并不是有很高的性能.一般情况下我们是不建议直接从关系型数据库中通过时间索引进行范围时间段的查询,会消耗较多的资源,而时序数据库是通过采用LSM Tree的变种,用顺序写来增强数据写入的能力.
- 数据冷热区别: 相比较时序常用语监控数据存储收集场景,这个场景有明显的特点,就是对于冷热数据的差别,我们对于监控时间段的查询和检索需求是有一个明确的范围,比如今天或者近7天,而在往前较为久远的数据基本上是不会进行检索使用.所以这部分热数据则是应当加载在内存中方便快速查询,而其他冷数据则应当压缩存储释放空间.
- 数据只写不改特点: 通过监控系统的特点就可以判断出,通过时序数据库收集到的数据,基本都是写入场景,一般不会涉及到更新的场景.
influxDB的安装和简单使用
linux上安装influxDB: 通过二进制包下载安装
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.4.0-linux-amd64.tar.gz
其他版本下载可以查看:https://www.influxdata.com/downloads/
执行命令下载,然后进行解压:
tar -zxvf influxdb2-2.4.0-linux-amd64.tar.gz
解压之后又三个文件:influxDB通过go语言开发的项目一般来说会打包成单独的二机制可执行文件,可以直接跑在系统上.
[root@win-local-17 influxdb2_linux_amd64]# ll
总用量 146664
-rwxr-xr-x. 1 1000 1000 150164784 8月 19 2022 influxd
-rw-rw-r--. 1 1000 1000 1067 8月 19 2022 LICENSE
-rw-rw-r--. 1 1000 1000 9830 8月 19 2022 README.md# influxd 通过这个二进制文件进行启动
进入安装目录后,执行命令:
./influxd
也可以通过yum安装(centos7):
配置yum源:
cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
sudo yum install -y --nogpgcheck influxdb
sudo systemctl start influxdb
cli操作
注: 使用上面通过yum安装的数据库,不支持直接使用web端,仅用cli来进行操作.需要web需要另外配置
-- ## 进入命令行(通过yum安装的会自带influx这个客户端工具,如果二进制安装没有这个工具需要另外安装)
[root@win-local-17 ~]# influx
Connected to http://localhost:8086 version v1.11.8
InfluxDB shell version: v1.11.8
>
整体的操作语法类似于sql命令,通过这里的sql命令查询之后,就很好理解influxdb中数据存储方式与关系型数据库的对比
-- ## 查询当前也有数据库
> show databases;
name: databases
name
----
_internal(系统自带,_internal数据库是用来存储InfluxDB内部的实时监控数据的)## 新建一个库
>CREATE DATABASE mydb
-- 在输入上面的语句之后,并没有看到任何信息,这在CLI里,表示语句被执行并且没有错误,如果有错误信息展示,那一定是哪里出问题了,这就是所谓的没有消息就是好消息
> show databases;
name: databases
name
----
_internal
mydb
-- 进入数据库,以下的操作则都是在mydb这个数据库上
> use mydb
Using database mydb
写入数据:
这里简单介绍下influxdb存储的时间序列数据的格式,后面会详细介绍
在时序数据库中存储数据一般包含以下部分:
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
# measurement(必填字段): 指标名称(类似表名),逻辑上分组相关数据
# tag-key=tag-value 标签键值对(索引字段),用于高效过滤和分组
# field-key=field-value (必填):字段键值对(实际存储的数值/字符串/布尔值),支持多种数据类型
# timestamp :时间戳(Unix纳秒精度),未指定则自动填充为系统时间
在概念上,你可以将measurement类比sql中table,起主键索引是时间戳,InfluxDB里,你可以有几百万的measurements,你不用事先定义数据的scheme,并且null值不会被存储
其中Measurement,Tag Keys,Timestamp都具有索引,方便进行高效和范围查询.
一些数据写入InfluxDB的格式示例:
cpu,host=192.168.44.17,region=bj value=0.64
mem,host=192.168.44.17,region=bj value=0.40
所以我们想上面创建的库中写入测试数据:
> INSERT cpu,host=192.168.44.17,region=bj value=0.64
> INSERT mem,host=192.168.44.17,region=bj value=0.40
-- 进行查询数据,因为我们插入了两个不同Measurement字段的信息,所以查询的时候也需要指定Measurement
> SELECT * FROM "cpu"
name: cpu
time host region value
---- ---- ------ -----
1745898086522868887 192.168.44.17 bj 0.64
> SELECT * FROM "mem"
name: mem
time host region value
---- ---- ------ -----
1745898091087905773 192.168.44.17 bj 0.4
通过cli的命令行查询到库中的数据的时候,时序数据库的各个字段与关系型库表的类比关系也是非常直观了.
当然cli命令还有一些其他的用法:
> SELECT * FROM /.*/ LIMIT 1
--
> SELECT * FROM "cpu_load_short"
--
> SELECT * FROM "cpu_load_short" WHERE "value" > 0.9
其他的cli命令可以参考: https://jasper-zhang1.gitbooks.io/influxdb/content/Query_language/data_exploration.html
web端配置
初始化配置
-
创建用户和初始化存储桶
配置完成用户之后,进入首页页面,就可以使用用户进行交互.
创建简单指标收集 -
创建一个来收集电脑性能指标数据,进入到创建的bucket中
-
进行数据添加,这里选择influxDB提供的Telegraf 代理工具进行数据收集,想当于agent
-
然后进行Telegraf的安装,点击页面上提供的下载地址:https://portal.influxdata.com/downloads/
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.34.2_linux_amd64.tar.gz
tar -xzvf telegraf-1.34.2_linux_amd64.tar.gz
-
解压安装
-
安装目录和文件
然后执行上面配置Telegraf代理的命令(修改为您的命令提示):
export INFLUX_TOKEN=VjELw7YBuDBizmMcLOJK7yuOndwmoTtUdRIGSClAm2-3TXO11LFCGdBRXe8Zbhi3G0T_RkQQ3smYmkRmNX2k_Q==
./usr/bin/telegraf --config http://192.168.44.17:8086/api/v2/telegrafs/0ec988678cbc2000
执行之后,发现没有明显报错之后,可以在web页面在添加一个看板,检查数据是否采集到.
然后就可以在这个面板中选择对应指标信息,展示在上面的图中
从这里进去也会提供一个默认的看板展示,也可以在这里手动创建看板
至此就完成了一个简单的Telegraf代理数据收集和写入influxDB中.
Python调用api写入数据到influxDB简单示例
这里我链接的influxDB为V2.4.0版本的,在pycharm中安装客户端执行命令:
pip install influxdb-client
完整脚本如下:
# -*- coding: utf-8 -*-
from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
from influxdb_client.client.exceptions import InfluxDBError
from typing import List, Dict, Optional
import timeclass InfluxDBConnector:"""InfluxDB 2.0 操作封装类"""def __init__(self, url: str, token: str, org: str, bucket: str):"""初始化InfluxDB客户端:param url: InfluxDB地址 (e.g. "http://localhost:8086"):param token: API Token:param org: 组织名称:param bucket: 存储桶名称"""self.url = urlself.token = tokenself.org = orgself.bucket = bucketself.client = InfluxDBClient(url=url, token=token, org=org)self.write_api = self.client.write_api(write_options=SYNCHRONOUS)self.query_api = self.client.query_api()def write_point(self,measurement: str,fields: Dict[str, float],tags: Optional[Dict[str, str]] = None,timestamp: Optional[int] = None) -> bool:"""写入单条数据点:param measurement: 指标名称 (e.g. "cpu_usage"):param fields: 字段键值对 (e.g. {"value": 75.5}):param tags: 标签键值对 (e.g. {"host": "server1"}):param timestamp: 可选时间戳(纳秒级Unix时间戳):return: 是否成功"""try:point = Point(measurement)# 添加标签if tags:for key, value in tags.items():point.tag(key, str(value))# 添加字段for key, value in fields.items():point.field(key, value)# 设置时间戳if timestamp:point.time(timestamp)self.write_api.write(bucket=self.bucket, record=point)print('写入成功')return Trueexcept InfluxDBError as e:print(f"写入失败: {e}")return Falsedef query_data(self, flux_query: str) -> Optional[List[Dict]]:"""执行Flux查询:param flux_query: Flux查询语句:return: 查询结果列表(字典格式)或None"""try:result = self.query_api.query(flux_query)formatted_result = []for table in result:for row in table.records:formatted_result.append({"time": row.get_time(),"measurement": row.get_measurement(),"fields": row.values})return formatted_resultexcept InfluxDBError as e:print(f"查询失败: {e}")return Nonedef close(self):"""关闭连接"""self.client.close()def __enter__(self):"""支持with上下文管理"""return selfdef __exit__(self, exc_type, exc_val, exc_tb):"""退出上下文时自动关闭连接"""self.close()# ------------------- 使用示例 -------------------
if __name__ == "__main__":# 配置参数(替换为实际值)config = {"url": "http://192.168.44.17:8086/","token": "*****", ## 可以在web端,api管理里面看到"org": "test","bucket": "test_influxdb"}# 示例1:使用with自动管理连接with InfluxDBConnector(**config) as db: # 可以在这里调用业务函数db.write_point(measurement="cpu_usage",fields={"value": 42.3, "load": 1.2},tags={"host": "server1", "region": "east"})# # 查询最近1小时数据# results = db.query_data(# f'from(bucket:"{config["bucket"]}") '# '|> range(start: -1h) '# '|> filter(fn: (r) => r._measurement == "cpu_usage")'# )# print("查询结果:", results)#
参考文档:
https://www.cnblogs.com/yance-dev/p/10500209.html
https://jasper-zhang1.gitbooks.io/influxdb/content/Query_language/data_exploration.html
相关文章:
学习influxDB的安装和使用
influxDB的使用场景 nfluxDB 是一种时序数据库,时序数据库通常被用在监控场景,用来收集各个节点采集到的监控指标,以及监控指标产生的时间点.比如我们收集的主机的监控数据,可以通过查询语句,统计查询过去30分钟内cpu的平均使用率是多少. 相比关系型数据库与时序数…...
LeetCode209_长度最小的子数组
LeetCode209_长度最小的子数组 标签:#数组 #二分查找 #前缀和 #滑动窗口Ⅰ. 题目Ⅱ. 示例0. 个人方法:滑动窗口 标签:#数组 #二分查找 #前缀和 #滑动窗口 Ⅰ. 题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足…...
uniapp 实现时分秒 分别倒计时
效果 <view class"issue-price-countdown"> <CountDown :endTimestamp"1745996085000"></CountDown> </view> 引入组件 import CountDown from /components/CountDown.vue; <template> <view class&qu…...
ubuntu下一些环境配置
1、qhull sudo apt install qhull-bin libqhull-dev 2、cmake wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null echo "deb [signed…...
el-check-box多选框和el-select下拉框组合
<template><div><el-selectv-model"selectedValues"multiplecollapse-tagsplaceholder"请选择电压等级"change"handleChange"><el-option key"all" value"all" class"select-all-option">…...
SPSS PCA+判别分析
1, 主成分分析PCA 我们只要对数化的变量数据: (1)对数据进行标准化处理: 选择【分析】—【描述统计】—【描述】 添加要标准化的变量,勾选【将标准化值另存为变量(Z)】,再点确定 SPSS软件本身不…...
【阿里云大模型高级工程师ACP习题集】2.7 通过微调增强模型能力 (下篇)(⭐️⭐️⭐️ 重点章节!!!)
习题集: 【单选题】在阿里云大模型微调中,以下关于预训练和微调的说法,错误的是?( ) A. 预训练使用自监督/无监督学习方式 B. 微调通常在大规模通用数据集上进行 C. 预训练模型可以为下游任务提供初始模型 D. 微调能让模型适应具体的下游任务 【多选题】LoRA微调中,低秩…...
ag-grid-react 列表导出csv列表getDataAsCsv (自定义导出列表配置)自定义新增,修改导出内容
1.ag-grid-react getDataAsCsv 新增导出字段 方法:临时添加列再导出 你可以通过 columnApi.setColumnDefs() 临时添加需要导出的字段,然后再调用 getDataAsCsv,导出后再恢复原来的列。 import { useRef } from react; import { AgGridReac…...
深度解析:Vue.js 性能优化全景指南(从原理到实践)
前言 随着 Vue.js 应用复杂度提升,性能问题逐渐成为制约用户体验的瓶颈。本文将系统性地剖析 Vue.js 性能优化的 核心原理、关键技巧、工具链支持,并通过真实案例演示如何提升大型应用的运行时性能与加载效率。 一、渲染层优化:减少不必要的…...
Linux -- 操作系统
一、冯•诺依曼体系结构 1、概念 # 在计算机发展历程中,核心作用就是解决人类问题。为了实现这一目标,计算机系统需具备特定结构和功能。 首先,计算机要配备输入设备,如鼠标、键盘、摄像头、话筒、磁盘(文件读取&…...
(初探)强化学习路径规划的理论基础与代码实现
一、强化学习路径规划的核心理论 1.1 马尔可夫决策过程(MDP)框架 理论基础: 路径规划问题可以建模为马尔可夫决策过程(Markov Decision Process, MDP),由五元组(S, A, P, R, γ)定义。其中,S&…...
分布式链路ID实现
实现原理 api入口或者网关处生成traceId,调用服务时优先检查是否头部带有traceId,有则复用,没有则生成 实现方式 处理api相关traceId 1.通过filter复用或者生成traceId,并且将traceId输入到响应头中 import java.io.IOExcept…...
Java @Transactional事物隔离级别和默认值详解
在 Java 开发中,Transactional 注解是 Spring 框架中用于管理事务的重要工具。它提供了多种配置选项,其中事务隔离级别是一个关键属性。本文将深入探讨 Transactional 注解的隔离级别默认值,并通过具体代码示例帮助你更好地理解和应用事务隔离…...
ComputeShader绘制全屏纯色纹理
参考 Getting Started With Compute Shaders In Unity 环境 Win10 Unity20194.40 全屏纯色纹理示例 使用ComputerShader逐个像素设置颜色 ComputeShader脚本 设置纹理颜色 #pragma kernel CSMainRWTexture2D<float4> Result;//纹理 half4 solidColor;//颜色[numth…...
关于 MCP 的理论知识学习
文章目录 1. 写在最前面2. 基本概念2.1 Why MCP2.1.1 大模型访问的局限2.1.2 过渡阶段—Function Call2.1.3 当前阶段— MCP 3. 碎碎念4. 参考资料 1. 写在最前面 最近有一项任务是写旧版本迁移到新版本的支持文档,文档的编写是借助于 cursor 帮忙写的。但是实现的…...
关于vue+iview中tabs嵌套及实际应用
最近在用vueiview框架做项目,在实际做项目中根据需求用到iview中的tabs标签页嵌套以及标签页增加删除功能。想着记录下来,以后可能会再用到。下面是页面。由于是公司的项目具体有些地方我会打码,不影响阅读! 1607751577(1).jpg ta…...
26考研——输入/输出系统_I/O 方式_DMA 方式(7)
408答疑 文章目录 三、I/O 方式DMA 方式DMA 方式的特点DMA 控制器的组成DMA 的传送方式停止 CPU 访存周期挪用DMA 与 CPU 交替访存 示例分析DMA 的传送过程 DMA 方式和中断方式的区别 四、参考资料鲍鱼科技课件26王道考研书 三、I/O 方式 DMA 方式 DMA 方式是一种完全由硬件进…...
处理vue3热加载后axios的请求重复访问的问题
在请求拦截上加上判断,热加载时清空拦截器 if (import.meta.hot) { const interceptorsRe axios.interceptors.response.handlers; const interceptorsRq axios.interceptors.request.handlers; interceptorsRe .length 0; // 清空已有响应拦截器 interceptorsR…...
【教学类-102-21】蝴蝶三色图作品3——异型书蝴蝶“满格变形图”一页2图、一页4图
前期设计 将蝴蝶撑满整个单元格,满格变形图。确保蝴蝶图案最大化 【教学类-102-20】蝴蝶三色图作品2——卡纸蝴蝶“满格变形图”(滴颜料按压对称花纹、原图切边后变形放大到A4横版最大化)-CSDN博客文章浏览阅读572次,点赞7次,收藏3次。【教学类-102-20】蝴蝶三色图作品2…...
【昇腾】Benchmark
1. MindIE 服务化 1.1 环境准备 镜像传送门 参数说明: device用于挂载卡,下面的例子是挂载了8张卡 倒数第二行的镜像名称记得修改 docker run -itd --privileged --namemindie --nethost \--shm-size 500g \--device/dev/davinci0 \--device/dev/da…...
【阿里云大模型高级工程师ACP学习笔记】2.7 通过微调增强模型能力 (下篇)(⭐️⭐️⭐️ 重点章节!!!)
学习目标 特别说明:由于这一章节是2025年3月官方重点更新的部分,新增内容非常多,因此我不得不整理成上、下两篇,方便大家参考。 备考阿里云大模型高级工程师ACP认证时,深入钻研《2.7通过微调增强模型能力(下篇)》,期望达成以下目标: 掌握高效微调技术:深入理解预训练与…...
【RustDesk 】中继1:压力测试 Python 版 RustDesk 中继服务器
测试 Python 版 RustDesk 中继服务器 测试我们实现的中继服务器有几种方法,从简单到复杂依次如下: 1. 基本连接测试客户端 创建一个简单的测试客户端来验证中继服务器的基本功能: 2. 用两个测试客户端测试中继功能 要测试完整的中继功能,你需要运行两个客户端实例来模拟…...
MCP 自定义python实现server服务,支持离线调用和远程接口访问形式
参考: https://blog.csdn.net/lingding_cn/article/details/147355620 其他百炼、mcp服务网址支持链接访问 server服务代码: 出行酒店查询 mcp server代码编写参考:https://blog.csdn.net/weixin_42357472/article/details/146503660 api_mcp_server.py import pickle im…...
搭建PCDN大节点,服务器该怎么配
搭建P2P大节点时,服务器要怎么配呢?需要综合考虑硬件性能、网络带宽、存储能力、系统架构以及安全性等多个方面,以确保节点能够高效、稳定地运行。 一、硬件配置 CPU:选择高性能的多核处理器,以满足高并发处理需求。核…...
JavaScript的3D库有哪些?
JavaScript的3D库有哪些? 在3D开发领域,JavaScript提供了多种库和框架,使开发者能够在浏览器中创建丰富的3D体验。以下是一些流行的3D方面的JavaScript库: Three.js:这是最著名的用于创建3D图形的JavaScript库之一。它…...
如何解决matlab/octave画图legend图例颜色一样的问题?
预期目的: 本意想用legend在画图的时候把对应线段的颜色对应起来,实际按照如下代码运行得不到预期的结果。 x [1:10;11:20]y1 x.^2;y2 0.5.*x.^3plot(x,y1,r,x,y2,b);legend(y x^2,y x^3) 代码运行结果如下: 原因 是matlab /octave默…...
[第十五章][15.3.2 shellcode注入攻击]ret2shellcode+[NewStarCTF 公开赛赛道]ret2shellcode
1、[NewStarCTF 公开赛赛道]ret2shellcode IDA 反编译看伪代码: buf mmap((void *)0x233000, 0x1000uLL, 7, 34, -1, 0LL); 这里直接给了 buf 7 的权限,即可读可写可执行,那么 shellcode 肯定写到 buf 里 buf 的映射地址:0x23…...
边缘计算:数字世界的”末梢神经系统”解析-优雅草卓伊凡
边缘计算:数字世界的”末梢神经系统”解析-优雅草卓伊凡 一、边缘计算深度解析 1.1 边缘计算的定义与架构 边缘计算(Edge Computing)是一种分布式计算范式,它将数据处理能力从传统的集中式云数据中心推向网络边缘,更…...
基于CATIA参数化球体建模的自动化插件开发实践——NX建模之球体命令的参考与移植
引言 在CATIA二次开发领域,Python因其灵活性和丰富的库支持逐渐成为高效工具开发的首选语言。本文将以笔者开发的CATIA球体自动化建模工具为例,参考NX软件中高效球体创建命令,深度解析基于PySide6 GUI框架与pycatia接口库的集成…...
ActiveMQ 可靠性保障:消息确认与重发机制(一)
引言 在当今分布式系统的架构中,消息中间件扮演着举足轻重的角色,而 ActiveMQ 作为一款广泛使用的开源消息中间件,凭借其对 JMS(Java Message Service)规范的支持、多种消息传输协议、丰富的消息模型(如点对…...
麒麟、UOS系统在线打开word文件并提取修订痕迹
麒麟、UOS系统在线打开word文件并提取修订痕迹 查看本示例演示效果(Windows版) 查看本示例演示效果(国产版)本示例关键代码的编写位置,请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码 注意 本文中…...
Vue3笔记摘录
1.Vue3整体知识概览图 2.ref与reactive具体使用区别 2-1 基本类型处理 const count1 ref(0) 使用ref自动转化为数字类型const count2 reactive(0) 参数必须是对象类型 2-2 具体使用过程 // ref 处理对象(自动解包) const user ref({name: John,a…...
大力探索“AI·Life爱生活”项目峰会暨战略投资签约仪式成功举办
2025年4月26日,杭州西溪雷迪森大酒店内气氛热烈非凡,大力探索(杭州)科技有限公司主办的“大力探索项目峰会暨战略投资签约仪式”在此隆重开启。这场汇聚了数百位行业精英与企业代表的盛会,不仅是一场智慧的碰撞&#x…...
复刻低成本机械臂 SO-ARM100 材料齐活篇
视频讲解: 复刻低成本机械臂 SO-ARM100 材料齐活篇 打印件基本ok,总共12个,尴尬的是github又更新了so-101,不过看了下还好只是优化了走线和几个结构键,影响不大,大不了后面再重新打印(有3d打印机…...
解读 AI绘画工作流ComfyUI Stable Diffusion
ComfyUI 是什么?图像工作流又是什么? 认识ComfyUI 从名词术语来看: ComfyUI是一个基于节点流程的Stable Diffusion操作界面,通过自定义节点、拖拽连线实现精准的工作流定制,以完成更复杂的图像生成工作。 </...
北极星 新美团核销接口对接
美团吃相难看,东哥就应该干掉他 申请官方接口一般来说很难了 现在无非就是几种第三方开放出来的接口 按量收费,但是需要一次性充钱收首期的技术服务费 ,然后按年收费就是我们技术自己解决的方式,方便便宜 ,代码齐全,…...
理解数据库存储以及查询(集合)
理解数据库存储以及查询(集合) 基本概念定义 主键集合: 定义:主键集合是由数据库表中的主键组成的一个集合。主键是表中唯一标识每一行记录的属性(或属性组合)。 特性:主键集合包含表的主键属性…...
(Go Gin)Gin学习笔记(四)Gin的数据渲染和中间件的使用:数据渲染、返回JSON、浅.JSON()源码、中间件、Next()方法
1. 数据渲染 1.1 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf 1.1.1 返回JSON package mainimport ("github.com/gin-gonic/gin""net/http" )func main() {r : gin.Default()r.POST("/demo", func(res *gi…...
机器视觉橡胶制品检测的应用
橡胶制品在生产过程中易出现划痕、气泡、缺料、毛边、杂质嵌入等多种缺陷,这些缺陷往往微小且随机分布,人工检测不仅耗时,漏检率也居高不下。尤其在汽车密封件、医疗硅胶制品等高端领域,微米级的缺陷都可能导致产品失效࿰…...
JavaScript:从JS的执行机制到location对象
一、JS执行机制 (1)JS是单线程 JavaScript语言的一大特点就是单线程,也就是同一时间只能做一件事。因为JavaScript是为了处理页面中的用户交互,以及制作DOM二诞生的。比如我们对某个DOM元素进行添加和删除操作,这个不…...
Sigmoid函数简介及其Python实现
文章目录 一、Sigmoid 函数简介1. 数学公式2. 关键特性3. 应用场景 二、Python 实现1. 使用 math 库 (适用于单个数值)2. 使用 numpy 库 (适用于数值、列表、数组、矩阵)3. 使用 scipy.special.expit (数值稳定) 三、小结 一、Sigmoid 函数简介 Sigmoid 函数(也称为…...
全局事件总线EventBus的用法
全局事件总线 EventBus 在前端开发中是一种用于实现组件间通信的机制,适用于兄弟组件或跨层级组件间的数据传递。 1. 创建全局 EventBus 实例 在前端项目中,先创建一个全局的 EventBus 实例。在 Vue 中,可以通过创建一个新的 Vue 实例来实现…...
嵌入式Linux系统中的线程信号处理:策略与实践
在嵌入式Linux系统的开发中,多线程编程是提升系统性能和响应速度的重要手段。然而,多线程环境下的信号处理却是一个复杂且需要细致处理的问题。信号,作为进程间通信的一种机制,在嵌入式系统中常用于处理外部事件或中断。但在多线程…...
CCM/TCM在STM32中的含义和用途
CCM/TCM在STM32中的含义和用途 CCM(Core Coupled Memory)和TCM(Tightly Coupled Memory)是ARM架构中的特殊内存类型,它们都表示与CPU核心紧密耦合的内存区域。这些内存具有一些特殊特性,使其在某些应用场景…...
【网络原理】 《TCP/IP 协议深度剖析:从网络基础到协议核心》
文章目录 一、网络基础1. 认识IP地址概念作用格式组成子网掩码 2、认识Mac地址一跳一跳的网络数据传输 3. 网络设备及相关技术集线器:转发所有端口交换机:MAC地址转换表转发对应端口主机:网络分层从上到下封装主机&路由器:ARP…...
Windows系统编译支持GPU的llama.cpp
Windows系统编译支持GPU的llama.cpp git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp mkdir build cd buildcmake .. -G "Visual Studio 17 2022" -DGGML_CUDAON -DCMAKE_BUILD_TYPERelease -DCMAKE_CUDA_ARCHITECTURES"86"cmake --b…...
Unity编辑器扩展之导出项目中所有预制体中文本组件文字内容
一、最后导出的Excel文件效果如下图所示: 二、在Unity的Editor目录下,新建一个名为FindChineseInPrefabs的C#脚本,Copy以下代码到你新建的名为FindChineseInPrefabs的C#脚本中去,最后一定要保存文件哈。 using UnityEditor; using UnityEngine; using UnityEngine.UI; usi…...
高效管理远程服务器Termius for Mac 保姆级教程
以下是 Termius for Mac 保姆级教程,涵盖安装配置、核心功能、实战案例及常见问题解决方案,助你高效管理远程服务器(如Vultr、AWS等)。 一、Termius 基础介绍 1. Termius 是什么? 跨平台SSH客户端:支持Ma…...
WPF框架中常用算法
WPF框架中常用算法与实现 一、排序算法 1. 快速排序 (Quick Sort) 应用场景:大数据集合排序、性能敏感场景 public static void QuickSort(IList<int> list, int left, int right) {if (left < right){int pivotIndex Partition(list, left, r…...
【Java函数式编程-58】Java函数式编程深度解析
函数式编程(Functional Programming)作为一种编程范式,近年来在Java生态中获得了越来越多的关注和应用。自Java 8引入Lambda表达式和Stream API以来,函数式编程风格在Java开发中逐渐普及。本文将深入探讨Java中函数式编程的核心概念、实践技巧以及在实际…...