B+ 树的插入与删除(Java 实现)

上周在某公众号看到一个掘金小册的推荐,《MySQL 是怎样运行的:从根儿上理解 MySQL》。购买后看了前几篇,真的写得非常好,看到索引后的章节,讲“表空间”的一章,稍微有点吃力了,因为这一章出现了太多名词,所以暂停了往下看。作者在前面讲索引时提到 B+ 树,但由于本小册主要是讲 MySQL 因此并没有细说 B+ 树如何插入、删除,于是我就自己搜了一下。

关于 B+ 树的资料,搜索出来肯定很多。但是有些内容的质量真是低下(而且我发现必应也会在搜索结果最底部推荐广告了),不过还是被我找到了一篇写得很棒的文章:《B树和B+树的插入、删除图文详解》

这篇文章把 B+ 树的插入删除算法都写得挺详细了,而且有图例说明,强烈推荐。于是我就跟着文章的算法用 Java 尝试实现了 B+ 树这个数据结构。 继续阅读“B+ 树的插入与删除(Java 实现)”

亲手做的客家烫皮巴巴干

上周说想吃家里的巴巴干,在某宝上买了炒好的。

我也看了下,突然觉得可以自己做。无非就是解决原料和设备的问题。
原料好说,就是大米;设备的话,需要磨米浆、需要簸箕蒸。

先看了下磨浆机,直接搜,出来一堆几千块钱的用电的磨浆机,我家也有,但是太贵了,不适合我这样过家家。
继续阅读“亲手做的客家烫皮巴巴干”

记一次愚蠢的环境变量设置

https://www.zsh.org/mla/users/2015/msg00665.html

问题:在 Ubuntu 上装了个 zsh, 然后设置 PATH 环境变量时,将 $HOME/bin;JAVA_HOME/bin 添加到 PATH 中了:
export PATH="$HOME/bin;$JAVA_HOME/bin:$PATH"
但是并没有生效。

最后发现把冒号写成了分号……
echo $#path $path
$#path 会输出 PATH 中目录个数,$path 会输出每个目录,一检查就能发现
比如 PATH=/a:/b:/c
那么 echo $#path #path 会输出:
3 /a /b /c

[OnePlus]安卓Root/升级备忘

工具下载

继续阅读“[OnePlus]安卓Root/升级备忘”

远程执行 Java 代码

本文是《深入理解 Java 虚拟机》中的一个实战,看完后照着敲的代码,简单地封装了一个 Servlet, 只需引入 Maven 并配置一下这个 Servlet 就可以实现浏览器端上传 Java 代码,远程动态执行。

关于书上的这部分代码,就不贴了,大家可以直接看书,没有书的可以参考这篇文章:
http://blog.csdn.net/coslay/article/details/49564789
主要原理就是,编译好的字节码,我们把其中对 System 类的引用移花接木到我们自己写的一个 HackSystem 类上,这样,就可以拿到所有往 stdout 输出的内容了,然后显示在网页上。
继续阅读“远程执行 Java 代码”

自己实现一个 Mini RPC 框架

自己实现一个 Mini 框架系列之三 —— RPC

查看本系列其他文章

自己实现一个 IoC 框架
自己实现一个 Mini MVC 框架

RPC, 远程过程调用。可以简单地理解为在一台机器上调用另一个地方的代码实现。Java 中比较著名的 RPC 框架有 Dubbo, 公司后端也主要是 Dubbo 支撑起来的。那么自己实现一个 RPC 框架可以吗?
继续阅读“自己实现一个 Mini RPC 框架”