flink车联网项目:业务实现2(维表开发)(第68天)

news2024/9/22 19:27:24

系列文章目录

3.2 维表开发
3.2.1 创建库
3.2.2 示例
3.2.2.1 类型转换
3.2.2.2 创建mysql映射表
3.2.2.3 创建paimon映射表
3.2.2.4 从mysql插入到paimon表
3.2.2.5 结果查看
3.2.2.6 测试
3.2.3 其他表开发
3.2.4 部署

文章目录

  • 系列文章目录
  • 前言
    • 3.2 维表开发
    • 3.2.1 创建库
      • 3.2.2 示例
        • 3.2.2.1 类型转换
        • 3.2.2.2 创建mysql映射表
        • 3.2.2.3 创建paimon映射表
        • 3.2.2.4 从mysql插入到paimon表
        • 3.2.2.5 结果查看
        • 3.2.2.6 测试
      • 3.2.3 其他表开发
      • 3.2.4 部署


前言

本文为flink车联网项目:业务实现2(维表开发),后续章节为:维表离线同步

3.2 维表开发

3.2.1 创建库

create database if not exists vvp.mysql;
create database if not exists xxxpm.dim;

3.2.2 示例

3.2.2.1 类型转换

这里我们采用flink cdc对数据进行采集,Mysql 与Flink SQL字段类型转换如下
在这里插入图片描述

3.2.2.2 创建mysql映射表

传统方法如下。但是因为配置了mysqlcdc catalog,所以可以直接来使用 mysqlcdc.dim.dim_car_info,不再单独创建映射表,从而提高开发效率。
drop table if exists mysql.mysql_dim_car_info;
create table if not exists mysql.mysql_dim_car_info
(
id BIGINT,
car_status INT,
is_inspection INT,
audit_status BIGINT,
net_audit_status INT,
audit_desc STRING,
audit_date TIMESTAMP,
net_audit_date TIMESTAMP,
car_level_id BIGINT,
car_level_name STRING,
car_source BIGINT,
register_channel BIGINT,
car_city_no BIGINT,
car_city_name STRING,
car_plate_no STRING,
car_plate_color BIGINT,
car_brand_id BIGINT,
car_brand STRING,
car_color BIGINT,
car_seats BIGINT,
car_owner_type BIGINT,
car_producer_brand STRING,
car_producer_brand_model STRING,
vehicle_type STRING,
car_owner STRING,
car_character BIGINT,
vin STRING,
engine_no STRING,
fuel_type BIGINT,
displacement BIGINT,
inspection_status BIGINT,
total_distance BIGINT,
engine_power BIGINT,
wheel_base BIGINT,
gps_brand STRING,
gps_model STRING,
gps_imei STRING,
net_car_lic_no STRING,
net_car_lic_issue_agency STRING,
net_car_lic_oper_area STRING,
net_car_lic_verified BIGINT,
net_car_lic_verified_remark STRING,
is_push BIGINT,
is_push_time TIMESTAMP,
create_time TIMESTAMP,
update_time TIMESTAMP,
write_time TIMESTAMP,
id_card_valid_start TIMESTAMP,
id_card_valid_end TIMESTAMP,
driver_lic_issue TIMESTAMP,
driver_lic_valid_start TIMESTAMP,
driver_lic_valid_end TIMESTAMP,
car_lic_register TIMESTAMP,
primary key (id) not enforced
) with (
‘connector’ = ‘mysql’
,‘hostname’ = ‘rm-cn-x0r3fp1lj000qa.rwlb.rds.aliyuncs.com’
,‘port’ = ‘3306’
,‘username’ = ‘xxxx’
,‘password’ = ‘xxxxx’
,‘database-name’ = ‘dim’
,‘table-name’ = ‘dim_car_info’
)
;

3.2.2.3 创建paimon映射表

