Victor's Code Journey
Victor's Code Journey

RFC1928:SOCK5

SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。当防火墙后的客户端要访问外部的服务器时,就跟SOCKS代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。根据OSI模型,SOCKS是会话层的协议,位于表示层与传输层之间。

RFC4180:CSV

  1. 每条记录都位于一条单独的行上,由行分隔符(CRLF)分开。例如:
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF
  1. 文件中的最后一条记录可能有也可能没有结束符标志,例如:
aaa,bbb,ccc CRLF
zzz,yyy,xxx
  1. 第一行可能存在标题行,包含记录字段的对应名称,标题行的标题数与记录字段数相同。例如:
field_name,field_name,field_name CRLF
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF
  1. 在标题和记录中,可能有一个或多个字段,使用,号分隔,最后一个字段记录后面不能有分隔符。例如:
AAA,BBB,CCC
  1. 每个字段可能包含在双引号,也可能不包含在内(microsoft excel 没有使用双引号)。如果字段没有用双引号括起来,那么双引号可能不会出现在字段内。例如:
"aaa","bbb","ccc"CRLF
ZZZ,YYY,XXX
  1. 如果字段包含换行符(CRLF),双引号,和逗号,那么字段值应该被包含在双引号中,例如:
"aaa","b CRLFbb","ccc" CRLF
zzz,yyy,xxx
  1. 如果使用双引号括起字段,要在一个字段内使用双引号必须通过在前面添加另一个双引号的方式进行转义。例如:
"aaa","b""bb","ccc"
file = [header CRLF] record *(CRLF record) [CRLF]
header = name *(COMMA name)
record = field *(COMMA field)
name = field
field = (escaped / non-escaped)
escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
non-escaped = *TEXTDATA
COMMA = %x2C
CR = %x0D ;as per section 6.1 of RFC 2234 [2]
DQUOTE =  %x22 ;as per section 6.1 of RFC 2234 [2]
LF = %x0A ;as per section 6.1 of RFC 2234 [2]
CRLF = CR LF ;as per section 6.1 of RFC 2234 [2]
TEXTDATA =  %x20-21 / %x23-2B / %x2D-7E

mysql报错 illegal mix of collations

尝试复现问题

  • 首先创建数据库。
CREATE SCHEMA `tmp` DEFAULT CHARACTER SET utf8 COLLATE utf8_danish_ci ;
flush privileges;
grant all privileges on tmp.*  to 'victorchu'@'localhost' ;
  • 接下来创建表A。
