2023
本文是基于《C++新经典》,《Effective C++》, 《C++ primer》以及收集的相关资料总结而来.
define
#define是宏定义,一般比较常见,宏定义类似于模版,但是不如模版强大.
一般的宏为何使用do while定义
BAD case:
1#define LOG_AND_INCREMENT(x) printf("Va...
阅读全文
2023
简介
KMP算法是在字符串中查找子串相关的算法,时间复杂度为O(n).
实现思路
中心思想:利用要查找的字符串的最长前后缀的信息跳过暴力查找算法那些重复匹配的内容.
1.使用辅助数组构建要查找的字符串中每个字符的最长前后缀数组.
2.匹配当前字符串与当前查找的字符串如果相等,二者匹配位置向后移.
3.如果不等且到了要查找字符的0位置那么当前字符匹配位置向后移...
阅读全文
2022
1、myisam 和 innodb的区别
myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用,而且myisam不支持外键,并且索引和数据是分开存储的。
innodb是基于聚簇索引建立的,和myisam相反它支持事务、外键,并且通过MVCC来支持高并发,索引和数据存...
阅读全文
2022
本文是基于 《算法》 一书 中排序章节的总结。
冒泡排序
思路:交换不是正确顺序的相邻元素,每一次排出一个最大或最小值.
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定
选择排序
思路:每次循环从无序区选出一个最大或最小值放入有序区.
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:不稳定
插入排序
思路:每次选择一个元素插入...
阅读全文
2022
本文基于《Redis 设计与实现》 《Redis 开发与运维》、相关Redis博客文章进行总结。
1.redis是什么
Redis 是一个基于内存的高性能key-value数据库。
1、性能优秀,数据在内存中,读写速度非常快,支持并发10W QPS;
2、单进程单线程,是线程安全的,采用IO多路复用机制;
3、丰富的数据类型,支持字符串(string...
阅读全文
2022
1、进程间的通信方式
管道
管道包括三种:
✔普通管道PIPE: 通常有两种限制,一是单工,只能单向传输;二是只能在父子或者兄弟进程间使用.
✔流管道s_pipe: 去除了第一种限制,为半双工,只能在父子或兄弟进程间使用,可以双向传输.
✔命名管道name_pipe:去除了第二种限制,可以在许多并不相关的进程之间进行通讯.
信号量
信号量是一个计...
阅读全文
2022
本文基于《Linux性能之巅》以及相关文档,学习笔记整理.
CPU
CPU参数介绍
user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。
nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,...
阅读全文
2022
本文主要讲述查询相关的使用,不再对ES的基础概念做赘述.
倒排索引
正排索引:构建文档ID与单词的关联关系
倒排索引:构建单词与文档ID的关联关系
MySQL支持倒排索引,但是5.6之前的版本只支持拉丁字符,对汉字等不支持.因此作为搜索引擎具有很大的局限性.
ES实现
单词词典:记录所有文档的单词,记录单词与倒排关联表的关联关系
倒排列表:记录的单词对...
阅读全文
2022
本文是在实际开发中所遇到的问题以及知识点进行了罗列,也和其他的编程语言进行了比较.
Go中不支持的语法
1.Go不支持三元运算符
因为Go的设计者认为,三元运算很长的表达式中会有些难以理解,所以只能使用if-else控制
2.Go不支持结构体常量.
3.++运算符只能放在变量后面,而且不能被用于复杂表达式嵌套,但可以用于for循环的使用.这一点对类C语...
阅读全文
2021
Manacher算法
解决问题:暴利递归查找字符串的算法时间复杂度为O(n^2),在时间复杂度为O(n)解决最长回文子串.
解决思路
1.将字符串分割按拼接#字符. 例如:“1221”=>“#1#2#2#1#”.目的是为了查找偶回文.
2.-当前字符位置不在回文最右边界内,执行常规查找回文算法(暴利算法)并记录回文最右边界(简称最右边界),回文最右边界...
阅读全文