- 博客(15)
- 收藏
- 关注
原创 倒排索引是什么
倒排索引是什么倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。倒排索引和正排索引正排索引正排索引是以文档的ID为关键字,索引记录文档中每个字的位置信息,查找时索引中每个文档中字的信息直到找出所有包含查询关键字的文档。正排索引...
2019-03-04 00:11:34
2965
原创 设计备选方案
在日常的工作中,我们解决一些比较复杂的问题通常需要业务的负责人进行初期的调研,然后写方案进行评审,最终确定并执行。方案的评审中,比较好的做法是提供多个备选方案,列举各自方案的优劣点,供评审人员参考。也许有人会问为什么需要备选方案?如何设计备选方案?方案设计误区追求完美很多人开始做方案设计往往喜欢追求完美,不仅仅只满足业务需求,还需要展示自身技术能力,设计方案的每个点都要求尽善尽美。例如 R...
2019-03-04 00:10:52
1503
转载 高性能 NOSQL
什么是NoSQL?NoSQL(NoSQL = Not Only SQL ),即 “不仅仅是SQL”,指的是非关系型的数据库。是对不同于传统的关系型数据库管理系统的统称。关系型数据库关系型数据库,是指采用了关系模型来组织数据的数据库。1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型。关系模型中常用的概...
2019-03-04 00:09:39
368
转载 MYSQL InnoDB 加锁分析
前言理解 InnoDB 行锁,分析一条 SQL语句会加什么样的行锁,会锁住哪些数据范围对业务 SQL 设计和分析线上死锁问题都会有很大帮助。本文的目的是对InnoDB的事务锁模块做个简单的介绍。隔离级别InnoDB 中的 锁和当前的隔离级别有很大关系,这里简单介绍一下数据库事物的四种隔离级别一级每种隔离级别的数据读取问题。Read uncommitted(读未提交)可以读未提交记录。...
2019-03-04 00:08:28
329
转载 MYSQL 索引
索引是存储引擎用于快速查找记录的一种结构。如何理解索引,最简单的方式去看看一本书的 “索引” 部分,可以快度找到特定主题的页码。 MYSQL 中类似,首先在索引中查到对应的值,更具索引找到对应的数据行。本文主要介绍 InnoDB 中的 B-Tree 索引。索引类型索引有很多类型,对于 MYSQL 来说索引是存储引擎层决定的,不是服务层决定的,没有统一的标准。不同存储引擎索引工作方式不一样;...
2019-03-04 00:05:41
85
原创 ConcurrentHashMap 的 size 方法原理分析
前言JAVA 语言提供了大量丰富的集合, 比如 List, Set, Map 等。其中 Map 是一个常用的一个数据结构,HashMap 是基于 Hash 算法实现 Map 接口而被广泛使用的集类。HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。但是 HashMap 并不是线程安全的, 在多线程场景下使用存在并发和死循环问题。HashMap 结构如图所示:线程安全的解决方案...
2019-03-03 00:21:04
2559
原创 常见数据结构
常见数据结构在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。 数据结构意味着介面或封装:一个数据结构可被视为两个函数之间的介面,或者是由数据类型联合组成的存储内容的访问方法封装。本文介绍一些常见的数据结构以及查询时间复杂度。数组所谓数组,是相同数据类型的元素按一定顺序排列的集合。特点: 长度固定,无法动态扩展,空间分配快,存在空间浪费,查询效...
2019-03-03 00:20:21
135
原创 Linux 的 IO 通信 以及 Reactor 线程模型浅析
目录随着计算机硬件性能不断提高,服务器 CPU 的核数越来越越多,为了充分利用多核 CPU 的处理能力,提升系统的处理效率和并发性能,多线程并发编程越来越显得重要。无论是 C++ 还是 Java 编写的网络框架,大多数都是基于 Reactor 模式进行设计和开发,Reactor 模式基于事件驱动,特别适合处理海量的 I/O 事件,今天我们就简单聊聊 Reactor 线程模型,主要内容分为以下几个...
2019-03-03 00:19:32
113
转载 MySQL InnoDB Checkpoint技术
脏页众所周知,在计算机的世界里,很多技术都是为了解决一个问题,即快速设备和慢速设备速度不匹配的问题。比如数据库PoolBuffer(缓冲池)的设计目的为了协调CPU速度与磁盘速度的鸿沟。当数据库进行更新操作时,首先先更新PoolBuffer,这是产生了所谓的脏页,即缓冲池中的页的版本要比磁盘的新。WALPoolBuffer是在内存中开辟的空间,当机器遇到关机,重启等情况数据会丢失,所...
2019-03-03 00:18:25
537
转载 浅谈Java垃圾回收(GC)
什么是GC?垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。自动垃圾回收机制就是要解决三个问题:哪些内存需要回收?什么时候回收?如何回收?哪些内存需要回收?Java的堆存放了几乎所有的对象,GC需要回收内存中已经 “死” 的对象。如何判断对象 “生死”。常见的有引用...
2019-03-03 00:17:33
111
原创 分布式系统一致性(ZAB协议)
ZAB(ZooKeeper Atomic Broadcast)ZAB 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。算法模型它是一种基于Quorum投票的冗余控制算法机制, Q...
2019-03-03 00:16:38
494
原创 分布式系统数据一致性-3PC(三阶段提交)
分布式系统数据一致性-3PC(三阶段提交)准备通过一个系列聊下分布式系统一致性问题,主要会介绍两阶段提交(2pc),三阶段提交(3pc),vector clock,paxos, zap等。二阶段提交的主要问题同步阻塞(三阶段提交主要解决的问题)单点问题脑裂问题过于保守场景分析在2PC中一个participant的状态只有它自己和coordinator知晓,假如coordi...
2019-03-03 00:15:46
365
原创 分布式系统数据一致性-2PC(两阶段提交)
准备通过一个系列聊下分布式系统一致性问题,主要会介绍两阶段提交(2pc),三阶段提交(3pc),vector clock,paxos, zap等。提个问题?人们会使用计算机存储各种数据,一个常见的需求就是:如何能够保证一个数据写入到某台或某组机器上,并且计算机返回成功,那么无论机器是否断电,都能够保证数据不会丢失,并且能够保证数据按照我写入的顺序排列呢?解决思路单机系统解决数据...
2019-03-03 00:14:14
612
原创 信息安全-加解密
概念描述对称加密对称加密算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。常见算法:DES、3DES、AES、Blowfish、IDEA、RC5、RC6。优点:加密解密的速度比较快(比非对称快)。缺点:密钥单一,一旦泄漏就不安全。非对称加密这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关。私钥加密的数据公钥才能解开,...
2019-03-03 00:09:17
274
原创 JAVA中三种锁简要介绍
锁是多线程并发执行下,通过保证单位时间内只有单个线程对共享资源进行修改,从而保证程序能够正确执行。在Java语言中目前有这样三种锁。synchronizedReadWriteLockStampedLock(java8)synchronized实现Synchronized的语义底层是通过一个monitor的对象来完成,指令monitorenter和monitorexit标记线程获得...
2019-03-03 00:07:47
596
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人