带您了解TiDB MySQL数据库中关于日期、时间的坑

news2024/10/5 15:27:35

带您了解TiDB & MySQL数据库中关于日期、时间的坑

  • 时间的基础知识
    • 什么是时间
    • 计算时间的几种方法
      • 世界时(UT)
      • 协调世界时(UTC)
      • 国际原子时(TAI)
    • 时区的概念
      • 中国所在的时区
  • 操作系统的时区
    • date
    • timedatectl
  • 数据库中的时区
    • TiDB数据库中的时区
      • 查看时区参数
      • 与时间相关的函数
      • 与时间相关的数据类型
      • 与日期相关的函数
      • 如何计算闰年
    • MySQL数据库中的时区
      • 日期相关的函数
      • MySQL数据库中的定时器
  • 总结

时间的基础知识

什么是时间

时间是人们根据自然现象而进行的一种抽象概念。人类通过观察日月星辰、季节交替、动植物生长等自然现象,逐渐认识到时间的存在,并进行了一系列的时间计量。

计算时间的几种方法

世界时(UT)

世界时(Universal Time,简称UT)是以地球自转周期作为基础的时间计量标准,UT可以根据不同的定义方式分为UT0、UT1、UT2、UT1R等不同的形式。UT的定义是基于天文观测数据,主要通过观测地球自转的角速度来确定时间单位。UT是地球物理学中使用最广泛的时间系统之一,但它受到地球自转速率的不断变化的影响,因此不够稳定和准确。

为了弥补UT的不足,国际标准化组织(ISO)于1970年提出了协调世界时(UTC)。

协调世界时(UTC)

协调世界时(Coordinated Universal Time,简称UTC),又称世界统一时间,世界标准时间,是目前国际上通用的时间标准,它是以原子钟为基础,通过对全球范围内的原子钟信号进行加权平均而得出的一种时间标准。

协调世界时采用24小时制,一天被划分为24个小时,每小时包括60分钟,每分钟包括60秒。起点是1970年1月1日0时0分0秒,与Unix时间戳相同。

协调世界时以地球自转为基础,以本初子午线上的标准子午线时为基准,使地球各地的时间保持一致。UTC引入了闰秒来纠正由于地球自转速率的微小变化所导致的时间偏差。

国际原子时(TAI)

国际原子时(International Atomic Time,简称TAI)是一个标准的原子时计量系统,以铯原子的振荡频率为基础,是世界上精度最高的时间计量方式之一。TAI通过一个网络由多个原子钟测量得出,并被国际计量组织(BIPM)所管理。

国际原子时与世界时(UT)之间存在微小的偏差,这是由于地球自转速度的变化导致的。因此,国际地球自转服务(IERS)会不定期地宣布添加或减少闰秒,以保持TAI和UT之间的同步。

时区的概念

时区是按照一定的经度范围将地球划分成若干个区域,使得同一个时区内的时间是相同的,以方便人们进行时间交流和统一管理。世界上总共分为24个主要时区,每个主要时区相差15度经度。

通常,时区以协调世界时(UTC)的正负偏移量来表示,偏移量为0的时区被称为“格林威治标准时间”(GMT),也就是世界标准时间。

全球24个标准时区及其相应的偏差(以协调世界时(UTC)为基准):

  • UTC-12: 国际日期变更线以西12小时
  • UTC-11: 协调世界时减去11小时
  • UTC-10: 协调世界时减去10小时
  • UTC-9: 协调世界时减去9小时
  • UTC-8: 协调世界时减去8小时
  • UTC-7: 协调世界时减去7小时
  • UTC-6: 协调世界时减去6小时
  • UTC-5: 协调世界时减去5小时
  • UTC-4: 协调世界时减去4小时
  • UTC-3: 协调世界时减去3小时
  • UTC-2: 协调世界时减去2小时
  • UTC-1: 协调世界时减去1小时
  • UTC: 协调世界时
  • UTC+1: 协调世界时加上1小时
  • UTC+2: 协调世界时加上2小时
  • UTC+3: 协调世界时加上3小时
  • UTC+4: 协调世界时加上4小时
  • UTC+5: 协调世界时加上5小时
  • UTC+6: 协调世界时加上6小时
  • UTC+7: 协调世界时加上7小时
  • UTC+8: 协调世界时加上8小时
  • UTC+9: 协调世界时加上9小时
  • UTC+10: 协调世界时加上10小时
  • UTC+11: 协调世界时加上11小时
  • UTC+12: 协调世界时加上12小时

