记录使用FlinkSql进行实时工作流开发

使用FlinkSql进行实时工作流开发

  • 引言
  • Flink SQL实战
    • 常用的Connector
      • 1. MySQL-CDC 连接器配置
      • 2. Kafka 连接器配置
      • 3. JDBC 连接器配置
      • 4. RabbitMQ 连接器配置
      • 5. REST Lookup 连接器配置
      • 6. HDFS 连接器配置
    • FlinkSql数据类型
      • 1. 基本数据类型
      • 2. 字符串数据类型
      • 3. 日期和时间数据类型
      • 4. 复杂数据类型
      • 5. 特殊数据类型
    • 数据类型的使用示例
      • 1. 数学函数
      • 2. 字符串函数
      • 3. 日期时间函数
      • 4. 聚合函数
      • 5. 条件函数
    • 高阶函数
      • 1. 窗口函数
      • 2. 集合操作函数
      • 3. JSON 函数
      • 4. 数据类型转换函数
      • 5. 复杂类型函数
      • 6. 用户自定义函数 (UDF)

引言

在这里插入图片描述

在大数据时代,实时数据分析和处理变得越来越重要。Apache Flink,作为流处理领域的佼佼者,提供了一套强大的工具集来处理无界和有界数据流。其中,Flink SQL是其生态系统中一个重要的组成部分,允许用户以SQL语句的形式执行复杂的数据流操作,极大地简化了实时数据处理的开发流程。

什么是Apache Flink?

Apache Flink是一个开源框架,用于处理无边界(无尽)和有边界(有限)数据流。它提供了低延迟、高吞吐量和状态一致性,使开发者能够构建复杂的实时应用和微服务。Flink的核心是流处理引擎,它支持事件时间处理、窗口操作以及精确一次的状态一致性。

为什么选择Flink SQL?

易用性:Flink SQL使得非专业程序员也能快速上手,使用熟悉的SQL语法进行实时数据查询和处理。
灵活性:可以无缝地将SQL与Java/Scala API结合使用,为用户提供多种编程模型的选择。
性能:利用Flink的高性能流处理引擎,Flink SQL能够实现实时响应和低延迟处理。
集成能力:支持多种数据源和数据接收器,如Kafka、JDBC、HDFS等,易于集成到现有的数据生态系统中。

Flink SQL实战

常用的Connector

在配置FlinkSQL实时开发时,使用mysql-cdc、Kafka、jdbc和rabbitmq作为连接器是一个很常见的场景。以下是详细的配置说明,你可以基于这些信息来撰写你的博客:

1. MySQL-CDC 连接器配置

MySQL-CDC(Change Data Capture)连接器用于捕获MySQL数据库中的变更数据。配置示例如下:

CREATE TABLE mysql_table (-- 定义表结构id INT,name STRING,-- 其他列
) WITH ('connector' = 'mysql-cdc',  			-- 使用mysql-cdc连接器'hostname' = 'mysql-host',  			-- MySQL服务器主机名'port' = '3306',            			-- MySQL端口号'username' = 'user',        			-- MySQL用户名'password' = 'password',    			-- MySQL密码'database-name' = 'db',     			-- 数据库名'table-name' = 'table'      			-- 表名'server-time-zone' = 'GMT+8',           -- 服务器时区'debezium.snapshot.mode' = 'initial',  	-- 初始快照模式,initial表示从头开始读取所有数据;latest-offset表示从最近的偏移量开始读取;timestamp则可以指定一个时间戳,从该时间戳之后的数据开始读取。'scan.incremental.snapshot.enabled' = 'true'	-- 可选,设置为true时,Flink会尝试维护一个数据库表的增量快照。这意味着Flink不会每次都重新读取整个表,而是只读取自上次读取以来发生变化的数据。这样可以显著提高读取效率,尤其是在处理大量数据且频繁更新的场景下。'scan.incremental.snapshot.chunk.size' = '1024'  -- 可选, 增量快照块大小'debezium.snapshot.locking.mode' = 'none', 		 -- 可选,控制在快照阶段锁定表的方式,以防止数据冲突。none表示不锁定,lock-tables表示锁定整个表,transaction表示使用事务来锁定。'debezium.properties.include-schema-changes' = 'true',  -- 可选,如果设置为true,则在CDC事件中会包含模式变更信息。'debezium.properties.table.whitelist' = 'mydatabase.mytable',  -- 可选,指定要监控的表的白名单。如果table-name未设置,可以通过这个属性来指定。'debezium.properties.database.history' = 'io.debezium.relational.history.FileDatabaseHistory'  -- 可选,设置数据库历史记录的实现类,通常使用FileDatabaseHistory来保存历史记录,以便在重启后能恢复状态。
);

