0%

做应用开发的朋友大概这辈子不会遇到B+树这个数据结构,它的应用场景更多是在底层。
所有做技术的人有时候会面临一些困惑,有些技术或者理论离应用太远,有点曲高和寡,导致了我们会对这类技术丧失兴趣. 但B+树有时候就像一个幽灵一样出现在一些技术文章中,引起你的关注.
这篇文章主要是浅谈一下我记忆中的B+树.

  • 背景
  • 什么是B+树?
  • B+树实践
  • 拾遗

背景

要了解B+树先得说说B树, 1972年Bayer和mccreight发明了B树,但并没有说明B是什么意思, B可能代表Balance, Bayer或者Boeing,在这里就不深究B的具体含义了. B树首先它是一棵树,然后它是一颗平衡树,所有的结点都能存储数据。
B+树和B树的关系,大体上看就是iPhone6 plus和 iPhone6之间的关系.
注意:不存在B-树,这个“-”其实是个连接符,但会让人误解为是减号,如果出现B-tree其实就是B树.

阅读全文 »

计算机有两大问题,一个是命名问题,一个是缓存失效。缓存在整个计算机体系里无处不在

  • CPU - CPU缓存
  • 操作系统 - Page Cache
  • 数据库 - 数据库缓存
  • 浏览器 - 浏览器缓存

这篇文章主要是探讨一下缓存的通用问题以及Redis相关问题

  • 缓存概述
  • Redis历史
  • 什么是Redis
  • 为什么是Redis
  • Redis是如何实现的
  • Redis实践
  • Redis的未来
阅读全文 »

万物互联是现在乃至未来的趋势. 只要互联就需要网络,不管是无线还是有线。只要牵涉到联网,就牵涉到两台机器上的应用程序之间的通信。 只要是通信,我们就需要又快又好的进行通信。那么应该有一个事物来做这样基础的事情,这样开发者可以专注于写业务逻辑.
这个事物就是Netty. 当然Netty不是进行Java进行网络通信的唯一选择,我们自己也可以写一个网络编程框架,但在此刻,它是网络通信框架领域那颗最耀眼的明星,这就是影响力,必须承认它的人气。当我们讨论Java网络编程框架的时候,Netty是一个绕不过去的话题. 让我来沏一杯茶,闲言碎语几句.

  • 背景
  • 什么是Netty?
  • 为什么是Netty?
  • Netty是如何实现的?
  • Netty的实践
  • 网络编程框架的将来
阅读全文 »

一个人抗一个木头会很重,如果两个人一起抗木头,两个人承担的分量会少点,如果三个人呢?那么三个人承担的分量会更少. 换言之,如果从整体上看,三个人的力量要大于两个人
现在的应用的数据变得越来越大,业务的流量越来越多了,分布式成为了一个不可避免的趋势。
这篇文章主要谈谈

  • 背景
  • 分布式系统的整体设计目标
  • 分布式系统需要解决的具体问题
阅读全文 »

I/O顾名思义就是输入输出,I/O设备可以指网卡,键盘,打印机等,在这里为了方便讨论,I/O专门指网络设备.
之前也看过不少专门讲I/O的帖子和文章,其中有不少帖子有误导的嫌疑,比如打一些不恰当的比喻,所以我有了一种想重新梳理一下I/O模型的冲动。

  • 背景
  • 一些预备知识
  • 同步阻塞
  • 同步非阻塞
  • I/O多路复用
  • 异步非阻塞I/O
  • 其他
  • 总结
阅读全文 »

一个系统如果足够稳定,而且客户对它也很满意,我们一般没有去优化它的必要,但如果随着用户量增加,系统变的缓慢,我们就有优化它的必要性了. 借用我前面博文《一种可以衡量事物的指标-快和好》,一个系统追求的目标之一是快,但快的前提的是
好,也就是稳,否则步伐太大了就容易扯着蛋了. 优化系统是大的话题,这里只讨论其中的一个小领域-高并发.
任何一个计算机的问题,都能从现实中找到雏形和模型,高并发也不例外。高并发的内容还是比较多的,所以不同类型的高并发问题需要不同的角度,就好像作战的时候,战斗机需要在高空1万米,也需要突然下降到高空1千米,也有可能是潜艇下沉到水下几千米配合作战. 这种思维模型我给它取了个名字叫“海陆空”模型.

  • 什么是并发?
  • 为什么需要并发?
  • 如何使用并发?
  • 并发的身影
  • 并发的未来?

什么是并发?

从现实的角度,并发像什么?

在现实世界里,我们做事是有顺序的,比如做完了事情1,再做事情2, 也有可能是没有顺序的, 事情1和事情2是可以同时进行的. 所以我们在这里看到两个特征

  • 事情是可以拆解的
  • 从人的观察者角度,在一个时间窗口(t0-t1)内,事情是同时进行的.
    在这里,我没有没有提到任何程序领域的术语,换句话说,上面的这两个特征在管理学是常见的,这两个特征可以认为是并发的雏形.
    本文仅仅讨论狭义上的并发:基于线程的多任务。
阅读全文 »

一直以来,JVM是Java开发者进阶过程必然要遇到的一块知识点。JVM离绝大多数开发者的实际工作还是比较远的,让人感觉是一个华而不实的东西。或者说有某一类群体,学习JVM就是为了面试,而且是以机械背诵的方式来学习JVM的,这都已经背离了学习一个知识的初衷.

  • 什么是JVM
  • JVM主要解决了哪些问题?
  • JVM点滴
阅读全文 »

K8s已经成为了容器编排的事实标准。k8s一路走来也有些曲折,但最终笑傲群雄。它这一路走来发生了哪些恩怨情仇呢?

  • 背景
  • 什么是k8s?
  • 为什么是它?
  • k8s底层是如何实现的?
  • k8s生态及相关
阅读全文 »

从第一次接触Docker到现在大概也有两年多了, 基本上停留在用的层面.
现在是时候回顾一下这项革命式的技术了.

  • 什么是Docker?
  • 为什么是Docker?
  • Docker是如何实现的?
  • Docker的实践
  • Docker的未来
阅读全文 »