有用的linux命令——chattr

一般Linux的文件系统都是ext2/ext3。ext文件系统的文件,目录会有一些文件系统所特有的属性。我们之前所熟知的rwx等属性是linux操作系统赋予文件的属性,和登录用户相关。而本文所说的这个特性是文件系统相关的,它不受登录用户的限制。
ext3所包括的文件属性很多,主要涉及到文件在文件系统上的存储、是否启用日志、是否更新atime、是否采用压缩等多种高级特性,其中我们常见的一种属性就是防删除。
使用lsattr命令可以查看文件的文件系统属性,
lsattr

横杠-表示未设置属性,默认情况下新建的文件是没有任何属性的,可以用chattr命令来进行修改。

阅读详细 »

有趣的面试题

1.A、B两人分别在两座岛上。B生病了,A有B所需要的药。C有一艘小船和一个可以上锁的箱子。C愿意在A和B之间运东西,但东西只能放在箱子里。只要箱子没被上锁,C都会偷走箱子里的东西,不管箱子里有什么。如果A和B各自有一把锁和只能开自己那把锁的钥匙,A应该如何把东西安全递交给B?
答案:A把药放进箱子,用自己的锁把箱子锁上。B拿到箱子后,再在箱子上加一把自己的锁。箱子运回A后,A取下自己的锁。箱子再运到B手中时,B取下自己的锁,获得药物。

2.有一个软件公司,1/2的人是系统分析员,2/5的人是软件工程师,有1/4的人两者都是,问有多少人两者都不是?
1 - 1/2 - 2/5 + 1/4= 0.35

3.有25匹马,速度都不同,但每匹马的速度都是定值。现在只有5条赛道,无法计时,即每赛一场最多只能知道5匹马的相对快慢。问最少赛几场可以找出25匹马中速度最快的前3名?(百度2008年面试题) 阅读详细 »

一些Python的学习资料

一 英语好的可以直接看官方文档:https://docs.python.org/2/tutorial/index.html

二 Python学习笔记 python学习笔记(皮大庆)

三 python视频教程:http://v.163.com/special/opencourse/bianchengdaolun.html

四 python教程:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000

其它书籍:《Python编程实践》《简明Python教程》《Python基础教程》

Chrome清除dns缓存

为了加快访问速度,Google Chrome浏览器采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度。你在谷歌Chrome浏览器的地址栏中输入about:DNS,就可以看到本地的DNS缓存。

在chrome下清除DNS缓存方法:
1、用chrome打开:chrome://net-internals/#dns
2、点击上面的“clean host cache”

idea教程(一)—— 模版配置

一般编码规范的第一条就是对注释的要求,统一的模版配置对注释的规范十分有用,下面是idea的模版配置文件

idea

修改File Header:
/**
* @author: ${USER}  Date: ${DATE} Time: ${TIME}
*/
新增Package Header:
/*
* Copyright (c) 2014 Javaranger.com. All Rights Reserved.
*/
修改:
class:
#parse("Package Header.java")
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
public class ${NAME} {
}
interface:
#parse("Package Header.java")
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
public interface ${NAME} {
}
enum:
#parse("Package Header.java")
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
public enum ${NAME} {
}
annotation:
#parse("Package Header.java")
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
public @interface ${NAME} {
}

java参数传递分析

先看基本类型作为参数传递的例子:

    public static void main(String[] args) {
        int param =100;
        System.out.println("before change param=" + param);
        changeInt(param);
        System.out.println("after change param=" + param);
    }
    public static void changeInt(int i){
         i = 1;
    }

基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的,输出的结果证明了这一点:
before change param = 100
after change param = 100

阅读详细 »

这些反人类设计,你肯定也碰到过

1、根本插不进去有没有!只能再花钱买个插线板儿!

1

2、走这个路,一格娘炮,两格扯蛋!

2

阅读详细 »

信号量(semaphore)和互斥锁(mutex)的区别

互斥锁是一把公共厕所的钥匙。一个人使用厕所的时候可以拿到这把钥匙,用完之后把这把钥匙交给排队的下一个人。