2. Kafka 连接器配置

Kafka连接器用于读写Kafka主题中的数据。配置示例如下:

CREATE TABLE kafka_table (-- 定义表结构id INT,name STRING,-- 其他列
) WITH ('connector' = 'kafka',      -- 使用kafka连接器'topic' = 'topic_name',     -- Kafka主题名'properties.bootstrap.servers' = 'kafka-broker:9092',  -- Kafka服务器地址'format' = 'json'           -- 数据格式,例如json'properties.group.id' = 'flink-consumer-group',  -- 消费者组ID'scan.startup.mode' = 'earliest-offset',  -- 启动模式(earliest-offset, latest-offset, specific-offset, timestamp)'format' = 'json',  -- 数据格式'json.fail-on-missing-field' = 'false',  -- 是否在字段缺失时失败'json.ignore-parse-errors' = 'true',     -- 是否忽略解析错误'properties.security.protocol' = 'SASL_SSL', -- 安全协议(可选)'properties.sasl.mechanism' = 'PLAIN',       -- SASL机制(可选)'properties.sasl.jaas.config' = 'org.apache.kafka.common.security.plain.PlainLoginModule required username="user" password="password";'  -- SASL配置(可选)
);

3. JDBC 连接器配置

JDBC连接器用于与其他关系型数据库进行交互。配置示例如下:

CREATE TABLE jdbc_table (-- 定义表结构id INT,name STRING,-- 其他列
) WITH ('connector' = 'jdbc',       -- 使用jdbc连接器'url' = 'jdbc:mysql://mysql-host:3306/db',  -- JDBC连接URL'table-name' = 'table_name', -- 数据库表名'username' = 'user',        -- 数据库用户名'password' = 'password'     -- 数据库密码'driver' = 'com.mysql.cj.jdbc.Driver',   -- JDBC驱动类'lookup.cache.max-rows' = '5000',        -- 可选,查找缓存的最大行数'lookup.cache.ttl' = '10min',            -- 可选,查找缓存的TTL(时间到期)'lookup.max-retries' = '3',              -- 可选,查找的最大重试次数'sink.buffer-flush.max-rows' = '1000',   -- 可选,缓冲区刷新最大行数'sink.buffer-flush.interval' = '2s'      -- 可选,缓冲区刷新间隔
);

4. RabbitMQ 连接器配置

RabbitMQ连接器用于与RabbitMQ消息队列进行交互。配置示例如下:

CREATE TABLE rabbitmq_table (-- 定义表结构id INT,name STRING,-- 其他列
) WITH ('connector' = 'rabbitmq',   -- 使用rabbitmq连接器'host' = 'rabbitmq-host',   -- RabbitMQ主机名'port' = '5672',            -- RabbitMQ端口号'username' = 'user',        -- RabbitMQ用户名'password' = 'password',    -- RabbitMQ密码'queue' = 'queue_name',     -- RabbitMQ队列名'exchange' = 'exchange_name' -- RabbitMQ交换机名'routing-key' = 'routing_key',   -- 路由键'delivery-mode' = '2',           -- 投递模式(2表示持久)'format' = 'json',               -- 数据格式'json.fail-on-missing-field' = 'false',  -- 是否在字段缺失时失败'json.ignore-parse-errors' = 'true'      -- 是否忽略解析错误
);