中国所在的时区

中国所在的时区是指中国范围内划分的标准时区,中国的大致经度范围是73°33′E至135°05′E,本应跨越5个时区,但为了统一管理、保证全国统一时间,中国只采用了一个时区,即东八区(UTC+8)。中国除了采用UTC+8表示时区,还可以使用中国标准时间(China Standard Time,CST)来表示。

操作系统的时区

在Ubuntu 20.04系统中,有几个命令是和时间、时区有关的。

date

可以通过date命令来查看时间,在输出结果中同时会显示当前时间是按什么时间计时的。

wux_labs@wux-labs-vm:~$ date
Wed Feb 22 06:39:29 UTC 2023

image-20230222143718419

从输出结果可以看到,当前是UTC时间,2023-02-22。

timedatectl

还可以使用timedatectl命令查看时间的详细信息。

wux_labs@wux-labs-vm:~$ timedatectl
               Local time: Wed 2023-02-22 06:39:35 UTC
           Universal time: Wed 2023-02-22 06:39:35 UTC
                 RTC time: Wed 2023-02-22 06:39:35    
                Time zone: Etc/UTC (UTC, +0000)       
System clock synchronized: yes                        
              NTP service: active                     
          RTC in local TZ: no

image-20230222143740512

从结果中可以看到当前时间的详细信息,以及时区信息:

Time zone: Etc/UTC (UTC, +0000)  

使用timedatectl list-timezones命令可以列出所有可使用的时区。

使用timedatectl set-timezone命令可以修改系统的时区。

以下命令将系统时区修改为Asia/Shanghai

wux_labs@wux-labs-vm:~$ sudo timedatectl set-timezone Asia/Shanghai

修改完成后再次查看一下时间信息:

wux_labs@wux-labs-vm:~$ date
Wed Feb 22 14:39:48 CST 2023
wux_labs@wux-labs-vm:~$ timedatectl
               Local time: Wed 2023-02-22 14:39:52 CST
           Universal time: Wed 2023-02-22 06:39:52 UTC
                 RTC time: Wed 2023-02-22 06:39:52    
                Time zone: Asia/Shanghai (CST, +0800) 
System clock synchronized: yes                        
              NTP service: active                     
          RTC in local TZ: no

image-20230222144426244

数据库中的时区

TiDB数据库中的时区

在TiDB数据库中,通过参数time_zone可以设置数据库的时区。TiDB中的参数的作用域分为Global级别和Session级别,每个级别都可以设置time_zone参数,TiDB在取值的时候优先取Session级别的,Session级别没设置再取Global级别的,具体的优先级为:

Session > Global > 操作系统 > UTC

查看时区参数

在TiDB中,可以通过以下语句来查看当前集群中的参数。

mysql> select @@global.time_zone,@@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+
1 row in set (0.00 sec)

image-20230222150042438

在当前集群中time_zone都未设置,所以采用的是操作系统的时区。

与时间相关的函数

在TiDB中,有一些与时间有关的函数,其函数返回值会受时区的影响。

  • now()函数用于获取当前时间,包括日期和时间
  • curtime()函数用于获取当前时间,仅包含时间
mysql> select now(),curtime();
+---------------------+-----------+
| now()               | curtime() |
+---------------------+-----------+
| 2023-02-22 07:17:45 | 07:17:45  |
+---------------------+-----------+
1 row in set (0.00 sec)

由于TiDB数据库集群在启动的时候,操作系统采用的时间是UTC时间,所以当前启动的TiDB数据库集群也采用的UTC时间。

下面修改一下Session级别的参数。

mysql> set session time_zone = '+8:00';
Query OK, 0 rows affected (0.00 sec)

修改完成后,再看看当前时区参数以及函数返回值,都会发生变化。

mysql> select @@global.time_zone,@@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | +8:00               |
+--------------------+---------------------+
1 row in set (0.00 sec)

mysql> select now(),curtime();
+---------------------+-----------+
| now()               | curtime() |
+---------------------+-----------+
| 2023-02-22 15:18:06 | 15:18:06  |
+---------------------+-----------+
1 row in set (0.00 sec)

image-20230222151952213

与时间相关的数据类型

在TiDB中,有一些数据类型也与时间有关。

  • datetime,日期时间类型,会同时存储日期和时间
  • timestamp,时间戳类型,会同时存储日期和时间
  • time,时间类型,仅会存储时间

