分类 默认分类 下的文章

Java中的Object类是所有Java类的超类(也就是祖先),所有对象都实现Object类中的方法,在日常的工作中,我们经常需要重写其中的几个 方法, 如:equals、toString、hashCode等方法,而在工作中,我们实现这些方法有时候也比较痛苦,如equals方法判断非空、 toString调试信息不完整等等,在Guava中,其提供了Objects类帮助我们简化了这些常用方法的实现,接下来,我们一起来学习一下。

equals

当一个对象中的字段可以为null时,实现Object.equals方法会很痛苦,因为不得不分别对它们进行null检查。使用Objects.equal帮助你执行null敏感的equals判断,从而避免抛出NullPointerException。

例如:

Objects.equal("a", "a"); // returns true
Objects.equal(null, "a"); // returns false
Objects.equal("a", null); // returns false
Objects.equal(null, null); // returns true

- 阅读剩余部分 -

前一篇文章介绍了 top 命令的一些使用方式, top 命令相对来说是个很古老的命令了, 某些场景下,表现并不好, 因此社区为了改变这一现状, 新开发了 htop 命令, 我们先来认识下 htop:

htop

htop 在顶部区域更直观的列出所有CPU/内存/Swap等等使用信息, 同时列出所有进程信息, 以及线程使用信息. 提供简单便捷的方式对内容进行排序/搜索/标记/关闭进程等等处理.

大多数发行版上 htop 均未作为默认包安装, 需要用户手动安装

  • Debian/Ubuntu
apt -y install htop
  • RHEL/CentOS
yum -y install htop

- 阅读剩余部分 -

"Null sucks." -Doug Lea
"I call it my billion-dollar mistake." - Sir C. A. R. Hoare, on his invention of the null reference

轻率地使用null可能会导致很多令人费解的问题。我们发现95%的集合类不接受null值作为元素。我们认为,相比默默地接受null,使用快速失败操作拒绝null值对开发者更有帮助。

null的含糊语义让人很不舒服。null很少可以明确地表示某种语义,例如,Map.get(key)返回null时,可能表示map中的值是null,亦或map中没有key对应的值。null可以表示失败、成功或几乎任何情况。使用Null以外的特定值,会让你的逻辑描述变得更清晰。

null确实也有合适和正确的使用场景,如在性能和速度方面null是廉价的,而且在对象数组中,出现null也是无法避免的。但相对于底层库来说,在应用级别的代码中,null往往是导致混乱,疑难问题和模糊语义的元凶,就如同我们举过的Map.get(key)的例子。最关键的是,null本身没有定义它表达的意
思。

鉴于这些原因,很多Guava工具类对Null值都采用快速失败操作,除非工具类本身提供了针对Null值的因变措施。此外,Guava还提供了很多工具类,让你更方便地用特定值替换Null值。

- 阅读剩余部分 -

概述

在我们的日常开发中,经常要对入参进行一定的参数校验,比如是否为空,参数的取值范围是否符合要求等等。这种参数校验如果我们单独进行校验的话,代码的重复率比较高,也不是很优雅。Guava提供了一个类Preconditions来统一校验我们的参数,同时可以抛出对应的异常信息,将参数校验的工作进行了统一。

Preconditions

Preconditions类中的每个静态方法都支持三种方式:

  • 无额外参数, 抛出的异常中没有错误消息
  • 指定error message 抛出指定error message的异常
  • 额外的字符串参数 替换带有占位符的error message消息。这个变种处理异常消息的方式有点类似printf,但考虑GWT的兼容性和效率,只支持%s指示符。
注意:checkNotNull、checkArgument和checkState有大量的重载,它们采用可变参数方式。
checkArgument(i >= 0, "Argument was %s but expected nonnegative", i);
checkArgument(i < j, "Expected i < j, but %s > %s", i, j);

以下是com.google.common.base.Preconditions类的声明:

@GwtCompatible
public final class Preconditions {}

- 阅读剩余部分 -

top 是一个命令行程序, 用于实时监视系统的运行情况, top 命令展示的信息比较丰富, 我们分类介绍下, 先来看看top命令展示的信息

root@server:~# top                                                                                                                                                                                                       [2/1909]
top - 18:41:48 up 1 day,  2:21,  3 users,  load average: 0.12, 0.08, 0.09 
Tasks: 157 total,   1 running, 156 sleeping,   0 stopped,   0 zombie      
%Cpu(s):  1.1 us,  0.2 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  4045996 total,  1009596 free,  1579968 used,  1456432 buff/cache
KiB Swap:   998396 total,   998396 free,        0 used.  2164548 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                   
 1627 rabbitmq  20   0 2205672  57648   5204 S   3.3  1.4  67:14.58 beam.smp
