【最后203篇系列】022 用Deepseek14b提取新闻事件
这算是之前一直想做的一件事,趁周末赶快做了。
业务意义:现实中有大量的舆情,这对我们的决策会有比较重要的作用
技术依赖:
- 1 模型基础能力
- 2 消息队列
- 3 异步获取消息
- 4 时间序列库
1 模型基础能力
大模型发展到现在,已经有了很大的变化。过去,在本地执行的大模型能力是完全不够的,deepseek14b出来之后我测了一下,就基础能力还是已经ok,但是推理过程我不知道是不是模型执行本身的代价,但其实我是不需要的。
本地模型能力够了之后,那么就很有意思。一方面,它可以比较节约成本。对于一些研究性质的任务应该是够的,比如我这次就打算用4060TI(16G)和Mac MiniM4(16G)来运行模型。另一方面,由于数据不出去,所以对数据隐私保护就比较好,这就可以尝试更多重要的任务。
另外就是模型的尺寸问题了,我粗略的感觉了一下
尺寸 | 能力 | 输入上限 |
---|---|---|
1.5b | 也许可以做一些特别特别简单的任务 | 2k |
8b | 可以做简单任务 | 上8k |
14b | 可以做中等复杂的任务 | 8k |
32b | 可以做较复杂任务 | |
100b + | 可以直接商业化 |
目前我觉得14b可能是性价比最高的模型尺寸。
小模型有一个明显的问题,就是可能无法严格按照指令执行任务。以生成json为例,可能会出现更高的失败率。当然尺寸模型也会碰到同样的问题。所以,对于大模型应用来说,应该用一些封装方式转为可靠节点。
小模型,很像以前集成学习中的弱分类器,它的使用并不会那么直接。需要有一套体系来进行校验和评估,有意义的是,这套校验和评估方法同样适合更大尺寸的模型,尤其是面对现在层出不同的大模型时。
标准化封装,然后使用体系进行归纳校验
2 消息队列
消息队列非常重要,缓冲和回放是最核心的功能,kafka这方面做的真挺不错。
像类似新闻的摘要数据到来后进入队列,一方面是缓冲,另一方面也是进行按时间的自然截断。如果觉得有必要,是可以让这些数据进入持久队列的,我给自己准备的存储空间非常多,可能未来还会更多(火力不足恐惧症)
由于处理不是唯一的,所以需要有多个出队列,这时候就要用回放了。例如,我先在有 input_topic1,然后我需要进行下一步etl,可能我先想到了方法1 :只提取新闻的标题和正文,满足了现在的需求,于是写入 tier2_topic_etl1。可能过一阵我又想到方法2:再提取评论连接。这时候就会写入tier2_topic_etl2。最后也许会放弃方法1,又或者放弃方法2,但这个就比较简单了。
类似的,或者不可避免的,我会采用多个不同的模型去处理相同的数据,这时候就又可以继续往后分叉了。可以非常方便的服务于多种探索,只要换一个消费组id就行了。这些不同的分支,可以在不同层级的部分进行合并,这方面mongo又非常合适。所以生成唯一主键是必要的。
当然,最后如果结论是采纳的,一定会在时间序列库中表现为事件。到了这个层级,才是(基本)可决策的。
3 异步获取消息
对于大量的数据获取和流转,一定要采用异步/协程的方式。
从去年开始,我才深深体会到这个问题。以前很多时候是批量传入,批量处理,并没有感觉。在大量实时性的任务中,一定会有数量庞大,但是数据又很小的任务,且会受到网络波动。没有异步和有异步效率可能差百倍。
在大模型时代,很多请求是独立到来的,比如用户的一个问题。我粗略估算过,大模型时代单条数据处理的成本可能是以前一百万倍。所以,必须要能够服务好单条的请求。
目前我的大部分服务已经转向了异步和微批次,在worker端重新搭建了fastapi+aps+celery,主要是发现其他的一些成熟异步框架也是这样的,所以还不如自己搭一下。搭好有一阵子了,之前还没想好怎么去进行统一化调度,所以也没有立即启用。我想接着这个周末,需要将这个推入试产状态。
4 时间序列库
技术和工具只是一个表象和约束,关键是背后的逻辑。我觉得line protocal挺好的,不仅约定了一条简洁的时间数据从技术上怎么定义的,同时也反过来促使业务人员思考:
- 1 什么时候要建立一个bucket (db level)
- 2 可能会有哪些measurement (collection level)
- 3 对于某条数据来说,哪些是tags,哪些是field
这种结构会对数据的最终处理带来影响,不是唯一的,但是是非常有用的。最近在看clickhouse的书,里面也是做了一些取舍(不支持update,delete, 不太支持单条精确查询等),然后利用一些新的有利特性(CPU的SIMD),从而达到令人惊叹的性能(极高效取数、极高效统计和极少磁盘占用)。
终于可以言归正传:现在的 point是我能每分钟拿到一些公开新闻摘要,我需要从中间提取事件,然后找出一类特定事件(比如打击证券行业犯罪等)。所以这里有两部分:①提取数据 ②判定事件
因为获取到的数据结构性非常好,所以我会先用简单的正则将数据提取出来,校验后就可以送到下一步。
然后在下一步对事件进行判断,然后给到类别的判定和置信度,这里用到deepseek-r1-14b。
数据的规律是以时间开头的固定元组。我简单写了一个清洗逻辑:
import re
def is_valid_time(text= None):pattern = r'^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$'return bool(re.match(pattern, text))import redef is_has_brackets(text = None):pattern = r'【[^】]*】'return bool(re.search(pattern, text))
some_msg.split('\n')
s = pd.Series(some_msg.split('\n'))
s_list = list(s)
# 1 标记
time_tag = s.apply(is_valid_time)
import numpy as np
time_tag_arr = time_tag.valuestime_tag_pos = np.argwhere(time_tag_arr ==True).ravel()
time_tag_pos1 = np.append(time_tag_pos, time_tag_pos[-1] + 6)
# time_tag_pos_s = pd.Series(time_tag_pos)
# time_tag_pos_s1 = time_tag_pos_s.diff(1)time_tag_pos_start = time_tag_pos1[:-1]
time_tag_pos_end = time_tag_pos1[1:]# 将起始点和结束点组合成一个二维数组
time_tag_pos2 = np.column_stack((time_tag_pos_start, time_tag_pos_end))candidate_tuple_list = []
for tem_tuple in time_tag_pos2:tem_list = s_list[tem_tuple[0]:tem_tuple[1]]if is_has_brackets(tem_list[1]):tem_dict = {}tem_dict['event_time'] = tem_list[0]tem_dict['title'] = tem_list[1].replace('*','')for j in range(2,len(tem_list)):tem_v = tem_list[j]if tem_v.startswith('阅'):tem_dict['read'] = tem_v elif tem_v.startswith('[评论'):tem_dict['comments'] = tem_v elif tem_v.startswith('分享'):tem_dict['share'] = tem_velse:pass candidate_tuple_list.append(tem_dict)
理解原文结构和写代码大约花了我1.5个小时,主要是在怎么通过下标快速从列表中取出子列表这个问题上纠结了很久。如果只是为了实现逻辑的话,不会超过0.5个小时。
然后随之而来是一个问题:我相信在这个case中,数据的格式一般不会有大变化 。但是未来肯定是会变的,所以这种固定解析逻辑比较不那么靠谱,得要加一个校验。怎么样才能有更好的效率和效果呢?
如果我能抽象出其中一定有的元素,或者我需要的元素,这个可以比较抽象;然后让大模型去完成这个解析显然会更具有通用性。
这种方案后续再试,很多工具都在变,而且我这种非结构化爬取的内容应该不会很多。原则上,应该还是原始数据- 初筛 - 精筛。初筛是一定需要的,先把相关的提出来,或者把不相关的过滤掉。
好了,这一步就算etl,我先做掉。
做之前,需要先订立一些元数据,我会同步写往rocks和mongo。平时主要用rocks,除非数据挂了才用mongo。
数据清洗完了之后就可以入库了,第一次可以将全量的数据写入。这次我没有写原始数据,之后可能需要备份一批,否则kafka只有7天 ,嗯,似乎也够了,新闻太老意义不大。
接下来是deepseek时间:对数据进行事件的判定
简单封装一下:
调用函数
import time
from openai import OpenAI
def call_local_deepseek(api_key ='ollama',base_url="http://172.17.0.1:11434/v1",model="deepseek-r1:14b",system_prompt = '', user_prompt = ''):tick1 = time.time()client = OpenAI(base_url=base_url, # 替换为远端服务器的 IP 或域名api_key=api_key, # 必填项,但会被忽略)response = client.chat.completions.create(model=model, # 替换为你下载的模型名称messages=[{"role": "system", "content": system_prompt},{"role": "user", "content": user_prompt}],temperature=0 # 设置 temperature 参数,这里设置为 0.7,你可以根据需要调整)print('call_local_deepseek takes %.2f' %(time.time() - tick1))# 输出结果return response.choices[0].message.content
# 测试
call_local_deepseek(user_prompt ='你是谁')
结果的解析函数
import re
import json
def extract_json_from_response(response):"""从大模型的回复中提取 JSON 部分。:param response: 大模型的回复内容:return: 解析后的 JSON 数据(字典形式),若未找到则返回空字典"""# 定义正则表达式模式,用于匹配 JSON 内容json_pattern = r'```json\s*([\s\S]*?)\s*```'# 查找匹配的 JSON 内容match = re.search(json_pattern, response)if match:# 提取 JSON 字符串json_str = match.group(1)try:# 解析 JSON 字符串为 Python 字典json_data = json.loads(json_str)return json_dataexcept json.JSONDecodeError:print("JSON 解析失败,请检查模型回复的 JSON 格式是否正确。")return None
# 以下是一个 Python 函数,用于提取大模型回复中指定标签内的内容。如果未找到指定标签,函数将返回空字符串。import re
def extract_tag_content(response, tag):"""从大模型的回复中提取指定标签内的内容。:param response: 大模型的回复内容:param tag: 要提取的标签,例如 'think':return: 标签内的内容,如果未找到则返回空字符串"""# 构建正则表达式模式,用于匹配指定标签内的内容pattern = fr'<{tag}>([\s\S]*?)</{tag}>'# 查找匹配的内容match = re.search(pattern, response)if match:# 提取标签内的内容return match.group(1)return None
看效果
用函数提取出内容:效果是不错的。不过r1废话多的特点导致了每条数据的处理时间太长了。4060ti有点顶不住啊,哈哈
In [11]: extract_json_from_response(res_content)
Out[11]:
{'market_punishment': 65,'market_down': 0,'explanation': '新闻标题明确提到了对两家私募机构的违规操作进行了处罚,这与A股市场的监管和处罚相关。阅读量较高(52.3万)和分享量(47次)也表明了该事件的关注度。因此,这条新闻的相关性评分较高,但考虑到涉及的是小规模私募,整体影响可能有限,所以评分为65分。'}
我试试并发,据说ollama允许4个,至少3个看起来是好的
In [16]: keyword_args_list = [{'system_prompt':system_prompt, 'user_prompt' : str(sample_data1)},...: {'system_prompt':system_prompt, 'user_prompt' : str(sample_data2)},...: {'system_prompt':system_prompt, 'user_prompt' : str(sample_data3)}...:...: ]...:...:...: tick1 = time.time()...: res_list = thread_concurrent_run(call_local_deepseek, keyword_args_list = keyword_args_list, max_workers= 3)...: tick2 = time.time()...:...:
2025-03-22 23:04:49 - httpx - INFO - HTTP Request: POST http://172.17.0.1:11434/v1/chat/completions "HTTP/1.1 200 OK"
call_local_deepseek takes 17.80
2025-03-22 23:04:49 - httpx - INFO - HTTP Request: POST http://172.17.0.1:11434/v1/chat/completions "HTTP/1.1 200 OK"
call_local_deepseek takes 17.92
2025-03-22 23:04:52 - httpx - INFO - HTTP Request: POST http://172.17.0.1:11434/v1/chat/completions "HTTP/1.1 200 OK"
call_local_deepseek takes 21.00
解析出来
In [18]: res_list1 = [extract_json_from_response(x) for x in res_list]In [19]: res_list1
Out[19]:
[{'market_punishment': 0,'market_down': 10,'explanation': '新闻标题提到市场一片大好,没有涉及A股市场的处罚信息,因此市场处罚评分为0。虽然整体情绪积极,但并未明确提及市场下跌或投资者损失,故市场下跌评分较低为10分。'},{'market_punishment': 0,'market_down': 90,'explanation': '新闻标题明确提到A股市场大跌1.5%,属于A股市场整体下跌的情况,相关性很高。'},{'market_punishment': 60,'market_down': 10,'explanation': '新闻标题提到对两家小规模私募机构的违规操作进行了处罚,这直接关联到A股市场的监管和整治,因此属于A股市场处罚类别。虽然没有提到具体的市场下跌情况,但处罚通常可能会影响市场情绪,所以相关性较高。阅读量和分享量也显示了一定的关注度。'}]
然后很奇怪的是,单发和多发的情况有点不一样。对于第一条,是稳定这样的。重复跑3条也是稳定的。暂时只能理解量大质量就下滑了。有点搞笑。之前我发现在批量实体识别的时候也有类似的问题。
{'market_punishment': 0,'market_down': 0,'explanation': '新闻标题提到市场一片大好,没有涉及A股市场的处罚或下跌内容,因此两个类别的相关性评分为0。'}
然后我试了下8b,就这个基础问题好像也还行,速度快了一倍。
最后我试了下1.5b,就完全bbq
因为mac可能是需要设置一下网络开放,速度感觉和4060ti也差不多。
实际跑了一个一分钟的数据,哈哈,有点尴尬,赶不上数据的速度,就先科研一下吧。
相关文章:
【最后203篇系列】022 用Deepseek14b提取新闻事件
这算是之前一直想做的一件事,趁周末赶快做了。 业务意义:现实中有大量的舆情,这对我们的决策会有比较重要的作用 技术依赖: 1 模型基础能力2 消息队列3 异步获取消息4 时间序列库 1 模型基础能力 大模型发展到现在࿰…...
关于网络的一点知识(持续更新)
1、IP地址和子网掩码、端口号: IP地址是设备在网络上的地址,相当于一栋房子的门牌号。子网掩码相当于房子所在的街道。同一条街道的房子间是通过街道直通的,主人可以互相拜访。 举个例子,如下图所示。 说明:将两台设…...
2025年01月02日浙江鼎永前端面试
目录 webpack 和 vite 区别react fiber 架构vue diff 算法react diff 算法hooks 源码垂直水平布局项目介绍单点登录大文件上传微前端 1. webpack 和 vite 区别 Webpack 和 Vite 是两种不同的前端构建工具,它们在设计理念、性能表现和使用场景上存在显著差异。以下…...
Redis全面学习指南
要全面掌握 Redis,需要系统化学习以下核心知识体系,涵盖基础到高级的各个方面,并理解其内部原理和实际应用场景: 一、Redis 核心特性与基础 基本概念与架构 定义:内存数据库,支持键值存储、缓存、消息队列等…...
python3最新版下载及python 3.13.1安装教程(附安装包)
文章目录 前言一、python 3.13.1下载二、python 3.13.1安装步骤1.准备安装文件2.启动安装程序3.选择安装方式4.等待安装完成5.完成安装 前言 在当今数字化时代,Python 以其简洁易读的语法和丰富的库资源,成为众多开发者喜爱的编程语言。Python 3.13.1 的…...
基于WebRtc,GB28181,Rtsp/Rtmp,SIP,JT1078,H265/WEB融合视频会议接入方案
智能融合视频会议系统方案—多协议、多场景、全兼容的一站式视频协作平台 OvMeet,LiveMeet针对用户核心痛点实现功能与用户价值 ,Web平台实现MCU多协议,H265/H264等不同编码监控,直播,会议,调度资源统一融合在一套界…...
css基础-display 常用布局
CSS display 属性详解 属性设置元素是否被视为块级或行级盒子以及用于子元素的布局,例如流式布局、网格布局或弹性布局。 一、基础显示模式 1. block 作用: 元素独占一行可设置宽高和内外边距默认宽度撑满父容器 应用场景: 布局容器&a…...
基于linux平台的C语言入门教程(7)类型转换
文章目录 1. 什么是类型转换?2. 隐式类型转换隐式类型转换的规则: 3. 显式类型转换显式类型转换的语法: 4. 示例代码代码解析:输出结果: 5. 常见问题问题 1:隐式类型转换会导致数据丢失吗?问题 …...
前端Wind CSS面试题及参考答案
目录 标准盒模型与 IE 盒模型的区别是什么?如何通过 box-sizing 属性切换这两种盒模型? 如何计算一个元素在标准盒模型下的总宽度(包含 margin、padding、border)? 父元素高度塌陷的原因是什么?请列举至少 3 种清除浮动的方法。 方法一:使用 clear 属性 方法二:使用…...
ROS melodic 安装 python3 cv_bridge
有时候,我们需要处理这些兼容性问题。此处列举我的过程,以供参考 mkdir -p my_ws_py39/src cd my_ws_py39 catkin_make_isolated-DPYTHON_EXECUTABLE/usr/bin/python3 \-DPYTHON_INCLUDE_DIR/usr/include/python3.8 \-DPYTHON_LIBRARY/usr/lib/x86_64-l…...
农用车一键启动工作原理
移动管家农用车一键启动的工作原理与普通汽车类似,主要依赖于无线射频识别技术(RFID)。以下是具体的工作步骤和原理: 智能钥匙识别: 车主携带智能钥匙靠近车辆时,钥匙通过发射射频信号与车辆进行交互。车辆…...
Swift 并发任务的协作式取消
在 Swift 并发(Swift Concurrency)中,任务(Task)不会被强行终止,而是采用**协作式取消(cooperative cancellation)**机制。这意味着任务会被标记为“已取消”,但是否真正…...
设计和布局硬件电路是嵌入式系统开发的重要环节
设计和布局硬件电路是嵌入式系统开发的重要环节,涉及从需求分析到原理图设计、PCB(印刷电路板)布局以及最终的硬件调试。以下是完整的流程和技术要点: 1. 硬件电路设计的基本流程 1.1 需求分析 明确功能需求:确定系统…...
防火墙虚拟系统实验
配置 [r1]interface GigabitEthernet 0/0/0 [r1-GigabitEthernet0/0/0]ip address 12.0.0.2 24 [r1]interface LoopBack 0 [r1-LoopBack0]ip address 100.1.1.1 24[fw]interface GigabitEthernet 0/0/0 [fw-GigabitEthernet0/0/0]service-manage all permit [fw]interfac…...
机器学习——KNN数据集划分
一、主要函数 sklearn.datasets.my_train_test_split() 该函数为Scikit-learn 中用于将数据集划分为训练集和测试集的函数,适用于机器学习模型的训练和验证。以下是详细解释: 1、函数签名 train_test_split(*arrays, # 输入的数据…...
C++基础系列【27】Raw String Literal
博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇…...
PyTorch核心基础知识点
PyTorch核心基础知识点,结合最新特性与工业级实践,按优先级和逻辑关系分层解析: ▍ 核心基石:张量编程(Tensor Programming) 1. 张量创建(8种生产级初始化) # 设备自动选择&#x…...
Springboot实现使用断点续传优化同步导入Excel
springboot实现使用断点续传优化同步导入Excel 需求前言断点续传前端实现后端实现完结撒花,如有需要收藏的看官,顺便也用发财的小手点点赞哈,如有错漏,也欢迎各位在评论区评论! 需求前言 在跨境电商系统中,…...
1、正点原子ZYNQ最小系统--GPIO之MIO控制LED笔记
1、ZYNQ PS中的外设通过MIO连接到PS端引脚;通过EMIO连接到PL端引脚。 2、Zynq-7000有54个MIO,有64个EMIO。 3、GPIO分为4个Bank,其中Bank0和Bank1连接到MIO;Bank2和Bank3连接到EMIO。 4、Bank1--22bit;Bank0--32bit;…...
基于STM32进行FFT滤波
文章目录 一、前言背景二、项目构思1. 确定FFT点数、采样率、采样点数2. 双缓存设计 三、代码实现1. STM32CubeMX配置和HAL库初始化2. 核心代码 四、效果展示和后话 一、前言背景 STM32 对 AD 采样信号进行快速傅里叶变换(FFT),以获取其频谱…...
ISCA Archive 的 关于 dysarthria 的所有文章摘要(1996~2024)
ISCA Archive 的 关于 dysarthria 的所有文章摘要(1996~2024) 构音障碍(Dysarthria)研究全景总结(1996–2024) 所有文章摘要(1996~2024) ISCA Archive 的 关于 dysarthria 的所有文…...
MySQL拒绝访问
1. 问题 使用图形界面工具连接MySQL数据库,拒绝访问! 2. 解决方法 以管理员的身份打开cmd,输入命令,启动MySQL net start mysql版本号 3. 参考 暂无...
ROM(只读存储器) 、SRAM(静态随机存储器) 和 Flash(闪存) 的详细解析
在嵌入式系统和其他计算机系统中,存储器是不可或缺的组成部分。不同类型的存储器各有其特点和应用场景。以下是 ROM(只读存储器)、SRAM(静态随机存储器) 和 Flash(闪存) 的详细解析。 1. ROM&am…...
Transformers x SwanLab:可视化NLP模型训练(2025最新版)
HuggingFace 的 Transformers 是目前最流行的深度学习训框架之一(100k Star),现在主流的大语言模型(LLaMa系列、Qwen系列、ChatGLM系列等)、自然语言处理模型(Bert系列)等,都在使用T…...
stm32-ADC
1.ADC:模拟到数字的转换器 1.1模拟 模拟信号:物理当中一切可感受到的都是模拟信号(连续的) 1.2数字: 数字信号:二进制数(离散的) 1.3a->c的过程 采样、量化 1.3.1量化的原理 方法&am…...
【1】Java 零基础入门学习(小白专用)
【1】Java 零基础入门学习 📚博客主页:代码探秘者 ✨专栏:《JavaSe从入门到精通》 其他更新ing… ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏作者水…...
《Python实战进阶》No26: CI/CD 流水线:GitHub Actions 与 Jenkins 集成
No26: CI/CD 流水线:GitHub Actions 与 Jenkins 集成 摘要 持续集成(CI)和持续部署(CD)是现代软件开发中不可或缺的实践,能够显著提升开发效率、减少错误并加速交付流程。本文将探讨如何利用 GitHub Actio…...
算力100问☞第92问:为什么各地热衷建设算力中心?
目录 1、宏观分析 2、政府角度分析 3、投资者角度分析 在数字化浪潮中,各地对算力中心建设的热情高涨,这一现象背后潜藏着诸多深层次的原因,涵盖了经济、科技、社会等多个维度,且彼此交织,共同驱动着这一发展趋势。 1、宏观分析 从经济结构转型的底层逻辑来看,全球经…...
w266农产品直卖平台的设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
OpenLayers集成天地图服务开发指南
以下是一份面向GIS初学者的OpenLayers开发详细教程,深度解析代码: 一、开发环境搭建 1.1 OpenLayers库引入 <!-- 使用CDN引入最新版OpenLayers --> <link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/ollatest/ol.c…...
1、双指针法
关于每个知识点的例题 可以自己看力扣标准题解。也可以在哔哩哔哩上看。想看我的,就到github 看 - 库 ,介绍里写的算法讲解那些,里面有知识点,有题库。题库,每天都发题,可能跟博客的进度不一样。因为我上传…...
程序算法基础
程序设计基本概念 程序和算法 人们做任何事情都有一定的方法和程序,如:春节联欢晚会的节目单、开会的议程等,都是程序。在程序的指导下,可以有秩序地、有效的完成每一项工作。随着计算机的问世和普及,“程序”逐渐专…...
JavaScript基础-删除事件(解绑事件)
在现代Web开发中,动态地添加和移除事件处理器是构建交互式网页的关键技能之一。虽然添加事件处理器相对直观,但了解如何有效地移除或“解绑”这些处理器同样重要。这不仅有助于优化性能,还能防止潜在的内存泄漏问题。本文将介绍几种方法来删除…...
Selenium Web UI自动化测试:从入门到实战
引言 在当今快速迭代的软件开发周期中,自动化测试已成为保障产品质量、提升测试效率的核心手段之一。而针对Web应用的UI自动化测试,Selenium作为最流行的开源工具之一,凭借其跨浏览器、多语言支持(Python、Java、C#等)…...
AT_abc398_f [ABC398F] ABCBA
题目大意 请点击这里查看原题面。给定一个字符串 S S S,找出以 S S S 为前缀的最短回文字符串。 思路 观察样例三,容易发现只要寻找到一个合适的“对称轴”即可。可以考虑枚举对称轴位置,判断然后得到长度并计算答案串。但是这样显然会超…...
RK3568开发笔记-egtouch触摸屏ubuntu系统屏幕校准
目录 前言 一、官方egtouch触摸屏驱动校准 二、ubuntu系统xinput_calibrator工具校准 2.1. 工具安装 2.2. xinput_calibrator命令校准 总结 前言 在基于 RK3568 平台进行开发,并使用 egtouch 触摸屏搭配 ubuntu20.04 系统时,准确的屏幕校准对于良好的用户交互体验至关重要…...
使用uniapp的vite版本进行微信小程序开发,在项目中使用mqtt连接、订阅、发布信息
1、保证在微信公众平台配置socket合法域名 2、项目中使用mqtt 建议在package.json中配置"mqtt": “4.1.0”,使用这个版本的依赖 页面中引入mqtt并配置连接 // ts-ignoreimport * as mqtt from mqtt/dist/mqtt.js; //要使用这里面的const state reacti…...
【软件系统架构】单体架构
一、引言 在软件开发的漫长历程中,架构的选择一直是至关重要的决策。单体架构作为一种经典的架构模式,曾经在许多项目中发挥着不可替代的作用。虽然如今微服务等架构逐渐流行,但理解单体架构对于深入掌握软件架构体系仍然有着重要意义。 二、…...
强大的AI网站推荐(第三集)—— AskO3
网站:AskO3 号称:由华为全球技术服务部(GTS)基于盘古大模型构建的领域知识大模型 博主评价:学习网络安全必备的网站,ICT服务领域顶级AI网站,如果学习HCIA,园区配置等,也可…...
高速网络包处理,基础网络协议上内核态直接处理数据包,XDP技术的原理
文章目录 预备知识TCP/IP 网络模型(4层、7层)iptables/netfilterlinux网络为什么慢 DPDKXDPBFPeBPFXDPXDP 程序典型执行流通过网络协议栈的入包XDP 组成 使用 GO 编写 XDP 程序明确流程选择eBPF库编写eBPF代码编写Go代码动态更新黑名单 预备知识 TCP/IP…...
C++智能指针详解
C智能指针详解 目录 智能指针概述为什么需要智能指针C标准库中的智能指针 std::unique_ptrstd::shared_ptrstd::weak_ptr 智能指针的实际应用智能指针的最佳实践总结 智能指针概述 智能指针是C中用于自动管理动态分配内存的对象,它们遵循RAII(资源获…...
git 设置保存密码 git保存密码
目录 长久保存密码 长久保存密码 git push和git pull都能使用。 git config --global credential.helper store 然后执行一次 git pull,Git 会提示输入用户名和密码, 输入后保存路径: ~/.git-credentials , Windows系统&…...
clamav服务器杀毒(Linux服务器断网状态下如何进行clamav安装、查杀)
ClamAV服务器杀毒(服务器断网状态也可以使用该方法) 服务器因为挖矿病毒入侵导致断网,进行离线的clamav安装并查杀 安装包下载网址:https://www.clamav.net/downloads 安装.deb,如果服务器处于断网状态,可以…...
深入剖析 RocketMQ 的 ConsumerOffsetManager
在消息队列系统中,准确记录和管理消息的消费进度是保障系统可靠性和数据一致性的关键。RocketMQ 作为一款高性能、高可用的分布式消息队列,其 ConsumerOffsetManager 组件在消费进度管理方面发挥着至关重要的作用。本文将详细介绍 ConsumerOffsetManager…...
一文了解 threejs 中.bin 文件与 .gltf 文件 和 .glb 文件三者之间的关系
文章目录 前言一、.bin 文件的作用二、.gltf 文件的作用三、.gltf 和 .bin 的关系四、.glb 文件的作用五、如何查看或编辑 .bin 文件六、总结 前言 在 GLTF 生态中,.bin 文件是 GLTF 格式的重要组成部分,通常与 .gltf 文件一起使用。以下是它们的详细关…...
蓝桥杯(N皇后问题)------回溯法
题目描述 在 NN 的方格棋盘放置了 N 个皇后,使得它们不相互攻击(即任意 2 个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成 45 角的斜线上。你的任务是,对于给定的 N,求出有多少种合法的放置方法…...
Linux系统中关闭Docker服务并禁止其开机自启 、docker 安装目录结构分析 | 【du -sh *】
文章目录 在Linux系统中关闭Docker服务并禁止其开机自启,具体步骤如下:适用于使用 systemd 的系统(如Ubuntu 16.04/CentOS 7等)适用于使用 SysVinit 或 Upstart 的旧版系统其他注意事项示例输出 linux 下 一条命令实现 统计各个目…...
免费下载 | 2025低空经济产业发展报告
低空经济概览 产业链条:低空经济产业链分为上游的低空经济基础设施(如空管系统、飞行基地等)、中游的低空制造(包括无人机、eVTOL、直升机等飞行器的设计、研发、生产)和下游的低空运营及飞行服务。低空经济以低空空域…...
单一职责原则开闭原则其他开发原则
一、单一职责原则(Single Responsibility Principle, SRP) 定义 一个类应该有且仅有一个引起它变化的原因(即一个类只负责一个职责)。 核心思想 高内聚:类的功能高度集中 低耦合:减少不同职责之间的相互影…...
(自用)yolo算法学习
1.难受中,看了教程过后无从下手啊 2.pycharm专业版成功就好 3.安装包时出先问题 (base) PS G:\pycharm\projects\yolo\yolov5> pip install opencv-python>4.1.1 Requirement already satisfied: opencv-python>4.1.1 in g:\anaconda\app\lib\site-packa…...