置顶随笔

[置顶]Java NIO 简单经典示例

Java NIO 主要是Channel, SelectionKey, Selector 三个类之间的关系,下面的例子就是演示如果使用NIO来处理请求的:/**
 * 
 */
package dongzi.nio.exercise.nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;

/**
 * 
@author kyle
 * 
 
*/
public class SelectSockets {

    private static final int PORT_NUMBER = 1234;

    /**
     * 
@param args
     
*/
    public static void main(String[] args) {
        new SelectSockets().go(args);
    }

    private void go(String[] args) {
        int port = PORT_NUMBER;
        if (args.length > 0) {
            try {
                port = Integer.parseInt(args[0]);
            } catch (Exception e) {
            }
        }

        System.out.println("Listening port: " + PORT_NUMBER);
        try {
            Selector selector = Selector.open();
            startServer(port, selector);
            while (true) {
                int n = selector.select();
                if (n == 0) {
                    continue;
                }

                Iterator it = selector.selectedKeys().iterator();
                while (it.hasNext()) {
                    SelectionKey key = (SelectionKey) it.next();
                    if (key.isAcceptable()) {
                        ServerSocketChannel server = (ServerSocketChannel) key
                                .channel();
                        SocketChannel channel = server.accept();
                        registerChannel(selector, channel, SelectionKey.OP_READ);
                        sayHello(channel);

                    }
                    if (key.isReadable()) {
                        readDataFromChannel(key);
                    }
                }

                it.remove();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private ByteBuffer buffer = ByteBuffer.allocate(1024);

    private void readDataFromChannel(SelectionKey key) throws IOException {
        int count = 0;
        SocketChannel channel = (SocketChannel) key.channel();
        buffer.clear();
        while ((count = channel.read(buffer)) > 0) {
            buffer.flip();
            while (buffer.hasRemaining()) {
                System.out.println(buffer.get());
            }
            buffer.clear();
        }
        if (count < 0) {
            channel.close();
        }

    }

    private void sayHello(SocketChannel channel) throws IOException {
        if (channel == null) {
            return;
        }
        buffer.clear();
        ByteBuffer buffer = ByteBuffer.wrap("Hi, there \r\n".getBytes());
        buffer.flip();
        channel.write(buffer);
    }

    private void registerChannel(Selector selector, SocketChannel channel,
            int opRead) throws IOException {

        if (channel == null) {
            return;
        }

        channel.configureBlocking(false);
        channel.register(selector, opRead);
    }

    private void startServer(int port, Selector selector) throws IOException,
            ClosedChannelException {
        ServerSocketChannel serverChannel = ServerSocketChannel.open();
        serverChannel.configureBlocking(false);
        ServerSocket serverSocket = serverChannel.socket();
        serverSocket.bind(new InetSocketAddress(port));
        serverChannel.register(selector, SelectionKey.OP_ACCEPT);
    }

}

posted @ 2012-09-26 22:40 王树东 阅读(4360) | 评论 (0)编辑 收藏

2013年11月21日

Linux 查看系统信息常用命令

# uname -a # 查看内核/操作系统/CPU信息 
# head -n 1 /etc/issue # 查看操作系统版本 
# cat /proc/cpuinfo # 查看CPU信息 
# hostname # 查看计算机名 
# lspci -tv # 列出所有PCI设备 
# lsusb -tv # 列出所有USB设备 
# lsmod # 列出加载的内核模块 
# env # 查看环境变量资源 
# free -m # 查看内存使用量和交换区使用量 
# df -h # 查看各分区使用情况 
# du -sh <目录名> # 查看指定目录的大小 
# grep MemTotal /proc/meminfo # 查看内存总量 
# grep MemFree /proc/meminfo # 查看空闲内存量 
# uptime # 查看系统运行时间、用户数、负载 
# cat /proc/loadavg # 查看系统负载磁盘和分区 
# mount | column -t # 查看挂接的分区状态 
# fdisk -l # 查看所有分区 
# swapon -s # 查看所有交换分区 
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备) 
# dmesg | grep IDE # 查看启动时IDE设备检测状况网络 
# ifconfig # 查看所有网络接口的属性 
# iptables -L # 查看防火墙设置 
# route -n # 查看路由表 
# netstat -lntp # 查看所有监听端口 
# netstat -antp # 查看所有已经建立的连接 
# netstat -s # 查看网络统计信息进程 
# ps -ef # 查看所有进程 
# top # 实时显示进程状态用户 
# w # 查看活动用户 
# id <用户名> # 查看指定用户信息 
# last # 查看用户登录日志 
# cut -d: -f1 /etc/passwd # 查看系统所有用户 
# cut -d: -f1 /etc/group # 查看系统所有组 
# crontab -l # 查看当前用户的计划任务服务 
# chkconfig –list # 列出所有系统服务 
# chkconfig –list | grep on # 列出所有启动的系统服务程序 
# rpm -qa # 查看所有安装的软件包

posted @ 2013-11-21 11:21 王树东 阅读(164) | 评论 (0)编辑 收藏

2013年5月25日

转:UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别

这篇文章转自:http://blog.csdn.net/sfdev/article/details/3906243

这篇文章清晰的讲述了继承, 实现, 依赖, 关联,组合的概念及他们之间的关系,以下是原文内容:

这是一堂关于UML基础知识的补习课;现在我们做项目时间都太紧了,基本上都没有做过真正的class级别的详细设计,更别提使用UML来实现规范建模了;本篇主要就以前自己一直感觉很迷糊的几种class之间的关系进行整理,让我们在真正用UML进行比如类图设计时能够更加清晰明了;以下就分别介绍这几种关系:

 

继承

指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;

实现

指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;

依赖

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;

关联

他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;

聚合

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

组合

组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准确定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;

posted @ 2013-05-25 16:12 王树东 阅读(241) | 评论 (0)编辑 收藏

2013年4月3日

The Key of Grails Custom Validator

当我们使用静态的Scaffolding的时候, 我们经常会用到一些自定义的validator, 那么我们怎样自定义国际化的message呢?
或者说我们定义怎样的一个key, Grails能查到它呢?

这里,用户自定义Validator的key的pattern是:
[Class Name].[Property Name].validator.invalid


posted @ 2013-04-03 23:03 王树东 阅读(217) | 评论 (0)编辑 收藏

中文和ASCII互转

我们在开发使时常会用到资源文件,这可能是为了多语言、国际化的需要,也可能是使用了国外开源项目的原因,这就需要中文转ascii将中文转换为ASCII 编码,或者将 ASCII 转换为中文,那么我们就可以使用 JDK 自带的转换工具 native2ascii

for example

No1、中文转换为 ASCII 编码

步骤:1 、在 D 盘新建 chinese.txt  文件,内容为:

parameter.project.title=这是中文

2、在环境变量中设置好 JDK 路径

3、进入 dos 控制台,并进入 D 盘目录

4、输入命令: native2ascii -encoding gb2312 chinese.txt  ascii.txt  回车

那么在D 盘目录下生成 ascii.txt 文件,内容为:

parameter.project.title=\u8fd9\u662f\u4e2d\u6ascii码 中文587

No1 ASCII 编码转换为中文

步骤:1 、在 D 盘新建 ascii.txt  文件,内容为:

parameter.project.title=\u8fd9\u662f\u4e2d\u6ascii码 中文587

2、在环境变量中设置好 JDK 路径

3、进入 dos 控制台,并进入 D 盘目录

4、输入命令: native2ascii -reverse -encoding UTF8 ascii.txt  chinese.txt 回车

那么在D 盘目录下生成 chinese.txt 文件,内容为:

parameter.project.title=这是中文

posted @ 2013-04-03 21:16 王树东 阅读(343) | 评论 (0)编辑 收藏

2013年1月17日

Linux 上服务的安装以及示例:Apache服务的安装(转)

1. chkconfig脚本格式:
#!/bin/sh
#chkconfig 2345 55 45
#上面为固定格式:2345 表示运行级别,55表示开机执行顺序,45为关机顺序
#description:this is just a demo of chkconfig script
case “$1” in
start)
<start-script>
;;
Stop)
<stop-script>
;;
Status)
Echo <the information you want to display>
;;
*)
Echo “the usage of the script”
Case
2. 然后将脚本保存,并赋予执行权限,再复制到/etc/init.d目录
#chmod a+x <myscript>
#copy <myscript> /etc/init.d
3. 使用chkconfig命令添加成服务
#chkconfig --add <myscript>
#chkconfig --level 35 <myscript > on
#chkconfig --list <myscript>
4. 然后就可以通过service命令管理了
#service <myscript> start | stop | status
5. 下面是我写的一个实例脚本,大家可以参考一些格式:
#!/bin/sh
#chkconfig: 2345 99 99
#description:the script to set the network at run level 2345
IN=eth0
OUT=eth1
HOST_NAME=cluster1.yang.com
INIP=192.168.10.10
OUTIP=192.168.136.10
MASK=255.255.255.0
IP=/sbin/ip
IFC=/sbin/ifconfig
ROUTE=/sbin/route
#flush the address
case "$1" in
start)
#echo "flush the address..."
#$IP addr flush dev eth0
#$IP addr flush dev eth1
echo "set the address..."
$IFC $IN $INIP netmask $MASK up
$IFC $OUT $OUTIP netmask $MASK up
echo "set the hostname..."
hostname $HOST_NAME
echo "set the default gateway..."
$IP route flush all
$ROUTE add default gw 192.168.136.2
echo "finshed!!!"
;;
stop)
echo "flush the network setting..."
$IP addr flush dev eth0
$IP addr flush dev eth1
echo "flush finshed!!!"
;;
status)
echo "hostname is $HOST_NAME"
$IFC eth0
$IFC eth1
;;
*)
echo "requires start,stop or status"
;;
esac
--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------