下面创建一个表用来看看不同数据类型受时区的影响情况。

mysql> create table temp(f1 datetime, f2 timestamp, f3 time);
Query OK, 0 rows affected (0.14 sec)

插入数据,都取当前时间。

mysql> insert into temp values(now(), now(), curtime());
Query OK, 1 row affected (0.01 sec)

查看时区及时间。

mysql> select @@global.time_zone,@@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+
1 row in set (0.00 sec)

mysql> select * from temp;
+---------------------+---------------------+----------+
| f1                  | f2                  | f3       |
+---------------------+---------------------+----------+
| 2023-02-22 07:27:13 | 2023-02-22 07:27:13 | 07:27:13 |
+---------------------+---------------------+----------+
1 row in set (0.00 sec)

以上结果是采用UTC时间的值,数据是持久化到表中的,固定不变的值。

image-20230222152926293

接下来,切换一下时区,再来看看表中的数据情况。

mysql> set session time_zone = '+8:00';
Query OK, 0 rows affected (0.00 sec)

mysql> select @@global.time_zone,@@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | +8:00               |
+--------------------+---------------------+
1 row in set (0.00 sec)

mysql> select * from temp;
+---------------------+---------------------+----------+
| f1                  | f2                  | f3       |
+---------------------+---------------------+----------+
| 2023-02-22 07:27:13 | 2023-02-22 15:27:13 | 07:27:13 |
+---------------------+---------------------+----------+
1 row in set (0.01 sec)

从结果可以看到,对于已经持久化保存的固定数据:

  • datetime、time两种数据类型的值不受时区影响
  • timestamp数据类型的值会受时区影响,时区不同,查询结果不同

image-20230222153120778

避坑1:

在数据库中,使用Timestamp数据类型,一定要小心,一定要确定好时区,分析影响性。

如果可以,使用datetime类型,而不使用timestamp类型。

与日期相关的函数

在TiDB数据库中,有一些关于日期的函数、计算:

  • curdate(),用来获取当前时间

  • date(),将字符串转换成日期

  • day(),获取日期的天

  • +interval 1 day,日期计算,加1天

  • =,可用于判断两个日期是否相等,相等返回1,不等返回0

  • datediff(),用来计算两个日期之间相差的天数

比如下面的代码用来做日期相关的计算:

mysql> select curdate(), curdate() + interval 5 day, day(curdate()), date('2023-02-22'), curdate() = date('2023-02-22'), curdate() = date('2023-02-23');
+------------+----------------------------+----------------+--------------------+--------------------------------+--------------------------------+
| curdate()  | curdate() + interval 5 day | day(curdate()) | date('2023-02-22') | curdate() = date('2023-02-22') | curdate() = date('2023-02-23') |
+------------+----------------------------+----------------+--------------------+--------------------------------+--------------------------------+
| 2023-02-22 | 2023-02-27                 |             22 | 2023-02-22         |                              1 |                              0 |
+------------+----------------------------+----------------+--------------------+--------------------------------+--------------------------------+
1 row in set (0.00 sec)

image-20230222161304920

注意:

date()函数仅能将有效的日期字符串转换成日期,如果日期不合法将会返回NULL。

在下面的例子中,data将正确的日期进行了转换,错误的日期返回了NULL。

mysql> select date('2023-02-22'),date('20230222'),date('2023-02-29'),date('20230229');
+--------------------+------------------+--------------------+------------------+
| date('2023-02-22') | date('20230222') | date('2023-02-29') | date('20230229') |
+--------------------+------------------+--------------------+------------------+
| 2023-02-22         | 2023-02-22       | NULL               | NULL             |
+--------------------+------------------+--------------------+------------------+
1 row in set, 2 warnings (0.00 sec)

避坑2:

不要以为用date()函数可以成功转换的日期都是正常的日期,有能够成功转换的也是错误日期。

比如,你见过日为00的日期吗?

在下面的案例中,'2023-03-00’是一个错误的日期,但是经过date()函数转换后并不是NULL,而确实是一个日期。但是这个日期,并不等于2023-03-01的前一天。