信号量是没有人使用的厕所的钥匙数量,所有厕所的钥匙都一样。比如有4个厕所有相同的钥匙和锁。信号量的值就是钥匙的数量,一开始是4。当进来一个人的时候数量就是少一个,如果4个厕所都满了,信号量就成0了,出去一个人就增加1,并把钥匙交给排队的下一个人。

这个比喻并不是太好,尤其是它无法解释 二元(binary)信号量和互斥锁的区别!我把这个比喻做了改进。互斥锁的比喻还是和上面一样,需要指出的是,当你拿到那把钥匙的时候你就是它的拥有者(owner),别人是无法打开厕所门的。

而信号量到底是什么呢?它就是一个大的公共厕所,里面有若干个位置,外面的大门口有一个可以翻动牌子写着“已满”和“可用”,当里面还有空的位置的时候,进去的人不用翻动这个牌子,直到没有位置时最后一个进去的人必须把它设成“已满”,这时后面的人必须排队等候,然后出去的人必须把牌子翻到“可用”,如果需要的话。

很好理解对嘛?那么它怎么解释二元信号量呢?也就是当这个厕所里面只能容纳一个人的时候,每个人进去的时候都要把门口的牌子翻到“已满”,出去的时候翻到“可用”。它和互斥锁的区别马上就可以看出来了,翻动的牌子在外面可以被别人翻的,而锁住的锁只有拿钥匙的人才可以开!

当然了,信号量之所以翻译成“信号”,还是有道理的,因为它(厕所门口的牌子)标示的是资源(厕所空位)的状态,而互斥锁就是锁,它实实在在地锁住了资源。这在生产者消费者的情况下区别更明显。

关于吞吐量和延迟的精彩比喻

关于吞吐量(throughput)和延迟(latency),如果你要搞性能优化,这两个概念是必须要知道的,它们看似简单实则不是。很多人都曾经认为高吞吐量就意味着低延迟,高延迟就意味着吞吐量变小。下面的比喻可以解释这种观点是错误的。

我们可以把网络发送数据包比喻成去街边的 ATM 取钱。每一个人从开始使用 ATM 到取钱结束整个过程都需要一分钟,所以这里的延迟是60秒,那吞吐量呢?当然是 1/60 人/秒。现在银行升级了他们的 ATM 机操作系统,每个人只要30秒就可以完成取款了!延迟是 30秒,吞吐量是 1/30 人/秒。很好理解,可是前面的问题依然存在对不对?别慌,看下面。

因为这附近来取钱的人比较多,现在银行决定在这里增加一台 ATM 机,一共有两台 ATM 机了。现在,一分钟可以让4个人完成取钱了,虽然你去排队取钱时在 ATM 机前还是要用 30 秒!也就是说,延迟没有变,但吞吐量增大了!可见,吞吐量可以不用通过减小延迟来提高。

好了,现在银行为了改进服务又做出了一个新的决定:每个来取钱的客户在取完钱之后必须在旁边填写一个调查问卷,用时也是30秒。那么,现在你去取钱的话从开始使用 ATM 到完成调查问卷离开的时间又是 60 秒了!换句话说,延迟是60秒。而吞吐量根本没变!一分钟之内还是可以进来4个人!可见,延迟增加了,而吞吐量没有变。

从这个比喻中我们可以看出,延迟测量的是每个客户(每个应用程序)感受到的时间长短,而吞吐量测量的是整个银行(整个系统)的处理效率,是两个完全不同的概念。

正如银行为了让客户满意不光要提高自身的办事效率外,还要尽量缩短客户在银行办事所花的时间一样,系统不光要尽量让吞吐量大,而且还要让每个请求的延迟尽量小。这是两个不同的目标。

超级好用的hosts,可上google,youtube

#        __        __
#       /  \      /  \
#       \__/      |  |
#        __       |  |                              __
#       /  \______|  |   ________    ________    __|  |__    ________
#       |   ______   |  /   __   \  /   _____|  |__    __|  /   _____|
#       |  |      \__/  |  /  \  |  |  |_____      |  |     |  |_____
#       |  |       __   |  |  |  |  \_____   \     |  |     \_____   \
#       |  |      /  \  |  \__/  |   _____|  |     |  |__    _____|  |
#       \__/      \__/  \________/  |________/     \_____|  |________/
#
#

下载点这里->host