Pistachio's Blog

Later equals never.

go GC

前言之前已经学习过相关GC的知识,对于Go的GC细节还需要梳理一下。 GC过程而三色抽象能够清晰地表现追踪式回收过程中对象的变化过程: 1、垃圾回收开始前,所有数据都为白色; 2、把直接追踪到的root结点标记为灰色 (灰色代表基于当前结点展开的追踪还没完成) 3、当基于某个节点的追踪完成后(基于该节点追踪不到数据),便把该节点标记为黑色,表示它为存活数据,而且无需基于它进行追踪; ......

数位DP模板

一、定义数位是把一个数字按照个、十、百、千等等一位一位地拆开,关注它每一位上的数字。 数位DP通常用来解决一类特定的问题(有通用的模板),这种问题比较好辨认,一般具有这几个特征: 要求统计满足一定条件的数的数量(即,最终目的为计数); 这些条件经过转化后可以使用「数位」的思想去理解和判断; 输入会提供一个数字区间(有时也只提供上界)来作为统计的限制; 上界很大,暴力枚举验证会超时。 二、......

go编程学习

LC周赛 中有些题目涉及到自定义pair类型和自定义排序的用法,因此记录下 LC6351. 标记所有元素后数组的分数 123456789101112131415161718192021222324// nums = [2,1,3,4,5,2]func findScore(nums []int) (ans int64) { a := make([]pair, len(nums)) ......

分布式锁

前言在单机开发中,涉及并发同步时,往往使用lock或synchronize的方式实现多线程间代码同步问题。 但如果在分布式或者集群环境下就无法通过多线程的锁来解决同步问题,如多个线程同时对服务A_1、A_2进行访问,由于负载均衡权重的原因,两个服务都有可能被访问,即使给服务上锁,也会有两个线程修改同一个数据的风险。 一、分布式锁的介绍可以引入分布式锁组件,通过分布式组件给集群服务提供......

ZooKeeper

一、简介ZooKeeper是一个分布式的、开源的分布式应用程序的(Hadoop、Hive等服务)协调服务,提供配置管理、分布式锁、集群管理(发布/订阅)等功能。 配置管理:zk作为配置中心,存储了每个分布式应用公有的配置信息,每个分布式应用可以从配置中心拉取配置信息,即使配置数据发生变更,也不影响应用服务,只需要改配置中心即可,大大降低复杂度。 集群管理:zk作为注册中心,服......

分布式事务解决方案之3PC

一、定义3PC,Three-phase commit protocol,解决了2PC的阻塞问题,分为3个阶段canCommit,preCommit,doCommit 二、3PC过程 1、阶段一 CanCommit (1)事务询问:TC向各个Participants发送CanCommit,询问是否可以执行事务提交操作,并开始等待Participants的响应。 (2)反馈询问响应:Parti......

分布式事务基解决方案之2PC

一、2PC定义2PC是Two-Phase commit protocol,原子性提交的两阶段提交协议 Trasaction Coordinator(TC,事务协调器):实质是一台服务器,负责对事务进行协调 Participants(事务参与者):可以有多个,负责执行事务中部分任务的服务器叫参与者。它们各自负责自己的那部分事务,存在于不同的服务器上 只有TC来决定是否提交事务或终止事务,P......

分布式事务

Conccurency control并发控制悲观锁并发控制1、Two-Phase Locking require lock:事务对任何数据进行操作之前,都要获取该数据对应的锁; hold until done :直到事务被提交或终止之后,事务才能释放掉它所获得的锁。不能在事务执行过程中释放锁,只能对这些锁进行累加操作,直到事务结束。(此处体现了有序性Serialization的定义,本......

分布式事务基础理论CAP/BASE

本地事务使用本地事务,更多是通过关系型数据库数据库来控制事务,利用数据库本身的事务特性ACID实现,因此称数据库事务。 由于主要靠关系型数据库控制事务,而数据库和应用通常在同一个服务器,因此说关系型的数据库事务称为本地事务。 分布式事务提供服务的各个节点分布在不同的机器上,相互之间通过网络交互,但网络不稳定会出现不一致的问题,因此需要更进一步的理论支持。 CAP理论CAP分别是Consist......

自定义排序

1、构造题目所需的排序方法,例如根据 两数之差 从小到大排列: 1234vector<vector<int>>tasks = {{1,3},{2,4},{10,11}, {10,12},{8,9}};sort(tasks.begin(), tasks......