mysql> select date('2023-03-00'),date('2023-03-01'),date('2023-03-01') - interval 1 day, date('2023-03-00') = date('2023-03-01') - interval 1 day;
+--------------------+--------------------+-------------------------------------+----------------------------------------------------------+
| date('2023-03-00') | date('2023-03-01') | date('2023-03-01') - interval 1 day | date('2023-03-00') = date('2023-03-01') - interval 1 day |
+--------------------+--------------------+-------------------------------------+----------------------------------------------------------+
| 2023-03-00         | 2023-03-01         | 2023-02-28                          |                                                        0 |
+--------------------+--------------------+-------------------------------------+----------------------------------------------------------+
1 row in set (0.00 sec)

image-20230222162331025

这个日期的天是0,并且它不是2023-03-01的前一天,也不是2023-02-28的后一天。

mysql> select day(date('2023-03-00')),day(date('2023-03-01')),date('2023-03-01') - interval 1 day, date('2023-03-00') = date('2023-02-28') + interval 1 day;
+-------------------------+-------------------------+-------------------------------------+----------------------------------------------------------+
| day(date('2023-03-00')) | day(date('2023-03-01')) | date('2023-03-01') - interval 1 day | date('2023-03-00') = date('2023-02-28') + interval 1 day |
+-------------------------+-------------------------+-------------------------------------+----------------------------------------------------------+
|                       0 |                       1 | 2023-02-28                          |                                                        0 |
+-------------------------+-------------------------+-------------------------------------+----------------------------------------------------------+
1 row in set (0.00 sec)

image-20230222162640395

由于它不是一个正常的日期,所以它无法计算日期之间的差值。

mysql> select datediff(date('2023-02-28'),date('1970-01-01')),datediff(date('2023-03-00'),date('1970-01-01')),datediff(date('2023-03-01'),date('1970-01-01'));
+-------------------------------------------------+-------------------------------------------------+-------------------------------------------------+
| datediff(date('2023-02-28'),date('1970-01-01')) | datediff(date('2023-03-00'),date('1970-01-01')) | datediff(date('2023-03-01'),date('1970-01-01')) |
+-------------------------------------------------+-------------------------------------------------+-------------------------------------------------+
|                                           19416 |                                            NULL |                                           19417 |
+-------------------------------------------------+-------------------------------------------------+-------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

image-20230222164004982

如何计算闰年

在TiDB数据库中,可以通过日期的计算函数来计算当年是否是闰年,当2月的最后一天是29则是闰年,28则不是闰年。

mysql> select last_day(date('2023-02-01')), case when day(last_day(date('2023-02-01'))) = 29 then '是闰年' else '不是闰年' end;
+------------------------------+-------------------------------------------------------------------------------------------+
| last_day(date('2023-02-01')) | case when day(last_day(date('2023-02-01'))) = 29 then '是闰年' else '不是闰年' end        |
+------------------------------+-------------------------------------------------------------------------------------------+
| 2023-02-28                   | 不是闰年                                                                                  |
+------------------------------+-------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

image-20230222164815522

mysql> select last_day(date('2024-02-01')), case when day(last_day(date('2024-02-01'))) = 29 then '是闰年' else '不是闰年' end;
+------------------------------+-------------------------------------------------------------------------------------------+
| last_day(date('2024-02-01')) | case when day(last_day(date('2024-02-01'))) = 29 then '是闰年' else '不是闰年' end        |
+------------------------------+-------------------------------------------------------------------------------------------+
| 2024-02-29                   | 是闰年                                                                                    |
+------------------------------+-------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

image-20230222165039166

MySQL数据库中的时区

MySQL数据库中的时区与TiDB数据库中的时区一致,这里就不重复演示了。

还是需要注意Timestamp数据类型的使用。

日期相关的函数

在MySQL中也有与TiDB相同的关于日期的函数,这里也就不重复演示了。

但是有一个不太一样的,就是date(),TiDB中会将date(‘2023-03-00’)成功转换成日期,虽然该日期非法,但不为NULL。而在MySQL中date(‘2023-03-00’)是非法的,返回NULL。

mysql> select date('2023-03-00'),date('2023-03-01'),date('2023-03-01') - interval 1 day, date('2023-03-00') = date('2023-03-01') - interval 1 day;
+--------------------+--------------------+-------------------------------------+----------------------------------------------------------+
| date('2023-03-00') | date('2023-03-01') | date('2023-03-01') - interval 1 day | date('2023-03-00') = date('2023-03-01') - interval 1 day |
+--------------------+--------------------+-------------------------------------+----------------------------------------------------------+
| NULL               | 2023-03-01         | 2023-02-28                          |                                                     NULL |
+--------------------+--------------------+-------------------------------------+----------------------------------------------------------+
1 row in set, 2 warnings (0.00 sec)

