自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (2)
  • 收藏
  • 关注

原创 DDIA读书笔记 8 分布式系统的挑战

8 分布式系统的挑战8.1 故障与部分失效单机要么正常要么失效,分布式环境下会出现部分节点失效,难以预测大规模计算系统的两个极端:超算HPC(更像单节点)和云计算8.2 不可靠的网络网络分区等网络故障检测故障:超时机制8.3 不可靠的时钟多节点通信时很难确定事情发生的先后顺序机器上有自己的时钟硬件设备,但这些设备并非绝对准确可以用NTP来同步本地的时钟。而NTP从精确更高的时间源(如GPS接收机)来获取高精度时间8.3.1 单调时钟与墙上时钟墙上时钟:根据某个日历,返回

2021-01-16 17:54:34 209

原创 DDIA读书笔记 7 事务

7 事务7.1 目的事务将应用程序的多个读写操作绑在一起成为一个逻辑操作单元,整个事务要么成功,要么失败事务作为一个抽象层,使得应用程序可以忽略数据库内部一些复杂的并发问题,以及某些软硬件故障,简化应用层的处理逻辑,保持数据一致性。并非每个应用程序都需要事务机制,有时可以弱化事务处理或完全放弃事务7.2 ACID的含义原子性A:客户端发起一个包括多个写操作的请求时,为了避免写一半发生崩溃,应该把这一系列写操作封装为一个原子事务,要么成功,要么崩溃后回滚隔离性I:同时运行的事务不应相

2021-01-16 11:19:29 209

原创 DDIA读书笔记 6 数据分区

6 数据分区6.1 数据分区与数据复制面对海量数据集或者非常高的查询压力,只使用复制技术还不够,需要将数据分区,也称为分片分区通常和复制结合使用6.2 键值数据的分区目标:将数据和查询负载均匀分布在所有节点上。负载不均匀的情况称为倾斜,基于范围区间和基于哈希值的方法都无法有效解决该问题,需要开发者在应用层解决6.2.1 基于关键字区间分区基于关键字的区间范围来分区代表产品:Bigtable,HBase,RethinkDB和2.4版本之前的MongoDB每个分区内按照关键字排序保

2021-01-13 14:01:30 208

原创 DDIA读书笔记 5 数据复制

5 数据复制5.1 目的三种架构共享内存架构共享磁盘架构无共享系统架构(本书重点)数据复制的目的:使数据在地理位置上更接近用户,降低访问延迟系统出现故障也可以继续工作,提高可用性,容错扩展到多条机器同时提供服务,提高读吞吐量5.2 主从复制5.2.1 原理主从复制的工作原理写操作只在主节点执行,读操作在主从副本都可以执行写:客户端将写请求发送给主节点,主节点写入本地后,将数据修改以日志会更改流的方式发送给副本主从复制广泛应用于数据库、消息队列和网络文

2021-01-13 09:45:48 234 2

原创 DDIA读书笔记 4 数据编码与演化

4 数据编码与演化4.1 数据编码格式使用编码语言内置的编码方式不是个好主意与编程语言强绑定存在安全问题无法有效适用于多版本数据,忽略了兼容性问题效率低,比如Java序列化方式效率低JSON、XML和二进制变体Thrift和ProtobufAvro4.2 数据流模式进程间数据如何流动4.2.1 基于数据库的数据流写入数据库的进程对数据编码,读取的进程进行解码新旧数据,考虑兼容性问题,模式变化问题4.2.2 基于服务的数据流:REST和RPC略4.2.3 基

2021-01-12 10:37:44 120

原创 DDIA读书笔记 3 数据存储与检索

3 数据存储与检索3.1 数据库核心:数据结构3.1.1 哈希索引hashmap存放在内存中,把每个键一一映射到数据文件中特定的字节偏移量,也就是保存每个值在磁盘中的位置采用日志的方法,把key,value追加到文件末尾。对于删除的记录,可以使用特殊标记。定期将日志分解成多个小文件(日志段),并使用后台线程对小文件进行合并压缩缺点哈希表必须全部放入内存区间查询效率不高3.1.2 SSTables和LSM-TreeSSTables:要求哈希表中的key-value对的顺序按键