在Linux中chkconfighttpd任务添加,Apache服务器的最新稳定发布版本是httpd-2.2..0,官方下载地址是:http://httpd.apache.org/download.cgi。我们通过下面的步骤来快速的搭建一个web服务器。

1、下载源码文件httpd-2.2.0.tar.gz 到linux服务器的某个目录。
2、解压文件 # tar zxvf httpd-2.2.0.tar.gz .
3、配置 # ./configure –refix=/usr/local/apache //指定安装目录,以后要删除安装就只需删除这个目录。
4、编译和安装。 # make ; make install .
5、编写启动脚本,把它放到目录 /etc/rc.d/init.d/里,这里取名为httpd,其内容如下:
 

  1. #!/bin/bash  
  2. #description:http server  
  3. #chkconfig: 235 98 98  
  4. case "$1" in  
  5. start)  
  6. echo "Starting Apache daemon..."  
  7. /usr/local/apache2/bin/apachectl -k start  
  8. ;;  
  9. stop)  
  10. echo "Stopping Apache daemon..."  
  11. /usr/local/apache2/bin/apachectl -k stop  
  12. ;;  
  13. restart)  
  14. echo "Restarting Apache daemon..."  
  15. /usr/local/apache2/bin/apachectl -k restart  
  16. ;;  
  17. status)  
  18. statusproc /usr/local/apache2/bin/httpd  
  19. ;;  
  20. *)  
  21. echo "Usage: $0 {start|stop|restart|status}"  
  22. exit 1  
  23. ;;  
  24. Esac  

 