drop table if exists xxx.dim.paimon_dim_car_info_f;
create table if not exists xxx.dim.paimon_dim_car_info_f( id BIGINT, car_status BIGINT comment '车辆状态 1:启用 0:禁用', is_inspection BIGINT comment '是否验车 1:是 0:否', audit_status BIGINT comment '普通车辆审核状态 0:数据初始化 1:待初审 3:初审未通过 5:待终审 7:终审通过 8:终审未通过 10:信息已失效', net_audit_status BIGINT comment '网约车辆审核状态 0:数据初始化 1:待初审 3:初审未通过 5:待终审 7:终审通过 8:终审未通过 10:信息已失效', audit_desc STRING comment '车辆审核描述', audit_date TIMESTAMP comment '车辆普通信息最后审核时间', net_audit_date TIMESTAMP comment '车辆网约信息最后审核时间', car_level_id BIGINT comment '车辆等级ID', car_level_name STRING comment '车辆等级名称', car_source BIGINT comment '车辆来源: 0.数据初始化 1.自营 2.加盟', register_channel BIGINT comment '注册渠道,1:app 2: 第三方渠道 3:管理系统', car_city_no BIGINT comment '车辆所在地城市编号', car_city_name STRING comment '城市名称', car_plate_no STRING comment '车牌号', car_plate_color BIGINT comment '车牌颜色(1.蓝色 2.黄色 3.黑色 4.白色 5.绿色 6.其他', car_brand_id BIGINT comment '车辆品牌ID', car_brand STRING comment '车辆品牌', car_color BIGINT comment '车辆颜色(1.黑色 2.白色 3.蓝色 4.金色 5.银色 6.棕色 7.灰色 8.黄色 9.粉色 10.红色 11.紫色 12.绿色)', car_seats BIGINT comment '核定载客人数', car_owner_type BIGINT comment '车辆归属类型(行驶证信息):1.个人私家车 2.出租车企业 3.平台自有车', car_producer_brand STRING comment '车辆厂牌(行驶证信息)', car_producer_brand_model STRING comment '车辆品牌型号(行驶证信息)', vehicle_type STRING comment '车辆类型(行驶证信息)', car_owner STRING comment '车辆所有人', car_character BIGINT comment '车辆性质: 1.非营运 2.租赁 3.预约出租客运 4.出租客运 5.营转非', vin STRING comment '车架号', engine_no STRING comment '发动机号', fuel_type BIGINT comment '车辆燃料类型(1.汽油 2.柴油 3.天然气 4.液化气 5.电动 6.其他)', displacement BIGINT comment '发动机排量(mL)', inspection_status BIGINT comment '车辆年检状态 1:未年检 2:已年检 3:年检未通过', total_distance BIGINT comment '行驶总里程(KM)', engine_power BIGINT comment '发动机功率,单位kw', wheel_base BIGINT comment '车辆轴距(M)', gps_brand STRING comment '卫星定位装置品牌', gps_model STRING comment '卫星定位装置型号', gps_imei STRING comment '卫星定位IMEI', net_car_lic_no STRING comment '网络预约汽车运输资格证号', net_car_lic_issue_agency STRING comment '网络预约汽车运输资格证颁发机构', net_car_lic_oper_area STRING comment '经营区域', net_car_lic_verified BIGINT comment '网约车汽车运输资格证三方验证:1.通过 2.未验证 3.未通过', net_car_lic_verified_remarkSTRING comment '网约车汽车运输资格证三方验证备注', is_push BIGINT comment '是否向交委推送:1:未推送;2:推送 3:驳回 ', is_push_time TIMESTAMP comment '向交委推送时间 ', create_time TIMESTAMP comment '创建时间', update_time TIMESTAMP comment '更新时间', write_time TIMESTAMP comment '写入时间', id_card_valid_start TIMESTAMP comment '身份证有效期开始', id_card_valid_end TIMESTAMP comment '身份证失效时间', driver_lic_issue TIMESTAMP comment '初次领取驾驶证日期', driver_lic_valid_start TIMESTAMP comment '驾驶证生效日期', driver_lic_valid_end TIMESTAMP comment '驾驶证失效日期', car_lic_register TIMESTAMP comment '车辆注册日期(行驶证信息)', primary key (id`) not enforced
) with (
‘bucket’ = ‘4’,
‘bucket-key’ = ‘id’,
‘changelog-producer’ = ‘input’,
‘compaction.max.file-num’ = ‘20’,
‘compaction.min.file-num’ = ‘4’,
‘continuous.discovery-interval’ = ‘5s’,
‘log.changelog-mode’ = ‘auto’,
‘merge-engine’ = ‘deduplicate’,
‘write-mode’ = ‘auto’,
‘scan.mode’ = ‘default’,
‘lookup.async’ = ‘true’,
‘lookup.async-thread-number’ = ‘1’
)
;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.2.4 从mysql插入到paimon表

在流作业草稿中部署运行
insert into xxxpm.dim.paimon_dim_car_info_f
select id
, car_status
, is_inspection
, audit_status
, net_audit_status
, audit_desc
, audit_date
, net_audit_date
, car_level_id
, car_level_name
, car_source
, register_channel
, car_city_no
, car_city_name
, car_plate_no
, car_plate_color
, car_brand_id
, car_brand
, car_color
, car_seats
, car_owner_type
, car_producer_brand
, car_producer_brand_model
, vehicle_type
, car_owner
, car_character
, vin
, engine_no
, fuel_type
, displacement
, inspection_status
, total_distance
, engine_power
, wheel_base
, gps_brand
, gps_model
, gps_imei
, net_car_lic_no
, net_car_lic_issue_agency
, net_car_lic_oper_area
, net_car_lic_verified
, net_car_lic_verified_remark
, is_push
, is_push_time
, create_time
, update_time
, write_time
, id_card_valid_start
, id_card_valid_end
, driver_lic_issue
, driver_lic_valid_start
, driver_lic_valid_end
, car_lic_register
from mysqlcdc.dim.dim_car_info;

3.2.2.5 结果查看

此时任务已经提交成功,首先可以查看flink web页面,任务是否正常运行。
在这里插入图片描述
在这里插入图片描述

其次,数据是 sink 到 paimon 中,不仅 paimon表中能查到数据,而且 oss 上对应的路径也能查看到文件的更新。
select * from xxxpm.dim.paimon_dim_car_info_f;
在这里插入图片描述

此外,因为使用了paimon整合了MaxCompute,所以在MaxCompute中也会生成对应的表,当然也能查到对应的数据。
打开datawork控制台,打开DataStudio。
在表管理中,可以查看到新建的paimon_dim_car_info_f表。
在这里插入图片描述

双击表名,可以看到表的元数据信息。
在开发中可以查询表中的数据,需要设置两个参数:
odps.sql.common.table.planner.ext.hive.bridge 为双签名开关,值需要设置为true,表示打开双签名开关,通过双签名模式创建Paimon外部表。
odps.sql.hive.compatible 设置为true,则为hive兼容模式。
SET odps.sql.common.table.planner.ext.hive.bridge = true;
SET odps.sql.hive.compatible = true;
select * from dwxxx_dev.paimon_dim_car_info_f ;

3.2.2.6 测试

1)查看mysql数据变化之前paimon表的数据
select car_status from dwxxx_dev.paimon_dim_car_info_f
where id = 1462;

2)mysql表更新数据
登录dms,选择dim库,运行下面的代码
update dim.dim_car_info set car_status=0 where id = 1462;
3)稍等片刻后再次查看paimon外部表的数据
select car_status from dwxxx_dev.paimon_dim_car_info_f
where id = 1462;

可见paimon表中数据会自动更新,实时变化。

3.2.3 其他表开发

– 维表 dim_car_vendor
drop table if exists xxxxpm.dim.paimon_dim_car_vendor_f;
create table if not exists xxxxpm.dim.paimon_dim_car_vendor_f
(
vendor_id BIGINT,
area_name STRING,
vendor_name STRING,
area_id BIGINT,
login_id BIGINT,
contact_mobile STRING,
contact_name STRING,
service_status BIGINT,
create_time TIMESTAMP,
update_time TIMESTAMP,
primary key (vendor_id) not enforced
) with (
‘bucket’ = ‘4’,
‘bucket-key’ = ‘vendor_id’,
‘changelog-producer’ = ‘input’,
‘compaction.max.file-num’ = ‘20’,
‘compaction.min.file-num’ = ‘4’,
‘continuous.discovery-interval’ = ‘5s’,
‘log.changelog-mode’ = ‘auto’,
‘merge-engine’ = ‘deduplicate’,
‘write-mode’ = ‘auto’,
‘scan.mode’ = ‘default’,
‘lookup.async’ = ‘true’,
‘lookup.async-thread-number’ = ‘1’
)
;

insert into xxxxpm.dim.paimon_dim_car_vendor_f
select vendor_id
, area_name
, vendor_name
, area_id
, login_id
, contact_mobile
, contact_name
, service_status
, create_time
, update_time
from mysqlcdc.dim.dim_car_vendor
;

– 维表 dim_driver_info
drop table if exists xxxxpm.dim.paimon_dim_driver_info_f;
create table if not exists xxxxpm.dim.paimon_dim_driver_info_f
(
driver_id BIGINT,
login_id BIGINT,
leader_id BIGINT,
car_id BIGINT,
city_no BIGINT,
city_name STRING,
phone STRING,
true_name STRING,
nation STRING,
address STRING,
education STRING,
id_card_no STRING,
id_card_issue_org STRING,
nationality STRING,
registered_address STRING,
driver_mark BIGINT,
sex BIGINT,
driver_lic_no STRING,
driver_lic_class STRING,
driver_lic_issue_org STRING,
net_driver_lic_no STRING,
net_driver_lic_type BIGINT,
net_driver_lic_issue_org STRING,
work_lic_no STRING,
contract_id STRING,
registration_time TIMESTAMP,
driver_type BIGINT,
register_channel BIGINT,
audit_status BIGINT,
net_audit_status BIGINT,
audit_status_sum BIGINT,
net_audit_status_sum BIGINT,
net_driver_lic_verified BIGINT,
net_driver_lic_verified_remark STRING,
last_audit_date TIMESTAMP,
net_audit_date TIMESTAMP,
audit_desc STRING,
allow_receive_type BIGINT,
real_allow_change BIGINT,
booking_allow_change BIGINT,
is_blacklist BIGINT,
is_push BIGINT,
is_push_time TIMESTAMP,
bind_car_time TIMESTAMP,
net_audit_status_sum_date TIMESTAMP,
audit_status_sum_date TIMESTAMP,
id_card_valid_start TIMESTAMP,
id_card_valid_end TIMESTAMP,
driver_lic_issue TIMESTAMP,
driver_lic_valid_start TIMESTAMP,
driver_lic_valid_end TIMESTAMP,
md5_phone STRING,
md5_id_card_no STRING,
driver_status_created_at TIMESTAMP,
driver_status_updated_at TIMESTAMP,
driver_birthday STRING,
net_driver_lic_get TIMESTAMP,
work_lic_issue TIMESTAMP,
net_driver_lic_issue TIMESTAMP,
work_lic_valid_start TIMESTAMP,
net_driver_lic_report TIMESTAMP,
net_driver_lic_valid_start TIMESTAMP,
work_lic_valid_end TIMESTAMP,
net_driver_lic_valid_end TIMESTAMP,
login_type BIGINT,
create_time TIMESTAMP,
update_time TIMESTAMP,
primary key (driver_id) not enforced
) with (
‘bucket’ = ‘4’,
‘bucket-key’ = ‘driver_id’,
‘changelog-producer’ = ‘input’,
‘compaction.max.file-num’ = ‘20’,
‘compaction.min.file-num’ = ‘4’,
‘continuous.discovery-interval’ = ‘5s’,
‘log.changelog-mode’ = ‘auto’,
‘merge-engine’ = ‘deduplicate’,
‘write-mode’ = ‘auto’,
‘scan.mode’ = ‘default’,
‘lookup.async’ = ‘true’,
‘lookup.async-thread-number’ = ‘1’
)
;

insert into xxxxpm.dim.paimon_dim_driver_info_f
select driver_id
, login_id
, leader_id
, car_id
, city_no
, city_name
, phone
, true_name
, nation
, address
, education
, id_card_no
, id_card_issue_org
, nationality
, registered_address
, driver_mark
, sex
, driver_lic_no
, driver_lic_class
, driver_lic_issue_org
, net_driver_lic_no
, net_driver_lic_type
, net_driver_lic_issue_org
, work_lic_no
, contract_id
, registration_time
, driver_type
, register_channel
, audit_status
, net_audit_status
, audit_status_sum
, net_audit_status_sum
, net_driver_lic_verified
, net_driver_lic_verified_remark
, last_audit_date
, net_audit_date
, audit_desc
, allow_receive_type
, real_allow_change
, booking_allow_change
, is_blacklist
, is_push
, is_push_time
, bind_car_time
, net_audit_status_sum_date
, audit_status_sum_date
, id_card_valid_start
, id_card_valid_end
, driver_lic_issue
, driver_lic_valid_start
, driver_lic_valid_end
, md5_phone
, md5_id_card_no
, driver_status_created_at
, driver_status_updated_at
, driver_birthday
, net_driver_lic_get
, work_lic_issue
, net_driver_lic_issue
, work_lic_valid_start
, net_driver_lic_report
, net_driver_lic_valid_start
, work_lic_valid_end
, net_driver_lic_valid_end
, login_type
, create_time
, update_time
from mysqlcdc.dim.dim_driver_info;

– 维表 dim_area
drop table if exists xxxxpm.dim.paimon_dim_area_f;
create table if not exists xxxxpm.dim.paimon_dim_area_f
(
area_id BIGINT comment ‘城市Id’,
parent_area_id BIGINT comment ‘父ID’,
area_name STRING comment ‘城市名称’,
area_type BIGINT comment ‘区域类型,2:国家,3:省,4:市,5:区,6:县’,
pin_yin STRING comment ‘城市汉语拼音’,
primary key (area_id) not enforced
) with (
‘bucket’ = ‘4’,
‘bucket-key’ = ‘area_id’,
‘changelog-producer’ = ‘input’,
‘compaction.max.file-num’ = ‘20’,
‘compaction.min.file-num’ = ‘4’,
‘continuous.discovery-interval’ = ‘5s’,
‘log.changelog-mode’ = ‘auto’,
‘merge-engine’ = ‘deduplicate’,
‘write-mode’ = ‘auto’,
‘scan.mode’ = ‘default’,
‘lookup.async’ = ‘true’,
‘lookup.async-thread-number’ = ‘1’
)
;

insert into xxxxpm.dim.paimon_dim_area_f
select area_id
, parent_area_id
, area_name
, area_type
, pin_yin
from mysqlcdc.dim.dim_area;

– 维表 dim_date_work_type
drop table if exists xxxxpm.dim.paimon_dim_date_work_type_f;
create table xxxxpm.dim.paimon_dim_date_work_type_f
(
id BIGINT,
work_day DATE comment ‘日期’,
day_of_week BIGINT comment ‘周一到周日’,
work_type BIGINT comment ‘1:工作日,2:节假日’,
vacation STRING comment ‘节假’,
created_at TIMESTAMP comment ‘创建时间’,
updated_at TIMESTAMP comment ‘更新时间’,
primary key (id) not enforced
) with (
‘bucket’ = ‘4’,
‘bucket-key’ = ‘id’,
‘changelog-producer’ = ‘input’,
‘compaction.max.file-num’ = ‘20’,
‘compaction.min.file-num’ = ‘4’,
‘continuous.discovery-interval’ = ‘5s’,
‘log.changelog-mode’ = ‘auto’,
‘merge-engine’ = ‘deduplicate’,
‘write-mode’ = ‘auto’,
‘scan.mode’ = ‘default’,
‘lookup.async’ = ‘true’,
‘lookup.async-thread-number’ = ‘1’
)
;

insert into xxxxpm.dim.paimon_dim_date_work_type_f
select id
, work_day
, day_of_week
, work_type
, vacation
, created_at
, updated_at
from mysqlcdc.dim.dim_date_work_type
;

– 维表 dim_date_work_type
drop table if exists xxxxpm.dim.paimon_dim_user_info_f;
create table if not exists xxxxpm.dim.paimon_dim_user_info_f
(
userid BIGINT comment ‘用户ID’,
mobile STRING comment ‘手机号’,
password STRING comment ‘密码’,
realname STRING comment ‘真实姓名’,
gender BIGINT comment '0未知 1男 2女 ',
email STRING comment ‘邮箱’,
areaid BIGINT comment ‘区域id’,
address STRING comment ‘用户地址’,
birthday TIMESTAMP comment ‘生日’,
areacode STRING comment ‘国家地区区号 中国 0086’,
photourl STRING comment ‘头像’,
enabled BIGINT comment ‘0不启用 1启用’,
createtime TIMESTAMP,
update_time TIMESTAMP,
primary key (userid) not enforced
) with (
‘bucket’ = ‘4’,
‘bucket-key’ = ‘userid’,
‘changelog-producer’ = ‘input’,
‘compaction.max.file-num’ = ‘20’,
‘compaction.min.file-num’ = ‘4’,
‘continuous.discovery-interval’ = ‘5s’,
‘log.changelog-mode’ = ‘auto’,
‘merge-engine’ = ‘deduplicate’,
‘write-mode’ = ‘auto’,
‘scan.mode’ = ‘default’,
‘lookup.async’ = ‘true’,
‘lookup.async-thread-number’ = ‘1’
)
;

insert into xxxxpm.dim.paimon_dim_user_info_f
select userid
, mobile
, password
, realname
, gender
, email
, areaid
, address
, birthday
, areacode
, photourl
, enabled
, createtime
, updatetime
from mysqlcdc.dim.dim_user_info
;

3.2.4 部署

(1)将所有的建表语句运行一下
(2)新建一个xxxx的文件夹,在xxxx下建了一个流作业草稿,名称为dim,将所有的insert语句写入到dim作业中。
当有多个insert into语句时,需要包裹在 BEGIN STATEMENT SET; 和 END;之中。
BEGIN STATEMENT SET;
INSERT INTO xxx
INSERT INTO xxx
END;
(3)点击部署
(4)提交到平台上后,点击作业,点击编辑,可以修改资源和运行参数等。

将Job Manager CPU设置为1,Memory设置为2
Task Manager CPU设置为1,Memory设置为4
系统检查点间隔设置为60s
两次系统检查点之间的最短时间间隔设置为60s
修改完成后,点击无状态启动。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C:每日一练:单身狗(2.0版本)

前言: 今天在刷题的时候突然看到一道题,疑似一位故题。仔细一看,欸!这不是就是单身狗的升级版吗?我想那必须再安排一篇,不过由于本篇文章与上一篇单身狗文章所涉及的知识点基本相同,所以还请大…

小型企业客户关系管理系统pf

TOC springboot457小型企业客户关系管理系统pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&#xff0…

推送本地windows环境镜像到阿里云镜像仓库

说明:从dockerhub拉取了apache/kafka3.7.0镜像到本地windwos操作系统上,再将该镜像推送到阿里云镜像仓库,记录了本次操作过程。 1、启动本地的docker desktop,搜索官方镜像 将搜索到的apache/kafka官方镜像拉取到本地 镜像拉取…

代码随想录算法训练营_day18

题目信息 530. 二叉搜索树的最小绝对差 题目链接: https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/题目描述: 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等…

SpringBoot基础(二):配置文件详解

SpringBoot基础系列文章 SpringBoot基础(一):快速入门 SpringBoot基础(二):配置文件详解 目录 一、配置文件分类二、配置文件优先级1、不同版本优先级2、不同位置优先级 三、配置文件格式1、yml和yaml格式1.1、字符串1.2、布尔类型1.3、整数型1.4、浮点…

论文阅读笔记:The Graph Neural Network Model

论文来源 IEEE Transactions on Neural Networks,Volume: 20 Issue: 1 背景 图神经网络模型本身具有广泛的使用背景,由于我个人研究交通流量预测的需要,此处仅考虑深度学习领域。图结构指的是由节点node和若干个连接的边edge组成的一种数据…

【Docker】Docker Compose(容器编排)

一、什么是 Docker Compose docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了 Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。 docker-compose 中有两个非常重要的概念&…

关于Python3项目中依赖包管理问题

背景:最近在使用Python3.11编写脚本来获取google play中app的用户评论,脚本中需要安装多个依赖包,在本地Pycharm调试通过以后,上传到github,然后在linux服务器拉取脚本来运行,发现存在几个问题。本文将面临…

【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(三)

目录 1 -> WebAPI背景知识 1.1 -> 什么是WebAPI 1.2 -> 什么是API 1.3 -> 什么是DOM 1.3.1 -> DOM树 2 -> 获取元素 2.1 -> querySelector 2.2 -> querySelectorAll 3 -> 事件初识 3.1 -> 基本概念 3.2 -> 事件三要素 4 -> 操…

Apache Tomcat 信息泄露漏洞CVE-2024-21733、CVE-2024-24549和CVE-2024-34750排查处理

一、漏洞描述 Apache Tomcat作为一个流行的开源Web服务器和Java Servlet容器并用于很多中小型项目的开发中。其中,Coyote作为Tomcat的连接器组件,是Tomcat服务器提供的供客户端访问的外部接口,客户端通过Coyote与服务器建立链接、发送请求并且接收响应。 近日发现Apache To…

政企单位如何选择适合规模的即时通讯软件?

政企单位在不同规模的组织结构中都面临着沟通和协作的挑战。为了提高工作效率和团队协作能力,选择适合规模的即时通讯软件至关重要。本文将为政企单位在选择适合规模的即时通讯软件时提供一些关键要素和指导,同时重点介绍WorkPlus作为一个可以迎合政企单…

Java语言程序设计——篇十四(1)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

34_Web漏洞扫描工具、常见Web漏洞扫描工具、AWVS的部署与使用、 渗透测试执行流程、AWVS破解

Web漏洞扫描工具 Web漏洞扫描是在Web信息收集的基础上,进行更进一步的自动化的安全评估、漏洞挖掘、渗透测试 Web漏洞扫描会出现漏报,需要手工结合使用 常见Web漏洞扫描工具 AWVS、OWASP ZAP、Arachni、Nitko、Paros... 渗透测试执行流程&#xff1a…

IDEA研究院编程语言MoonBit发布beta预览版,快速实现多领域应用

MoonBit beta 预览版比大部分主流语言更早推出现代化泛型、精准错误处理和高效迭代器等重要特性,在云计算、边缘计算、人工智能和教育等领域快速实现落地应用。Beta 预览版标志着 MoonBit 生态进入全新阶段,为用户提供更稳定、流畅的创新操作体验。 Moo…

C++入门——03内存管理

上图为C语言的内存管理,C中可以继续使用,但有些地方就无能为力而且使用起来比较麻烦,因此C又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。 1.new和delete操作符 1.1.new/delete操作内置类型 注意&#xf…

自闭症青年的行为特征有哪些

自闭症,又称孤独症,是一种神经发育障碍,它不仅影响儿童的成长,也会在青年时期展现出一系列独特的行为特征。了解这些特征对于更好地支持和帮助自闭症青年融入社会至关重要。 社交互动方面的困难是自闭症青年较为显著的特征之一。他…

IO进程(学习)2024.8.17

目录 文件属性获取 目录操作 标准IO 和文件IO 的区别 库 库的定义 库的分类 静态库 动态库 库的制作 制作静态库 动态库的制作 使用库 进程 程序和进程的区别 程序:编译好的可执行文件 进程:一个独立的可调度的任务 特点 进程段 进程…

SMS流媒体服务器-MPEG-PS流的深度解析

1.简介 ps流的解析,只要按照标准文档对照16进制的流数据,基本都能看的明白。但是实际项目中会碰到各种各样的问题。本文将对如何高效的解析出音视频数据发表一下个人的看法。 介绍一下本人的开源流媒体,点个star,有兴趣一起开发的…

应急响应:勒索病毒-实战 案例一.【Windows 系统-排查和解密】

什么是勒索病毒. 勒索病毒是一种恶意软件,它通过加密用户的数据或锁定用户设备,然后要求用户支付赎金以解锁数据或系统。勒索病毒的入侵方式多样,包括网络共享文件、捆绑传播、垃圾邮件、水坑攻击、软件供应链传播、暴力破解、利用已知漏洞攻…

javaweb_08:Mybatis入门(基于Springboot)

javaweb_08:Mybatis入门 一、引入二、快速入门(一)准备工作1、创建Springboot工程2、创建user数据库3、创建实体类 (二)引入MyBatis相关依赖,配置MyBatis。(三)编写SQL语句&#xff…