冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

- 阅读剩余部分 -

有些时候, 我们在 Shell 脚本中, 添加 Yes or No 选项, 便于用户决策某些流程, 可以使用下面的示例逻辑.

while true
do
    echo -n "请确认您的选择是或否。 (Y(y)表示是,N(n)表示否): "
    echo ' '
    read CONFIRM
    case $CONFIRM in
        y|Y) break ;;
        n|N)
        echo "你选择了 : " $CONFIRM
    exit
;;
*) echo "请只输入 Y(y)/N(n)"
esac
done

- 阅读剩余部分 -

我们在平常在开发环境使用 MySQL 的过程中,经常需要命令行登录, 比如:

mysql -h localhost -P 3306 -u root -D steel_server -p
******

mysql>
  • -h 服务地址
  • -P 服务端口
  • -u 服务用户
  • -D 默认数据库
  • -p 输入密码

在开发环境每次都输入这么长的内容, 也挺不方便的,于是看了下, mysql 命令是否支持本地配置的功能, man mysql 中有这部分描述

       ·   Use an option file.  You can set the prompt option in the [mysql] group of any MySQL option file, such as /etc/my.cnf or the .my.cnf file in your home directory. For example:

               [mysql]
               prompt=(\\u@\\h) [\\d]>\\_

- 阅读剩余部分 -

一般我们在执行系统安装过程,可能会定制安装ISO, 在ISO中集成我们自定义的一些软件包或者源码代码等等,需要在Kickstart中从cdrom中加载该内容,以便完成后续的系统配置或者软件包的安装.

一般我们会在 %post 部分来定义自定义配置逻辑, 但是在该环节,无法访问cdrom, 因为已经 chroot 到目标OS.

%post --log=/tmp/ks-post.log

yum -y update
yum -y upgrade

%end

- 阅读剩余部分 -

概述

Guava包里的Service用于封装一个服务对象的运行状态、包括startstop等方法。例如web服务器,RPC服务器、计时器等可以实现这个接口。对此类服务的状态管理并不轻松、需要对服务的开启/关闭进行妥善管理、特别是在多线程环境下尤为复杂。Guava 包提供了一些基础类帮助你管理复杂的状态转换逻辑和同步细节。

使用一个服务

一个服务正常生命周期有:

- 阅读剩余部分 -

并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写。出于这样的考虑,Guava定义了ListenableFuture接口并继承了JDK concurrent包下的Future接口。

我们强烈地建议你在代码中多使用ListenableFuture来代替JDK的Future

  • 大多数Futures方法中需要它。
  • 转到ListenableFuture编程比较容易。
  • Guava提供的通用公共类封装了公共的操作方方法,不需要提供Future和ListenableFuture的扩展方法。

- 阅读剩余部分 -

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

  • 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
  • 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位

算法

选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;

按增量序列个数 k,对序列进行 k 趟排序;

每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

- 阅读剩余部分 -

注意事项

Java 8包含java.util.function和java.util.stream包,它代替Guava的函数式编程。

Guava的函数式编程可以在Java 8之前的Java版本上使用,也不像Java 8的函数编程需要笨拙而冗长地使用匿名类。

过度使用Guava的函数式编程习惯可能导致代码冗长、混乱、不可读和效率低下。这些都是Guava中最容易也是最常被滥用的部分,当您将代码变成“一行代码”时,Guava团队会哭。

- 阅读剩余部分 -

在使用 tmux 来托管我们的工作环境时, 环境如果稍微复杂点点, 导致会话/窗口/Panel会比较多, 如果仅仅是已数字索引来命名的话, 比较不方便, 还是对其重命名, 更容易识别和阅读.
这里汇总下会话/窗口 重命名的快捷键, 便于我们平常工作环境的维护.

会话(Session)重命名

使用快捷键重命名:

Ctrl + B, $

使用指令重命名,按快捷键进入指令模式

Ctrl + B, :

输入下述指令, 指定当前会话名称和新的会话名称

rename-session [-t current-name] [new-name]

- 阅读剩余部分 -

我们在 Windows/Mac OSX经常会使用到回收站,大多数删除操作将文件或目录皆是移动到回收站, 而 Linux 对大多数用户来说更了解 rm 命令, rm 命令是直接将文件或目录直接从硬盘上擦出, 这样就带来一个问题, 如果快速操作错了呢? 想后悔, 可是文件或目录已经从硬盘被擦出,想恢复只能通过一些专业的恢复工具才能完成, 即使是专业的恢复工具,也不是100%能完整恢复.因此, 在 Linux 上使用 rm 命令是个高危操作, 必须非常谨慎. 如果 Linux 上有类似回收站的功能不是就更好了? 即使操作错了,我们还是可以从回收站中快速恢复.

Linux 图形环境,直接使用对应的文件浏览器操作文件或者目录, 对应信息删除时自动会放置到回收站中.

而对于命令行环境, 有比较多的方案, 比如 trash-cli / gio trash等.

trash-cli

trash-cli 是个python实现的命令行工具,用于实现回收站功能. 官方网站是 https://github.com/andreafrancia/trash-cli

删除文件或目录

trash-put example example.txt

- 阅读剩余部分 -