注意:#description:http server 这一行必须加上,否则在执行命令

 # chkconfig –add httpd

时会出现“service apache does not support chkconfig”的错误报告。

#chkconfig: 2345 98 98 表示在执行命令

 # chkconfig –add httpd 时会在目录 /etc/rc2.d/ 、/etc/rc3.d/ /etc/rc5.d 分别生成文件 S98httpd和 K98httpd。这个数字可以是别的。

6、执行命令 # chkconfig –add httpd ,进入目录/etc/rc3.d/检查是否生成文件 S98httpd及K98httpd.
7、启动服务 # service httpd start .

posted @ 2013-01-17 10:23 王树东 阅读(491) | 评论 (0)编辑 收藏

2012年10月15日

Java编程技巧之final


        关键词final在Java中有多重用途,既可被用于instance变量、static变量
也可用于classes或methods,表示不允许客户覆写它们。
        当一个方法被声明成final,在两个领域中显得有位重要:
  1. class设计
  2. 运行期性能
        在程序设计里,有时我们不希望我们的方法被重写或覆盖,final关键字保证了这一点。
final关键字是怎么影响性能的呢?
        当我们的方法被声明成static,final和private, 此方法将成为Inlining(内联函数)的候选者。此类方法可以在编译期被静态决议(staticallyresolved),而不需要动态决议(dynamicResolution)。以方法本体(methodbody)替换方法调用(methodcall)会使代码执行速度更快。
        将方法声明为static、final和private会带来一些缺点:这样的方法无法通过Subclassing(子类化)进行扩展。这就束缚了derived class通过class函数做事情的机会。inlined方法只有在被多次调用的情况下,才会获得令人侧目的性能提升。这是因为当一个方法被inline后,就不再需要负担方法调用的额外开销。因此,方法被调用愈多次,节省就愈多。
        不过inlining也可能使你的代码体积变大。如果这个方法有许多调用点,.class文件的体积便会膨胀,这是因为原本只需存储一份的函数码,由于inline而在所有调用点被复制了一份。

posted @ 2012-10-15 22:23 王树东 阅读(251) | 评论 (0)编辑 收藏

2012年9月26日

Java NIO 简单经典示例

Java NIO 主要是Channel, SelectionKey, Selector 三个类之间的关系,下面的例子就是演示如果使用NIO来处理请求的:/**
 * 
 */