image-20230222165528962

MySQL数据库中的定时器

在TiDB数据库中不支持存储过程、自定义函数、触发器、定时器等。

在MySQL数据库中,可以创建定时器。

下面的语句创建一个定时器,每10秒钟往表中插入一条记录,5分钟后结束定时器功能。

mysql> create event insert_event
    -> on schedule every 10 second
    -> ends now() + interval 5 minute
    -> do insert into temp values(now(), now(), curtime());
Query OK, 0 rows affected (0.02 sec)

定时器创建完成后,每隔一段时间查看数据库表的数据,可以看到数据的增长。

image-20230222154922506

总结

好了,以上就是数据库中关于日期、时间的使用,在TiDB中有几个坑、MySQL中也有几个坑,你遇到过吗?使用的时候一定要注意。

最后我们实现了在数据库中判断闰年、定时器等功能。

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

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

相关文章

Spring代理模式——静态代理和动态代理

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

python打包exe实用工具auto-py-to-exe的操作方法

auto-py-to-exe操作方法auto-py-to-exe 是一个用于打包 python 程序的程序。本文就是主要介绍如何使用 auto-py-to-exe 完成 python 程序打包。本文主要分为两节,第一节主要对 auto-py-to-exe 做一些介绍,第二节则是演示 auto-py-to-exe 的打包过程。一、…

pygraphviz安装教程

0x01. 背景 最近在做casual inference,做实验时候想因果图可视化,遂需要安装pygraphviz,整了一下午,终于捣鼓好了,真头大。 环境: win10操作系统python3.9环境 0x02. 安装Graphviz 传送门:…

linux:本地套接字通信客户和服务器代码

客户端代码 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <arpa/inet.h> #include <sys/un.h> int main(int argc, const cha…

中间件安全—Tomcat常见漏洞

中间件安全—Tomcat常见漏洞1.Tomcat常见漏洞1.1.前言1.2.文件上传 (CVE-2017-12615)1.2.1.漏洞原理1.2.2.影响版本1.2.3.漏洞复现1.2.3.1.测试是否允许PUT1.2.3.2.验证漏洞是否存在1.2.3.3.访问test.jsp1.2.3.4.上传执行命令脚本1.2.3.5.执行命令1.3.文件包含漏洞&#xff08;…

【第一章 - 绪论】- 数据结构(近八千字详解)

目录 一、 数据结构的研究内容 二、基本概念和术语 2.1 - 数据、数据元素、数据项和数据对象 2.2 - 数据结构 2.2.1 - 逻辑结构 2.2.2 - 存储结构 2.3 - 数据类型和抽象数据类型 三、抽象数据类型的表现与实现 四、算法和算法分析 4.1 - 算法的定义及特性 4.2 - 评价…

手把手教大家在 gRPC 中使用 JWT 完成身份校验

文章目录1. JWT 介绍1.1 无状态登录1.1.1 什么是有状态1.1.2 什么是无状态1.2 如何实现无状态1.3 JWT1.3.1 简介1.3.2 JWT数据格式1.3.3 JWT 交互流程1.3.4 JWT 存在的问题2. 实践2.1 项目创建2.2 grpc_api2.3 grpc_server2.4 grpc_client3. 小结上篇文章松哥和小伙伴们聊了在 …

Docker 如何配置镜像加速

Docker 镜像加速 国内从 DockerHub 拉取镜像有时会遇到困难&#xff0c;此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务&#xff0c;例如&#xff1a; 科大镜像&#xff1a;https://docker.mirrors.ustc.edu.cn/网易&#xff1a;https://hub-…

生态流量数据采集传输协议定制开发(嵌入式水资源SZY206协议以及VC++ POST数据发送)

水电站生态流量在线监测&#xff0c;流量数据采集传输,水资源遥测终端机程序。 背景&#xff1a;现场使用SCJ-LL01多普勒超声波流量计采集生态下泄流量&#xff0c;使用太阳能供电系统&#xff0c;使用SCJ-RTU01遥测终端机进行数据采集&#xff0c;设备采用4G通讯&#xff0c;…

基于MATLAB开发AUTOSAR软件应用层模块-part23.SR interface通信介绍(接收的数据错误时应该如何处理)

