前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >my2sql 闪回操作流程

my2sql 闪回操作流程

原创
作者头像
你要的小米吖
修改于 2021-08-19 06:48:24
修改于 2021-08-19 06:48:24
93000
代码可运行
举报
运行总次数:0
代码可运行
简介:

go版MySQL binlog解析工具,通过解析MySQL binlog ,可以生成原始SQL、回滚SQL、去除主键的INSERT SQL等,也可以生成DML统计信息。

GitHub地址:https://github.com/liuhr/my2sql

my2sql有三个主要功能,今天只介绍闪回功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#执行闪回操作具体操作流程
#解析binlog生成标准SQL
#解析binlog 统计DML、长事务与大事务分析

1.直接从从GitHub下载源码包

2.传到本地服务器解压

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost opt]# unzip my2sql-master.zip

3.解压后直接cd进入编译好的路径下:(此处不用编译,作者已经把编译好的包放在releases/centOS_release_7.x

下)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost centOS_release_7.x]# pwd
/opt/my2sql-master/releases/centOS_release_7.x

也可以在GitHub上直接下载编译好的,GitHub上有下载链接

参数说明

-U

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
优先使用unique key作为where条件,默认false

-mode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
repl: 伪装成从库解析binlog文件,file: 离线解析binlog文件, 默认repl

-local-binlog-file

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
当指定-mode=file 参数时,需要指定-local-binlog-file binlog文件相对路径或绝对路径,可以连续解析多个binlog文件,只需要指定起始文件名,程序会自动持续解析下个文件

-add-extraInfo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
是否把database/table/datetime/binlogposition...信息以注释的方式加入生成的每条sql前,默认false
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# datetime=2020-07-16_10:44:09 database=orchestrator table=cluster_domain_name binlog=mysql-bin.011519 startpos=15552 stoppos=15773
UPDATE `orchestrator`.`cluster_domain_name` SET `last_registered`='2020-07-16 10:44:09' WHERE `cluster_name`='192.168.1.1:3306'

-big-trx-row-limit n

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
transaction with affected rows greater or equal to this value is considerated as big transaction 
找出满足n条sql的事务,默认500

-databases 、 -tables

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
库及表条件过滤, 以逗号分隔

-sql

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
要解析的sql类型,可选参数insert、update、delete,默认全部解析

-doNotAddPrifixDb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Prefix table name witch database name in sql,ex: insert into db1.tb1 (x1, x1) values (y1, y1)
默认生成insert into db1.tb1 (x1, x1) values (y1, y1)类sql,也可以生成不带库名的sql

-file-per-table

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
为每个表生成一个sql文件

-full-columns

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
For update sql, include unchanged columns. for update and delete, use all columns to build where condition.
default false, this is, use changed columns to build set part, use primary/unique key to build where condition
生成的sql是否带全列信息,默认false

-ignorePrimaryKeyForInsert

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
生成的insert语句是否去掉主键,默认false

-output-dir

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
将生成的结果存放到制定目录

-output-toScreen

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
将生成的结果打印到屏幕,默认写到文件

-threads

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
线程数,默认8

-work-type

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2sql:生成原始sql,rollback:生成回滚sql,stats:只统计DML、事务信息