package dongzi.nio.exercise.nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;

/**
 * 
@author kyle
 * 
 
*/
public class SelectSockets {

    private static final int PORT_NUMBER = 1234;

    /**
     * 
@param args
     
*/
    public static void main(String[] args) {
        new SelectSockets().go(args);
    }

    private void go(String[] args) {
        int port = PORT_NUMBER;
        if (args.length > 0) {
            try {
                port = Integer.parseInt(args[0]);
            } catch (Exception e) {
            }
        }

        System.out.println("Listening port: " + PORT_NUMBER);
        try {
            Selector selector = Selector.open();
            startServer(port, selector);
            while (true) {
                int n = selector.select();
                if (n == 0) {
                    continue;
                }

                Iterator it = selector.selectedKeys().iterator();
                while (it.hasNext()) {
                    SelectionKey key = (SelectionKey) it.next();
                    if (key.isAcceptable()) {
                        ServerSocketChannel server = (ServerSocketChannel) key
                                .channel();
                        SocketChannel channel = server.accept();
                        registerChannel(selector, channel, SelectionKey.OP_READ);
                        sayHello(channel);

                    }
                    if (key.isReadable()) {
                        readDataFromChannel(key);
                    }
                }

                it.remove();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private ByteBuffer buffer = ByteBuffer.allocate(1024);

    private void readDataFromChannel(SelectionKey key) throws IOException {
        int count = 0;
        SocketChannel channel = (SocketChannel) key.channel();
        buffer.clear();
        while ((count = channel.read(buffer)) > 0) {
            buffer.flip();
            while (buffer.hasRemaining()) {
                System.out.println(buffer.get());
            }
            buffer.clear();
        }
        if (count < 0) {
            channel.close();
        }

    }

    private void sayHello(SocketChannel channel) throws IOException {
        if (channel == null) {
            return;
        }
        buffer.clear();
        ByteBuffer buffer = ByteBuffer.wrap("Hi, there \r\n".getBytes());
        buffer.flip();
        channel.write(buffer);
    }

    private void registerChannel(Selector selector, SocketChannel channel,
            int opRead) throws IOException {

        if (channel == null) {
            return;
        }

        channel.configureBlocking(false);
        channel.register(selector, opRead);
    }

    private void startServer(int port, Selector selector) throws IOException,
            ClosedChannelException {
        ServerSocketChannel serverChannel = ServerSocketChannel.open();
        serverChannel.configureBlocking(false);
        ServerSocket serverSocket = serverChannel.socket();
        serverSocket.bind(new InetSocketAddress(port));
        serverChannel.register(selector, SelectionKey.OP_ACCEPT);
    }

}

posted @ 2012-09-26 22:40 王树东 阅读(4360) | 评论 (0)编辑 收藏

The lifecycle of a software product

There are 5 different steps or milestones in a products lifecycle from beginning to release. These are:
Stage 1 - First Cycle - QA Handoff/Acceptance - This is the milestone that determines if a product is stable enough to be tested against. When a product reaches this stage, it is generally released to QA Testers to begin the testing stage of the produt.
Stage 2 - Alpha phase The product is still in QA review, but the testing scenarios are a little more destructive in nature, in an attempt to start shaking out most of the bugs in a product.
Stage 3 - Beta phase- the product is at a stability level that it can be released to select customers in the customer base for further testing in the 'real world'. This usually shakes out more bugs in a product.
Stage 4 - Release Candidate - This stage is towards the end of the cycle - The product has gone through its testing paces, and is being certified as ready for release.
Stage 5 - GA -The product is ready for the world!


Reference: http://answers.yahoo.com/question/index?qid=1006020204792

posted @ 2012-09-26 09:37 王树东 阅读(198) | 评论 (0)编辑 收藏

2012年1月30日

(转)Windows Server 2003 中寻找端口与进程的关联

@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
Q:Windows Server 2003 中寻找端口与进程的关联   A:如果发现一些从没见过的端口号,你怎么分辩出该端口是不是木马开放的端口?或者在进程列表中发现陌生的进程时,是否想知道该进程在你的系统中开了什么 端口? 一,根据进程查端口号首先在开始菜单的“运行”框中输入“cmd.exe”进入命令提示符窗口,先键入“tasklist”命令将列出系统正在运行的进程 列表,把你要查的进程所对应的“PID”号记下或复制。把进程的PID好记下后,接下来就用这个PID号把该进程所开的端口显示出来了。在当前的命令符下 继续键入“netstat -ano | find 1140”命令,其中“netstat -ano”参数表示以数字形式显示所有活动的TCP连接以及计算机正在侦听的TCP、UDP端口,并且显示查找进程ID(PID)号;“|find 1140”表示查找进程PID为“1140”的TCP连接以及TCP、UDP端口的侦听情况(在实际应用中,需要把你刚才记下或复制的PID号替换掉这里 的1140)。按“回车”键后,就会显示出该进程所开的端口号。 二,根据端口号查进程   在命令提示符窗口中输入“netstat -ano”命令,列出系统当前的端口列表,该命令的作用已在上面提过了。-o参数的作用主要是显示各端口对应的进程PID号,现在把你要查的端口对应的进 程PID号记下或复制。然后在命令提示符下继续输入tasklist /fi“PID eq 788”(在实际应用中,需要把你复制或记下的PID号替换掉这里的788),这行语句/fi参数表示在“tasklist”中筛选,而“ID eq 788”则是指定筛选的条件,按“回车”键后,就会显示出端口对应的进程。 三,查出进程对应的程序   知道了端口和进程的关联后,如何再进一步查出该进程是那个软件或程序的进程呢?下面的操作就需要用到Windows2000(Server或 Professional版都可以)安装光盘中的一个工具。首先在安装光盘的“Support\Tools\”目录下,用解压软件打开 “support.cab”压缩包,找到“tlist.exe”文件,将此文件释放到任一目录,如“D:\Support”。然后在命令提示符窗口中切换 到此目录,运行“tlist.exe”命令,把要查的进程对应的PID号记下或复制(第一列就是进程的PID号),然后继续输入“tlist.exe 2012”命令(你输入的时候,需要将刚才记下的PID号替换掉这里的2012),“CmdLine:”后面显示的就是该进程对应的软件所在的目录。除此 之外,返回信息中还列出了该进程所调用的文件,得到了这些信息就可以很容易查出进程对应的程序了。假如想关闭某个进程,可把该进程的PID号记下,在命令 提示符下输入“taskkill/pid 2400”(2400是PID号)就可以将PID号为2400的进程关闭,如果要强制关闭该进程,只须在这条命令的后面加个“/f”参数即可。
来源:http://www.cn6154.com/ask/question.php?id=2623

posted @ 2012-01-30 09:31 王树东 阅读(429) | 评论 (0)编辑 收藏

2011年12月14日

Ubuntu 25个快捷键

@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

1. Win+E - 显示所有桌面,方便的左右选择。

2. Alt+Ctrl+Left/Right Arrow -切换桌面

3. Alt+Ctrl+Shift+Left/Right Arrow – 移动当前窗口到其他桌面

4. Alt + Shift+ Up Arrow – 以很酷的方式显示当前窗口

5. Alt+F9/F10 – 最小化/最大化当前窗口

6. Alt+F5 -不最大化当前窗口

7. Alt+F7 – 激活当前窗口的移动选项,你可以使用方向键移动当前窗口,甚至移动到其他桌面。

8. Alt+F8 – 用方向键调整当前窗口大小


9. Ctrl + Alt + D – 显示桌面/恢复当前窗口

10. Alt+ Tab – 切换窗口

Nautilus

11. Shift+Ctrl+N – 新建文件夹, 很有用

12. Alt + Enter – 查看选择文件/文件夹的属性,代替单击右键选择属性

13. Ctrl + 1/2 – 改变文件夹视图查看方式,图标视图/列表视图

14. Ctrl + W – 关闭当前Nautilus窗口

15. Ctrl + Shift + W – 关闭所有Nautilus窗口

16. Ctrl+T – 在Nautilus中新建一个标签

17. Alt + Up/Down Arrow – 移动到父文件夹/选择的文件夹

18. Alt + Left/Right Arrow – 后退/前进

19. Alt + Home -直接移动到主文件夹

20. F9 – 开关显示Nautilus侧边栏

21. Ctrl + H -开关显示隐藏文件夹

22. Ctrl + Alt + L -锁屏

23. Alt + F1 – 打开应用程序菜单

24. Alt + F2 – 打开运行应用程序对话框

25. Win + 鼠标滚轮 – 放大/缩小屏幕

posted @ 2011-12-14 22:58 王树东 阅读(244) | 评论 (0)编辑 收藏

仅列出标题  下一页
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

公告

常用链接

留言簿

随笔分类(17)

随笔档案(15)

文章分类(4)

文章档案(5)

收藏夹(4)

Algorithm

Design

Environment Setup

Installer

Maven

MINA

OS

Skills for Java

VIM

搜索

最新评论

阅读排行榜

评论排行榜