5. REST Lookup 连接器配置

REST Lookup 连接器允许在 SQL 查询过程中,通过 REST API 进行查找操作。

CREATE TABLE rest_table (id INT,name STRING,price DECIMAL(10, 2),PRIMARY KEY (id) NOT ENFORCED
) WITH ('connector' = 'rest-lookup','url' = 'http://api.example.com/user/{id}',  -- REST API URL,使用占位符 {product_id}'lookup-method' = 'POST'	-- 'GET' 或 'POST''format' = 'json',  -- 数据格式'asyncPolling' = 'false'	-- 可选,指定查找操作是否使用异步轮询模式。默认值为 'false'。当设置为 'true' 时,查找操作会以异步方式执行,有助于提高性能。'gid.connector.http.source.lookup.header.Content-Type' = 'application/json'	-- 可选,设置 Content-Type 请求头。用于指定请求体的媒体类型。例如,设置为 application/json 表示请求体是 JSON 格式。'gid.connector.http.source.lookup.header.Origin' = '*'	-- 可选,设置 Origin 请求头。通常用于跨域请求。'gid.connector.http.source.lookup.header.X-Content-Type-Options' = 'nosniff'	-- 可选,设置 X-Content-Type-Options 请求头。用于防止 MIME 类型混淆攻击。'json.fail-on-missing-field' = 'false',  -- 可选,是否在字段缺失时失败'json.ignore-parse-errors' = 'true'  -- 可选,是否忽略解析错误'lookup.cache.max-rows' = '5000',  -- 可选,查找缓存的最大行数'lookup.cache.ttl' = '10min',  -- 可选,查找缓存的TTL(时间到期)'lookup.max-retries' = '3'  -- 可选,查找的最大重试次数
);

6. HDFS 连接器配置

HDFS connector用于读取或写入Hadoop分布式文件系统中的数据。

创建HDFS Source

CREATE TABLE hdfsSource (line STRING
) WITH ('connector' = 'filesystem','path' = 'hdfs://localhost:9000/data/input',		-- HDFS上的路径。'format' = 'csv'		-- 文件格式。
);

创建HDFS Sink

CREATE TABLE hdfsSink (line STRING
) WITH ('connector' = 'filesystem','path' = 'hdfs://localhost:9000/data/output','format' = 'csv'
);

FlinkSql数据类型

在FlinkSQL中,数据类型的选择和定义是非常重要的,因为它们直接影响数据的存储和处理方式。FlinkSQL提供了多种数据类型,可以满足各种业务需求。以下是FlinkSQL中的常见数据类型及其详细介绍:

1. 基本数据类型

  • BOOLEAN: 布尔类型,表示TRUEFALSE

    CREATE TABLE example_table (is_active BOOLEAN
    );
    
  • TINYINT: 8位带符号整数,范围是-128127

    CREATE TABLE example_table (tiny_value TINYINT
    );
    
  • SMALLINT: 16位带符号整数,范围是-3276832767

    CREATE TABLE example_table (small_value SMALLINT
    );
    
  • INT: 32位带符号整数,范围是-21474836482147483647

    CREATE TABLE example_table (int_value INT
    );
    
  • BIGINT: 64位带符号整数,范围是-92233720368547758089223372036854775807

    CREATE TABLE example_table (big_value BIGINT
    );
    
  • FLOAT: 单精度浮点数。

    CREATE TABLE example_table (float_value FLOAT
    );
    
  • DOUBLE: 双精度浮点数。

    CREATE TABLE example_table (double_value DOUBLE
    );
    
  • DECIMAL(p, s): 精确数值类型,p表示总精度,s表示小数位数。

    CREATE TABLE example_table (decimal_value DECIMAL(10, 2)
    );
    

