首先,这是一篇入门级的文章,高手可以无视。

看了阮一峰的字符串匹配的KMP算法,写得很好,推荐看看。不过我想自己写个例子描述一下这个算法,顺便写个PHP实现,于是有了这篇博文。

序号 ORACLE MYSQL 说明
1 VARCHAR2 VARCHAR
2 NUMBER INT MYSQL有很多整数类型:tinyint、smallint、mediumint、int、integer、bigint
3 NUMBER DECIMAL
4 DATE DATATIME

在国内大部分的公司都不要求,或者难以要求,以至于工作了很多年的程序员都不知道如何去写一个正确的单元测试。当然,你会在网上看到很多文章告诉你如何使用
Junit,然后告诉你单元测试就是使用
Junit,真是无知又无耻,不仅写的人不知道什么是单元测试,还“人不倦”。实在忍受不了,便有了这篇文章。

  • 字符串搜索算法字符串搜索算法(String searching
    algorithms)又称字符串比对算法(string matching
    algorithms)是一种搜索算法,是字符串算法中的一类,用以试图在一长字符串或文章中,找出其是否包含某一个或多个字符串,以及其位置。

  • 部分算法比较 [克努斯-莫里斯-普拉特算法即KMP算法]令 m
    为模式的长度, n 为要搜索的字符串长度, k为字母表长度。

    图片 1image.png

日期类型说明

ORACLE:

-- 当前日期时间 2018-04-27 13:38:54SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL; -- 转换为日期类型SELECT TO_DATE('2018-10-01 14:00:00','YYYY-MM-DD HH24:MI:SS') FROM DUAL;

MYSQL:

-- 当前日期时间 2018-04-27 13:38:54SELECT NOW() FROM DUAL;-- 格式化日期或日期字符串 为指定格式的字符串SELECT DATE_FORMAT,'%Y-%m-%d %H:%i:%s') FROM DUAL;SELECT DATE_FORMAT('2018-10-01 14:00:00','%Y-%m-%d %H:%i:%s') FROM DUAL;-- 字符串转换为日期类型SELECT STR_TO_DATE('2018-10-01 14:00:00','%Y-%m-%d %H:%i:%s') FROM DUAL;-- 当前日期 2018-04-27SELECT CURDATE() FROM DUAL;-- 当前时间 13:39:15SELECT CURTIME() FROM DUAL;/*字符串转日期STR_TO_DATE(str,format) 将字符串转换为日期数据日期转字符串DATE_FORMAT(date,format) 函数用于以不同的格式显示日期/时间数据*/

老生常谈的好处

单元测试位于测试金字塔的最底层,越向上反馈的时间越长,实现的成本也越高。

图片 2测试金字塔

测试的好处不仅仅是在编码时可以快速验证我们的程序是否满足预期,更大的好处是未来修改另一个功能时,可以帮助我们快速回归之前的所有测试,以确定此修改的影响范围。比人工的效率更高而且更加可靠。

3.1 例子

给定字符串:

RXYZAHXFXYZAXYZAXYZ

需要搜索的字符串是:

XYZAXY

朴素匹配的步骤很简单,先对比两个字符串的第一个字母,如果不一样,对比给定字符串的下一个字母,如果一样,那么对比两个字符串的第二个字母,以此类推。这种算法的缺点是效率低,因为做了很多无用工,比如,我在匹对
RXYZAHXFXYZAXYZAXYZ和XYZAXY字符串的时候,我在匹对给定字符串的XYZAH和要搜索的字符串XYZAXY这一步,前四个字母的已经匹对成功的,这四个字母是

XYZA

这个字符串的前缀和后缀

前缀:[X,XY,XYZ]后缀:[YZA,ZA,A]

没有共同的元素,这表示在这个长度内,不会有能和要搜索字符串的前缀匹配的部分,那么就可以直接跳过这一部分字符串的对比。这就是KMP算法的核心。所以,我们首先要对要搜索的字符串生成一个匹配表。

mysql 之 DATE、DATETIME、TIMESTAMP支持范围说明

类型 支持范围
DATE [ ‘1000-01-01’ to ‘9999-12-31’]
DATETIME [‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’]
TIMESTAMP [‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC] 备注:北京时间

参考链接:

发表评论

电子邮件地址不会被公开。 必填项已用*标注