2021-01-11 20:06:34 166

原创 DDIA读书笔记 2 数据模型与查询语言

2 数据模型与查询语言3种常见的数据模型:关系模型、文档模型和图模型2.1 关系模型与文档模型关系模型:数据被组织成关系,也就是表,关系(表)是元组(行)的无序集合关系模型存在的问题:对象-关系不匹配文档模型:采用JSON或XML等文档表示数据,表现为某种层次结构,没有固定模式文档模型的问题:不支持数据库联结操作(一对多和多对多的联结)优点:模式灵活建议文档应该尽量小且避免写入时增加文档大小。因为读取时数据库会加载整个文档,更新时会重写整个文档。关系数据库和文档数据库的融合

2021-01-10 21:45:29 176

原创 DDIA读书笔记 1 可靠、可扩展与可维护的应用系统

1 可靠、可扩展与可维护的应用系统1.1 认识数据系统系统中的常见模块:数据库,缓存,索引,流式处理,批处理等等系统的需求越来越广泛,需要将任务分解,每个组件负责高效完成其中一部分,多个组件依靠应用层代码驱动有机衔接起来。面临的问题:可靠性,可扩展性和可维护性1.2 可靠性可靠性:即使发生了某些故障(faults),系统仍可以继续正常工作3种故障及应对方法:硬件故障为硬件添加冗余,如对磁盘配置RAID,双电源,热插拔CPU等。通过软件容错补充软件错误检查评估软件bug

2021-01-10 21:44:43 167

转载 二分查找算法的细节剖析

原文:https://www.cnblogs.com/kyoner/p/11080078.html我周围的人几乎都认为二分查找很简单,但事实真的如此吗?二分查找真的很简单吗?并不简单。看看 Knuth 大佬(发明 KMP 算法的那位)怎么说的:Although the basic idea of binary search is comparatively straightforward, the details can be surprisingly tricky…这句话可以这样理解:思路很简单

2021-01-09 15:59:05 244 1

原创 word2vec 相关论文

原论文:Mikolov等人在2013年的文献[1]中,同时提出了CBOW(Continuous Bagof-Words)和Skip-gram模型.他们设计两个模型的主要目的是希望用更高效的方法获取词向量。因此,他们根据前人在 NNLM、 RNNLM 和 C&W 模型上的经验,简化现有模型,保留核心部分,得到了这两个模型。Mikolov在2013年接着在[2]中提出了训练Skip-gram模型的两个策略:Hierarchical Softmax和Negative Sampling.Mikolo

2021-01-08 12:20:01 721

原创 java书籍推荐

对于每本书,建议先快速过一遍,读懂60%,再过第二遍,读懂90%以上。不建议第一遍从头到尾弄懂所有细节,那样会打击学习信心。阶段1 :《疯狂java讲义》。适合新手,这本书讲得很详细,虽然很多人说它是翻译文档,但是这本书有个好处是它是中国人写的,容易读。不像《java编程思想》等书,原书是好书,但是翻译不好,读起来晦涩难懂,打击学习乐趣;阶段2:《java核心技术》。其实《java核心技术》和《疯狂java建议》有很多是重的,对于重的部分,只需快速过一遍。阶段3:做个项目,从实践中认识java阶段4

2021-01-08 12:18:16 400 2

原创 一个很好的raft算法动画示例

一个很好的raft算法动画示例:http://thesecretlivesofdata.com/raft/包括了Leader selection和Log Replication的过程。相关资料raft论文:https://raft.github.io/raft.pdfraft官网:Raft Consensus Algorithm

2021-01-08 12:16:19 189

原创 分布式事务原子性之2PC,XA,TCC协议及其区别

分布式事务原子性之2PC,XA,TCC协议及其区别1 目的本地事务(单机)基于ACID原则,那么在分布式环境下,如何保证多事务的一致性?本文将介绍两阶段提交协议和基于两阶段思想的XA协议,TCC协议,用于解决分布式事务中的原子性。2 面向数据库领域的二阶段提交协议2PC,面向数据库领域简介:分为准备和提交两个阶段。准备阶段,协调组询问所有参与者是否准备好了。对于数据库来说,准备操作是在重做日志中记录全部事务提交操作所要做的内容,它与本地事务中真正提交的区别只是暂不写入最后一条 Commit

