GoCache技术点记录
简历描述 gCache(分布式缓存) 项目描述:该项目是参考groupcache实现的一个分布式缓存,其可以作为单独服务部署,亦可以作为一个lib来用,实现了分布式缓存节 点通信机制,并发访问控制机制,同时在原项目的基础上,增加了热点互备,TTL机制,基于etcd的服务注册发现等功能 主要工作: 实现基于HTTP+protobuf的分布式缓存节点通信机制 使用一致性哈希算法解决...
protobuf序列化反序列化原理剖析
protobuf的数据类型大致可以分为以下几种: 变长编码类型Varints 固定32bits类型 固定64bits类型 有长度标识的变量 根据这些类型,编码方式也就分成四种。下面我来一一介绍一下不同数据类型的编码方式。 Varints编码 Varints编码用于处理变长编码类型。 核心思想其实就一句话:数字小的占用空间小,数字大的占用空间大。那要如何实现这个结果呢...
Redis高可用策略剖析
高可用的基本策略就是部署redis服务集群,集群首先要解决的问题就是数据一致性问题。redis内使用主从复制来解决这个问题。 redis主从复制 redis哨兵机制 对于所有机制的学习,我们都可以遵循一下原则来学习。why-what-how原则。 why-为什么需要哨兵机制 what-什么是哨兵机制 how-如何实现哨兵机制
MySQL集群主从复制原理剖析
为了提高系统数据的高可用,通常会集群化部署MySQL,MySQL中又是使用了什么技术来实现其高可用的呢?答案是主从复制。主从复制保证集群内MySQL的数据保持一致性。主从复制的前提是binlog。 binlog 什么是binlog?binlog是Mysql Server层提供的在表结构或者表数据发生修改的时候进行保存的日志。每产生一条更新操作时,Server层就会产生一条binlog,在...
MIT6.5840Lab1MapReduce
前言 久仰MIT6.5840大名,现开始做它的Lab。本篇讲下MapReduce这个Lab的基本流程。这里提供MapReduce的论文。这篇论文非常经典,值得一读,是经典的分布式任务框架。 MapReduce 要完成这个实验其实不需要把MapReduce这个框架研究多深,只需要理解Coordinator和Worker之间是如何通信协作的就可以。甚至实验代码中把Map和Reduce函数也提前...
春季实习面试备战指南
前言 在一月份的实习面试中发现不少问题和需要进行补充的地方,在2月份的春季实习面试开始前,进行一些针对性的准备和学习,在这里发帖记录需要学习的内容。 需要准备的内容大致可以分为两个方向:cpp方向和go方向。由于cpp岗是在太少、加上就业形势不好,全部押宝cpp实在不是明智之举,因此打算在这个寒假多学一门语言 / GO。不过学习一门语言需要掌握的模块基本一致,可以快速速成。速成完语言学习后...
算法(十)--前缀和
前缀和 如何定义前缀和呢? 所以有s[i+1] = s[i] + nums[i] 下标从i到j-1的非空连续数组的元素和等于k,说明s[j] - s[i] = k 和为k的子数组 将上面的式子转换一下,得到s[i] = s[j] - k;这表示元素和为k的子数组的个数。然后在遍历数组的过程中用哈希表记录前缀和出现的次数,每遍历一个元素,就查看是否存在前缀和为pre - k的,如果...
使用单例模式编写工具类范式
单例模式是最常用的设计模式之一,当类对象只需要一个实例、或者重复创建的无意义且消耗资源的时候需要,通常用于全局唯一工具类的编写,比如:日志、配置、uuid生成器等。单例类需要提供一个全局访问的入口 / global access point。下面仅讨论cpp下单例类的实现。 cpp中单例类的编写范式有两种:Meyer’s Singleton 、 Lazy Singleton 和 Eager...
Cpp体系架构
前言 本文旨在帮助读者快速复习Cpp,建立起一个完整的Cpp知识体系架构。 Cpp 新特性 掌握 auto、decltype auto:变量类型推断;decltype:表达式类型推断 类型推断可以在编译器就推导出变量或者表达式的类型,方便开发者编码简化代码。 decltype:decltype(expression) var 将 var 的类型定义为 expression 的...