🌓

C++ PART1 基础语法

本文是基于《C++新经典》,《Effective C++》, 《C++ primer》以及收集的相关资料总结而来. define #define是宏定义,一般比较常见,宏定义类似于模版,但是不如模版强大. 一般的宏为何使用do while定义 BAD case: 1#define LOG_AND_INCREMENT(x) printf("Va...

阅读全文

KMP算法实现思路

简介 KMP算法是在字符串中查找子串相关的算法,时间复杂度为O(n). 实现思路 中心思想:利用要查找的字符串的最长前后缀的信息跳过暴力查找算法那些重复匹配的内容. 1.使用辅助数组构建要查找的字符串中每个字符的最长前后缀数组. 2.匹配当前字符串与当前查找的字符串如果相等,二者匹配位置向后移. 3.如果不等且到了要查找字符的0位置那么当前字符匹配位置向后移...

阅读全文

MYSQL 知识随笔

1、myisam 和 innodb的区别 myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用,而且myisam不支持外键,并且索引和数据是分开存储的。 innodb是基于聚簇索引建立的,和myisam相反它支持事务、外键,并且通过MVCC来支持高并发,索引和数据存...

阅读全文

排序算法汇总

本文是基于 《算法》 一书 中排序章节的总结。 冒泡排序 思路:交换不是正确顺序的相邻元素,每一次排出一个最大或最小值. 时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:稳定 选择排序 思路:每次循环从无序区选出一个最大或最小值放入有序区. 时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:不稳定 插入排序 思路:每次选择一个元素插入...

阅读全文

Redis 相关基础知识总结

本文基于《Redis 设计与实现》 《Redis 开发与运维》、相关Redis博客文章进行总结。 1.redis是什么 Redis 是一个基于内存的高性能key-value数据库。 1、性能优秀,数据在内存中,读写速度非常快,支持并发10W QPS; 2、单进程单线程,是线程安全的,采用IO多路复用机制; 3、丰富的数据类型,支持字符串(string...

阅读全文

Linux 系统机制总结

1、进程间的通信方式 管道 管道包括三种: ✔普通管道PIPE: 通常有两种限制,一是单工,只能单向传输;二是只能在父子或者兄弟进程间使用. ✔流管道s_pipe: 去除了第一种限制,为半双工,只能在父子或兄弟进程间使用,可以双向传输. ✔命名管道name_pipe:去除了第二种限制,可以在许多并不相关的进程之间进行通讯. 信号量 信号量是一个计...

阅读全文

Linux 性能分析

本文基于《Linux性能之巅》以及相关文档,学习笔记整理. CPU CPU参数介绍 user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。 nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,...

阅读全文

ES 底层实现及使用

本文主要讲述查询相关的使用,不再对ES的基础概念做赘述. 倒排索引 正排索引:构建文档ID与单词的关联关系 倒排索引:构建单词与文档ID的关联关系 MySQL支持倒排索引,但是5.6之前的版本只支持拉丁字符,对汉字等不支持.因此作为搜索引擎具有很大的局限性. ES实现 单词词典:记录所有文档的单词,记录单词与倒排关联表的关联关系 倒排列表:记录的单词对...

阅读全文

Go语言必须掌握的相关知识

本文是在实际开发中所遇到的问题以及知识点进行了罗列,也和其他的编程语言进行了比较. Go中不支持的语法 1.Go不支持三元运算符 因为Go的设计者认为,三元运算很长的表达式中会有些难以理解,所以只能使用if-else控制 2.Go不支持结构体常量. 3.++运算符只能放在变量后面,而且不能被用于复杂表达式嵌套,但可以用于for循环的使用.这一点对类C语...

阅读全文

Manacher算法

Manacher算法 解决问题:暴利递归查找字符串的算法时间复杂度为O(n^2),在时间复杂度为O(n)解决最长回文子串. 解决思路 1.将字符串分割按拼接#字符. 例如:“1221”=>“#1#2#2#1#”.目的是为了查找偶回文. 2.-当前字符位置不在回文最右边界内,执行常规查找回文算法(暴利算法)并记录回文最右边界(简称最右边界),回文最右边界...

阅读全文