2021-01-08 12:06:07 1317

原创 Linux中的零拷贝和Java NIO中的零拷贝

1 零拷贝解决的问题传统的文件传输方式如图read()调用导致上下文从用户态切换到内核态。内核通过sys_read()(或等价的方法)从文件读取数据。DMA引擎执行第一次拷贝:从文件读取数据并存储到内核空间的缓冲区。请求的数据从内核的读缓冲区拷贝到用户缓冲区,然后read()方法返回。read()方法返回导致上下文从内核态切换到用户态。现在待读取的数据已经存储在用户空间内的缓冲区。至此,完成了一次IO的读取过程。send()调用导致上下文从用户态切换到内核态。第三次拷贝数据从用户空间重

2021-01-07 21:24:47 231

原创 CAP、BASE和ACID解析

什么是CAP、BASE和ACID及其关系1 目的这3个原则提出的目的:在分布式系统中,为了容错,会对数据复制多份副本,也可以提高可用性和读写并发。但由此引入多副本的数据一致性问题。怎么设计系统,在合适的场景中让客户端读取到最合适的数据?CAP,BASE和ACID是该问题的三大基本原则。本文将介绍这3个原则,并对其进行区分。2. CAPCAP分别指Consistency、Availability和Partition ToleranceConsistency:不管访问哪个节点,系统给客户端返回的都

2021-01-07 21:17:30 241

原创 git reset用法

1 --soft --mixed(default)–hard1.1 --soft–soft参数告诉Git重置HEAD到另外一个commit,但也到此为止。如果你指定–soft参数,Git将停止在那里而什么也不会根本变化。这意味着index,working copy都不会做任何变化,所有的在original HEAD和你重置到的那个commit之间的所有变更集都放在stage(index)区域中...

2019-11-17 12:07:29 282

转载 git diff用法

1 git diff当工作区有改动,临时区为空,diff的对比是“工作区与最后一次commit提交的仓库的共同文件”;当工作区有改动,临时区不为空,diff对比的是“工作区与暂存区的共同文件”。2 git diff --cached 或 git diff --staged显示暂存区和最后一次commit(HEAD)之间的所有不相同文件的增删改(git diff --cached和gi...

2019-11-16 11:41:15 185

原创 git add用法

git add [path] : 把[path]中所有新增或修改的文件或者目录添加到暂存区,不包括删除git rm [path]: 删除暂存区中的文件git add -u : 把所有修改过或删除的tracked文件添加到暂存区,不包括新增的,该命令不处理untracked文件。git add -u [path]: 把[path]中,所有修改过或删除的tracked文件添加到暂存区g...

2019-11-16 09:44:07 640

原创 哈希表

1 哈希函数的构造方法1.1 直接定址法1.2 数字分析法1.3 平方取中法1.4 折叠法1.5 除留余数法1.6 随机数法1.7 选择哈希函数需要考虑的因素2 哈希冲突解决方法2.1 开放定址法2.2 再哈希法2.3 链地址法2.4 建立一个公共溢出区3 哈希表查找查找取决于三个因素:哈希函数,处理冲突的方法和哈希表的装填因子3.1 冲突的影响3.2 哈希表的装填...

2019-01-20 11:11:26 671

原创 各种查找或者排序树,二叉排序树,平衡二叉树,AVL,红黑树,B+,B-树等的区别及应用

1. 用于查找的树1.1 二叉排序树SBT1.1.1 定义二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二...

2019-01-18 14:19:50 454

原创 Java中使用优先队列PriorityQueue实现堆

文章目录1. 堆的定义2. 堆的常见操作3. Java中的PriorityQueue3.1 PriorityQueue简介3.2 PriorityQueue常见方法3.3 例子问题代码1. 堆的定义堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆...

2019-01-01 11:51:56 620

原创 Java中的栈和队列,ArrayDeque,LinkedList

文章目录栈和队列的定义相关接口和类ArrayDeque实现栈的功能ArrayDeque实现队列的功能LinkedList实现栈的功能LinkedList实现队列的功能Deque中的相关方法栈和队列的定义队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front,也叫队头)进行删除操作,而在表的后端(rear,也叫队尾)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插...

