bjmayor 发布于 2021-08-29

Trie树,前缀树

[TOC]

trie树,又叫前缀匹配树,适合做自动补全 和 敏感词过滤。它的key都为字符串,能做到高效查询和插入,时间复杂度为O(k),k为字符串长度,缺点是如果大量字符串没有共同前缀时很耗内存。

它的核心思想就是通过最大限度地减少无谓的字符串比较,使得查询高效率,即「用空间换时间」,再利用共同前缀来提高查询效率。

阅读全文 »

bjmayor 发布于 2021-08-29

时间轮算法

[TOC]

时间轮算法。目前的定时任务基本都是基于这个思想实现的。

基本思想

1b80c724801c46f0b5e89c14adf2fadf-image.png

如上图中所示,我只需要把任务放到它需要被执行的时刻,然后等着时针转到这个时刻时,取出该时刻放置的任务,执行就可以了。 这就是时间轮算法最核心的思想了。

什么?时针怎么转? while-true-sleep 下面让我们一点一点增加复杂度。

阅读全文 »

bjmayor 发布于 2021-08-29

C 程序设计语言-读书笔记

[TOC]

《C 程序设计语言》。C语言经典版本。必读。 语法之外,主要是1988年出的ANSI标准。

学习一门语言。语法:1%, 标准库:10%, 惯用法:5%, 其他:84%。

导言

C语言通用规则: 在允许使用某种类型变量值的任何场合,都可以使用该类型的更复杂的表达式。

修改"20"等不明其意的幻数的方式是定义一个有意义的名字。

#define 名字 替换文本 # 注意,这里没有分号。。。

#define 指令行末尾没有分号。

标准库提供的输入/输出模型非常简单。无论文本从何处输入,输出到何处,其输入/输出都是按照字节流的方式处理。

字符在机器内部是以位模式出现的。char类型专门存储这类数据。getchar() 返回值之所以是int, 是因为EOF是个特殊的int, 在我的mac上是-1。在windows上Ctrl+Z输入EOF, 在mac上是Ctrl+D

阅读全文 »

bjmayor 发布于 2021-08-29

go 命令行参数解析

[TOC]

go标准库-flag

命令行的风格

由于一些历史原因,Unix 出现过很多不同的分支,命令行的风格也因此有很多标准,比如:

  • Unix 风格,选项采用单 - 加一个字母,比如 -v,短选项就是它,优点是足够简洁;
  • BSD 风格,选项没有 -,没有任何的前缀;
  • GNU 风格,采用 --,如 --version,长选项,扩展性好,但是要多打几个字母;

查看系统进程有两种写法:
ps aux(BSD 风格) 和 ps -elf(Unix 风格)。

POSIX 的命令行风格算是取长补短的集合吧。什么是 POSIX 风格?可以查看这篇文档命令参数语法。它同时提供了长短选项的标准。

阅读全文 »

bjmayor 发布于 2021-08-29

go-正则

[TOC]

go标准库-regex

表达式对象

//初始化结构体对象的方法 func Compile(expr string) (*Regexp, error) //和Compile函数相似,但是该方法支持POSIX协议,可以支持类似`egrep`的语法 func CompilePOSIX(expr string) (*Regexp, error) //Must系列函数和上面两个函数相似,但是不会返回error,如果有异常直接panic func MustCompile(str string) *Regexp func MustCompilePOSIX(str string) *Regexp

阅读全文 »