2. 字符串数据类型

  • CHAR(n): 定长字符串,n表示字符串的长度。

    CREATE TABLE example_table (char_value CHAR(10)
    );
    
  • VARCHAR(n): 可变长字符串,n表示最大长度。

    CREATE TABLE example_table (varchar_value VARCHAR(255)
    );
    
  • STRING: 可变长字符串,无长度限制。

    CREATE TABLE example_table (string_value STRING
    );
    

3. 日期和时间数据类型

  • DATE: 日期类型,格式为YYYY-MM-DD

    CREATE TABLE example_table (date_value DATE
    );
    
  • TIME§: 时间类型,格式为HH:MM:SSp表示秒的小数位精度。

    CREATE TABLE example_table (time_value TIME(3)
    );
    
  • TIMESTAMP§: 时间戳类型,格式为YYYY-MM-DD HH:MM:SS.sssp表示秒的小数位精度。

    CREATE TABLE example_table (timestamp_value TIMESTAMP(3)
    );
    
  • TIMESTAMP§ WITH LOCAL TIME ZONE: 带有本地时区的时间戳类型。

    CREATE TABLE example_table (local_timestamp_value TIMESTAMP(3) WITH LOCAL TIME ZONE
    );
    

4. 复杂数据类型

  • ARRAY: 数组类型,T表示数组中的元素类型。

    CREATE TABLE example_table (array_value ARRAY<INT>
    );
    
  • MAP<K, V>: 键值对映射类型,K表示键的类型,V表示值的类型。

    CREATE TABLE example_table (map_value MAP<STRING, INT>
    );
    
  • ROW<…>: 行类型,可以包含多个字段,每个字段可以有不同的类型。

    CREATE TABLE example_table (row_value ROW<name STRING, age INT>
    );
    

5. 特殊数据类型

  • BINARY(n): 定长字节数组,n表示长度。

    CREATE TABLE example_table (binary_value BINARY(10)
    );
    
  • VARBINARY(n): 可变长字节数组,n表示最大长度。

    CREATE TABLE example_table (varbinary_value VARBINARY(255)
    );
    

数据类型的使用示例

以下是一个包含各种数据类型的表的定义示例:

CREATE TABLE example_table (id INT,name STRING,is_active BOOLEAN,salary DECIMAL(10, 2),birth_date DATE,join_time TIMESTAMP(3),preferences ARRAY<STRING>,attributes MAP<STRING, STRING>,address ROW<street STRING, city STRING, zip INT>
);

为了详细介绍 Flink SQL 中所有内置函数,以下是它们的分类、功能描述以及使用案例:

1. 数学函数

  • ABS(x)

    • 描述:返回 x 的绝对值。
    • 示例SELECT ABS(-5); 返回 5。
  • CEIL(x)

    • 描述:返回不小于 x 的最小整数。
    • 示例SELECT CEIL(4.3); 返回 5。
  • FLOOR(x)

    • 描述:返回不大于 x 的最大整数。
    • 示例SELECT FLOOR(4.7); 返回 4。
  • EXP(x)

    • 描述:返回 e 的 x 次方。
    • 示例SELECT EXP(1); 返回 2.71828。
  • LOG(x)

    • 描述:返回 x 的自然对数。
    • 示例SELECT LOG(2.71828); 返回 1。
  • LOG2(x)

    • 描述:返回 x 以 2 为底的对数。
    • 示例SELECT LOG2(8); 返回 3。
  • LOG10(x)

    • 描述:返回 x 以 10 为底的对数。
    • 示例SELECT LOG10(100); 返回 2。
  • POWER(x, y)

    • 描述:返回 x 的 y 次方。
    • 示例SELECT POWER(2, 3); 返回 8。
  • SQRT(x)

    • 描述:返回 x 的平方根。
    • 示例SELECT SQRT(16); 返回 4。