23655 root      20   0       0      0      0 S   0.3  0.0   0:04.69 kworker/0:1
    1 root      20   0   38068   6032   3948 S   0.0  0.1   0:02.93 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:00.43 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S   0.0  0.0   2:11.68 rcu_sched
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
    9 root      rt   0       0      0      0 S   0.0  0.0   0:00.24 migration/0
   10 root      rt   0       0      0      0 S   0.0  0.0   0:01.31 watchdog/0
   11 root      rt   0       0      0      0 S   0.0  0.0   0:01.26 watchdog/1
   12 root      rt   0       0      0      0 S   0.0  0.0   0:00.24 migration/1
   13 root      20   0       0      0      0 S   0.0  0.0   0:02.09 ksoftirqd/1
   15 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H

......

- 阅读剩余部分 -

ps 命令用于展示进程信息,在查看进程是否存在,或者进程的启动命令,或者是进程运行环境信息。

查看所有进程, 仅包含进程名称

root@server:~# ps -e   
  PID TTY          TIME CMD         
    1 ?        00:00:02 systemd     
    2 ?        00:00:00 kthreadd 
    3 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    7 ?        00:01:49 rcu_sched
    8 ?        00:00:00 rcu_bh 
    9 ?        00:00:00 migration/0
   10 ?        00:00:01 watchdog/0  
   11 ?        00:00:01 watchdog/1  
   12 ?        00:00:00 migration/1    
   13 ?        00:00:01 ksoftirqd/1 
   15 ?        00:00:00 kworker/1:0H
   16 ?        00:00:01 watchdog/2     
   17 ?        00:00:00 migration/2
   18 ?        00:00:00 ksoftirqd/2
   20 ?        00:00:00 kworker/2:0H
   21 ?        00:00:00 watchdog/3 
   22 ?        00:00:00 migration/3
   23 ?        00:00:00 ksoftirqd/3
   25 ?        00:00:00 kworker/3:0H
   26 ?        00:00:00 kdevtmpfs

......

- 阅读剩余部分 -

Linux 上启动一个程序, 我们可能经常通过前台启动, 但是前台启动之后, 终端被占用, 不能同时开展其他工作, 因此就希望将程序变成后台运行,接下来我们介绍下, 类似场景的任务控制.

任务控制实际是Shell程序提供的功能,使用更多的是bash/sh,当然还有其他Shell程序,比如tcshkshcsh等, 对任务管理功能各个实现都大致类似, 这里我们主要介绍接触最多的 bash Shell。

  • cmd & 让程序后台运行
  • Ctrl + c 关闭当前前台运行程序(一般是发送SIGINT给程序处理)
  • Ctrl + z 终端当前前台运行程序(一般是发送SIGTSTP给程序处理)
  • jobs 查看所有后台运行程序
  • bg %number 将程序切换到后台运行
  • fg %number 将后台运行程序切换到前台运行
  • disown %number 将任务从当前的任务表中移除,移除后程序依然在后端运行,只是不被当前会话管理。

- 阅读剩余部分 -

简介

Guava是Google开源的核心Java库,Google Guava源于2007年的"Google Collections Library"。这个库是为了方便编码,并减少编码错误。主要功能包括集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。这些每天都在被Google的工程师应用在产品服务中。

优点

  • 标准化 - Guava库是由谷歌托管。
  • 高效 - 可靠,快速和有效的扩展JAVA标准库
  • 优化 -Guava库经过高度的优化。

函数式编程:增加Java功能和处理能力。

实用程序:提供经常需要在应用程序中开发的许多实用程序类。

验证:提供标准的故障安全验证机制。

最佳实践:强调最佳的做法。

总之,它是一个提高代码质量、简化工作,促使代码更有弹性、更加简洁的工具。

- 阅读剩余部分 -

rsync 是个远程同步工具, 允许单向复制或者更新内容到远程服务器,要求远程服务器也必须安装rsync,Linux平台上发行版默认都自带.

拷贝 ~/backup 复制到远程用户目录下

rsync -z -a -v -t --delete --rsh="ssh -l linuxcoming" ~/backup/ root@192.168.56.10:~/
  • -a 归档模式, 将文档所有元信息(所有者/权限/时间)同步到远程服务器
  • -z 开启压缩选项, 压缩后在传输到远端
  • -v 开启详细日志(verbose), 打印正在执行的内容
  • -t 将时间戳同步到远端, 如果不添加该参数, rsync 将更新文件的时间戳, rsync 使用时间戳来检查文件是否需要更新.
  • --delete 如果文件/目录在原始目录中不存在, 将删除它.

- 阅读剩余部分 -