wordpress手机菜单/南京搜索引擎推广优化

wordpress手机菜单,南京搜索引擎推广优化,公司做网站费用怎么记账,wordpress WP-Wiki前言 今天分享的其实是一个面试上机方案,就是监测DM数据库数据,同步到ES,使用flink实现。基本套路,其实也没啥好说的,非要说也就是,国家队还是很多不跟你玩啊,虽然flink有阿里在背后&#xff0c…

前言

       今天分享的其实是一个面试上机方案,就是监测DM数据库数据,同步到ES,使用flink实现。基本套路,其实也没啥好说的,非要说也就是,国家队还是很多不跟你玩啊,虽然flink有阿里在背后,但是确实也没有带DM玩。也许是DM不配合,万一真有互联网公司带着玩,政府部门估计不敢用了,哈哈。


一、DM数据库连接

       我这里是使用的DBeaver连接DM数据库的,自己建的驱动,以前有分享怎么建,这里就不细说。
       看效果检查数据也是使用DBeaver连接的ES,ES要证书什么的,这里也是使用建驱动连接,跟DM一样的。
自建驱动连接DM、ES
ES免证书连接驱动下载
连接DM数据库配置驱动
在这里插入图片描述

二、实现方案

  1. 监视数据变化,DM数据库自己完成,采用触发器监视
  2. flink监视第一步监视的数据表,flink没有直接binlog这种方式监视DM数据库
  3. flink实现周期监视变更记录表
  4. 处理增、删、改业务逻辑同步ES

三、上代码

1.创建触发器

REATE OR REPLACE TRIGGER DB库名.RC_PASS_RECORD_CHANGE_LOG_TRIGGER
AFTER INSERT OR UPDATE OR DELETE ON DB库名.RC_PASS_RECORD
FOR EACH ROW
BEGINIF INSERTING THEN-处理插入INSERT INTO RC_PASS_RECORD_CHANGE_LOG (CHANGE_TYPE, CHANGE_ID) VALUES ('INSERT', :new.ID);ELSIF UPDATING THEN-处理更新INSERT INTO RC_PASS_RECORD_CHANGE_LOG (CHANGE_TYPE, CHANGE_ID) VALUES ('UPDATE', :new.ID);ELSIF DELETING THEN-处理删除INSERT INTO RC_PASS_RECORD_CHANGE_LOG (CHANGE_TYPE, CHANGE_ID) VALUES ('DELETE', :old.ID);END IF;
END;

2.flink代码

这里集成Springboot,所以先建最新的Springboot项目,引入flink的依赖、DM数据库、ES的连接依赖。
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zw</groupId><artifactId>olap-zw</artifactId><version>0.0.1-SNAPSHOT</version><name>olap-zw</name><description>olap-zw</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version><skipTests>true</skipTests><flink.version>1.20.1</flink.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!--<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency>--><!-- <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version></dependency>--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.18</version></dependency>--><dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.3.62</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-java</artifactId><version>${flink.version}</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-scala_2.12</artifactId><version>${flink.version}</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-clients</artifactId><version>${flink.version}</version></dependency><dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-elasticsearch7</artifactId><version>3.0.1-1.17</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.25</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin><!-- Flink打包方式一 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><configuration><archive><manifest><mainClass>com.zw.olapzw.OlapZwApplication</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build></project>

代码包结构与文件
在这里插入图片描述
配置文件

spring.application.name=olap-zwspring.datasource.url=jdbc:dm://192.168.1.22:5236?schema=DB库名&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=账号
spring.datasource.password=密码
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.druid.initial-size=5
#spring.datasource.druid.max-active=10
#spring.datasource.druid.min-idle=5
#spring.datasource.druid.max-wait=60000
#spring.datasource.druid.validation-query=SELECT 1
#spring.datasource.druid.test-while-idle=true
#spring.datasource.druid.time-between-eviction-runs-millis=30000
#spring.datasource.druid.min-evictable-idle-time-millis=60000es.host=192.168.1.21
es.port=9200logging.level.root=error
logging.level.com.zw.olapzw.sink=error
logging.level.com.zw.olapzw.source=error

