KMP 算法
KMP 算法是一种快速将模式串与主串匹配的算法。
以下面的字符串为例:
比较
↓
主串
A
B
B
A
B
B
A
B
A
B
A
A
A
B
A
B
A
A
A
字串
A
B
B
A
B
A
A
B
A
B
A
A
KMP 算法做了这样一件事:
先比较第一个字母,A==A,「比较指针」后移一位,然后比较第二个字母,也相等……一直到 ABBAB==ABBAB。当比较第 6 个字母时,发现 B 不等于 A。于是,在这个时候选择研究之前匹配成功的 ABBAB。我们要找这个匹配成功的子串的最长的相等的前缀和后缀,在这个例子中是 AB,即 (AB)B(AB)。于是,我们将整个模式串后移,将之前的前缀移动到后缀的位置,接着和主串比较。即:
比较
↓
主串
A
B
B
A
B
B
A
B
A
B
A
A
A
B
A
B
A
A
A
字串
A
B
B
A
B
A
A
B
A
B
A
A
接下来接着比较主串和子串,当出现不同时还是找最长相同前后缀,当比较指针到子串 ...
JDBC 万能模板
Update 2020-5-15:
我心态崩了,我把 JDBC 的原生用法摸透之后发现 Apache 提供了一个开源的 JDBC 工具类库叫 commons-dbutils,里面封装了针对于数据库的增删改查操作。需要使用原生 JDBC 的话使用这个库就行了,本文终结。
=====以下是原文章=====
users.sql:
123456789101112131415SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for users-- ----------------------------DROP TABLE IF EXISTS `users`;CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `ema ...
MySQL 常用函数总结
单行函数字符函数length:获取参数值的字节个数concat:拼接字符串lower:变小写upper:变大写substr:截取子串instr:返回子串第一次出现的索引,如果找不到返回0trim:去前后空格lpad:用指定的字符实现左填充指定长度rpad:用指定的字符实现右填充指定长度replace:替换
数学函数round:四舍五入ceil:向上取整,返回≥该参数的最小整数floor:向下取整,返回≤该参数的最大整数truncate:截断mod:取模rand:获取随机数,返回0-1之间的小数
日期函数now:返回当前系统日期+时间curdate:返回当前系统日期,不包含时间curtime:返回当前时间,不包含日期year:年month:月day:日hour:小时minute:分钟second:秒str_to_date:将日期格式的字符转换成指定格式的日期date_format:将日期转换成字符datediff:返回两个日期相差的天数monthname:以英文形式返回月
其他函数version:当前数据库服务器的版本database:当前打开的数据库user:当前用户password: ...
加号在 MySQL 中的使用
加号两侧的参数类型会影响计算的结果。
数值 + 数值:直接运算。
字符 + 数值:先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成 0,再做运算。
null + 数值:结果都为 null。
1234567mysql> SELECT 233+233, '233'+233, 'haha'+233, NULL+233;+---------+-----------+------------+----------+| 233+233 | '233'+233 | 'haha'+233 | NULL+233 |+---------+-----------+------------+----------+| 466 | 466 | 233 | NULL |+---------+-----------+------------+----------+1 row in set, 1 warning (0.00 sec)
MySQL 中的「安全等于」运算符是什么
今天复习 MySQL 的时候看到了 <=> 运算符。
众所周知,= 是等于运算符,<> 是不等于运算符,那么 <=> 是什么呢?
<=> 表示的是「安全等于」,它可以用在比较 NULL 值的时候。
当我们使用 = 来比较 NULL 值的时候会出现返回值为 NULL 的情况:
1234567mysql> SELECT NULL = NULL, NULL = 1;+-------------+----------+| NULL = NULL | NULL = 1 |+-------------+----------+| NULL | NULL |+-------------+----------+1 row in set (0.00 sec)
而使用安全等于则可以解决这一问题:
1234567mysql> SELECT NULL <=> NULL, NULL <=> 1;+---------------+------------+| NULL <=> NULL | NUL ...
写在我的 20 岁生日
此处嵌入了一个 YouTube 视频,需要稳定的网络环境。
我于 2000 年 5 月 6 日出生,算到今天已经 20 个年头了。我是一个记忆力很差的人,写下这篇文章主要是为了回首过去、展望未来。
如果说有什么东西是贯穿了我的人生前 20 年的话,我会选择计算机。我在 2003 年搬过一次家,我印象中在搬家前就接触到了电脑。这也是我对于 2003 年前仅存的一点回忆,真正记事还是从 03 年开始。
我对于三年幼儿园期间的计算机其实没有什么特别深刻的回忆,但可以肯定的是我在这三年间对于计算机的使用有了突飞猛进的进展。我印象特别深刻的一次是我在小学一年级的时候,有一次去一个二年级的同学家玩。那个时候已经有 4399 了,他想和我一起玩网页游戏,就打开了百度。然后,拿出一本一年级还是二年级的语文书(苏教版),对着上面的一张字母表,「一指禅」打出了「游戏」两个字。没有歧视的意思,但那是年幼的我第一次见有人打字这么慢,你可以想象为了敲一个字母,然后对着书找半天,再对着键盘找半天的绝望吗。于是我给他演示了一下我的打字速度,换来的只有他的惊叹。不过太早会打字也不见得是一件好事。由于我打字全靠自学 ...
如何解决 CSGO 连接到任意官方服务器失败的问题
江苏移动亲测有效,已多月没有遇到此问题。
下载网易 UU 加速器,选择「Steam社区/商店」,点击「节点」。
选择「模式三」的节点,点击「确定」。
再次启动游戏,即可正常匹配。
原因在于江苏移动的网络无法正常访问 api.steampowered.com,而 UU 加速器模式四的节点没有加速这个网站。使用可以加速这个网站的模式三即可。
如何在你的 Windows 计算机上安装比特币钱包
⚠ 警告:请确认比特币在您的国家或地区是合法的。否则,您将承担一切法律后果。
⚠ WARNING: Please confirm that Bitcoin is legal in your country or region. Otherwise, you will bear all legal consequences.
下载钱包
浏览官网 https://electrum.org/#download 下载 Electrum 钱包。
选择最基本的 Standalone Executable 进行下载。
下载完成后打开文件进入安装页面。
安装钱包
当 Electrum 询问您要如何连接到服务器时,选择「自动连接」。
选择一个新的钱包名称或将其设置为「default_wallet」。
保留「标准钱包」的选择,然后单击下一步。
保留「创建一个新的密语种子」的选择,然后单击下一步。
保留「隔离见证」的选择,然后单击下一步。
现在,Electrum 将为您提供一个密语种子,拥有种子的人代表着拥有这个钱包的使用权。将其写在纸上,并放在安全的地方,然后单击下一步。切勿将密语种子另存为计算机上的文 ...
Java 关于三目运算符的一个细节
我们首先来看一道题,问下面的代码输出是什么:
12Object o1 = true ? new Integer(1) : new Double(2.0);System.out.println(o1);
答案是「1.0」。
原因在于三目运算符要求表达式 2 和表达式 3 的类型一致,当不一致时,就会进行类型提升,「小」的数据类型就会往「大」的数据类型转。
Java 对于数值型的数据类型「大小」关系为 byte < short < int < long < float < double。
因此,Integer(1) 在这里被提升为了 Double(1),调用了 Double 类重写的 toString 方法,故输出为 1.0。
如何在 CSGO 中绑定一键跳投
跳投是 CSGO 对局中必备技能之一。这一功能在客户端中并没有默认的按键,新手来到 CSGO 的世界之后很容易一头雾水。其实设置的过程很简单。
打开 CSGO 的安装路径,比如我的在 C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive 下。实在找不到的话可以打开 Steam,在游戏库中右击 CSGO,点击「属性」,选择「本地文件」,点击「浏览本地文件」即可。
接着打开 csgo 文件夹下的 cfg 文件夹,创建文件「autoexec.txt」。如果你的文件没有后缀名的话,可以参照截图勾选上右上角的「文件扩展名」。
如果你不能编辑 cfg 文件的话,可以先把后缀名改成 txt。
在该文件中粘贴以下文本:
123alias "+jumpthrow" "+jump;-attack"alias "-jumpthrow" "-jump"bind "alt" "+jumpthrow&q ...