2. 字符串函数

  • LENGTH(str)

    • 描述:返回字符串 str 的长度。
    • 示例SELECT LENGTH('Flink'); 返回 5。
  • UPPER(str)

    • 描述:将字符串转为大写。
    • 示例SELECT UPPER('flink'); 返回 ‘FLINK’。
  • LOWER(str)

    • 描述:将字符串转为小写。
    • 示例SELECT LOWER('FLINK'); 返回 ‘flink’。
  • SUBSTRING(str, pos, len)

    • 描述:返回从字符串 str 的 pos 位置开始长度为 len 的子字符串。
    • 示例SELECT SUBSTRING('Flink', 1, 2); 返回 ‘Fl’。
  • CONCAT(str1, str2, …)

    • 描述:将多个字符串连接成一个字符串。
    • 示例SELECT CONCAT('Hello', ' ', 'World'); 返回 ‘Hello World’。
  • TRIM(str)

    • 描述:去除字符串两端的空白字符。
    • 示例SELECT TRIM(' Flink '); 返回 ‘Flink’。

3. 日期时间函数

  • CURRENT_TIMESTAMP()

    • 描述:返回当前的时间戳。
    • 示例SELECT CURRENT_TIMESTAMP(); 返回类似 ‘2024-08-07 12:34:56.789’。
  • CURRENT_DATE()

    • 描述:返回当前的日期。
    • 示例SELECT CURRENT_DATE(); 返回类似 ‘2024-08-07’。
  • DATE_FORMAT(timestamp, format)

    • 描述:格式化日期时间戳为指定格式的字符串。
    • 示例SELECT DATE_FORMAT(TIMESTAMP '2024-08-07 12:34:56', 'yyyy-MM-dd HH:mm:ss'); 返回 ‘2024-08-07 12:34:56’。
  • TIMESTAMPDIFF(unit, ts1, ts2)

    • 描述:返回两个时间戳之间的差值,单位可以是 DAY、HOUR、MINUTE 等。
    • 示例SELECT TIMESTAMPDIFF(DAY, TIMESTAMP '2024-08-01 00:00:00', TIMESTAMP '2024-08-07 00:00:00'); 返回 6。

4. 聚合函数

  • COUNT(expr)

    • 描述:计算符合条件的行数。
    • 示例SELECT COUNT(*) FROM table; 返回表中的行数。
  • SUM(expr)

    • 描述:计算 expr 的总和。
    • 示例SELECT SUM(salary) FROM employees; 返回员工薪资的总和。
  • AVG(expr)

    • 描述:计算 expr 的平均值。
    • 示例SELECT AVG(salary) FROM employees; 返回员工薪资的平均值。
  • MIN(expr)

    • 描述:返回 expr 的最小值。
    • 示例SELECT MIN(salary) FROM employees; 返回员工薪资的最小值。
  • MAX(expr)

    • 描述:返回 expr 的最大值。
    • 示例SELECT MAX(salary) FROM employees; 返回员工薪资的最大值。

5. 条件函数

  • CASE WHEN condition THEN result [WHEN …] [ELSE result] END
    • 描述:类似于编程语言中的条件语句,根据条件返回不同的结果。
    • 示例SELECT CASE WHEN salary > 5000 THEN 'High' ELSE 'Low' END FROM employees; 根据薪资返回 ‘High’ 或 ‘Low’。

除了上述基本的数学、字符串、日期时间和聚合函数外,Flink SQL 还提供了一些实际使用中的实用功能,这些功能在数据处理和分析中非常有用。以下是一些实用功能的介绍和示例:

高阶函数

1. 窗口函数