2018-12-31 12:01:30 1389

原创 Java正则表达式常见操作

String类中的相关函数boolean matches(String regex)Tells whether or not this string matches the given regular expression.String replaceAll(String regex, String replacement)Replaces each substring of this s...

2018-12-30 18:51:23 435

原创 Java中String, byte[], char[],StringBuffer, StringBuilder的区别联系与常见操作

文章目录byte和char的区别String、byte[]和char[]的联系String的构造函数byte[]转Stringchar[]转StringString转byte[]String转char[]String,StringBuilder,StringBuffer的区别与联系String转StringBuffer和StringBuilderStringBuffer转StringStringB...

2018-12-30 13:07:09 2257

原创 C语言基本知识点

太久没写C,就容易忘,很容易和其他语言的语法混淆,故整理一篇C语言的基本知识点。待写。。。

2018-10-16 15:16:56 822

原创 一些常见网络安全术语解释

漏洞漏洞是指信息系统中的软件、硬件或通信协议中存在的缺陷或不适当的配置,从而可使攻击者在未授权的情况下访问或破坏系统,导致信息系统面临安全风险。常见漏洞有SQL注入漏洞、弱口令漏洞、远程命令执行漏洞、权限绕过漏洞等。恶意程序恶意程序是指在未经授权的情况下,在信息系统中安装、执行以达到不正当目的的程序。恶意程序分类说明如下。1特洛伊木马特洛伊木马(简称木马)是以盗取用户个人信息、远程...

2018-10-14 16:07:11 6992 1

原创 常见排序算法总结

常见排序算法总结冒泡排序。。。 待续

2018-10-13 19:23:53 225

原创 树的递归遍历,DFS遍历和BFS遍历

文章目录树的递归遍历,DFS遍历和BFS遍历问题解法一:递归遍历解法二:DFS遍历解法三:BFS遍历总结DFS模板BFS模板树的递归遍历,DFS遍历和BFS遍历问题解法一:递归遍历解法二:DFS遍历解法三:BFS遍历总结DFS模板BFS模板待续...

2018-10-13 19:14:02 3841

原创 shell基本使用教程

文章目录shell基本使用教程shell变量shell数组传递参数shell基本运算符输出shell test命令流程控制-条件语句循环语句case语句shell函数重定向Shell 文件包含shell基本使用教程学习shell教程的笔记,以下为最基本的知识点。平时多看别人的shell程序。shell变量定义和初始化 var=“variable”变量名和等号之间不能有空格使用变...

2018-10-13 17:26:05 2700

原创 vim常用快键键

移动光标h,j,k,l 上,下,左,右w 跳到下一个字首,按标点或单词分割b 跳到上一个字0 跳至行首,不管有无缩进,就是跳到第0个字符^ 跳至行首的第一个字符$ 跳至行尾gg 跳至文首G 调至文尾5gg/5G 调至第5行gd 跳至当前光标所在的变量的声明处fx 在当前行中找x字符,找到了就跳转至; 重复上一个f命令,而不用重复的输入fx* 查找光标所在处的单词,向下查找...

2018-10-12 23:20:43 219

原创 Git常用命令

Git常用命令写在前面这是廖雪峰的git教程和阮一峰的git博客的学习笔记,作为备忘。Git 原理入门Git 工作流程常用Git命令清单Git远程操作详解廖雪峰Git教程配置$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"几个概念...

2018-10-12 21:30:12 210

原创 Python内置数据结构

文章目录Python数据结构1 List(数组,链表)1.1 内部实现1.2 常见操作与API2.栈2.1 内部实现2.2 常见操作与API3. 队列3.1 内部实现3.2 常见操作与API4. Dict(哈希表)4.1 内部实现4.2 常见操作与API5. Set5.1 内部实现5.2 常见操作与APIPython数据结构1 List(数组,链表)1.1 内部实现Python List内...

2018-10-12 20:07:36 236

effective java 3 源代码

effective java 第三版本官方源代码,亲测可用。effective java 第三版本官方源代码,亲测可用。

2018-11-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除