[Java算法系列教程]-冒泡排序
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
冒泡排序(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>
在开发环境每次都输入这么长的内容, 也挺不方便的,于是看了下, 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用于封装一个服务对象的运行状态、包括start和stop等方法。例如web服务器,RPC服务器、计时器等可以实现这个接口。对此类服务的状态管理并不轻松、需要对服务的开启/关闭进行妥善管理、特别是在多线程环境下尤为复杂。Guava 包提供了一些基础类帮助你管理复杂的状态转换逻辑和同步细节。
一个服务正常生命周期有:
并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写。出于这样的考虑,Guava定义了ListenableFuture
接口并继承了JDK concurrent包下的Future
接口。
我们强烈地建议你在代码中多使用ListenableFuture
来代替JDK的Future
Futures
方法中需要它。ListenableFuture
编程比较容易。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会比较多, 如果仅仅是已数字索引来命名的话, 比较不方便, 还是对其重命名, 更容易识别和阅读.
这里汇总下会话/窗口 重命名的快捷键, 便于我们平常工作环境的维护.
使用快捷键重命名:
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
是个python实现的命令行工具,用于实现回收站功能. 官方网站是 https://github.com/andreafrancia/trash-cli
删除文件或目录
trash-put example example.txt