窗口函数允许用户在指定的窗口范围内进行计算,如滑动窗口、滚动窗口和会话窗口。以下是几种常见的窗口函数:

  • TUMBLE

    • 描述:创建一个固定大小的滚动窗口。
    • 示例
      SELECT TUMBLE_START(ts, INTERVAL '10' MINUTE) AS window_start,COUNT(*) AS cnt
      FROM table
      GROUP BY TUMBLE(ts, INTERVAL '10' MINUTE);
      
  • HOP

    • 描述:创建一个滑动窗口。
    • 示例
      SELECT HOP_START(ts, INTERVAL '5' MINUTE, INTERVAL '10' MINUTE) AS window_start,COUNT(*) AS cnt
      FROM table
      GROUP BY HOP(ts, INTERVAL '5' MINUTE, INTERVAL '10' MINUTE);
      
  • SESSION

    • 描述:创建一个会话窗口。
    • 示例
      SELECT SESSION_START(ts, INTERVAL '15' MINUTE) AS window_start,COUNT(*) AS cnt
      FROM table
      GROUP BY SESSION(ts, INTERVAL '15' MINUTE);
      

2. 集合操作函数

集合操作函数用于对多个表进行集合运算,如 UNION、INTERSECT 和 EXCEPT。

  • UNION

    • 描述:合并两个表,去重。
    • 示例
      SELECT * FROM table1
      UNION
      SELECT * FROM table2;
      
  • UNION ALL

    • 描述:合并两个表,不去重。
    • 示例
      SELECT * FROM table1
      UNION ALL
      SELECT * FROM table2;
      
  • INTERSECT

    • 描述:返回两个表的交集。
    • 示例
      SELECT * FROM table1
      INTERSECT
      SELECT * FROM table2;
      
  • EXCEPT

    • 描述:返回存在于第一个表但不存在于第二个表的记录。
    • 示例
      SELECT * FROM table1
      EXCEPT
      SELECT * FROM table2;
      

3. JSON 函数

Flink SQL 支持处理 JSON 数据的函数,非常适用于处理嵌套结构的数据。

  • JSON_VALUE(json_string, path)

    • 描述:从 JSON 字符串中提取指定路径的值。
    • 示例
      SELECT JSON_VALUE('{"name": "John", "age": 30}', '$.name') AS name;
      
  • JSON_QUERY(json_string, path)

    • 描述:从 JSON 字符串中提取指定路径的子 JSON。
    • 示例
      SELECT JSON_QUERY('{"name": "John", "info": {"age": 30, "city": "New York"}}', '$.info') AS info;
      

4. 数据类型转换函数

这些函数用于在不同的数据类型之间进行转换。

  • CAST(expr AS type)

    • 描述:将 expr 转换为指定的数据类型。
    • 示例
      SELECT CAST('2024-08-07' AS TIMESTAMP) AS ts;
      
  • TRY_CAST(expr AS type)

    • 描述:尝试将 expr 转换为指定的数据类型,如果失败则返回 NULL。
    • 示例
      SELECT TRY_CAST('abc' AS INT) AS number;  -- 返回 NULL
      

5. 复杂类型函数

处理数组、映射等复杂数据类型的函数。

  • ARRAY

    • 描述:创建一个数组。
    • 示例
      SELECT ARRAY[1, 2, 3] AS numbers;
      
  • CARDINALITY(array)

    • 描述:返回数组的元素个数。
    • 示例
      SELECT CARDINALITY(ARRAY[1, 2, 3]) AS size;
      
  • ELEMENT(array, index)

    • 描述:返回数组中指定索引的元素。
    • 示例
      SELECT ELEMENT(ARRAY[1, 2, 3], 2) AS second_element;  -- 返回 2
      

6. 用户自定义函数 (UDF)

Flink SQL 允许用户定义自己的函数以满足特定需求。

  • 创建和使用 UDF
    • 示例
      // Java 代码示例
      public static class MyUdf extends ScalarFunction {public int eval(int x) {return x * x;}
      }// 注册和使用 UDF
      tableEnv.createTemporarySystemFunction("MyUdf", MyUdf.class);
      tableEnv.sqlQuery("SELECT MyUdf(age) FROM people");
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/394915.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文解读,神经网络全梯度表示《Full-Gradient Representation for Neural Network Visualization》