CREATE TABLE IF NOT EXISTS `tmp`.`A`(
  `id` INT NOT NULL,
  `name` VARCHAR(45) NULL,
  `b_name` VARCHAR(45) NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

INSERT INTO `tmp`.`A` (`id`, `name`, `b_name`) VALUES ('1', '1', '1');
INSERT INTO `tmp`.`A` (`id`, `name`, `b_name`) VALUES ('2', '2', '2');
INSERT INTO `tmp`.`A` (`id`, `name`, `b_name`) VALUES ('3', '3', '3');

接着创建表B。

mysql使用问题:group concat

MySQL提供的group_concat()函数可以拼接某个字段值成字符串,如 select group_concat(user_name) from sys_user,默认的分隔符是逗号,即,,如果需要自定义分隔符可以使用 SEPARATOR.如:select group_concat(user_name SEPARATOR '_') from sys_user。

Java虚拟机-启动参数详解

java命令用于启动JVM虚拟机。Java启动参数分为3种:

  1. 标准参数: 所有的JVM实现都必须实现这些参数的功能,而且向后兼容。JVM的标准参数都是以”-“开头。
  2. 非标准参数: 默认JVM(HotSpot虚拟机)实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容.JVM的非标准参数都是以”-x“开头。
  3. 非stable参数:此类参数通常具有特定的系统要求,并且可能需要对系统配置参数的特权访问。各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用。JVM的非stable参数都是以”-xx“开头。

算法之KMP字符串匹配

有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?

假设主串target为: a b a c a a b a c a b a c a b a a b b,模式串pattern: a b a c a b(为了方便查看,每个字符间用空格隔开)。

用暴力算法匹配字符串过程中,我们会把target[0]跟 pattern[0] 匹配,如果相同则匹配下一个字符,直到出现不相同的情况,此时我们会丢弃前面的匹配信息,然后把target[1]跟 pattern[0] 匹配,循环进行,直到主串结束,或者出现匹配成功的情况。这种丢弃前面的匹配信息的方法,极大地降低了匹配效率。

以上面的字符为例子:pattern的前5个字符abaca可以匹配target的前5个字符,但是pattern[5]和target[5]不匹配。下面重新从target[1]开始和pattern匹配。

显然效率很差,因为你要把"搜索位置"移到已经比较过的位置,重比一遍。

语法范式

上下文无关的组成部分:

  • 终结符号
  • 非终结符号
  • 一个开始符号
  • 一组产生式

例如,下面数学表达式:

$$ expr \to expr+term $$

$$ expr \to expr-term $$

$$ expr \to term $$

$$ term \to term * factor $$

$$ term \to term/factor $$

$$ term \to factor $$

$$ factor \to (expr) $$

$$ factor \to id $$

  1. 终结符号(词法单元)是组成串的基本符号,例如上面的 +,-。
  2. 非终结符号是表示串的集合的语法变量,例如上面的term和factor。非终结符号表示的串集合用于定义由文法生成的语言。

算法之trie字典树

 Trie树,又称字典树、前缀树、单词查找树、键树,是一种多叉树形结构,是一种哈希树的变种。Trie树典型应用是用于快速检索(最长前缀匹配),统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计,搜索提示等场景。它的优点是最大限度地减少无谓的字符串比较,查询效率比较高。

Trie的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。

一致性Hash算法-问题

一致性哈希算法是一种特殊的哈希算法, 当目标槽位数量发生变化时,它会尽力降低的重新映射的数量。 传统的哈希表设计中,添加或者删除一个槽位,会造成全量的重新映射, 一致性哈希则追求的是增量式重新映射。

Hash算法简介

散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。査找时,根据这个确定的对应关系找到给定值key的映射f(key),若査找集合中存在这个记录,则必定在f(key)的位置上。

我们把这种对应关系f称为散列函数,又称为哈希(Hash)函数。按这个思想,采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hashtable)。那么关键字对应的记录存储位置我们称为散列地址。

小白鼠试毒法-向小白鼠致敬

1000瓶药水,1瓶有毒药,服用后一小时毒发,毒药可以无限稀释,那么一小时内用几只小白鼠能够找出毒药1?

一只老鼠的状态是2种生或死,这里可以看做bit位,而1000瓶药水有1000种情况,显然我们可以使用2^10 = 1024>1000 来描述这1000种可能,而2进制数的唯一性可以唯一确定一种情况。

算法之bitMap

bitmap适用于什么场景?

bitmap的核心思想是将一个元素的可能取值映射为某个空间内的值(常见的是1bit空间,提供0,1两种状态。或是2bit空间,提供 0,1,2,3四种状态)。通过某种顺序的映射表来节省存储空间。

linux命令tmpreaper

tmpwatch 会在指定目录中递归删除指定时间段内未被访问的文件。通常,它用于自动清除临时文件系统目录,例如 /tmp 和 /var/tmp。

  • 它只会删除空目录、常规文件和符号链接。它不会切换到其他文件系统,并避开了属于根用户的 lost+found 目录。
  • 默认情况下,tmpwatch 会根据文件的 atime(访问时间)而不是 mtime(修改时间)删除文件。
  • 可以在 tmpwatch 命令中添加其他参数来更改这些行为。

警告: 不要在 / 中运行 tmpwatch 或 tmpreaper,因为该程序中没有防止这种情况的机制。