分类
代码

如何编写一个油猴脚本

公司的单点登录从 RSA Token 改成 OTP 了,为了避免每次登录需要输入 Token 的麻烦,想使用浏览器插件来实现。
原来的 RSA Token 不知道怎么生成当前 Token,但是新的 OTP token,有现成的算法可以算出每时刻的 Token,因此完全可以实现自动登录。

OTP(One Time Password) 就是那种动态密码,谷歌验证器那种。安卓可以使用 andOTP

要在浏览器中使用 OTP, 可以使用 yeojz/otplib 这个工具,具体用法看 GitHub 文档就可以。
生成任意时刻的方法可以看 issue 的写法 。

分类
电脑软件

Mac 常用软件 + PHP 环境

首先祝大家新年快乐!已经很久没更新了,新的一年新的开始哈哈~

由于电脑装的东西比较杂,希望把 Mac 整得干净些,所以元旦把电脑重置了一下,然后就是必装软件都补上了。列个清单:(主要参考 awesome-mac

分类
Java

自己实现 Java8 的 Stream 流(串行版)

先看使用方式

List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 9, 9, 9, 1, 2, 3, 2, 3, 4);
String[] strings = Flow.of(list)
        .filter(x -> x % 2 == 0)
        .map(x -> x + "s")
        .limit(30)
        .skip(1)
        .distinct()
        .sorted(Comparator.reverseOrder())
        .toArray(String[]::new);
///[8s, 6s, 4s, 2s]
System.out.println(Arrays.toString(strings));
分类
Java

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

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

遍历

com.youthlin.leetcode.tree.TreeVisitor

前序遍历

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

    public <T, N extends BinTreeNode<T, N>> void preOrderTraversalRecursion(BinTreeNode<T, N> root,
            Consumer<BinTreeNode<T, N>> action) {
        if (root == null) {
            return;
        }
        action.accept(root);
        preOrderTraversalRecursion(root.getLeft(), action);
        preOrderTraversalRecursion(root.getRight(), action);
    }

这里我传入了一个 Consumer, 而不是在方法中直接打印结点值,或者加到链表、数组中。

分类
代码

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

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

分类
代码

滚动网页时固定表头

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

示例如下:

分类
Java

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

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

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

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

分类
生活

亲手做的客家烫皮巴巴干

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

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

先看了下磨浆机,直接搜,出来一堆几千块钱的用电的磨浆机,我家也有,但是太贵了,不适合我这样过家家。

分类
电脑软件

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

echo $#path $path

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/升级备忘

工具下载