导语 这篇论文介绍了一种新的工具&#xff0c;称为全梯度&#xff0c;用于解释神经网络的响应。这个全梯度的概念将神经网络的响应分解为两个部分&#xff1a;输入灵敏度和每个神经元的灵敏度分量。 输入灵敏度&#xff1a;输入灵敏度指的是对于神经网络输出的影响程度。它反…

Python试讲

Python试讲 导语Python简介Python及其特点如何使用Python Python与计算计算变量 导语 本次试讲内容如下&#xff1a;Python简介与使用&#xff0c;Python与基本运算 辅助教材为 《趣学Python编程》和《Python编程从入门到实践》 Python简介 Python是目前入门最简单最好学的…

NSSCTF练习记录:[SWPUCTF 2021 新生赛]jicao

题目&#xff1a; 这段PHP代码的意思是&#xff1a; 对index.php文件进行语法高亮显示&#xff0c;插入flag.php文件&#xff0c;变量id的值为POST传递的值&#xff0c;变量json的值为GET传递的json类型的值。当id值为wllmNB且json中含有键为“x”&#xff0c;值为“wllm”的时…

数据结构:栈与队列OJ题

目录 前言 一、用栈实现队列 二、用队列实现栈 三、括号匹配问题 前言 前面讲了栈和队列的基础知识&#xff0c;今天来巩固一下加深理解&#xff0c;这里说明一下&#xff0c;因为现在都是在用C语言写&#xff0c;这些OJ题里都要用到前面实现栈和队列的代码&#xff0c;每道题…

告别数据丢失烦恼,转转数据恢复和另外三款工具助你一臂之力!

不知道大伙儿有没有和我一样&#xff0c;到哪都喜欢拍照片和视频&#xff0c;加上办公上也是七七八八的各种格式的文件实在是多&#xff0c;所以电脑和手机等等设备上经常内存爆满需要清理&#xff0c;难免会出现不小心误删或者格式化、清空等等的情况&#xff0c;用过几款和转…

Journyx项目管理软件 soap_cgi.pyc XXE漏洞复现

0x01 产品简介 Journyx-Journyx成立于1996年,提供自托管项目管理解决方案ProjectXecute。主要功能包括资源跟踪、待办事项列表、任务分配以及与MS Project的集成。要运行ProjectXecute,需要Windows 2003或更高版本、IIS Web服务器和Intel处理器。也可以在Linux、Solaris、AI…

#子传父父传子props和emits #封装的table #vue3

#子传父&父传子props和emits #封装的table #vue3 父组件&#xff1a;emits defineEmits props 子组件&#xff1a; 子组件 <template><el-table v-bind"$attrs" ref"innerTableRef" v-loading"loading" border :data"tabl…

力扣刷题-轮转数组

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 首先&#xff0c;我们现在这里提供的是一种特别简单的思路&#xff0c;我们先来看一下这段代码&#xff1a; void rotate(int* nums, int numsSize, int k) {k%numsSize;int n…

git clone private repo

Create personal access token Clone repo $ git clone https://<user_name>:<personal_access_tokens>github.com/<user_name>/<repo_name>.git

5个适用于Linux系统的PDF转Word工具

凭借其跨平台和设备的统一标准、兼容性和规模小巧等主要优点&#xff0c;可携带文档格式&#xff08;PDF&#xff09;可谓最主流的文件格式之一。 市面上有许多查看PDF文件的强大工具&#xff0c;因此所有Linux系统的用户都可以根据自身喜好找到合适的PDF查看工具。然而&#x…

Linux从0到1——基础IO(上)【文件描述符/重定向/缓冲区】

Linux从0到1——基础IO&#xff08;上&#xff09; 1. 预备知识2. 复习一下常见的C语言文件接口3. 系统调用接口3.1 函数传参小技巧——标志位3.2 使用系统调用接口3.2.1 open3.2.2 write3.2.3 read 4. 文件描述符fd4.1 fd的本质4.2 理解struct file结构体4.3 fd的分配规则 5. …

