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

001-监控你的文件-FSWatch-C++开源库108杰

  1. fswatch 原理与应用简介
  2. fswatch 安装
  3. fswatch 实践应用
  4. 具体应用场景与细节补充

在这里插入图片描述

1. 简介

有些知识,你知道了不算厉害,但你要是不知道,就容易出乱。

很多时候,程序需要及时获取磁盘上某个文件对象(文件夹、文件)的变动信息,这时候 “绝大多数操作系统支持主动推送此类信息” 这个知识点,就很重要。

如果不知道这点,大概就只能让程序定时去检查、并维护前后两套数据,自行对比以发现是否有哪个文件对象发生了哪些变化。

fswatch 本是多数 linux 下的一个工具程序——但现已经支持跨平台。它提供动态库和配套的 C、C++头文件 (合称为 libfswatch),借助它,我们也可以在自己的程序中,直接获得监控指定文件对象变动信息。

更多关于文件变动信息监控以及 libfswatch 库的基本原理、功能以及应用场景示例,请看视频 A。

  • 视频 A : FSWatch 简介

001-监控你的文件-1原理简介-C++开源库108杰

2. 安装 fswatch

Linux 下,可以使用各自发行版自带的包管理器安装 fswatch。以 Ubuntu 为例:

sudo apt install fswatch

Windows下,因为我们使用 msys2 来安装 fswatch。进入对应环境(我们的课程使用的是 ucrt64)的终端,输入以下指令即可:

pacman -S mingw-w64-ucrt-x86_64-fswatch

msys2 本身的安装可看课程 《VSCODE 多语言开发保姆手册》)的第一节课 《MSys2 + GCC 安装与应用》。

如果你手快并且长得帅的话,最快十秒钟具体操作过程以及效果演示,见视频 B 。

002-监控你的文件-2十秒安装-C++开源库108杰

3. 上机实践

我们使用 Windows + Msys2 + VSCode + GCC + CMake 的开发环境,相关准备工作同样可观看 《VSCODE 多语言开发保姆手册》)。

  • 视频 C: 上机实践

003-监控你的文件-3使用示范-C++开源库108杰

3.1 CMakeList.txt

cmake_minimum_required(VERSION 3.15.0)
project(HelloFSWatch VERSION 0.1.0 LANGUAGES C CXX)add_executable(HelloFSWatch main.cpp)target_link_libraries(${PROJECT_NAME} PRIVATE fswatch) 
target_link_directories(${PROJECT_NAME} PRIVATE "C:/msys64/ucrt64/bin")

说明:

其中最后两行是我们添加的。

  • 第一行 target_link_libraries 用于告诉编译器,当前项目需要链接到 fswatch 这个库;
  • 第二行 target_link_directories 则告诉编译器,上哪里去找 fswatch 这个库;
  • PRIVATE 用于指示对应的设置,仅在当前目标中生效,对我们这个小项目并无影响;
  • ${PROJECT_NAME} 是 CMake 的内置变量,用于表示当前项目名称,即 HelloFSWatch (见第2行的 project 语句)

GCC 在链接某个库时,会自动为它加上 lib 前缀,以及对应的扩展名,本例为 .dll,因此,我们在 CMake 源文件中写的 fswatch,最终会组成全名 “libfswatch.dll”

3.2 main.cpp

