笔记【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器
- 视频教程:【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器
- 教程资料:https://pan.baidu.com/s/1VhGBcqeywM6jyXJxtytd1w?pwd=6666,提取码:6666
- 本套教程以Canal的底层原理展开讲解,细致地介绍了Canal的安装部署及常见应用,详细讲解了如何实现MySQL数据的采集,并将数据分别发送至Kafka,同时使用TCP模式深层解析封装的数据,并实现自定义数据格式。
- 官方文档:Home · alibaba/canal Wiki · GitHub
- MySQL如何实时同步数据到ES?试试这款阿里开源的神器! - 简书
- 阿里的数据同步神器——Canal_阿里canal_恒哥~Bingo的博客-CSDN博客
目录
P01【01-尚硅谷-大数据采集技术-Canal(课程介绍)】
P02【02-尚硅谷-大数据采集技术-Canal(什么是Canal)】
P03【03-尚硅谷-大数据采集技术-Canal(MySQL Binlog介绍)】
P04【04-尚硅谷-大数据采集技术-Canal(工作原理)】
P05【05-尚硅谷-大数据采集技术-Canal(使用场景)】
P06【06-尚硅谷-大数据采集技术-Canal(MySQL 环境准备)】
P07【07-尚硅谷-大数据采集技术-Canal(下载与安装)】
P08【08-尚硅谷-大数据采集技术-Canal(TCP模式 创建项目&Canal封装数据格式分析)】
P09【09-尚硅谷-大数据采集技术-Canal(TCP模式 代码编写 创建连接&拉取数据)】
P10【10-尚硅谷-大数据采集技术-Canal(TCP模式 代码编写 解析结果数据并打印)】
P11【11-尚硅谷-大数据采集技术-Canal(TCP模式 代码测试)】
P12【12-尚硅谷-大数据采集技术-Canal(Kafka模式 配置文件修改)】
P13【13-尚硅谷-大数据采集技术-Canal(Kafka模式 案例测试)】
P01【01-尚硅谷-大数据采集技术-Canal(课程介绍)】
canal:实时采集mysql中变化的数据,新增、修改、删除,使用canal实时监控到修改的数据,并将修改的数据写到消息队列供实时计算框架(spark streaming、flink)使用。
前置知识:
- Kafka:将采集到的实时数据写入消息队列中,大数据领域最为主流的消息队列kafka。
- Zookeeper:kafka的搭建及运行依赖于kafka。
- MySQL:canal实时抓取mysql中的写数据变化。
- Java:案例代码。
尚硅谷大数据技术之Canal
- 第1章 Canal入门
- 第2章 MySql的准备
- 第3章 Canal的下载和安装
- 第4章 实时监控测试
- TCP模式测试
- Kafka模式测试
P02【02-尚硅谷-大数据采集技术-Canal(什么是Canal)】
Canal是用Java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。canal:采集日志。
Canal主要支持了MySQL的Binlog解析,解析完成后才利用Canal Client来处理获得的相关数据。(数据库同步需要阿里的Otter中间件,基于Canal)。
P03【03-尚硅谷-大数据采集技术-Canal(MySQL Binlog介绍)】
MySQL Binlog的格式有三种,分别是STATEMENT、MIXED、ROW。在配置文件中可以选择配置binlog_format= statement|mixed|row。
P04【04-尚硅谷-大数据采集技术-Canal(工作原理)】
P05【05-尚硅谷-大数据采集技术-Canal(使用场景)】
P06【06-尚硅谷-大数据采集技术-Canal(MySQL 环境准备)】
CREATE TABLE user_info(`id` VARCHAR(255),`name` VARCHAR(255),`sex` VARCHAR(255)
);[root@node1 ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using EditLine wrapper
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@node1 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.29 MySQL Community Server (GPL)Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| gmall-2021 |
| hive3 |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)mysql> use gmall-2021;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql>
mysql> show tables;
+----------------------+
| Tables_in_gmall-2021 |
+----------------------+
| user_info |
+----------------------+
1 row in set (0.00 sec)mysql> select * from user_info;
+------+------+------+
| id | name | sex |
+------+------+------+
| 001 | aaa | 男 |
| 002 | bbb | 女 |
+------+------+------+
2 rows in set (0.00 sec)mysql>
ERROR 1193 (HY000): Unknown system variable ‘validate_password_policy‘
CREATE TABLE user_info(`id` VARCHAR(255),`name` VARCHAR(255),`sex` VARCHAR(255)
);
INSERT INTO user_info VALUES('1001','zhangsan','male');SET GLOBAL validate_password_length=4;SHOW VARIABLES LIKE 'validate_password%';ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';INSTALL PLUGIN validate_password SONAME 'validate_password.so';SELECT plugin_name, plugin_status FROM information_schema.plugins WHERE plugin_name LIKE 'validate%';SHOW VARIABLES LIKE 'validate_password%';SET GLOBAL validate_password_policy=0;SET GLOBAL validate_password_length=4;SET GLOBAL validate_password_policy=0;GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%' IDENTIFIED BY 'canal' ;
[root@node1 ~]# sudo vim /etc/my.cnf
[root@node1 ~]# sudo systemctl restart mysqld
[root@node1 ~]# cd /var/lib/mysql
[root@node1 mysql]# ll
总用量 188508
-rw-r----- 1 mysql mysql 56 2月 23 11:43 auto.cnf
-rw------- 1 mysql mysql 1680 2月 23 11:43 ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 2月 23 11:43 ca.pem
-rw-r--r-- 1 mysql mysql 1112 2月 23 11:43 client-cert.pem
-rw------- 1 mysql mysql 1680 2月 23 11:43 client-key.pem
drwxr-x--- 2 mysql mysql 62 3月 1 16:00 gmall@002d2021
drwxr-x--- 2 mysql mysql 8192 2月 23 22:02 hive3
-rw-r----- 1 mysql mysql 683 3月 1 16:10 ib_buffer_pool
-rw-r----- 1 mysql mysql 79691776 3月 1 16:10 ibdata1
-rw-r----- 1 mysql mysql 50331648 3月 1 16:10 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 2月 23 11:43 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 3月 1 16:10 ibtmp1
drwxr-x--- 2 mysql mysql 4096 2月 23 11:43 mysql
-rw-r----- 1 mysql mysql 154 3月 1 16:10 mysql-bin.000001
-rw-r----- 1 mysql mysql 19 3月 1 16:10 mysql-bin.index
srwxrwxrwx 1 mysql mysql 0 3月 1 16:10 mysql.sock
-rw------- 1 mysql mysql 6 3月 1 16:10 mysql.sock.lock
drwxr-x--- 2 mysql mysql 8192 2月 23 11:43 performance_schema
-rw------- 1 mysql mysql 1676 2月 23 11:43 private_key.pem
-rw-r--r-- 1 mysql mysql 452 2月 23 11:43 public_key.pem
-rw-r--r-- 1 mysql mysql 1112 2月 23 11:43 server-cert.pem
-rw------- 1 mysql mysql 1680 2月 23 11:43 server-key.pem
drwxr-x--- 2 mysql mysql 8192 2月 23 11:43 sys
[root@node1 mysql]# ll
总用量 188508
-rw-r----- 1 mysql mysql 56 2月 23 11:43 auto.cnf
-rw------- 1 mysql mysql 1680 2月 23 11:43 ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 2月 23 11:43 ca.pem
-rw-r--r-- 1 mysql mysql 1112 2月 23 11:43 client-cert.pem
-rw------- 1 mysql mysql 1680 2月 23 11:43 client-key.pem
drwxr-x--- 2 mysql mysql 62 3月 1 16:00 gmall@002d2021
drwxr-x--- 2 mysql mysql 8192 2月 23 22:02 hive3
-rw-r----- 1 mysql mysql 683 3月 1 16:10 ib_buffer_pool
-rw-r----- 1 mysql mysql 79691776 3月 1 16:12 ibdata1
-rw-r----- 1 mysql mysql 50331648 3月 1 16:12 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 2月 23 11:43 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 3月 1 16:12 ibtmp1
drwxr-x--- 2 mysql mysql 4096 2月 23 11:43 mysql
-rw-r----- 1 mysql mysql 452 3月 1 16:12 mysql-bin.000001
-rw-r----- 1 mysql mysql 19 3月 1 16:10 mysql-bin.index
srwxrwxrwx 1 mysql mysql 0 3月 1 16:10 mysql.sock
-rw------- 1 mysql mysql 6 3月 1 16:10 mysql.sock.lock
drwxr-x--- 2 mysql mysql 8192 2月 23 11:43 performance_schema
-rw------- 1 mysql mysql 1676 2月 23 11:43 private_key.pem
-rw-r--r-- 1 mysql mysql 452 2月 23 11:43 public_key.pem
-rw-r--r-- 1 mysql mysql 1112 2月 23 11:43 server-cert.pem
-rw------- 1 mysql mysql 1680 2月 23 11:43 server-key.pem
drwxr-x--- 2 mysql mysql 8192 2月 23 11:43 sys
P07【07-尚硅谷-大数据采集技术-Canal(下载与安装)】
tar -zxvf canal.deployer-1.1.2.tar.gz -C /opt/module/canal
P08【08-尚硅谷-大数据采集技术-Canal(TCP模式 创建项目&Canal封装数据格式分析)】
P09【09-尚硅谷-大数据采集技术-Canal(TCP模式 代码编写 创建连接&拉取数据)】
修改Linux虚拟机的IP地址
package com.atguigu;import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.client.CanalConnectors;
import com.alibaba.otter.canal.protocol.Message;import java.net.InetSocketAddress;public class CanalClient {public static void main(String[] args) {//TODO 获取连接//1.获取canal连接对象CanalConnector canalConnector =CanalConnectors.newSingleConnector(newInetSocketAddress("test001", 11111), "example", "", "");while (true) {//TODO 连接canalConnector.connect();//TODO 订阅数据库canalConnector.subscribe("gmall-2021.*");//TODO 获取数据Message message = canalConnector.get(100);}}
}
P10【10-尚硅谷-大数据采集技术-Canal(TCP模式 代码编写 解析结果数据并打印)】
idea快速获取变量名:
- .var
- ctrl+v
package com.atguigu;import com.alibaba.fastjson.JSONObject;
import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.client.CanalConnectors;
import com.alibaba.otter.canal.protocol.CanalEntry;
import com.alibaba.otter.canal.protocol.Message;
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;import java.net.InetSocketAddress;
import java.util.List;public class CanalClient {public static void main(String[] args) throws InterruptedException, InvalidProtocolBufferException {//TODO 获取连接//获取canal连接对象CanalConnector canalConnector =CanalConnectors.newSingleConnector(newInetSocketAddress("test001", 11111), "example", "", "");while (true) {//TODO 连接canalConnector.connect();//TODO 订阅数据库canalConnector.subscribe("gmall-2021.*");//TODO 获取数据Message message = canalConnector.get(100);//TODO 获取Entry集合List<CanalEntry.Entry> entries = message.getEntries();//TODO 判断集合是否为空,如果为空,则等待一会儿继续拉取数据if (entries.size() <= 0) {System.out.println("当次抓取没有数据,休息一会儿...");Thread.sleep(1000);} else {//TODO 遍历entries,单条解析for (CanalEntry.Entry entry : entries) {//1.获取表名String tableName = entry.getHeader().getTableName();//2.获取类型CanalEntry.EntryType entryType = entry.getEntryType();//3.获取序列化后的数据ByteString storeValue = entry.getStoreValue();//4.判断当前entryType类型是否为ROWDATAif (CanalEntry.EntryType.ROWDATA.equals(entryType)) {//5.反序列化数据CanalEntry.RowChange rowChange = CanalEntry.RowChange.parseFrom(storeValue);//6.获取当前事件的操作类型CanalEntry.EventType eventType = rowChange.getEventType();//7.获取数据集List<CanalEntry.RowData> rowDataList = rowChange.getRowDatasList();//8.遍历rowDataList,并打印数据集for (CanalEntry.RowData rowData : rowDataList) {JSONObject beforeData = new JSONObject();List<CanalEntry.Column> beforeColumnsList = rowData.getBeforeColumnsList();for (CanalEntry.Column column : beforeColumnsList) {beforeData.put(column.getName(), column.getValue());}JSONObject afterData = new JSONObject();List<CanalEntry.Column> afterColumnsList = rowData.getAfterColumnsList();for (CanalEntry.Column column : afterColumnsList) {afterData.put(column.getName(), column.getValue());}//数据打印System.out.println("Table:" + tableName +",EventType:" + eventType +",Before:" + beforeData +",After:" + afterData);}} else {System.out.println("当前操作类型为:" + entryType);}}}}}
}
P11【11-尚硅谷-大数据采集技术-Canal(TCP模式 代码测试)】
启动canal服务端
连接成功
Last login: Thu Mar 2 14:43:07 2023 from 192.168.88.1
[root@node1 ~]# cd /opt/module/canal/bin
[root@node1 bin]# cd ../
[root@node1 canal]# ll
总用量 4
drwxr-xr-x 2 root root 76 3月 1 16:43 bin
drwxr-xr-x 5 root root 93 3月 1 16:49 conf
drwxr-xr-x 2 root root 4096 3月 1 16:43 lib
drwxrwxrwx 2 root root 6 11月 26 2018 logs
[root@node1 canal]# bin/startup.sh
cd to /opt/module/canal/bin for workaround relative path
LOG CONFIGURATION : /opt/module/canal/bin/../conf/logback.xml
canal conf : /opt/module/canal/bin/../conf/canal.properties
CLASSPATH :/opt/module/canal/bin/../conf:/opt/module/canal/bin/../lib/zookeeper-3.4.5.jar:/opt/module/canal/bin/../lib/zkclient-0.10.jar:/opt/module/canal/bin/../lib/spring-tx-3.2.18.RELEASE.jar:/opt/module/canal/bin/../lib/spring-orm-3.2.18.RELEASE.jar:/opt/module/canal/bin/../lib/spring-jdbc-3.2.18.RELEASE.jar:/opt/module/canal/bin/../lib/spring-expression-3.2.18.RELEASE.jar:/opt/module/canal/bin/../lib/spring-core-3.2.18.RELEASE.jar:/opt/module/canal/bin/../lib/spring-context-3.2.18.RELEASE.jar:/opt/module/canal/bin/../lib/spring-beans-3.2.18.RELEASE.jar:/opt/module/canal/bin/../lib/spring-aop-3.2.18.RELEASE.jar:/opt/module/canal/bin/../lib/snappy-java-1.1.7.1.jar:/opt/module/canal/bin/../lib/slf4j-api-1.7.12.jar:/opt/module/canal/bin/../lib/simpleclient_pushgateway-0.4.0.jar:/opt/module/canal/bin/../lib/simpleclient_httpserver-0.4.0.jar:/opt/module/canal/bin/../lib/simpleclient_hotspot-0.4.0.jar:/opt/module/canal/bin/../lib/simpleclient_common-0.4.0.jar:/opt/module/canal/bin/../lib/simpleclient-0.4.0.jar:/opt/module/canal/bin/../lib/scala-reflect-2.11.12.jar:/opt/module/canal/bin/../lib/scala-logging_2.11-3.8.0.jar:/opt/module/canal/bin/../lib/scala-library-2.11.12.jar:/opt/module/canal/bin/../lib/rocketmq-remoting-4.3.0.jar:/opt/module/canal/bin/../lib/rocketmq-logging-4.3.0.jar:/opt/module/canal/bin/../lib/rocketmq-common-4.3.0.jar:/opt/module/canal/bin/../lib/rocketmq-client-4.3.0.jar:/opt/module/canal/bin/../lib/protobuf-java-3.6.1.jar:/opt/module/canal/bin/../lib/oro-2.0.8.jar:/opt/module/canal/bin/../lib/netty-tcnative-boringssl-static-1.1.33.Fork26.jar:/opt/module/canal/bin/../lib/netty-all-4.1.6.Final.jar:/opt/module/canal/bin/../lib/netty-3.2.2.Final.jar:/opt/module/canal/bin/../lib/mysql-connector-java-5.1.40.jar:/opt/module/canal/bin/../lib/metrics-core-2.2.0.jar:/opt/module/canal/bin/../lib/lz4-java-1.4.1.jar:/opt/module/canal/bin/../lib/logback-core-1.1.3.jar:/opt/module/canal/bin/../lib/logback-classic-1.1.3.jar:/opt/module/canal/bin/../lib/kafka-clients-1.1.1.jar:/opt/module/canal/bin/../lib/kafka_2.11-1.1.1.jar:/opt/module/canal/bin/../lib/jsr305-3.0.2.jar:/opt/module/canal/bin/../lib/jopt-simple-5.0.4.jar:/opt/module/canal/bin/../lib/jctools-core-2.1.2.jar:/opt/module/canal/bin/../lib/jcl-over-slf4j-1.7.12.jar:/opt/module/canal/bin/../lib/jackson-databind-2.9.6.jar:/opt/module/canal/bin/../lib/jackson-core-2.9.6.jar:/opt/module/canal/bin/../lib/jackson-annotations-2.9.0.jar:/opt/module/canal/bin/../lib/ibatis-sqlmap-2.3.4.726.jar:/opt/module/canal/bin/../lib/httpcore-4.4.3.jar:/opt/module/canal/bin/../lib/httpclient-4.5.1.jar:/opt/module/canal/bin/../lib/h2-1.4.196.jar:/opt/module/canal/bin/../lib/guava-18.0.jar:/opt/module/canal/bin/../lib/fastsql-2.0.0_preview_644.jar:/opt/module/canal/bin/../lib/fastjson-1.2.28.jar:/opt/module/canal/bin/../lib/druid-1.1.9.jar:/opt/module/canal/bin/../lib/disruptor-3.4.2.jar:/opt/module/canal/bin/../lib/commons-logging-1.1.3.jar:/opt/module/canal/bin/../lib/commons-lang3-3.4.jar:/opt/module/canal/bin/../lib/commons-lang-2.6.jar:/opt/module/canal/bin/../lib/commons-io-2.4.jar:/opt/module/canal/bin/../lib/commons-compress-1.9.jar:/opt/module/canal/bin/../lib/commons-codec-1.9.jar:/opt/module/canal/bin/../lib/commons-beanutils-1.8.2.jar:/opt/module/canal/bin/../lib/canal.store-1.1.2.jar:/opt/module/canal/bin/../lib/canal.sink-1.1.2.jar:/opt/module/canal/bin/../lib/canal.server-1.1.2.jar:/opt/module/canal/bin/../lib/canal.protocol-1.1.2.jar:/opt/module/canal/bin/../lib/canal.prometheus-1.1.2.jar:/opt/module/canal/bin/../lib/canal.parse.driver-1.1.2.jar:/opt/module/canal/bin/../lib/canal.parse.dbsync-1.1.2.jar:/opt/module/canal/bin/../lib/canal.parse-1.1.2.jar:/opt/module/canal/bin/../lib/canal.meta-1.1.2.jar:/opt/module/canal/bin/../lib/canal.instance.spring-1.1.2.jar:/opt/module/canal/bin/../lib/canal.instance.manager-1.1.2.jar:/opt/module/canal/bin/../lib/canal.instance.core-1.1.2.jar:/opt/module/canal/bin/../lib/canal.filter-1.1.2.jar:/opt/module/canal/bin/../lib/canal.deployer-1.1.2.jar:/opt/module/canal/bin/../lib/canal.common-1.1.2.jar:/opt/module/canal/bin/../lib/aviator-2.2.1.jar:/opt/module/canal/bin/../lib/aopalliance-1.0.jar:/opt/module/canal/bin/../lib/aliware-apache-rocketmq-cloud-1.0.jar:.:/export/server/jdk1.8.0_241/lib/dt.jar:/export/server/jdk1.8.0_241/lib/tools.jar
cd to /opt/module/canal for continue
[root@node1 canal]# jps
44804 Jps
44284 CanalLauncher
[root@node1 canal]#
P12【12-尚硅谷-大数据采集技术-Canal(Kafka模式 配置文件修改)】
P13【13-尚硅谷-大数据采集技术-Canal(Kafka模式 案例测试)】
kafka依赖zookeeper,启动kafka之前先启动zookeeper。
kafka启动消费者:bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic canal_test
单条sql
多条sql
一个entry可能包含多条数据,操作数据不方便,做数据分析搞单行数据处理,需要将一行数据拆分为两行数据。
相关文章:

笔记【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器
视频教程:【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器教程资料:https://pan.baidu.com/s/1VhGBcqeywM6jyXJxtytd1w?pwd6666,提取码:6666本套教程以Canal的底层原理展开讲解,细致地介绍了Canal的安装部署及常…...
如何重定向命令行日志信息到指定txt文件?
如果你想把命令行的输出重定向到指定的txt文件,你可以使用一些符号来实现。例如,你可以在命令后面加上>或>>符号,然后指定文件名。例如: command > output.txt 这样就会把command的标准输出保存到output.txt文件中&…...

物理机不能访问虚拟机kali的web服务解决方案记录
目录 环境 问题描述 解决方案 知识补充 效果测试 其他思路 环境 kali(nat模式),物理机,可互ping 问题描述 kali的web服务器不能在物理机上访问。 1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3.虚拟机能访问自己的web …...

服务器配置 | 在Windows本地显示远程服务器绘图程序
文章目录方法1:在MobaXterm的终端输入指令方法2:在Pycharm中运行前提概要,需要在本地Windows端显示点云的3d可视化界面 对于点云的3d可视化一般有两种方法,open3d显示或者是mayavi显示。这两个库都可以使用pip install来实现安装…...

从0开始学python -47
Python CGI编程 -2 GET和POST方法 浏览器客户端通过两种方法向服务器传递信息,这两种方法就是 GET 方法和 POST 方法。 使用GET方法传输数据 GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以"?"号分割…...

【数据结构】八大经典排序总结
文章目录一、排序的概念及其运用1.排序的概念2.常见排序的分类3.排序的运用二、常见排序算法的实现1.直接插入排序1.1排序思想1.2代码实现1.3复杂度及稳定性1.4特性总结2.希尔排序2.1排序思想2.3复杂度及稳定性2.4特性总结3.直接选择排序3.1排序思想3.2代码实现3.3复杂度及稳定…...

BI的能力边界:能解决的企业问题和不擅长的领域
数字化转型本就需要借助信息化相关技术、思想来完成,所以说信息化建设同样是数字化转型过程中非常重要的一环,而这就是商业智能BI和数字化转型的关系 BI 能解决的企业问题 数据是企业的重要资产,也是企业商业智能BI的核心要求。通常&#x…...

金三银四面试必备,“全新”突击真题宝典,阿里腾讯字节都稳了
前言招聘旺季就到了,不知道大家是否准备好了,面对金三银四的招聘旺季,如果没有精心准备那笔者认为那是对自己不负责任;就我们Java程序员来说,多数的公司总体上面试都是以自我介绍项目介绍项目细节/难点提问基础知识点考…...

MYSQL 基础篇 | 02-MYSQL基础应用
文章目录1 MySQL概述2 SQL2.1 SQL通用语法2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作2.4 DML2.4.1 添加数据2.4.2 修改数据2.4.3 删除数据2.5 DQL2.5.1 基础查询2.5.2 条件查询2.5.3 聚合查询2.5.4 分组查询2.5.5 排序查询2.5.6 分页查询2.5.7 综合练习2.6 DCL2.6.1 管理…...

CSS实现checkbox选中动画
前言 👏CSS实现checkbox选中动画,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义css变量,–checked,表示激活选中色值 :root {--checked: orange; }创建父容器…...

工业机器人编程调试怎么学
很多人觉得工业机器人很难学学,实际上机器人涉及的知识远比PLC要少。现简单说明一下初学者学习工业机器人编程调试的流程,以AUBO机器人为例: 首先我们需要知道工业机器人的调试学起来不难,远比编程更简单,示教器上的编…...

Java并发包提供了哪些并发工具类?
第19讲 | Java并发包提供了哪些并发工具类? 通过前面的学习,我们一起回顾了线程、锁等各种并发编程的基本元素,也逐步涉及了 Java 并发包中的部分内容,相信经过前面的热身,我们能够更快地理解 Java 并发包。 今天我要…...

systemctl 启动/停止/重新加载 nginx
systemctl 启动/停止/重新加载 nginx 一、新建nginx.service脚本 sudo vim /usr/lib/systemd/system/nginx.service然后按iii进入编辑模式,粘贴如下内容,其中/usr/local/nginx/是进行make && make install之后的文件夹路径,需要根据…...

SSRF学习 3
目录 <1> 什么是SSRF? <2> 通常SSRF会发生在哪些位置? <3> 测试流程 <4> Weblogic-ssrf 复现 (1) 漏洞存在点 (2) 注入HTTP头,利用Redis反弹shell (3) 修复方案 <1> 什么是SSRF? SSRF(Serv…...
Mysql(数据库基础篇)
👌 棒棒有言:也许我一直照着别人的方向飞,可是这次,我想要用我的方式飞翔一次!人生,既要淡,又要有味。凡事不必太在意,一切随缘,缘深多聚聚,缘浅随它去。凡事…...

一种全新的图像变换理论的实验(五)——研究目的替代DCT和小波
一、前言 目前在大量的灰度图像测试下,基本确定变换系数ratio取值0-25之间时,逆变化后的图还能基本保障效果,而且越接近0效果越好。本文还是以lenna.bmp灰度图为例,实验不再逆变换,而是把变换后的数据直接输出为bmp的…...

vue3、vite、pinia 快速入门
准备 开发工具及插件IDE:vscode,WebStorm插件:Auto Close Tag、Auto Rename Tag、Live Server通过“!”快速生成html模板正式学习安装vue通过CDN的方式导入vue<script src"" target"_blank">https://unpkg.com/vue3/dist/vue.…...

第六章 effect.scheduler功能实现
effect.scheduler功能实现 主要先了解scheduler需要实现什么样的需求,有一下四点: 1 通过 effect 的第二个参数给定一个 scheduler 的 fn 2 effect 第一次执行的时候 还会执行 fn 3 当 响应式对象 set update 不执行fn 而是执行 scheduler 4 如果说…...

软件测试之zentao
禅道 1. 禅道介绍 1.1 禅道项目管理软件是做什么的? 禅道,国产开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整覆盖了研发项目管理的核心流程。禅…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...