Heap题型套路
摘要:1 heap简介 heap本质上是用Array或者vector实现的完全二叉树,这个tree的root节点代表整个heap的最大值(max_heap)或最小值(min_heap)。 常用于解决Top K问题。 C++并没有将heap作为容器,而是作为算法放到< algorithm>中,默认是max_
阅读全文
posted @
2021-12-31 20:34
龙虾天天
阅读(3)
推荐(0) 编辑
Array题型刷题套路
摘要:1 概述 Array类型题型,一般而言题目中数据都有固定长度或者数量,通常使用双指针的方式解决此类问题。此处双指针不一定就是两个指针,同时也不一定是真实的指针,而且多数是数组下标的处理方式,主要是指使用双指针的思维,比如同向移动指针或者反向移动指针。 2 同向双指针方式 使用下图表示同向双指针的思考
阅读全文
posted @
2021-12-29 00:29
龙虾天天
阅读(1)
推荐(0) 编辑
C++ STL源码剖析 -- 二叉堆
摘要:1 二叉堆 二叉堆,就是一种完全二叉树,即整个二叉树除了最底层的叶子节点之外,是填满的,而最底层的叶子节点中间也没有空隙,如下图所示: 使用数组层级存储 | * | A | B | C | D | E | F | G | H | I | J | 如果0位置保留,从1位置开始保存根节点,那么i位置的某
阅读全文
posted @
2021-12-27 20:54
龙虾天天
阅读(1)
推荐(0) 编辑
文件系统分布式锁简要介绍
摘要:1 命名空间 不同服务的锁用不同的namespace来区分,不同元数据服务上锁namespace的名字不同,元数据锁和数据锁的namespace也不同,客户端理论上会向所有的服务发请求,所以客户端的锁分布在不同的namespace下,锁客户端用namespace来组织不同的锁链表. 分布式锁模块跟元
阅读全文
posted @
2021-12-22 00:12
龙虾天天
阅读(3)
推荐(0) 编辑
C++同步并发操作
摘要:何时需要线程同步 线程完成前,需要等待另一个线程执行线程需要等待特定事件发生线程等待某个条件变为true 线程同步的方式 持续检查共享标记 void wait_for_flag() { std::unique_lock lock(m); while (!flag) { lock.unlock();
阅读全文
posted @
2021-12-19 18:39
龙虾天天
阅读(1)
推荐(0) 编辑
C++线程间共享数据
摘要:通常我们使用锁保护线程间共享数据,这也是最基本的方式。 当访问共享数据前,使用互斥量将相关数据锁住,再当访问结束后,再将数据解锁。线程库需要保证,当一个线程使用特定互斥量锁住共享数据时,其他的线程想要访问锁住的数据,都必须等到之前那个线程对数据进行解锁后,才能进行访问。这就保证了所有线程能看到共享数
阅读全文
posted @
2021-12-18 19:48
龙虾天天
阅读(4)
推荐(0) 编辑