摘要:
# final final 在 Java 中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。 ## final 变量 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象,但是可以改变实例 阅读全文
摘要:
1、乐观锁 乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源(也就是数据)是否被其它线程修改了(具体方法可以使用版本号机制或 CAS 算法)。 高并发的场景下,乐观锁相比悲观锁来说,不存在锁竞争造成线程阻 阅读全文
摘要:
概览 1、合理建立索引。在合适的字段上建立索引,例如在where和order by命令上涉及的列建立索引。可以为经常查询的字段、排序字段和关联查询字段创建索引,但不能滥用索引。索引的过多、过少或者不恰当都会影响查询效率。 2、索引优化。防止不走索引,或者走错索引 3、分析是否是偶发问题,如果是因为资 阅读全文
摘要:
基本概念 select 是 Go 中的一个控制结构,类似于 switch 语句。 select 语句只能用于通道(channel)操作,每个 case 必须是一个通道操作,要么是发送要么是接收。 select 语句会监听所有指定的通道上的操作,一旦其中一个通道准备好就会执行相应的代码块。 如果多个通 阅读全文
摘要:
四个必要条件 (1)互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程访问,只能等待,直到进程使用完成后释放该资源; (2)请求保持条件:进程获得一定资源后,又对其他资源发出请求,但该资源被其他进程占有,此时请求阻塞,而且该进程不会释放自己已经占有的资源; (3)不可剥夺条件:进程已获得的 阅读全文
摘要:
进程、线程和协程 进程是操作系统分配资源的最小单元,是一个具有一定独立功能的程序关于某个数据集合上的一次运行活动 线程是操作系统调度的最小单元,是进程的一个执行单元 协程是用户态线程,协程的调度完全由用户控制。 | | 进程 | 线程 | 协程 | | : | : | : | : | | 切换者 | 阅读全文
摘要:
直观理解defer package main import ( "fmt" ) func main() { fmt.Println("defer begin") // 将defer放入延迟调用栈 defer fmt.Println(1) defer fmt.Println(2) // 最后一个放入, 阅读全文
摘要:
进程间的通信方式 管道 是内核里面的一串缓存 通信的数据是无格式的流并且大小受限 传输数据是单向的 通信方式效率低 先进先出 匿名管道,父子进程 命名管道,不相关进程 消息队列 是保存在内核中的消息链表 通信不及时 不适合比较大数据的传输 存在用户态与内核态之间的数据拷贝开销 管道在被接收之前,发送 阅读全文
摘要:
事务的4个特性,ACID 原子性(Atomicity) 要么都完成,要么都不完成。 通过undo log(回滚日志)来保证的。 一致性(Consistency) 与现实世界的逻辑一致。比如钱不能是负的;转账时双方一个钱减少,一个增多。 一致性是最终目的,通过另外三种性质保证,即原子性、隔离性和持久性 阅读全文
摘要:
三次握手 客户端回合-第一次握手 SYN=1 (同步标志, Synchronize) seq=x 服务器回合-第二次握手 SYN=1 ACK=1 (确认标志, Acknowledgement) ack=x+1 (Acknowledgement Number,收到的序号+1,下一个预期的序列编号) s 阅读全文