BES(恒玄)平台log分析

前言 恒玄软件调试和分析基本是通过日志形式分析的&#xff0c;今天就详细说下日志组成和常用分析方法 1.日志组成解析 bes日志组成一般说由以下组成&#xff1a;tick时钟 模块log打印所在线程编码log内容 [17:31:22.834] 21786/NONE / 2 | CPU USAGE: busy18 light8…

WebStorm格式化JSON,将一行很长的JSON展开

webstorm json格式化插件将一行很长的json展开 在WebStorm中&#xff0c;要展开很长的JSON行&#xff0c;可以使用内置的JSON格式化功能。 打开WebStorm&#xff0c;并打开包含JSON的文件。 选择JSON文件中的任意部分。 按下快捷键 CtrlAltL (Windows/Linux) 或 CmdAltL (Ma…

GPT-4.o mini

https://share.xuzhugpt.cloud/ GPT-4.o mini 目前免费使用 把上面[chatgpt4o-mini-xuzhu]复制到UserToken的文本框中 点击[个人账户] 测试一下哈&#xff0c;看看&#xff1a; GPT-4.o代码有时候还是有严重错误&#xff1a;好奇怎么来的 上面是我写得&#xff0c;下面是GPT写…

01背包问题 c++

题目描述 有一个背包能装的重量maxw(正整数&#xff0c;0≤maxw≤20000)&#xff0c;同时有n件物品(0≤n≤100)(每件物品只有一件&#xff0c;要么拿&#xff0c;要么不拿)&#xff0c;每件物品有一个重量wi(正整数)和一个价值vi(正整数)。要求从这n件物品中任取若干件装入背包…

C++ 简单学习

C简单编译 auto关键字 auto 关键字用于自动类型推导。它允许编译器自动推断变量的类型&#xff0c;使得代码更加简洁和易于编写&#xff0c;尤其是在处理复杂类型或模板编程时。使用 auto 可以避免编写冗长的类型声明&#xff0c;同时减少由于类型不匹配导致的编译错误 auto x…

论文阅读报告: 在时间双向图上查询基于时间的的密集子图 | ICDE 2024

摘要 本文提出了一个新的模型&#xff08;α, β, T&#xff09;-core&#xff0c;用于在时间双向图上寻找凝聚子图。时间双向图中&#xff0c;不同实体之间的关系随着时间的推移而变化。为了提高查询效率&#xff0c;本文提出了顶点分区和时间分区的历史索引&#xff08;VH-I…

Java学习Day24:基础篇14:多线程

1.程序、进程和线程 程序 进程 进程(process)是程序的一次执行过程&#xff0c;或是一个正在执行的程序。是一个动态的过程&#xff1a;有它自身的产 生、存在和消亡的过程。 如&#xff1a; 运行中的QQ运行中的音乐播放器视频播放器等&#xff1b;程序是静态的&#xff0c…

【大模型从入门到精通13】openAI API 构建和评估大型语言模型(LLM)应用1

这里写目录标题 构建和评估大型语言模型&#xff08;LLM&#xff09;应用开发性能评估指标从开发到部署高风险应用LLM应用开发的最佳实践和建议从小处着手快速迭代自动化测试根据应用需求定制评估考虑伦理影响 构建和评估大型语言模型&#xff08;LLM&#xff09;应用 开发和部…

Sqli-labs-master靶场--布尔盲注

目录 1、布尔盲注 2、布尔盲注的流程&#xff08;以靶场less-8为例&#xff09; 2.1输入id尝试是否存在注入点 2.1.1通过以上尝试&#xff0c;联想到可能是布尔盲注 2.2猜测数据库长度 2.3获取数据库名 2.3.1python脚本获取 代码&#xff1a; 获取结果为&#xff1a; …