在软件SWC之间的AUTOSAR SR通信中,当COM报告接收SWC的数据接收错误时,运行时环境(RTE)触发DataReceiveErrorEvent。该事件可以指示发送方SWC未能在AliveTimeout限制内回复,或者发送方SWC发送了无效数据。 接下来我们就讲解下怎么实现无效数据的接收和判断 还是三步走,建模…

Ubuntu 上 Let‘s Encrypt 生成泛域名证书

安装生成工具certbot&#xff1a; apt install certbot 查看安装在哪&#xff1a; which certbot 使用certbot&#xff08;位置在 /usr/bin/certbot&#xff09;生成证书&#xff1a; /usr/bin/certbot certonly -d *.xxx.com --manual --preferred-challenges dns --ser…

一种全新的图像滤波理论的实验(二)

一、前言 2021年12月31日&#xff0c;我发布了基于加权概率模型的图像滤波算法的第一个实验&#xff0c;当时有两个关键问题没有解决&#xff1a; 1、出现了大面积的黑色区域&#xff0c;最近考虑把这个算法实际应用在图像和视频的压缩领域&#xff0c;于是通过对程序的分析&a…

【论文简述】GMFlow: Learning Optical Flow via Global Matching(CVPR 2022)

一、论文简述 1. 第一作者&#xff1a;Haofei Xu 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;CVPR oral 4. 关键词&#xff1a;光流、代价体、Transformers、全局匹配、注意力机制 5. 探索动机&#xff1a;过去几年中具有代表性的光流学习框架的核心估计方式没有…

Java文件IO及其案例分析

目录 1. 文件概述 1.1 狭义和广义上的文件 1.2 文件的路径 1.3 文件的类型 2. 针对文件系统的操作 3. 针对文件内容的操作&#xff08;文件的读和写&#xff09; 3.1 IO流对象 3.2 文件的读操作&#xff08;字节流&#xff09; 3.3 文件的写操作&#xff08;字节流&#…

内存取证常见例题思路方法-volatility (没有最全 只有更全)

目录 1.从内存文件中获取到用户hacker 的密码并且破解密码&#xff0c;将破解后的密码作为 Flag值提交; 2.获取当前系统的主机名&#xff0c;将主机名作为Flag值提交; 3.获取当前系统浏览器搜索过的关键词&#xff0c;作为Flag提交; 4.获取当前内存文件的 ip地址 5.当前系…

pycharm和navigator打开时出现报错,无法正常打开

1、navigator打开时出现提示&#xff1a; 原因是&#xff1a;python.exe有多个任务在占用。 解决办法&#xff1a; &#xff08;1&#xff09;打开cmd &#xff08;2&#xff09;输入&#xff1a;tasklist | findstr “pythonw” &#xff08;3&#xff09;有几个线程就kill几个…

qt qchart学习

Qt Charts主要由QChartView、QChart、QLegend图例、坐标轴(由QAbstractAxis子类实现)、**数据源(由QAbstractSeries子类实现)**等组成使用QChart的前期准备1. Qt5.9及以上版本&#xff1b;2. .pro文件中添加QT charts3. 在使用QChart的各个控件之前&#xff0c;引用头文件并必…

【前缀和】和为k的子数组 路径总和 III

文章目录和为k的子数组路径总和 III和为k的子数组 动态规划算法&#xff08;超时&#xff09; class Solution { public:int subarraySum(vector<int>& nums, int k) {int n nums.size();vector<vector<int>> dp(n, vector<int>(n, 0));int ans …

b2b b2c o2o分布式电子商务平台源码 mybatis+spring cloud

鸿鹄云商大型企业分布式互联网电子商务平台&#xff0c;推出PC微信APP云服务的云商平台系统&#xff0c;其中包括B2B、B2C、C2C、O2O、新零售、直播电商等子平台。 分布式、微服务、云架构电子商务平台 java b2b2c o2o 技术解决方案 开发语言&#xff1a; java、j2ee 数据库&am…

注解@Transactional 原理和常见的坑

这篇文章&#xff0c;会先讲述 Transactional 的 4 种不生效的 Case&#xff0c;然后再通过源码解读&#xff0c;分析 Transactional 的执行原理&#xff0c;以及部分 Case 不生效的真正原因1 项目准备下面是 DB 数据和 DB 操作接口&#xff1a;uidunameusex1张三女2陈恒男3楼仔…