#include <ctime>#include <iostream>
#include <iomanip>#include <libfswatch/c++/monitor_factory.hpp>// 返回值:必须是 void,入参必须是 std::vector<fsw::event> const & 和 void *
void on_file_changed(std::vector<fsw::event> const & events, void *)
{std::cout << "Files Changed:\n";for (auto const& event : events){// 输出变动的文件路径:std::cout << event.get_path() << "\n";// 输出变动的时间:std::time_t t = event.get_time();std::tm lt; // local time 本地时间结构localtime_s(&lt, &t); // C11 开始支持的线程安全的时间转换函数std::cout << std::put_time(&lt, "%Y-%m-%d %H:%M:%S") << "\n";// 输出变动的标志:std::cout << "Flags:\n";for (auto const& flag : event.get_flags()){std::cout << "\t" << fsw_get_event_flag_name(flag) << "\n";}}
}int main(int, char**) 
{std::vector<std::string> paths = {"d:\\tmp"};auto *monitor = fsw::monitor_factory::create_monitor(system_default_monitor_type,paths,on_file_changed);// 启动监控monitor->start();  // 进入死循环
}

如代码所示,使用 fswatch 实现被动式响应(那操作系统主动回调我们的函数)的文件变动监控过程,关键三步:

Step1 : 通过工厂类的静态方法 create_monitor 创建一个监控器。需指定类型(通常就是采用代码中的默认类型)、待监控的文件对象路径(默认类型下,Windows 操作系统仅支持以文件夹为单位进行测控,因此该参数只能填写文件夹),回调函数;实际还有第四个默认参数,用于向回调函数传递额外的参数,通常并不需要,因此它有默认值 nullptr;

Step2 : 准备好你的回调函数(即代码中的 on_file_changed ),注意,该函数原型须严格符合:void (std::vectorfsw::event const& , void *) ;

Step3 : 启动监控。

3.3 on_file_changed 详解

回调函数名字无所谓。第一个入参类型需为 std::vectorfsw::event const& ,这是一个常量引用,第二个入参为 void *,即前面创建监控器,所传入的第四个参数(我们使用的了函数参数默认值)。

第一个入参 events 是复数(一个容器),表明该函数被操作系统回调用时,操作系统可能想告诉我们的情况有可能是:

  • 一个文件对象的一个变动事件;
  • 一个文件对象的多个变动事件;
  • 多个文件对象的多个变动事件。

每一个 event 主要包含:变动文件路径的对象(如果变动对象是一个文件,此时Windows系统上报的也是文件名),变动时间(注意,不一定非常精确),变动标志等。

库为变动标志取了一些英文名字,常见的有:

  • NoOp : 无变动
  • PlatformSpecifc :特定平台指定
  • Created
  • Updated
  • Removed
  • OwnerModified : 对象的拥有者变化,常见于 *uix 系统;
  • AttributeModified: 对象属性发生变化
  • MovedFrom
  • MovedTo
  • ……

每个变动事件可能包含有多个变动标志。

on_file_changed 第一层循环用来遍历所有事件,输出每个对象变动路径、时间。其中用到 纯C(不要加 std::)的,C11 才支持安全的时间转换函数 localtime_s 和 C++ 输出的扩展的格式操控符:put_time() 注意操控符并不返回字符串。

有关 C++ 流与操控符(比如,如何自定义一个输入或输出流操控符),可学习 《C++“流”编程视频辅导》。

第二层循环输出当前事件的所有标志,其中用到 fsw_get_event_flag_name()以获取指定标志值对应的英文名称。

4. 补充

4.1 场景补充

许多问题,确实可以通过这个“消息队列”轻松实现,除视频中提到的给用户发送通知邮件之外,还有如下场景可考虑使用:

  • 用户上传文件内容审核:某网站系统,允许用户发表带图的文章,需要对图片或文章的文字内容做安全审核;
  • 线上系统自动源代码编译:程序员使用 git 等工具,将相关模块的源代码上传到服务器上并触发自动编译;
  • 数据采集与比对系统:为了稳定性,很多监控系统会划分成数据采集与数据比对两个独立的子进程。

4.2 细节补充

“封包” 文件:很多时候,接收方发现出现一个新增的文件,并不能直接开始读取它,因为此时发送方可能还在往该文件中写入数据。此时有两种经典解决方法。

  • 方法一:要求发送方以独占模式打开文件,对应的,接收方尝试也以独占模式打开,这样后者将失败,从而避免双方同时处理(哪怕一写一读);
  • 方法二:双方约定特定文件名称(通常是扩展名)为 “封包”文件。比如,约定 .seal为封包文件的扩展名。则当发送方先生成 a.dat 文件,再生成名为 a.dat.seal 的封包文件(通常是一个零字节文件);接收方仅在发现后者之后,才开始处理 a.dat(并在处理结束后,删除封包文件)。

相关文章:

001-监控你的文件-FSWatch-C++开源库108杰

fswatch 原理与应用简介fswatch 安装fswatch 实践应用具体应用场景与细节补充 1. 简介 有些知识&#xff0c;你知道了不算厉害&#xff0c;但你要是不知道&#xff0c;就容易出乱。 很多时候&#xff0c;程序需要及时获取磁盘上某个文件对象&#xff08;文件夹、文件&#xff0…...

leetcode203.移除链表元素

目录 问题描述示例提示 具体思路思路一思路二 代码实现 问题描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 题目链接&#xff1a;移除链表元素 示例 提示 列表中的节点数目在范围…...

代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数 、1. 两数之和

242.有效的字母异位词 题目链接&#xff1a;242.有效的字母异位词 文档讲解&#xff1a;代码随想录有效的字母异位词 视频讲解&#xff1a;LeetCode&#xff1a;有效的字母异位词 状态&#xff1a;学会了 思路&#xff1a; 数组其实是简单哈希表。 哈希表用来快速判断元素是否在…...

DL/CV领域常见指标术语(FLOPS/mIoU/混淆矩阵/F1-measure)------一篇入门

1. FLOPS、FLOPs和GFLOPs FLOPS: floating-point operations per second&#xff0c;每秒浮点运算次数&#xff0c;用来衡量硬件性能。 FLOPs&#xff1a;floating point of operations&#xff0c;是浮点运算次数&#xff0c;用来衡量算法、模型的复杂度。 GFLOPS&#xff…...

rknn 板端运行程序Invalid RKNN model version 6, Meet unsupported rknn target type

E RKNN: [09:15:53.053] 6, 1 E RKNN: [09:15:53.053] Invalid RKNN model version 6 E RKNN: [09:15:53.053] rknn_init, load model failed! [NN_ERROR] rknn_init fail! ret-1 或者报错&#xff1a; E RKNN: [08:35:30.804] Meet unsupported target type: 0x46495247 E…...

Linux 内核中的 container_of 宏:以 ipoib_rx_poll_rss 函数为例

在 Linux 内核编程中,container_of 是一个非常实用的宏,主要用于通过结构体的成员指针来获取包含该成员的整个结构体的指针。rx_ring = container_of(napi, struct ipoib_recv_ring, napi); 在代码中就是利用了这个宏,下面我们详细分析它的作用和工作原理。 背景知识 在内…...

【数据结构-红黑树】

文章目录 红黑树红黑树介绍红黑树的五个基本性质红黑树的平衡原理红黑树的操作红黑树的操作 代码实现节点实现插入和查询操作 红黑树 红黑树介绍 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉查找树&#xff08;Binary Search Tree, BST&#xff09;&…...

一个简洁高效的Flask用户管理示例

Flask-Login 是 Flask 的用户管理扩展&#xff0c;提供 用户身份验证、会话管理、权限控制 等功能。 适用于&#xff1a; • 用户登录、登出 • 记住用户&#xff08;“记住我” 功能&#xff09; • 限制未登录用户访问某些页面 • 用户会话管理 1. 安装 Flask-Login pi…...

用Nginx打造防盗链护盾

用Nginx打造防盗链护盾 一、你的网站正在"为他人做嫁衣"&#xff1f; 想象一下这个场景&#xff1a; 你精心拍摄的摄影作品、录制的课程视频、设计的原创素材&#xff0c;被其他网站直接盗用链接。 更气人的是——当用户在他们网站查看这些资源时&#xff0c;消耗的…...

VS Code 如何搭建C/C++开发环境

目录 1.VS Code是什么 2. VS Code的下载和安装 2.1 下载和安装 2.2.1 下载 2.2.2 安装 2.2 环境的介绍 2.3 安装中文插件 3. VS Code配置C/C开发环境 3.1 下载和配置MinGW-w64编译器套件 3.1.1 下载 3.1.2 配置 3.2 安装C/C插件 3.3 重启VSCode 4. 在VSCode上编写…...

DeepSeek、微信、硅基流动、纳米搜索、秘塔搜索……十种不同方法实现DeepSeek使用自由

为了让大家实现 DeepSeek 使用自由&#xff0c;今天分享 10 个畅用 DeepSeek 的平台。 一、官方满血版&#xff1a;DeepSeek官网与APP 首推&#xff0c;肯定是 DeepSeek 的官网和 APP&#xff0c;可以使用满血版 R1 和 V3 模型&#xff0c;以及联网功能。 网址&#xff1a; htt…...

【Java】Enum类的常用方法、实现接口及其实际应用

Enum类的常用方法 package com.star.enum03;/** * author : Starshine */public class TestSeason { //这是一个main方法&#xff0c;是程序的入口&#xff1a; public static void main(String[] args) { //用enum关键字创建的Season枚举类上面的父类是&#xff…...

Linux | 进程控制(进程终止与进程等待)

文章目录 Linux | 进程控制 — 进程终止 & 进程等待1、进程终止进程常见退出方法1.1退出码基本概念获取退出码的方式常见退出码约定使用场景 1.2 strerror函数 & errno宏1.3 _exit函数1.4_exit和exit的区别1.4.1 所属头文件与函数原型1.4.2 执行过程差异**结合现象分析…...

三、tsp学习笔记——屏幕移植

泰山派-6寸猫屏转接板 - 立创开源硬件平台 泰山派樱猫的教程&#xff0c;屏资料链接: https://pan.baidu.com/s/1pNAKH33r7LtZG6EwHJ-HNA?pwdnsde 提取码: nsde &#xff08;不要浪费时间下载&#xff0c;没有用&#xff0c;下载gitee上的&#xff09; leefei/tspi-disp-6…...

python全栈-python进阶

python进阶 文章目录 python进阶异常except自定义异常类 文件操作序列化和反序列化CSV文件os模块os.path模块shutil模块 拷贝压缩 模块--modulefrom 模块 import 成员包package库LibraryPIP库 GUI编程-tkinter版使用类定义的GUI界面设置控件的属性方式Label标签的常用属性Butto…...

SpringBoot如何配置开发环境(JDK、Maven、IDEA等)

目录 1. 安装JDK 一、JDK介绍JRE&#xff08;Java Runtime Envirnment&#xff09;&#xff1a;Java运行环境 二、下载JDK官网地址&#xff1a;Java Downloads | Oracle 三、安装JDK点击下载下来的安装包进行安装 四、配置JDK进入到环境变量中&#xff08;下面介绍两种进入…...

图片粘贴上传实现

图片上传 html demo 直接粘贴本地运行查看效果即可&#xff0c;有看不懂的直接喂给 deepseek 会解释的很清晰 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"…...

C++--STL库-List

目录 1.list 的基本使用 1.1 创建和初始化 1.2. 插入元素 1.3. 删除元素 1.4. 访问元素 1.5 遍历 1.6 总结 list是C标准库&#xff08;STL&#xff09;中的双向链表容器&#xff0c;属于<list>头文件。 它的特点是&#xff1a; 动态大小&#xff1a;可以随时插入…...

kubeadm拉起的k8s集群证书过期的做法集群已奔溃也可以解决

kubeadm拉起的k8s集群证书过期的做法 这个是很久之前遇到的了&#xff0c;今天有空&#xff08;心血来潮&#xff09;就都回忆回忆写在这里为爱发光&#xff0c;部分内容来自arch先生&#xff08;死党&#xff09;的帮助。有时候有很多部门提了建k8s的需求&#xff0c;有些是临…...

idea连接gitee(使用idea远程兼容gitee)

文章目录 先登录你的gitee拿到你的邮箱找到idea的设置选择密码方式登录填写你的邮箱和密码登录成功 先登录你的gitee拿到你的邮箱 具体位置在gitee–>设置–>邮箱管理 找到idea的设置 选择密码方式登录 填写你的邮箱和密码 登录成功...

Kafka 简介

Kafka 简介 Apache Kafka 是一个开源的分布式流处理平台&#xff0c;广泛应用于实时数据流处理、日志管理、消息传递等场景。Kafka 最初由 LinkedIn 开发&#xff0c;并于 2011 年捐献给 Apache 软件基金会。 Kafka 的设计目标是高吞吐量、低延迟和高可用性&#xff0c;它能够…...

Ubuntu22.04 Deepseek-R1本地容器化部署/内网穿透/OPENWEBUI,打造个人AI助手!

1. 前言 本地部署DeepSeek并实现内网穿透&#xff0c;为家庭成员提供强大的AI支持。通过使用Ollama、Docker、OpenWebUI和Nginx&#xff0c;内网穿透&#xff0c;我们可以轻松实现快速响应和实时搜索功能。 2.软硬件环境 系统&#xff1a;ubuntu22.04, cuda12GPU: RTX3080Ti …...

红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测

文章目录 ​​研判&#xff08;入侵检测&#xff09;​​ ​​设备​​ ​​经典网络​​​​云网络​​ ​​异常HTTP请求​​​​Webshell分析​​ ​​Webshell 的分类​​​​Webshell 的检测​​ ​​主机层面​​​​流量层面​​ ​​附录​​ ​​常见端口漏洞…...

Linux部署DeepSeek r1 模型训练

之前写过一篇windows下部署deepseekR1的文章&#xff0c;有小伙伴反馈提供一篇linux下部署DeepSeek r1 模型训练教程&#xff0c;在 Linux 环境下&#xff0c;我找了足够的相关资料&#xff0c;花费了一些时间&#xff0c;我成功部署了 DeepSeek R1 模型训练任务&#xff0c;结…...

【大模型】DeepSeek:AI浪潮中的破局者

【大模型】DeepSeek&#xff1a;AI浪潮中的破局者 引言&#xff1a;AI 新时代的弄潮儿DeepSeek&#xff1a;横空出世展锋芒&#xff08;一&#xff09;诞生背景与发展历程&#xff08;二&#xff09;全球影响力初显 探秘 DeepSeek 的技术内核&#xff08;一&#xff09;独特的模…...

寒假学习总结

整个寒假都走在数据结构与算法的路上&#xff0c;深入学习了其中多个板块&#xff0c;刷了一些与之对应的题目&#xff0c;下面来一期总结&#xff08;c&#xff09; &#xff08;emmm&#xff0c;主播在寒假试着去学习了几大语言的语法基础&#xff08;丢丢&#xff09; 如Ja…...

自愈网络的定义、其为用户带来的益处、具体的使用案例

在当今高度互联的世界中&#xff0c;网络稳定性和可靠性对于各种应用场景至关重要。无论是企业的日常运营、智能家居的便捷控制&#xff0c;还是工业网络的自动化管理&#xff0c;网络的任何中断都可能带来不可估量的损失和不便。正是基于这种需求&#xff0c;以太联—Intellin…...

NumPy的基本使用

在 Python 的数据科学与数值计算领域&#xff0c;NumPy 无疑是一颗耀眼的明星。作为 Python 中用于科学计算的基础库&#xff0c;NumPy 提供了高效的多维数组对象以及处理这些数组的各种工具。本文将带您深入了解 NumPy 的基本使用&#xff0c;感受它的强大魅力。 一、安装与导…...

HTTP 与 HTTPS:协议详解与对比

文章目录 概要 一. HTTP 协议 1.1 概述 1.2 工作原理 1.3 请求方法 1.4 状态码 二. HTTPS 协议 2.1 概述 2.2 工作原理 2.3 SSL/TLS 协议 2.4 证书 三. HTTP 与 HTTPS 的区别 四. 应用场景 4.1 HTTP 的应用场景 4.2 HTTPS 的应用场景 概要 HTTP&#xff08;Hy…...

从零开始构建一个语言模型中vocab_size(词汇表大小)的设定规则

从零开始构建一个语言模型就要设计一个模型框架,其中要配置很多参数。在自然语言处理任务中,vocab_size(词汇表大小) 的设定是模型设计的关键参数之一,它直接影响模型的输入输出结构、计算效率和内存消耗。 本文是在我前文的基础上讲解的:从零开始构建一个小型字符级语言…...

斐波那契数列模型:在动态规划的丝绸之路上追寻斐波那契的足迹(上)

文章目录 引言递归与动态规划的对比递归解法的初探动态规划的优雅与高效自顶向下的记忆化搜索自底向上的迭代法 性能分析与比较小结 引言 斐波那契数列&#xff0c;这一数列如同一条无形的丝线&#xff0c;穿越千年时光&#xff0c;悄然延续其魅力。其定义简单而优美&#xff…...

RT-Thread+STM32L475VET6——ADC采集电压

文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行配置1.1 使用外部高速时钟&#xff0c;并修改时钟树1.2 打开ADC1的通道3&#xff0c;并配置为连续采集模式(ADC根据自己需求调整&#xff09;1.3 打开串口1.4 生成工程 2. 配置ADC2.1 打开ADC驱动2.2 声明ADC2.3 剪切stm…...

基于Django快递物流管理可视化分析系统(完整系统源码+数据库+详细开发文档+万字详细论文+答辩PPT+详细部署教程等资料)

文章目录 基于Django快递物流管理可视化分析系统&#xff08;完整系统源码数据库详细开发文档万字详细论文答辩PPT详细部署教程等资料&#xff09;一、项目概述二、项目说明三、研究意义四、系统设计技术架构 五、功能实现六、完整系统源码数据库详细开发文档万字详细论文答辩P…...

【Pandas】pandas Series reindex_like

Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐&#xff0c;使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…...

Ollama安装和迁移,以及部署DeepSeek模型

什么是 Ollama Ollama 是大语言模型管理工具,它的主要作用是简化大语言模型的本地化部署和运行。如果你想调用本地模型,保护个人隐私,构建个人知识库,那你可以考虑使用 Ollama。 Ollama 的官网是 https://ollama.com/,正如官网所说,“Get up and running with large l…...

【数据挖掘】

数据挖掘 目录&#xff1a;1. 数据转换2. 属性选择3. 独立于方案的选择4. 探索空间5. 具体方案的选择6. 离散化数值属性无监督离散化基于熵的离散化其他离散化方法 k-means算法原理算法步骤优缺点优点缺点 代码示例&#xff08;使用Python和scikit-learn库&#xff09;代码解释…...

芝加哥学派(Chicago School):金融与经济学的创新力量(中英双语)

芝加哥学派&#xff1a;金融与经济学的创新力量 在经济学和金融学的历史上&#xff0c;有一个学派的影响力不容忽视&#xff0c;那就是芝加哥学派&#xff08;Chicago School&#xff09;。芝加哥学派不仅在学术界广受推崇&#xff0c;也深刻影响了全球的经济政策和金融市场。…...

web入侵实战分析-常见web攻击类应急处置实验1

场景说明&#xff1a; 某天运维人员发现在/opt/tomcat8/webapps/test/目录下&#xff0c;多出了一个index_bak.jsp这个文件&#xff0c; 并告诉你如下信息 操作系统&#xff1a;ubuntu-16.04业务&#xff1a;测试站点中间件&#xff1a;tomcat开放端口&#xff1a;22&#x…...

.NET SixLabors.ImageSharp v1.0 图像实用程序控制台示例

使用 C# 控制台应用程序示例在 Windows、Linux 和 MacOS 机器上处理图像&#xff0c;包括创建散点图和直方图&#xff0c;以及根据需要旋转图像以便正确显示。 这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包&#xff08;版本 1.0.4&#xff09;添加到.NET Core 3.1/ …...

基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)

在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...

SpringMVC新版本踩坑[已解决]

问题&#xff1a; 在使用最新版本springMVC做项目部署时&#xff0c;浏览器反复500&#xff0c;如下图&#xff1a; 异常描述&#xff1a; 类型异常报告 消息Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [int] not specifie…...

【科研绘图系列】R语言绘制SCI论文图合集

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载Load dataFigure 1Fig 1B: functional assays adhensionFIG 1C: Functional assays OPK Figure 2Fig 2C: Settings and function fo…...

间隔连续问题

间隔连续问题 1. 数据结构&#xff1a;某游戏公司记录的用户每日登录数据 表名&#xff1a;game_user 字段名&#xff1a;id&#xff08;用户id&#xff09;、dt&#xff08;日期&#xff09; 2. 需求&#xff1a; ① 创建表 ② 计算每个用户最大的连续登录天数&#xff0c…...

3月营销日历:开启春日盛宴,绽放生活魅力

关键营销节点∶惊蛰、女生节、妇女节、 植树节、315消费者权益日、春分 营销关键词 养生、女生魅力、感恩女性、环保、品质 01.重点关注品类 春季服饰&#xff1a;如轻薄外套、春装等&#xff0c;适合惊蛰后的市场需求&#xff1b; 美妆护肤&#xff1a;妇女节期间&#xf…...

网络工程师 (48)传输层概述

前言 传输层&#xff08;Transport Layer&#xff09;是计算机网络体系结构中的关键层次之一&#xff0c;主要负责在源端和目的端之间提供端到端的数据传输服务。 一、位置与功能 传输层位于OSI&#xff08;开放系统互连&#xff09;参考模型的第四层&#xff0c;介于网络层和应…...

字符串函数和结构题内存对齐

图下为函数使用&#xff1a; #include <ctype.h>int main() {int ret isdigit(Q);printf("%d\n", ret);return 0; }int main() {printf("%c\n", toupper(a));printf("%c\n", tolower(A));return 0; }...

同花顺C++面试题及参考答案

对 C 和 C++ 哪个更熟悉? 在编程语言的学习与实践中,我对 C++ 更为熟悉。C 语言作为一门经典的编程语言,以其高效、灵活和接近硬件的特性,在系统编程、嵌入式开发等领域占据着重要地位。它提供了丰富的底层操作能力,如指针操作、内存管理等,为开发者直接控制计算机资源提…...

Python JSON的深度解析:从基础到应用

Python JSON的深度解析&#xff1a;从基础到应用 flyfish 什么是JSON&#xff1f; JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式。它基于一个子集的JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999…...

创建三个节点

1. 节点克隆 根据教程Hadoop编译安装-CSDN博客将一台机器的hadoop的环境搭建好。 在虚拟机的列表中选中一台机器&#xff0c;右键—>管理—>克隆 填好【虚拟机名称】&#xff0c;选择本地存储位置&#xff0c;点击完成&#xff0c;就节点克隆完成了。 2. 修改IP地址 编…...

滤波器 | 原理 / 分类 / 特征指标 / 设计

注&#xff1a;本文为 “滤波器” 相关文章合辑。 未整理去重。 浅谈滤波器之 —— 啥是滤波器 原创 RF 小木匠 射频学堂 2020 年 03 月 25 日 07:46 滤波器&#xff0c;顾名思义&#xff0c;就是对信号进行选择性过滤&#xff0c;对不需要的信号进行有效滤除。按照其传输信…...