二叉树相关: 遍历、创建、打印

题目来自 leetcode-cn 的探索卡片:
https://leetcode-cn.com/explore/learn/card/data-structure-binary-tree/

遍历

com.youthlin.leetcode.tree.TreeVisitor

前序遍历

递归版本的太简单了,只贴前序遍历方式。
前序递归是先访问本结点,然后递归调用左子树,再递归调用右子树。
中序和后序都差不多,只是把访问结点那行移动一下就行。

这里我传入了一个 Consumer, 而不是在方法中直接打印结点值,或者加到链表、数组中。 继续阅读“二叉树相关: 遍历、创建、打印”

Golang Web 框架 Beego 体验:一个天气网站

最近好像看到 Go 语言的文章更多了,趁着 5 月休假在家有空,也学习了一下。
基本语法很快就熟悉了,跟着这个网站 Go 语言之旅 有编程基础很容易就可以上手。
当然一些细节还是不太知道,比如怎么遍历数组、map,也是后来边做网站边学习,毕竟刚开始都是囫囵吞枣先看个大概,到用的使用自己写一遍才能加深印象。这也是为什么我要用 Golang 写一个小项目的原因。
熟悉了基本语法后,就开始看《Go Web 编程》,讲的是 Go 自带的 http server / template
继续阅读“Golang Web 框架 Beego 体验:一个天气网站”

滚动网页时固定表头

当网页的表格高度比较大时,比如超过一屏,我们希望表头能够一直显示,就像 Excel 的“首行冻结”一样。
搜索一下,看到一种思路是表头写两个,第一个只有表头,默认不显示,定位为 fixed 在顶部,第二个有表头和数据单元格。
然后滚动网页时,使用 js 计算表头是否应该显示,实时的设置可见性。

示例如下:
继续阅读“滚动网页时固定表头”

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 代码”