`
文章列表
第74条:谨慎地实现Serializable接口:   第75条:考虑使用自定义的序列化形式:   public final class StringList implements Serializable { private transient int size = 0; private transient Entry head = null; // No longer Serializable! private static class Entry { String data; Entry next; Entry previous; } ...
第66条:同步访问共享的可变数据: 使用volatile可以在两个线程中通信 public class StopThread { private static volatile boolean stopRequested; public static void main(String[] args) throws InterruptedException { Thread backgroundThread = new Thread(new Runnable() { public void run() { int i = 0; while (! ...
第57条:只针对异常情况才使用异常:   第58条:对可恢复的情况使用受检异常,对编程错误使用运行时异常:   第59条:避免不必要地使用受检异常:   第60条:优先使用标准异常:   第61条:抛出与抽象相对应的异常:   第62条:每个方法抛出的异常都要有文档:   第63条:在细节消息中包含能够捕获失败的信息:   第64条:努力使失败保持原子性:   第65条:不要忽略异常   本人博客已搬家,新地址为:http://yidao620c.github.io/
第45条:将局部变量的作用域最小化: 几乎每个局部变量声明都应该包含一个初始化表达式。这个有个例外,就是try catch,在try的外部定义,然后在try里面初始化。   第46条:for-each循环优先于传统的for循环:   第47条:了 ...
第39条:必要时进行保护性拷贝:   第40条:谨慎设计方法签名: 避免过长的参数列表,目标是四个参数或者更少,如果多于四个了就该考虑重构这个方法了。 三种方法可以缩短过长的参数列表: ①,把方法分解成多个方法,每个方法只需要参数的一个子集,不推荐。 ②,创建辅助类helper class,用来保存参数的分组。这些辅助类一般为静态成员类。 ③,从对象构建到方法调用都采用Builder模式,如果方法带有多个参数,尤其是其中某些事可选的时候,最好定义一个对象来表示所有参数,并允许客户端在这个对象上多次setter调用,玩了后执行execute,它对参数进行有效性检测并执行实际的逻辑 ...
第30条:用enum代替int常量: public enum Operation { PLUS("+") { double apply(double x, double y) { return x + y; } }, MINUS("-") { double apply(double x, double y) { return x - y; } }, TIMES("*") { double apply(double x, double y) { return ...
磁盘阵列的英文全称是Redundant Arrays of Inexpensive Disks(RAID),即容错廉价磁盘阵列。可以通过一些技术将多个较小的磁盘整合成为一个较大的磁盘设备;而这个设备可不止存储功能而已,它还具有数据保护功能。 RAID的等级: × RAID-0(等量模式,stripe):性能较佳 这种模式使用相同型号和容量的磁盘来组成,可以有多个,RAID会将每个磁盘划分成等量的区块(一般为4K,2K等等),然后当一个文件被写入时,该文件会依据块大小切割好,之后依序放到各个磁盘里面去,由于每个磁盘交错存放数据,因此当你的数据要写入RAID时,数据会被等量的放置到各个磁盘 ...
磁盘配额(quota)比较常用的几个情况是: * 针对WWW server,例如:每个人的网页空间的容量限制 * 针对mail server,例如:每个人的邮件空间限制 * 针对file server:每个人最大的可用网络硬盘空间(教学环境中比较常见) 上面的是针对网络服务的设计,如果是针对linux系统主机上面的设置,用途有下面这些: * 限制某一用户组最大磁盘配额,可用设置普通用户组和VIP用户组,有点类似会员制,VIP用户相应的磁盘空间大小比较大些,普通用户想成为VIP,嘿嘿,交会费就行。
====账号管理配置文件==== vim /etc/passwd,显示系统内所有账号内容,每一行代表一个账号,比如: yidao:x:1000:1000:fedora17:/home/yidao:/bin/bash 解释下这7个字段的含义: 1:账号名称  | 2:密码  |  3:UID  |   4:GID   |   5:用户信息说明   |   6:主文件夹  |   7:shell vim /etc/shadow,显示密码信息,每一行代表一个账号密码信息,比如:
其实,shell script就是利用shell的功能缩写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重导向等功能,达到我们想要的目的。 bash的两种不同 ...
正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序。 正则表达式基本上就是一种“表示法”,只要工具程序支持这种表示法,那么该工具程序就可以利用正则表达式处理字符串。例如vi,grep,awk,sed等。 正则表达式和之前的bash通配符是两个完全不同的东西,两者毫无关系,这个要注意下。 # grep [-A]  [-B]  [--color=auto] ‘string’  filename -A:后面加数字,为after的意思,除了列出该行,后续的n行也列出
只要能够操作应用程序的接口都能称为shell。狭义的shell指的是命令行方面的软件,包括bash。广义的shell则包括图形界面软件,因为图形界面其实也可以操作各种应用程序来调用内核工作,不过,在这里我们主要指的是bash。 # type [-tpa] command –> 查看命令是否为bash的内置命令或者是外部命令 * 利用$var或者是${var}可获取变量var的值 * bash中的双引号:特殊字符如$等,可以保有原本的特性 * bash中的单引号:所有的字符均为普通的字符,没有其他含义 * 可以用\将特殊字符变成一般字符
在命令模式下输入 :wq 表示保存离开,输入 :wq! 表示强制写入并离开,前提是你的权限可以改变。 一般模式下的按键列表: 移动光标的方法 h 或 向左方向键(←) 光标向左移动一个字元 j 或 向下方向键(↓) 光标向下移动一个字元 k 或 向上方向键(↑) 光标向上移动一个字元 l 或 向右方向键(→) 光标向右移动一个字元
Google Guava Collections 使用介绍 Google Guava Collections(以下都简称为 Guava Collections)是 Java Collections Framework 的增强和扩展。每个 Java 开发者都会在工作中使用各种数据结构,很多情况下 Java Collections Framework 可以帮助你完成这类工作。但是在有些场合你使用了 Java Collections Framework 的 API,但还是需要写很多代码来实现一些复杂逻辑,这个时候就可以尝试使用 Guava Collections 来帮助你完成这些工作。这些高质量 ...
====gzip压缩命令==== # gzip [-cdtv#] 文件名 –> 可以解开compress,zip,gzip软件压缩的文件 -c:将压缩数据输出到屏幕上,可通过数据重定向来处理 -d:解压缩参数 -t:验证一个压缩文件的一致性,看看文件是否有无错误 -v:显示源文件/压缩文件的压缩比等信息 -#:压缩等级,
Global site tag (gtag.js) - Google Analytics