entity -> SourceDataEntity

package com.zw.olapzw.entity;import lombok.Data;import java.util.Date;/*** @author zwmac*/
@Data
public class SourceDataEntity {private String id;private Long deviceId;private Long gateId;private String authObjCode;/*** 变更类型,来源触发器插入的标识*/private String changeType;/*** 同步时间*/private Date storageTime;
}

sink -> ResultSinkDataEntitySink

package com.zw.olapzw.sink;import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.zw.olapzw.entity.SourceDataEntity;
import com.zw.olapzw.util.ConnUtil;
import com.zw.olapzw.util.ESClientUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** @author zwmac*/
@Slf4j
public class ResultSinkDataEntitySink extends RichSinkFunction<SourceDataEntity> {@Resourceprivate ConnUtil connUtil;@Overridepublic void invoke(SourceDataEntity record, Context context) throws Exception {super.invoke(record, context);//收到的数据log.info("Start sink data entity");log.info("Sink data: {}", record);//设置存储时间record.setStorageTime(DateUtil.date());//组织sql,利用反射JSONObject dataJson = JSONUtil.parseObj(record);log.info("-- 同步数据dataJson: {}", dataJson);//TODO 连接ES,存储到ES// 连接 ElasticsearchConnUtil connUtil = SpringUtil.getBean(ConnUtil.class);String es_host = connUtil.getEsHost();String es_port = connUtil.getEsPort();RestHighLevelClient restHighLevelClient = ESClientUtil.getClient(es_host, Integer.parseInt(es_port));//使用RestHighLevelClient创建索引//根据changeType判断String changeType = record.getChangeType();switch (changeType) {case "INSERT"://创建索引sinkInsert(record, dataJson, restHighLevelClient);break;case "UPDATE":sinkUpdate(record, dataJson, restHighLevelClient);break;case "DELETE":sinkDel(record, dataJson, restHighLevelClient);break;}//关闭连接restHighLevelClient.close();log.info("end sink data entity");}/*** 删除数据* @param record* @param dataJson* @param restHighLevelClient* @throws IOException*/private void sinkDel(SourceDataEntity record, JSONObject dataJson, RestHighLevelClient restHighLevelClient) throws IOException {//使用restHighLevelClient删除数据DeleteRequest deleteRequest = new DeleteRequest("test_index", record.getId());DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);log.error("--- ES使用DeleteRequest删除返回deleteResponse: {}", deleteResponse);}/*** 更新数据* @param record* @param dataJson* @param restHighLevelClient* @throws IOException*/private void sinkUpdate(SourceDataEntity record, JSONObject dataJson, RestHighLevelClient restHighLevelClient) throws IOException {//使用restHighLevelClient更新数据UpdateRequest updateRequest = new UpdateRequest("test_index", record.getId());//String jsonStr = JSONUtil.toJsonStr(dataJson);//updateRequest.doc("data", jsonStr);Map<String, Object> updateFields = new HashMap<>();updateFields.put("deviceId", record.getDeviceId());updateFields.put("id", record.getId());updateFields.put("authObjCode", record.getAuthObjCode());updateFields.put("gateId", record.getGateId());if (MapUtil.isNotEmpty(updateFields)){updateRequest.doc(updateRequest);UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);log.error("---- ES使用UpdateRequest更新返回: {}", updateResponse);}else {log.error("------- es更新时 updateMap is empty");}}/*** 插入数据* @param record* @param dataJson* @param restHighLevelClient* @throws IOException*/private void sinkInsert(SourceDataEntity record, JSONObject dataJson, RestHighLevelClient restHighLevelClient) throws IOException {//使用restHighLevelClient存储数据IndexRequest indexRequest = new IndexRequest("test_index");indexRequest.id(record.getId());Map<String, Object> insertFields = new HashMap<>();insertFields.put("deviceId", record.getDeviceId());insertFields.put("id", record.getId());insertFields.put("authObjCode", record.getAuthObjCode());insertFields.put("gateId", record.getGateId());indexRequest.source(insertFields);IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);log.error("------ ES使用IndexRequest插入返回indexResponse: {}", indexResponse);}
}

source -> ResultSourceDataEntitySource

package com.zw.olapzw.source;import cn.hutool.extra.spring.SpringUtil;
import com.zw.olapzw.entity.SourceDataEntity;
import com.zw.olapzw.util.ConnUtil;
import dm.jdbc.util.StringUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.flink.streaming.api.functions.source.RichSourceFunction;
import org.springframework.stereotype.Component;import java.sql.*;/*** @author zwmac*/
@Component
@Slf4j
public class ResultSourceDataEntitySource extends RichSourceFunction<SourceDataEntity> {@Resourceprivate ConnUtil connUtil;String changeLogSql = "SELECT * FROM LAMP_ZF.RC_PASS_RECORD_CHANGE_LOG RPRCL";String recordSql = "SELECT * FROM LAMP_ZF.RC_PASS_RECORD RPR";Long startId = 0L;private volatile boolean isRunning = true;@Overridepublic void run(SourceContext<SourceDataEntity> sourceContext) throws Exception {//TODO 从数据库中读取数据,这块要是跟springboot结合起来,就可以用一些orm框架,等等项目上的一些东西了log.info("Start source data entity");try {ConnUtil connUtil = SpringUtil.getBean(ConnUtil.class);String jdbcUrl = connUtil.getJdbcUrl();String jdbcUsername = connUtil.getJdbcUsername();String jdbcPassword = connUtil.getJdbcPassword();Connection connection = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword);Statement statement = connection.createStatement();// 执行查询语句while (isRunning) {StringBuffer sbf = new StringBuffer();sbf.append(changeLogSql);sbf.append(" WHERE RPRCL.ID > ");sbf.append(startId);sbf.append(" ORDER BY RPRCL.ID ASC");String querySql = sbf.toString();//log.info(querySql);log.error("---查询sql:" + querySql);ResultSet resultSet = statement.executeQuery(querySql);// 处理查询结果while (resultSet.next()) {// 读取每一行数据Long id = resultSet.getLong("ID");startId = id;//CHANGE_TYPEString changeType = resultSet.getString("CHANGE_TYPE");//CHANGE_IDString changeId = resultSet.getString("CHANGE_ID");//CREATE_TIMEDate changeDate = resultSet.getDate("CREATE_TIME");SourceDataEntity sourceDataEntity = new SourceDataEntity();sourceDataEntity.setChangeType(changeType);//如果是删除就不查了if("DELETE".equals(changeType)) {sourceDataEntity.setId(changeId);}else {//根据类型查询对应的数据StringBuffer recordSbf = new StringBuffer();recordSbf.append(recordSql);recordSbf.append(" WHERE RPR.ID = '" + changeId + "'");String queryRecordSql = recordSbf.toString();log.error("-- 查询记录sql:" + queryRecordSql);Statement recordSm = connection.createStatement();ResultSet recordRs = recordSm.executeQuery(queryRecordSql);while (recordRs.next()) {//解析数据sourceDataEntity.setId(recordRs.getString("ID"));sourceDataEntity.setDeviceId(recordRs.getLong("DEVICE_ID"));sourceDataEntity.setGateId(recordRs.getLong("GATE_ID"));sourceDataEntity.setAuthObjCode(recordRs.getString("AUTH_OBJ_CODE"));}}if (sourceDataEntity.getId() != null){//解决物理删除后的报错sourceDataEntity.setStorageTime(changeDate);sourceContext.collect(sourceDataEntity);}}//调试用的,生产可以根据情况加活不加Thread.sleep(10000L);}} catch (SQLException e) {log.error(e.getMessage());}}@Overridepublic void cancel() {isRunning = false;}
}

util -> ConnUtil

package com.zw.olapzw.util;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
@Data
public class ConnUtil {@Value("${spring.datasource.url}")private String jdbcUrl;@Value("${spring.datasource.username}")private String jdbcUsername;@Value("${spring.datasource.password}")private String jdbcPassword;@Value("${es.host}")private String esHost;@Value("${es.port}")private String esPort;}

util -> ESClientUtil

package com.zw.olapzw.util;import lombok.Data;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestClientBuilder.HttpClientConfigCallback;
import org.apache.http.HttpHost;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.io.IOException;/*** @author zwmac*/
public class ESClientUtil {private static RestHighLevelClient restHighLevelClient;public static RestHighLevelClient getClient(String host, int port) {RestClientBuilder builder = RestClient.builder(new HttpHost(host, port, "http")).setHttpClientConfigCallback(new HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {return httpClientBuilder;}});restHighLevelClient = new RestHighLevelClient(builder);return restHighLevelClient;}public static void closeClient() {try {if (restHighLevelClient != null) {restHighLevelClient.close();}} catch (IOException e) {e.printStackTrace();}}
}

OlapZwApplication

package com.zw.olapzw;import com.zw.olapzw.entity.SourceDataEntity;
import com.zw.olapzw.sink.ResultSinkDataEntitySink;
import com.zw.olapzw.source.ResultSourceDataEntitySource;
import org.apache.flink.api.common.restartstrategy.RestartStrategies;
import org.apache.flink.streaming.api.CheckpointingMode;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.CheckpointConfig;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.SourceFunction;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;/*** @author zwmac*/
@SpringBootApplication
public class OlapZwApplication {/*public static void main(String[] args) {//SpringApplication.run(OlapZwApplication.class, args);//获取flink的运行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//设置并行度env.setParallelism(1);//开启checkpoint,每隔5秒钟做一次checkpointenv.enableCheckpointing(5000L);//指定checkpoint的一致性语义CheckpointConfig checkpointConfig = env.getCheckpointConfig();checkpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);//设置任务关闭的时候保留最后一次checkpoint数据checkpointConfig.enableUnalignedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION.deleteOnCancellation());//重试策略设置env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, 10));//源数据DataStreamSource<SourceDataEntity> streamSource = env.addSource(new ResultSourceDataEntitySource(), "ResultSourceDataEntitySource");//下层处理streamSource.addSink(new ResultSinkDataEntitySink());System.out.println("Hello, OlapZwApplication!");try {env.execute("达梦数据库变更数据同步");} catch (Exception e) {System.out.println("达梦数据库变更数据同步,原因:" + e.getMessage());throw new RuntimeException(e);}}
*/public static void main(String[] args) {SpringApplication.run(OlapZwApplication.class, args);System.out.println("OlapZwApplication started");}@Beanpublic CommandLineRunner commandLineRunner(ApplicationContext ctx) {return args -> {//获取flink的运行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//设置并行度env.setParallelism(1);//开启checkpoint,每隔5秒钟做一次checkpointenv.enableCheckpointing(5000L);//指定checkpoint的一致性语义CheckpointConfig checkpointConfig = env.getCheckpointConfig();checkpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);//设置任务关闭的时候保留最后一次checkpoint数据checkpointConfig.enableUnalignedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION.deleteOnCancellation());//重试策略设置env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, 10));//源数据SourceFunction source = new ResultSourceDataEntitySource();//添加数据源到运行环境DataStreamSource<SourceDataEntity> streamSource = env.addSource(source, "ResultSourceDataEntitySource");//下游处理逻辑streamSource.addSink(new ResultSinkDataEntitySink());try {env.execute("达梦数据库变更数据同步");} catch (Exception e) {System.out.println("达梦数据库变更数据同步,原因:" + e.getMessage());throw new RuntimeException(e);}System.out.println("flink CDC started");};}}

总结

  • 其实感觉没啥好说的,整个代码后面分享到csdn的gitCode

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

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

相关文章

【蓝桥杯】24省赛:数字串个数

思路 本质是组合数学问题&#xff1a; 9个数字组成10000位数字有9**10000可能 不包括3的可能8**10000 不包括7的可能8**10000 既不包括3也不包括77**10000 根据容斥原理&#xff1a;结果为 9 ∗ ∗ 10000 − 8 ∗ ∗ 10000 − 8 ∗ ∗ 10000 7 ∗ ∗ 10000 9**10000 - 8**10…

Unity开发中对象池设计与使用

一、设计目的 为了避免频繁创建和销毁对象&#xff08;例如 UI 元素、事件对象等&#xff09;带来的内存分配和垃圾回收压力&#xff0c;可以使用对象池来管理对象来提高游戏的性能&#xff0c;避免游戏卡顿。 二、代码实现 public interface IRecycle {/// <summary>…

JVM并发编程AQSsync锁ReentrantLock线程池ThreadLocal

并发编程2 synchronized锁实现**AQS****ReentrantLock实现****JUC 常用类**池的概念 ThreadLocalThreadLocal原理内存泄露强引用:软引用弱引用虚引用ThreadLocal内存泄露 synchronized锁实现 synchronized是一个关键字,实现同步,还需要我们提供一个同步锁对象,记录锁状态,记录…

【JavaEE】网络原理之初识

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

操作系统-八股

进程基础&#xff1a; 进程定义&#xff1a;运行中的程序&#xff0c;有独立的内存空间和地址&#xff0c;是系统进行资源调度和分配的基本单位。 并发&#xff0c;并行 并发就是单核上面轮询&#xff0c;并行就是同时执行&#xff08;多核&#xff09;&#xff1b; 进程上下…

chrome浏览器插件拓展捕获页面的响应体内容

因为chrome extension官方没有的直接获取响应体的方法&#xff0c;所以需要自己实现方法来获取&#xff0c;实现的方式有很多种&#xff0c;这是记录的第二种&#xff0c;第一种就是使用vconsole来实现&#xff0c;vconsole是一个开源框架&#xff0c;一个轻量、可拓展、针对手…

沐数科技数据开发岗笔试题2025

描述性统计 标准差 答案: A 解析: 标准差 衡量数据集中数值变化或离散程度的一种度量。它反映了数据集中的各个数值与数据集的平均值&#xff08;均值&#xff09;之间的偏离程度。标准差越大&#xff0c;表明数据的分布越分散&#xff1b;标准差越小&#xff0c;表明数据…

Qt-ZMQ的使用补充(pub-sub)

之前写过一篇Qt使用ZMQ的博客Qt网络编程-ZMQ的使用&#xff0c;本文是其的补充部分。 Linux上编译使用 首先这次实在Linux上进行演示&#xff0c;下载zmq源码&#xff0c;安装cmake&#xff0c;使用cmake进行编译。下载之后解压&#xff1a; 输入命令&#xff1a; cd ..mkdi…

记录致远OA服务器硬盘升级过程

前言 日常使用中OA系统突然卡死&#xff0c;刷新访问进不去系统&#xff0c;ping服务器地址正常&#xff0c;立马登录服务器检查&#xff0c;一看磁盘爆了。 我大脑直接萎缩了&#xff0c;谁家OA系统配400G的空间啊&#xff0c;过我手的服务器没有50也是30台&#xff0c;还是…

[测试]自动化的概念 及使用Selenium实现Web自动化测试

文章目录 1. 自动化1.1 自动化概念1.2 自动化分类1.2.1 接口自动化1.2.2 UI自动化 1.3 自动化测试金字塔 2. Web自动化测试2.1 驱动 3. Selenium3.1 一个简单的Web自动化示例3.2 Selenium 驱动 浏览器的工作原理 1. 自动化 1.1 自动化概念 自动化是指自动地代替人的行为完成…

Python教程(三):类对象、闭包、装饰器、类型注解、MRO

Python总结&#xff08;三&#xff09; 本系列其他教程&#xff1a; Python教程(一)&#xff1a;基本语法、流程控制、数据容器 Python教程(二)&#xff1a;函数、异常、模块&包、文件读取、常用模块 文章目录 Python总结&#xff08;三&#xff09;一、类&对象1.1 成…

什么是 HTML?

HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言: HyperText Markup LanguageHTML 不是一种编程语言&#xff0c;而是一种标记语言标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页HTML 文档包含了HTML 标签及文本内容HTML文档也叫做 web 页面 HT…

如何用AI制作PPT,轻松实现高效演示

如何用AI制作PPT&#xff0c;轻松实现高效演示&#xff01;在今天这个快节奏的时代&#xff0c;我们的工作方式越来越依赖智能工具。而当涉及到演示文稿时&#xff0c;传统的PPT制作方式往往繁琐且耗时。很多人一提到制作PPT就头大&#xff0c;特别是在内容需要多次修改、调整布…

Canoe Panel基础功能介绍

文章目录 一、新建 Panel 面板二、添加 Panel 面板三、删除 Panel 面板四、Panel视图&#xff08;views&#xff09;五、控件布局1. 对齐布局2. 控件大小布局 六、Panel 属性设置1. 设置背景色和背景图片2. 调整 Panel 画布大小 提示&#xff1a;如何使用 Panel 面板参考 CANoe…

超声重建,3D重建 超声三维重建,三维可视化平台 UR 3D Reconstruction

1. 超声波3D重建技术的实现方法与算法 技术概述 3D超声重建是一种基于2D超声图像生成3D体积数据的技术&#xff0c;广泛应用于医学影像领域。通过重建和可视化三维结构&#xff0c;3D超声能够显著提高诊断精度和效率&#xff0c;同时减少医生的脑力负担。本技术文档将详细阐述…

2.2 企业级ESLint/Prettier规则定制

文章目录 1. 为什么需要企业级代码规范2. 工具选型对比3. 完整配置流程3.1 项目初始化3.2 ESLint深度配置3.3 Prettier精细配置3.4 解决规则冲突4. 高级定制方案4.1 自定义ESLint规则4.2 扩展Prettier插件5. 团队协作策略5.1 配置共享方案5.2 版本控制策略6. CI/CD集成7. 常见问…

oracle11.2.0.4 RAC 保姆级静默安装(二) DB数据库软件

1.响应文件配置 [rootdb11g1 software]# su - oracle [oracledb11g1 ~]$ cd /software/database/ [oracledb11g1 database]$ cd response/ [oracledb11g1 response]$ vi db_install.rsp oracle.install.optionINSTALL_DB_SWONLY ORACLE_HOSTNAMEdb11g1 UNIX_GROUP_NAME…

EasyCVR安防视频汇聚平台助力工业园区构建“感、存、知、用”一体化智能监管体系

在现代工业园区的安全管理和高效运营中&#xff0c;视频监控系统扮演着不可或缺的角色。然而&#xff0c;随着园区规模的扩大和业务的复杂化&#xff0c;传统的视频监控系统面临着诸多挑战&#xff0c;如设备众多难以统一管理、数据存储分散、智能分析能力不足、信息利用率低下…

反射、反射调用以及修改成员变量,成员方法,构造函数、反射的应用

DAY11.2 Java核心基础 反射&#xff08;第二弹&#xff09; 第一弹请访问链接&#xff1a; 反射&#xff08;第一篇&#xff09; getMethod(String name, Class… parameterTypes)getMethods()getDeclaredMethod(String name,Class… parameterTypes)getDeclaredMethods() …

【鸿蒙开发】Hi3861学习笔记- 外部中断

00. 目录 文章目录 00. 目录01. 概述02. EXTI相关API03. 硬件设计04. 软件设计05. 实验现象06. 附录 01. 概述 我们在做按键控制实验时&#xff0c;虽然能实现 IO 口输入功能&#xff0c;但代码是一直在检测 IO 输入口的变化&#xff0c;因此效率不高&#xff0c;特别是在一些…