C++基于 googletest 做单元测试

一、安装 googletest 单测对程序员而言是提升代码质量最重要、最有效的一个措施,对程序员来说,要想写一个好的程序,那么必定少不了好的单元测试。 googletest(gtest) 是 google 开发出来的一个开源的、跨平台的测试框架,是 C++中最出名的测试框架。 gtest 支持 linux 、 wind ... 阅读更多

CMakeLists.txt 文件的基本语法

一、概述 CMakeLists.txt 是 cmake 编译系统构建器的构建文件,就像是 make 中的 Makefile 一样。 Makefile 是通过固定的文件格式来构建目标,相对于 Makefile 而言,CMakeList 并没有固定的语法格式,他是通过各种函数和指令来完成构建。 一个基本的 CMakeList. ... 阅读更多

HTTP/2 简介

一、 HTTP/2 概述 HTTP/2 是 HTTP 协议的第二个大版本,相较于 HTTP/1 而言,HTTP/2 的核心观念是 「构建一个更快、更简单以及更强大」 的 web 应用。 HTTP/2 will make our applications faster, simpler, and more robust—a ... 阅读更多

HTTP 协议中的 keep-alive 机制

一、长连接和短连接 长连接和短链接的概念: 短连接:传输完数据后连接立刻关闭。 长连接:传输完数据后不会立刻关闭连接,下次传输数据继续复用这个连接。 很容易看出,长连接和短连接的主要区别就是连接完成后是否会关闭连接,长连接不会在完成后立马关闭。 众所周知,HTTP 是基于 TCP 的,TCP 连接的建立和释 ... 阅读更多

数据库中的多版本并发控制 (MVCC)

一、概述 事务的出现给并发带来了巨大的便利性,它的 ACID 特性使得数据在并发时更加可靠。但是对于事务而言,它也会导致出现第一类丢失更新、第二类丢失更新、脏读、不可重复读以及幻读的问题,当然又出现了多种事务隔离级别来避免在产生这几类问题。那么隔离级别是如何实现的呢? 这就是多版本并发控制 (MVCC) 要 ... 阅读更多

MySQL 中的行锁、两阶段锁协议以及死锁

一、行锁和两阶段锁协议 行锁:顾名思义,就是对某一行加锁,修改的时候不会锁住整个表。相对于表锁来说,行锁的开销更大 (因为涉及到 MVCC 等需要保存快照),但是粒度更小,更适合于高并发场景。行锁是每个引擎单独实现的,但是并不是所有的引擎都实现了行锁。例如 MyISAM 就没有实现行锁,它只支持表锁,而 Inn ... 阅读更多

关于 vector 的扩容机制

往 vector 中添加元素时,如果空间不够将会导致扩容。 vector 有两个属性:size 和 capacity 。 size 表示已经使用的数据容量,capacity 表示数组的实际容量,包含已使用的和未使用的。 vector 扩容规则: 当数组大小不够容纳新增元素时,开辟更大的内存空间,把旧空间上的数据复制过来, ... 阅读更多

时不我待,继续高成长!

一年一度的年会又已经落幕,意味着新一年的工作也即将开启。

回望过去的 2019,又是收获满满的一年。遗憾还是和去年一样,依旧保持着中奖绝缘体的神秘体质。

好在,今年从优秀变成了卓越,一下子往前跨越了一大步。也算是对得起一年的辛苦劳动了。

新年,又有了新的目标,继续努力吧!希望一切顺利。

20200119001.jpg

20200119002.jpg
20200119003.jpg
20200119004.jpg

STL 中的迭代器失效

一、迭代器失效 向容器添加或者删除元素可能会导致指向容器的指针、引用或者迭代器失效。使用已经失效的指针、引用或者迭代器将会导致程序出现异常,编码过程中一定要时刻注意迭代器失效的场景。 例如,以 vector 为例:

执行以上代码会导致段错 ... 阅读更多