4.模拟表数据被删除,进行恢复

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show create table sbtest1;
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                                                                  |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sbtest1 | CREATE TABLE `sbtest1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `k` int(11) NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `k_1` (`k`),
  KEY `c_inx` (`c`),
  KEY `cc` (`pad`)
) ENGINE=InnoDB AUTO_INCREMENT=500001 DEFAULT CHARSET=latin1 |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

查询一下数据量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select count(*) from thn.sbtest1;
+----------+
| count(*) |
+----------+
|   500000 |
+----------+
1 row in set (0.05 sec)

#为了模拟方便,重新生成一个binlog
mysql> flush logs;

删除表数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> delete from sbtest1 where id<400000;
Query OK, 399999 rows affected (7.41 sec)

解析一下binlog,因为是测试,并没有其他热写入数据,我按时间区间去闪回

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost data]# mysqlbinlog --base64-output=decode-rows -vvv mysql-binlog.000017 |more

#210818 19:37:08 server id 5  end_log_pos 386 CRC32 0xcf72d3af  Table_map: `thn`.`sbtest1` mapped to number 108
# at 386
#210818 19:37:08 server id 5  end_log_pos 8548 CRC32 0x031211c6     Delete_rows: table id 108

生成回滚SQL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost centOS_release_7.x]# pwd
/opt/my2sql-master/releases/centOS_release_7.x
[root@localhost centOS_release_7.x]# ./my2sql  -user root -password mysql  -port 3306 -host 127.0.0.1 -databases thn  -tables sbtest1 -work-type rollback   -start-file mysql-binlog.000017 -start-datetime "2021-08-19 00:00:00" --stop-datetime "2021-09-23 12:00:00" --add-extraInfo  -output-dir /tmp
[2021/08/18 19:41:29] [info] binlogsyncer.go:144 create BinlogSyncer with config {1113306 mysql 127.0.0.1 3306 root   utf8 false false <nil> false Local false 0 0s 0s 0 false false 0}
[2021/08/18 19:41:29] [info] binlogsyncer.go:360 begin to sync binlog from position (mysql-binlog.000017, 4)
[2021/08/18 19:41:29] [info] stats_process.go:166 start thread to analyze statistics from binlog
[2021/08/18 19:41:29] [info] events.go:210 start thread to write redo/rollback sql into file
[2021/08/18 19:41:29] [info] events.go:60 start thread 1 to generate redo/rollback sql
[2021/08/18 19:41:29] [info] events.go:60 start thread 2 to generate redo/rollback sql
[2021/08/18 19:41:29] [info] repl.go:16 start to get binlog from mysql
[2021/08/18 19:41:29] [info] binlogsyncer.go:777 rotate to (mysql-binlog.000017, 4)
[2021/08/18 19:41:35] [info] repl.go:84 deadline exceeded.
[2021/08/18 19:41:35] [info] repl.go:18 finish getting binlog from mysql
[2021/08/18 19:41:35] [info] stats_process.go:266 exit thread to analyze statistics from binlog
[2021/08/18 19:41:35] [info] events.go:185 exit thread 1 to generate redo/rollback sql
[2021/08/18 19:41:35] [info] events.go:185 exit thread 2 to generate redo/rollback sql
[2021/08/18 19:41:35] [info] events.go:259 finish writing rollback sql into tmp files, start to revert content order of tmp files
[2021/08/18 19:41:35] [info] events.go:272 finish reverting content order of tmp files
[2021/08/18 19:41:35] [info] events.go:277 exit thread to write redo/rollback sql into file
[root@localhost centOS_release_7.x]# ./my2sql  -user root -password mysql  -port 3306 -host 127.0.0.1 -databases thn  -tables sbtest1 -work-type rollback   -start-file mysql-binlog.000017 -start-datetime "2021-08-17 00:00:00" --stop-datetime "2021-08-20 12:00:00" --add-extraInfo  -output-dir /tmp
[2021/08/18 19:48:13] [info] binlogsyncer.go:144 create BinlogSyncer with config {1113306 mysql 127.0.0.1 3306 root   utf8 false false <nil> false Local false 0 0s 0s 0 false false 0}
[2021/08/18 19:48:13] [info] binlogsyncer.go:360 begin to sync binlog from position (mysql-binlog.000017, 4)
[2021/08/18 19:48:13] [info] stats_process.go:166 start thread to analyze statistics from binlog
[2021/08/18 19:48:13] [info] events.go:210 start thread to write redo/rollback sql into file
[2021/08/18 19:48:13] [info] events.go:60 start thread 1 to generate redo/rollback sql
[2021/08/18 19:48:13] [info] events.go:60 start thread 2 to generate redo/rollback sql
[2021/08/18 19:48:13] [info] repl.go:16 start to get binlog from mysql
[2021/08/18 19:48:13] [info] binlogsyncer.go:777 rotate to (mysql-binlog.000017, 4)
[2021/08/18 19:48:14] [info] events.go:244 finish processing mysql-binlog.000017 10488556
[2021/08/18 19:48:15] [info] events.go:244 finish processing mysql-binlog.000017 20976726
[2021/08/18 19:48:15] [info] events.go:244 finish processing mysql-binlog.000017 31464896
[2021/08/18 19:48:15] [info] events.go:244 finish processing mysql-binlog.000017 41953066
[2021/08/18 19:48:16] [info] events.go:244 finish processing mysql-binlog.000017 52441236
[2021/08/18 19:48:16] [info] events.go:244 finish processing mysql-binlog.000017 62929406
[2021/08/18 19:48:16] [info] events.go:244 finish processing mysql-binlog.000017 73417576
[2021/08/18 19:48:21] [info] repl.go:84 deadline exceeded.
[2021/08/18 19:48:21] [info] repl.go:18 finish getting binlog from mysql
[2021/08/18 19:48:21] [info] stats_process.go:266 exit thread to analyze statistics from binlog
[2021/08/18 19:48:21] [info] events.go:185 exit thread 2 to generate redo/rollback sql
[2021/08/18 19:48:21] [info] events.go:185 exit thread 1 to generate redo/rollback sql
[2021/08/18 19:48:21] [info] events.go:259 finish writing rollback sql into tmp files, start to revert content order of tmp files
[2021/08/18 19:48:21] [info] rollback_process.go:15 start thread 1 to revert rollback sql files
[2021/08/18 19:48:21] [info] rollback_process.go:41 start to revert tmp file /tmp/.rollback.17.sql into /tmp/rollback.17.sql
[2021/08/18 19:48:22] [info] rollback_process.go:156 finish reverting tmp file /tmp/.rollback.17.sql into /tmp/rollback.17.sql
[2021/08/18 19:48:22] [info] rollback_process.go:25 exit thread 1 to revert rollback sql files
[2021/08/18 19:48:22] [info] events.go:272 finish reverting content order of tmp files
[2021/08/18 19:48:22] [info] events.go:277 exit thread to write redo/rollback sql into file
#看到sql into file这就已经成功搞定了

查看回滚的SQL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost data]# cd /tmp/
[root@localhost tmp]# ll
-rw-r--r--. 1 root root       261 818 19:48 biglong_trx.txt
-rw-r--r--. 1 root root       290 818 19:48 binlog_status.txt
-rw-r--r--. 1 root root 103668233 818 19:48 rollback.17.sql

查看DML信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost tmp]# [root@localhost tmp]# cat binlog_status.txt 
binlog            starttime           stoptime            startpos   stoppos    inserts  updates  deletes  database        table               
mysql-binlog.000017 2021-08-18_19:37:08 2021-08-18_19:37:08 330        75925802   0        0        399999   thn             sbtest1   

## 查看生成的binlog_status.txt文件,会统计每个时间段(POS)区间内相关库表所产生的DML次数
## biglong_trx.txt文件记录的是大/长事务,此文件为空,说明没有大/长事务
## 由文件中记录的DML总执行次数可知,确实是删除了399999 条记录

查看回滚SQL形式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost tmp]# more rollback.17.sql 
INSERT INTO `thn`.`sbtest1` (`id`,`k`,`c`,`pad`) VALUES (399999,48268,'95132265201-45028665901-44037695346-99430732771-
94049966285-01025661979-46614439842-38764489961-91197548642-34427705307','54658966786-08986899978-98420410571-388688724
36-65095829410');
INSERT INTO `thn`.`sbtest1` (`id`,`k`,`c`,`pad`) VALUES (399998,295137,'13049311991-28212069454-50756206952-46824748230
-09868329157-60277837353-92033860701-98090420440-28261455360-36687743868','97210253317-61299060306-09164181955-97529490
798-90188641840');

恢复数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost tmp]# mysql -u root -pmysql -P3306 -h127.0.0.1  thn < /tmp/rollback.17.sql 

恢复成功后查询一下数据总量,数据已经完全恢复回来了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select count(*) from thn.sbtest1;
+----------+
| count(*) |
+----------+
|   500000 |
+----------+
1 row in set (0.05 sec)

根据POS点解析binlog,生成回滚日志

也可以根据binlog的pos点解析,这里不再展示

命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./my2sql  -user root -password mysql  -port 3306 -host 127.0.0.1 -databases thn  -tables student -work-type rollback   -start-file mysql-binlog.000017 -start-pos  100 -stop-file  mysql-binlog.000017 -stop-pos  1000 -output-dir /tmp

限制

使用回滚/闪回功能时,binlog格式必须为row,且binlog_row_image=full, DML统计以及大事务分析不受影响

只能回滚DML, 不能回滚DDL

支持指定-tl时区来解释binlog中time/datetime字段的内容。开始时间-start-datetime与结束时间-stop-datetime也会使用此指定的时区, 但注意此开始与结束时间针对的是binlog event header中保存的unix timestamp。结果中的额外的datetime时间信息都是binlog event header中的unix timestamp

此工具是伪装成从库拉取binlog,需要连接数据库的用户有SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限

案例

解析出回滚SQL

根据时间点解析出回滚SQL
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#伪装成从库解析binlog
./my2sql  -user root -password mysql -host 127.0.0.1   -port 3306 -mode repl -work-type rollback  -start-file mysql-binlog.000017  -start-datetime "2021-08-19 00:00:00" -stop-datetime "2021-08-20 12:00:00" -output-dir /tmp
#直接读取binlog文件解析
./my2sql  -user root -password mysql -host 127.0.0.1   -port 3306  -mode file -local-binlog-file /data/mysql/data/mysql-binlog.000017 -work-type rollback  -start-file mysql-binlog.000017  -start-datetime "2021-08-19 00:00:00" -stop-datetime "2021-08-20 12:00:00" -output-dir /tmp
根据pos点解析出回滚SQL
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#伪装成从库解析binlog
./my2sql  -user root -password mysql -host 127.0.0.1   -port 3306 -mode repl -work-type rollback  -start-file mysql-binlog.000017  -start-pos 4 -stop-file mysql-binlog.000017 -stop-pos 583918266  -output-dir /tmp
#直接读取binlog文件解析
./my2sql  -user root -password mysql -host 127.0.0.1   -port 3306   -mode file -local-binlog-file ./mysql-binlog.000017  -work-type rollback  -start-file mysql-binlog.000017  -start-pos 4 -stop-file mysql-binlog.000017 -stop-pos 583918266  -output-dir /tmp

统计DML以及大事务

统计时间范围各个表的DML操作数量,统计一个事务大于500条、时间大于300秒的事务
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#伪装成从库解析binlog
./my2sql  -user root -password mysql -host 127.0.0.1   -port 3306  -mode repl -work-type stats  -start-file mysql-binlog.000017  -start-datetime "2021-08-19 00:00:00" -stop-datetime "2021-08-20 12:00:00"  -big-trx-row-limit 500 -long-trx-seconds 300   -output-dir /tmp
#直接读取binlog文件解析
./my2sql  -user root -password mysql -host 127.0.0.1   -port 3306 -mode file -local-binlog-file ./mysql-binlog.000017   -work-type stats  -start-file mysql-binlog.000017  -start-datetime "2021-08-19 00:00:00" -stop-datetime "2021-08-20 12:00:00"  -big-trx-row-limit 500 -long-trx-seconds 300   -output-dir /tmp
统计一段pos点范围各个表的DML操作数量,统计一个事务大于500条、时间大于300秒的事务
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#伪装成从库解析binlog
./my2sql  -user root -password mysql -host 127.0.0.1   -port 3306  -mode repl -work-type stats  -start-file mysql-binlog.000017  -start-pos 4 -stop-file mysql-binlog.000017 -stop-pos 583918266  -big-trx-row-limit 500 -long-trx-seconds 300   -output-dir /tmp
#直接读取binlog文件解析
./my2sql  -user root -password mysql -host 127.0.0.1   -port 3306 -mode file -local-binlog-file ./mysql-binlog.000017  -work-type stats  -start-file mysql-binlog.000017  -start-pos 4 -stop-file mysql-binlog.000017 -stop-pos 583918266  -big-trx-row-limit 500 -long-trx-seconds 300   -output-dir /tmp

从某一个pos点解析出标准SQL,并且持续打印到屏幕

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#伪装成从库解析binlog
./my2sql  -user root -password mysql -host 127.0.0.1   -port 3306 -mode repl  -work-type 2sql  -start-file mysql-binlog.000017  -start-pos 4   -output-toScreen

有兴趣的可以到GitHub上系统的研究一下my2sql,很实用的一个工具

抛半砖以求全玉,班门弄斧,不胜惶恐!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
盘点两种方法来判断一个列表里面,按关键词进行筛选,留下包含有关键词的论文题目
前几天才哥群里有个粉丝提问,忘记是谁了,过去有段时间,当时没来得及截图,不知道谁问的了,不过题目当时记下来了,如下图所示。
Python进阶者
2022/03/04
3960
盘点两种方法来判断一个列表里面,按关键词进行筛选,留下包含有关键词的论文题目
番外篇:分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码)
大家好,我是Python进阶者。 是不是觉得很诧异?明明上周刚发布了这篇:分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码),今天又来一篇,名曰番外篇!其实今天是想给大家分享【🌑(这是月亮的背面)】大佬的解法,拍案叫绝! 前情回顾 前几天在才哥交流群里,有个叫【Rick Xiang】的粉丝在Python交流群里问了一道关于排列组合的问题,初步一看觉得很简单,实际上确实是有难度的。 题目是:一个列表中有随机15个数,没有重复值。从列表里面任意选5个数,如何选出来
Python进阶者
2021/11/15
4720
番外篇:分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码)
盘点一个英文文本中统计关键词的方法
前几天在Python最强王者交流群【Wendy Zheng】问了一个英文文本中统计关键词的问题,这里拿出来给大家分享下。
前端皮皮
2022/12/19
3270
盘点一个英文文本中统计关键词的方法
PyTorch 2.2 中文官方教程(三)
介绍 || 张量 || 自动微分 || 构建模型 || TensorBoard 支持 || 训练模型 || 模型理解
ApacheCN_飞龙
2024/02/05
4320
PyTorch 2.2 中文官方教程(三)
【爬虫软件】我用python开发的小红书蒲公英采集软件,支持筛选关键词、粉丝数、报价等,助力品牌商高效筛选优质博主!
蒲公英平台(用过的人都知道^^,没用过的人一脸懵- -!),在此介绍一下:蒲公英是小红书推出的优质创作者商业合作服务平台,致力于为品牌和博主提供内容合作服务,可以为品牌匹配出最符合合作条件的优质博主。
马哥小迷弟132
2024/07/01
5840
【爬虫软件】我用python开发的小红书蒲公英采集软件,支持筛选关键词、粉丝数、报价等,助力品牌商高效筛选优质博主!
软件测试面试中都会问到哪些关于Python的问题?
答:Python是一门语法简洁优美, 功能强大无比, 应用领域非常广泛, 具有强大完备的第三方库,它是一门强类型的可移植、可扩展、可嵌入的解释型编程语言,属于动态语言。
霍格沃兹测试开发
2020/12/17
7690
Python 的练手项目有哪些值得推荐?
在开始正题之前,先介绍一下它所属的系列。该系列叫 AOSA,是“The Architecture of Open Source Applications”的简称,即“开源程序的体系结构”,目前有四本书,本期主角是最近的一本(发布于 2016.7.12)。
知忆
2021/06/05
9220
Python面试题之Python面试题汇总
(1)与java相比:在很多方面,Python比Java要简单,比如java中所有变量必须声明才能使用,而Python不需要声明,用少量的代码构建出很多功能;(高效的高级数据结构)
Jetpropelledsnake21
2018/08/01
11.6K0
Python面试题之Python面试题汇总
Python人工智能 | 二十二.基于大连理工情感词典的情感分析和情绪计算
从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章分享了CNN实现中文文本分类的过程,并与贝叶斯、决策树、逻辑回归、随机森林、KNN、SVM等分类算法进行对比。这篇文章将详细讲解通过自定义情感词典(大连理工词典)实现情感分析和情绪分类的过程,并与SnowNLP进行对比,为后续深度学习和自然语言处理(情感分析、实体识别、实体对齐、知识图谱构建、文本挖掘)结合做基础,希望对您有所帮助~
Eastmount
2024/02/23
1.1K0
Python人工智能 | 二十二.基于大连理工情感词典的情感分析和情绪计算
[Python从零到壹] 十六.文本挖掘之词云热点与LDA主题分布分析万字详解
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。
Eastmount
2022/08/31
2K0
爆肝六万字整理的python基础,快速入门python的首选
学习python开发,首先要学会安装Python环境,我一般使用Anaconda+Pycharm作为开发环境。Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果觉得安装包太大可以使用Miniconda。
全栈程序员站长
2022/09/07
1.9K0
爆肝六万字整理的python基础,快速入门python的首选
pyntho经典面试题
 (1)与java相比:在很多方面,Python比Java要简单,比如java中所有变量必须声明才能使用,而Python不需要声明,用少量的代码构建出很多功能;(高效的高级数据结构)
py3study
2020/01/17
3.1K0
Scrapy Requests爬虫系统入门
R:控制面板—系统与安全—系统—高级系统设置—环境变量—系统变量—双击 path—进入编辑环境变量窗口后在空白处填入 Python 所在路径—一路确定。
AI悦创
2021/09/09
1.9K0
python基础
s="dzf".encode("utf-8") 为bytes类型 (将dzf转为bytes类型,utf-8编码方式)
Dean0731
2020/05/08
1.3K0
利用Python进行数据分析笔记
本书讲的是利用Python进行数据控制、处理、整理、分析等方面的具体细节和基本要点。我的目标是介绍Python编程和用于数据处理的库和工具环境,掌握这些,可以让你成为一个数据分析专家。虽然本书的标题是“数据分析”,重点却是Python编程、库,以及用于数据分析的工具。这就是数据分析要用到的Python编程。
CtrlX
2023/03/21
5.3K0
利用Python进行数据分析笔记
Python与C++、Java区别对比学习
Java 的数组和变量在存储上是有区别的。在 Java 中,变量是一种基本的数据结构,用于存储单个值。而数组则是一种复合数据类型,用于存储一系列相同类型的值。
CtrlX
2023/03/21
2.2K0
Python与C++、Java区别对比学习
Python100Days
这可能是我目前发现最好最好的Python教程了,故整理至我的博客。 原项目GitHub地址https://github.com/jackfrued/Python-100-Days
一点儿也不潇洒
2018/08/07
9.9K0
hexo+github搭建博客(超级详细版,精细入微)
你了解Hexo吗? Hexo是一个静态博客框架,基于Node.js,将Markdown文章通过渲染引擎,生成一个静态网页,再结合Git命令(ssh),Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
YangAir
2020/01/19
5.7K1
hexo+github搭建博客(超级详细版,精细入微)
最全面、最详细web前端面试题及答案总结
本章是HTML考点的⾮重难点,因此我们采⽤简略回答的⽅式进⾏撰写,所以不会有太多详细的解释。我们约定,每个问题后我们标记『✨ 』的为⾼频⾯试题 doctype的作⽤是什么?✨ DOCTYPE是html5标准⽹⻚声明,且必须声明在HTML⽂档的第⼀⾏。来告知浏览器的解析器⽤什么⽂档标准解析这个 ⽂档,不同的渲染模式会影响到浏览器对于 CSS 代码甚⾄ JavaScript 脚本的解析 ⽂档解析类型有: BackCompat:怪异模式,浏览器使⽤⾃⼰的怪异模式解析渲染⻚⾯。(如果没有声明DOCTYPE,默认就是这个模式) CSS1Compat:标准模式,浏览器使⽤W3C的标准解析渲染⻚⾯。 IE8还有⼀种介乎于上述两者之间的近乎标准的模式,但是基本淘汰了。
全栈程序员站长
2022/08/01
8.2K0
面试框架题整理
面试题总结 一基础部分 1.1 集合 1.1.1 fail-fast 与 fail-safe 机制有什么区别
全栈程序员站长
2022/08/25
1.3K0
面试框架题整理
推荐阅读
相关推荐
盘点两种方法来判断一个列表里面,按关键词进行筛选,留下包含有关键词的论文题目
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档