摘要: Mysql中的锁 基于锁的属性分类:共享锁、排他锁。 基于锁的状态分类:意向共享锁、意向排它锁 根据锁的粒度分类:全局锁、页锁、表级锁、行锁(记录锁、间隙锁、和临键锁),实际上的锁就这些,上面两种分类只是站在不同维度上看这些锁 页级锁仅被BDB存储引擎支持,这里不介绍 全局锁 全局锁就是对整个数据库 阅读全文
posted @ 2021-11-15 18:35 CJ-cooper 阅读(748) 评论(1) 推荐(2) 编辑
摘要: 索引下推 当 sql满足最左前缀原则的时候,最左前缀可以用于在索引中定位记录,而索引下推就是用来优化那些不符合最左前缀的部分 例如有一联合索引(name,age),索引结构如下: 现有一需求,sql为: select * from tuser where name like '张%' and age 阅读全文
posted @ 2021-11-13 19:53 CJ-cooper 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 堆: 一般我们提到的是二叉堆,是一种完全二叉树,二叉堆有两种:最大堆和最小堆。特点是父节点的值大于(小于)子节点 基础知识 完全二叉树有一个性质,除了最底层,每一层都是满的,这使得堆可以利用数组来表示,如下图 对给定某个结点下标i,可以计算出这个结点的父节点、孩子节点的下标: 父节点下标:i/2 左 阅读全文
posted @ 2021-11-04 16:43 CJ-cooper 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 单调队列 今天刷力扣,碰到一道关于单调队列的题,总结一下 239. 滑动窗口最大值 单调队列思想: 队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。 单调队列不是单纯的给队列中元素排序,那和优先级队列没有什么区别了。 设计时要注 阅读全文
posted @ 2021-11-03 16:50 CJ-cooper 阅读(168) 评论(0) 推荐(0) 编辑
摘要: defer 用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行 延迟函数的参数在defer语句出现时就已经确定下来了 如: func a() { i := 0 defer fmt.Println(i) i++ return } defer语句中的fmt.Pr 阅读全文
posted @ 2021-11-01 21:45 CJ-cooper 阅读(209) 评论(0) 推荐(0) 编辑
摘要: go语言中并发安全和锁 首先可以先看看这篇文章,对锁有些了解 【锁】详解区分 互斥锁、⾃旋锁、读写锁、乐观锁、悲观锁 Mutex-互斥锁 Mutex 的实现主要借助了 CAS 指令 + 自旋 + 信号量 数据结构: type Mutex struct { state int32 sema uint3 阅读全文
posted @ 2021-10-28 19:05 CJ-cooper 阅读(1277) 评论(0) 推荐(1) 编辑
摘要: 锁 今天看了下常见的几种锁: 互斥锁、⾃旋锁、读写锁、乐观锁、悲观锁,总结一下 互斥锁和自旋锁 最底层的就是互斥锁和自旋锁,有很多⾼级的锁都是基于它们实现的 加锁的⽬的就是保证共享资源在任意时间⾥,只有⼀个线程访问,这样就可以避免多线程导致共享数据错乱的问题 互斥锁和⾃旋锁的区别就是对于加锁失败后的 阅读全文
posted @ 2021-10-27 19:32 CJ-cooper 阅读(510) 评论(0) 推荐(0) 编辑
摘要: 实现原理 垃圾收集的多个阶段: 清理终止阶段(STW) 暂停程序,所有的处理器在这时会进入安全点 我的理解是这里stw,等待所有协程都知道要开始打开写屏障了,不然无法做到统一 如果当前垃圾收集循环是强制触发的,我们还需要处理还未被清理的内存管理单元 标记阶段-并发执行 将状态切换至 _GCmark 阅读全文
posted @ 2021-10-26 15:29 CJ-cooper 阅读(229) 评论(0) 推荐(0) 编辑
摘要: GC垃圾回收机制设计原理 标记清除 1.3版本之前。大概分为两阶段: 标记阶段 - 从根对象出发标记堆中存活的对象 清除阶段 - 遍历堆中所有对象,回收未被标记的垃圾对象 1.0版本:是完全串行的,这两个阶段都在STW暂停范围之内 1.1版本:在多核主机并行执行垃圾收集的标记和清除阶段 缺点:整个过 阅读全文
posted @ 2021-10-24 20:58 CJ-cooper 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 哈希表 242. 有效的字母异位词 func isAnagram(s string, t string) bool { var m [26]int for _,v:=range s{ m[v-'a']++ } for _,k:=range t{ m[k-'a']-- } for _,w:=range 阅读全文
posted @ 2021-10-24 01:18 CJ-cooper 阅读(181) 评论(0) 推荐(0) 编辑