<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    置頂隨筆

    [置頂]Java NIO 簡(jiǎn)單經(jīng)典示例

    Java NIO 主要是Channel, SelectionKey, Selector 三個(gè)類(lèi)之間的關(guān)系,下面的例子就是演示如果使用NIO來(lái)處理請(qǐng)求的:/**
     * 
     */
    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 王樹(shù)東 閱讀(4370) | 評(píng)論 (0)編輯 收藏

    2013年11月21日

    Linux 查看系統(tǒng)信息常用命令

    # uname -a # 查看內(nèi)核/操作系統(tǒng)/CPU信息 
    # head -n 1 /etc/issue # 查看操作系統(tǒng)版本 
    # cat /proc/cpuinfo # 查看CPU信息 
    # hostname # 查看計(jì)算機(jī)名 
    # lspci -tv # 列出所有PCI設(shè)備 
    # lsusb -tv # 列出所有USB設(shè)備 
    # lsmod # 列出加載的內(nèi)核模塊 
    # env # 查看環(huán)境變量資源 
    # free -m # 查看內(nèi)存使用量和交換區(qū)使用量 
    # df -h # 查看各分區(qū)使用情況 
    # du -sh <目錄名> # 查看指定目錄的大小 
    # grep MemTotal /proc/meminfo # 查看內(nèi)存總量 
    # grep MemFree /proc/meminfo # 查看空閑內(nèi)存量 
    # uptime # 查看系統(tǒng)運(yùn)行時(shí)間、用戶(hù)數(shù)、負(fù)載 
    # cat /proc/loadavg # 查看系統(tǒng)負(fù)載磁盤(pán)和分區(qū) 
    # mount | column -t # 查看掛接的分區(qū)狀態(tài) 
    # fdisk -l # 查看所有分區(qū) 
    # swapon -s # 查看所有交換分區(qū) 
    # hdparm -i /dev/hda # 查看磁盤(pán)參數(shù)(僅適用于IDE設(shè)備) 
    # dmesg | grep IDE # 查看啟動(dòng)時(shí)IDE設(shè)備檢測(cè)狀況網(wǎng)絡(luò) 
    # ifconfig # 查看所有網(wǎng)絡(luò)接口的屬性 
    # iptables -L # 查看防火墻設(shè)置 
    # route -n # 查看路由表 
    # netstat -lntp # 查看所有監(jiān)聽(tīng)端口 
    # netstat -antp # 查看所有已經(jīng)建立的連接 
    # netstat -s # 查看網(wǎng)絡(luò)統(tǒng)計(jì)信息進(jìn)程 
    # ps -ef # 查看所有進(jìn)程 
    # top # 實(shí)時(shí)顯示進(jìn)程狀態(tài)用戶(hù) 
    # w # 查看活動(dòng)用戶(hù) 
    # id <用戶(hù)名> # 查看指定用戶(hù)信息 
    # last # 查看用戶(hù)登錄日志 
    # cut -d: -f1 /etc/passwd # 查看系統(tǒng)所有用戶(hù) 
    # cut -d: -f1 /etc/group # 查看系統(tǒng)所有組 
    # crontab -l # 查看當(dāng)前用戶(hù)的計(jì)劃任務(wù)服務(wù) 
    # chkconfig –list # 列出所有系統(tǒng)服務(wù) 
    # chkconfig –list | grep on # 列出所有啟動(dòng)的系統(tǒng)服務(wù)程序 
    # rpm -qa # 查看所有安裝的軟件包

    posted @ 2013-11-21 11:21 王樹(shù)東 閱讀(194) | 評(píng)論 (0)編輯 收藏

    2013年5月25日

    轉(zhuǎn):UML中幾種類(lèi)間關(guān)系:繼承、實(shí)現(xiàn)、依賴(lài)、關(guān)聯(lián)、聚合、組合的聯(lián)系與區(qū)別

    這篇文章轉(zhuǎn)自:http://blog.csdn.net/sfdev/article/details/3906243

    這篇文章清晰的講述了繼承, 實(shí)現(xiàn), 依賴(lài), 關(guān)聯(lián),組合的概念及他們之間的關(guān)系,以下是原文內(nèi)容:

    這是一堂關(guān)于UML基礎(chǔ)知識(shí)的補(bǔ)習(xí)課;現(xiàn)在我們做項(xiàng)目時(shí)間都太緊了,基本上都沒(méi)有做過(guò)真正的class級(jí)別的詳細(xì)設(shè)計(jì),更別提使用UML來(lái)實(shí)現(xiàn)規(guī)范建模了;本篇主要就以前自己一直感覺(jué)很迷糊的幾種class之間的關(guān)系進(jìn)行整理,讓我們?cè)谡嬲肬ML進(jìn)行比如類(lèi)圖設(shè)計(jì)時(shí)能夠更加清晰明了;以下就分別介紹這幾種關(guān)系:

     

    繼承

    指的是一個(gè)類(lèi)(稱(chēng)為子類(lèi)、子接口)繼承另外的一個(gè)類(lèi)(稱(chēng)為父類(lèi)、父接口)的功能,并可以增加它自己的新功能的能力,繼承是類(lèi)與類(lèi)或者接口與接口之間最常見(jiàn)的關(guān)系;在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字extends明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性;

    實(shí)現(xiàn)

    指的是一個(gè)class類(lèi)實(shí)現(xiàn)interface接口(可以是多個(gè))的功能;實(shí)現(xiàn)是類(lèi)與接口之間最常見(jiàn)的關(guān)系;在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字implements明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性;

    依賴(lài)

    可以簡(jiǎn)單的理解,就是一個(gè)類(lèi)A使用到了另一個(gè)類(lèi)B,而這種使用關(guān)系是具有偶然性的、、臨時(shí)性的、非常弱的,但是B類(lèi)的變化會(huì)影響到A;比如某人要過(guò)河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴(lài);表現(xiàn)在代碼層面,為類(lèi)B作為參數(shù)被類(lèi)A在某個(gè)method方法中使用;

    關(guān)聯(lián)

    他體現(xiàn)的是兩個(gè)類(lèi)、或者類(lèi)與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴(lài)關(guān)系,比如我和我的朋友;這種關(guān)系比依賴(lài)更強(qiáng)、不存在依賴(lài)關(guān)系的偶然性、關(guān)系也不是臨時(shí)性的,一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的、關(guān)聯(lián)可以是單向、雙向的;表現(xiàn)在代碼層面,為被關(guān)聯(lián)類(lèi)B以類(lèi)屬性的形式出現(xiàn)在關(guān)聯(lián)類(lèi)A中,也可能是關(guān)聯(lián)類(lèi)A引用了一個(gè)類(lèi)型為被關(guān)聯(lián)類(lèi)B的全局變量;

    聚合

    聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分、擁有的關(guān)系,即has-a的關(guān)系,此時(shí)整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享;比如計(jì)算機(jī)與CPU、公司與員工的關(guān)系等;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分;

    組合

    組合也是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱(chēng)為強(qiáng)聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束;比如你和你的大腦;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分;

    對(duì)于繼承、實(shí)現(xiàn)這兩種關(guān)系沒(méi)多少疑問(wèn),他們體現(xiàn)的是一種類(lèi)與類(lèi)、或者類(lèi)與接口間的縱向關(guān)系;其他的四者關(guān)系則體現(xiàn)的是類(lèi)與類(lèi)、或者類(lèi)與接口間的引用、橫向關(guān)系,是比較難區(qū)分的,有很多事物間的關(guān)系要想準(zhǔn)確定位是很難的,前面也提到,這幾種關(guān)系都是語(yǔ)義級(jí)別的,所以從代碼層面并不能完全區(qū)分各種關(guān)系;但總的來(lái)說(shuō),后幾種關(guān)系所表現(xiàn)的強(qiáng)弱程度依次為:組合>聚合>關(guān)聯(lián)>依賴(lài);

    posted @ 2013-05-25 16:12 王樹(shù)東 閱讀(270) | 評(píng)論 (0)編輯 收藏

    2013年4月3日

    The Key of Grails Custom Validator

    當(dāng)我們使用靜態(tài)的Scaffolding的時(shí)候, 我們經(jīng)常會(huì)用到一些自定義的validator, 那么我們?cè)鯓幼远x國(guó)際化的message呢?
    或者說(shuō)我們定義怎樣的一個(gè)key, Grails能查到它呢?

    這里,用戶(hù)自定義Validator的key的pattern是:
    [Class Name].[Property Name].validator.invalid


    posted @ 2013-04-03 23:03 王樹(shù)東 閱讀(232) | 評(píng)論 (0)編輯 收藏

    中文和ASCII互轉(zhuǎn)

    我們?cè)陂_(kāi)發(fā)使時(shí)常會(huì)用到資源文件,這可能是為了多語(yǔ)言、國(guó)際化的需要,也可能是使用了國(guó)外開(kāi)源項(xiàng)目的原因,這就需要中文轉(zhuǎn)ascii將中文轉(zhuǎn)換為ASCII 編碼,或者將 ASCII 轉(zhuǎn)換為中文,那么我們就可以使用 JDK 自帶的轉(zhuǎn)換工具 native2ascii

    for example

    No1、中文轉(zhuǎn)換為 ASCII 編碼

    步驟:1 、在 D 盤(pán)新建 chinese.txt  文件,內(nèi)容為:

    parameter.project.title=這是中文

    2、在環(huán)境變量中設(shè)置好 JDK 路徑

    3、進(jìn)入 dos 控制臺(tái),并進(jìn)入 D 盤(pán)目錄

    4、輸入命令: native2ascii -encoding gb2312 chinese.txt  ascii.txt  回車(chē)

    那么在D 盤(pán)目錄下生成 ascii.txt 文件,內(nèi)容為:

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

    No1 ASCII 編碼轉(zhuǎn)換為中文

    步驟:1 、在 D 盤(pán)新建 ascii.txt  文件,內(nèi)容為:

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

    2、在環(huán)境變量中設(shè)置好 JDK 路徑

    3、進(jìn)入 dos 控制臺(tái),并進(jìn)入 D 盤(pán)目錄

    4、輸入命令: native2ascii -reverse -encoding UTF8 ascii.txt  chinese.txt 回車(chē)

    那么在D 盤(pán)目錄下生成 chinese.txt 文件,內(nèi)容為:

    parameter.project.title=這是中文

    posted @ 2013-04-03 21:16 王樹(shù)東 閱讀(358) | 評(píng)論 (0)編輯 收藏

    2013年1月17日

    Linux 上服務(wù)的安裝以及示例:Apache服務(wù)的安裝(轉(zhuǎn))

    1. chkconfig腳本格式:
    #!/bin/sh
    #chkconfig 2345 55 45
    #上面為固定格式:2345 表示運(yùn)行級(jí)別,55表示開(kāi)機(jī)執(zhí)行順序,45為關(guān)機(jī)順序
    #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. 然后將腳本保存,并賦予執(zhí)行權(quán)限,再?gòu)?fù)制到/etc/init.d目錄
    #chmod a+x <myscript>
    #copy <myscript> /etc/init.d
    3. 使用chkconfig命令添加成服務(wù)
    #chkconfig --add <myscript>
    #chkconfig --level 35 <myscript > on
    #chkconfig --list <myscript>
    4. 然后就可以通過(guò)service命令管理了
    #service <myscript> start | stop | status
    5. 下面是我寫(xiě)的一個(gè)實(shí)例腳本,大家可以參考一些格式:
    #!/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任務(wù)添加,Apache服務(wù)器的最新穩(wěn)定發(fā)布版本是httpd-2.2..0,官方下載地址是:http://httpd.apache.org/download.cgi。我們通過(guò)下面的步驟來(lái)快速的搭建一個(gè)web服務(wù)器。

    1、下載源碼文件httpd-2.2.0.tar.gz 到linux服務(wù)器的某個(gè)目錄。
    2、解壓文件 # tar zxvf httpd-2.2.0.tar.gz .
    3、配置 # ./configure –refix=/usr/local/apache //指定安裝目錄,以后要?jiǎng)h除安裝就只需刪除這個(gè)目錄。
    4、編譯和安裝。 # make ; make install .
    5、編寫(xiě)啟動(dòng)腳本,把它放到目錄 /etc/rc.d/init.d/里,這里取名為httpd,其內(nèi)容如下:
     

    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 這一行必須加上,否則在執(zhí)行命令

     # chkconfig –add httpd

    時(shí)會(huì)出現(xiàn)“service apache does not support chkconfig”的錯(cuò)誤報(bào)告。

    #chkconfig: 2345 98 98 表示在執(zhí)行命令

     # chkconfig –add httpd 時(shí)會(huì)在目錄 /etc/rc2.d/ 、/etc/rc3.d/ /etc/rc5.d 分別生成文件 S98httpd和 K98httpd。這個(gè)數(shù)字可以是別的。

    6、執(zhí)行命令 # chkconfig –add httpd ,進(jìn)入目錄/etc/rc3.d/檢查是否生成文件 S98httpd及K98httpd.
    7、啟動(dòng)服務(wù) # service httpd start .

    posted @ 2013-01-17 10:23 王樹(shù)東 閱讀(504) | 評(píng)論 (0)編輯 收藏

    2012年10月15日

    Java編程技巧之final


            關(guān)鍵詞final在Java中有多重用途,既可被用于instance變量、static變量
    也可用于classes或methods,表示不允許客戶(hù)覆寫(xiě)它們。
            當(dāng)一個(gè)方法被聲明成final,在兩個(gè)領(lǐng)域中顯得有位重要:
    1. class設(shè)計(jì)
    2. 運(yùn)行期性能
            在程序設(shè)計(jì)里,有時(shí)我們不希望我們的方法被重寫(xiě)或覆蓋,final關(guān)鍵字保證了這一點(diǎn)。
    final關(guān)鍵字是怎么影響性能的呢?
            當(dāng)我們的方法被聲明成static,final和private, 此方法將成為Inlining(內(nèi)聯(lián)函數(shù))的候選者。此類(lèi)方法可以在編譯期被靜態(tài)決議(staticallyresolved),而不需要?jiǎng)討B(tài)決議(dynamicResolution)。以方法本體(methodbody)替換方法調(diào)用(methodcall)會(huì)使代碼執(zhí)行速度更快。
            將方法聲明為static、final和private會(huì)帶來(lái)一些缺點(diǎn):這樣的方法無(wú)法通過(guò)Subclassing(子類(lèi)化)進(jìn)行擴(kuò)展。這就束縛了derived class通過(guò)class函數(shù)做事情的機(jī)會(huì)。inlined方法只有在被多次調(diào)用的情況下,才會(huì)獲得令人側(cè)目的性能提升。這是因?yàn)楫?dāng)一個(gè)方法被inline后,就不再需要負(fù)擔(dān)方法調(diào)用的額外開(kāi)銷(xiāo)。因此,方法被調(diào)用愈多次,節(jié)省就愈多。
            不過(guò)inlining也可能使你的代碼體積變大。如果這個(gè)方法有許多調(diào)用點(diǎn),.class文件的體積便會(huì)膨脹,這是因?yàn)樵局恍璐鎯?chǔ)一份的函數(shù)碼,由于inline而在所有調(diào)用點(diǎn)被復(fù)制了一份。

    posted @ 2012-10-15 22:23 王樹(shù)東 閱讀(265) | 評(píng)論 (0)編輯 收藏

    2012年9月26日

    Java NIO 簡(jiǎn)單經(jīng)典示例

    Java NIO 主要是Channel, SelectionKey, Selector 三個(gè)類(lèi)之間的關(guān)系,下面的例子就是演示如果使用NIO來(lái)處理請(qǐng)求的:/**
     * 
     */
    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 王樹(shù)東 閱讀(4370) | 評(píng)論 (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 王樹(shù)東 閱讀(218) | 評(píng)論 (0)編輯 收藏

    2012年1月30日

    (轉(zhuǎn))Windows Server 2003 中尋找端口與進(jìn)程的關(guān)聯(lián)

    @import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
    Q:Windows Server 2003 中尋找端口與進(jìn)程的關(guān)聯(lián)   A:如果發(fā)現(xiàn)一些從沒(méi)見(jiàn)過(guò)的端口號(hào),你怎么分辯出該端口是不是木馬開(kāi)放的端口?或者在進(jìn)程列表中發(fā)現(xiàn)陌生的進(jìn)程時(shí),是否想知道該進(jìn)程在你的系統(tǒng)中開(kāi)了什么 端口? 一,根據(jù)進(jìn)程查端口號(hào)首先在開(kāi)始菜單的“運(yùn)行”框中輸入“cmd.exe”進(jìn)入命令提示符窗口,先鍵入“tasklist”命令將列出系統(tǒng)正在運(yùn)行的進(jìn)程 列表,把你要查的進(jìn)程所對(duì)應(yīng)的“PID”號(hào)記下或復(fù)制。把進(jìn)程的PID好記下后,接下來(lái)就用這個(gè)PID號(hào)把該進(jìn)程所開(kāi)的端口顯示出來(lái)了。在當(dāng)前的命令符下 繼續(xù)鍵入“netstat -ano | find 1140”命令,其中“netstat -ano”參數(shù)表示以數(shù)字形式顯示所有活動(dòng)的TCP連接以及計(jì)算機(jī)正在偵聽(tīng)的TCP、UDP端口,并且顯示查找進(jìn)程ID(PID)號(hào);“|find 1140”表示查找進(jìn)程PID為“1140”的TCP連接以及TCP、UDP端口的偵聽(tīng)情況(在實(shí)際應(yīng)用中,需要把你剛才記下或復(fù)制的PID號(hào)替換掉這里 的1140)。按“回車(chē)”鍵后,就會(huì)顯示出該進(jìn)程所開(kāi)的端口號(hào)。 二,根據(jù)端口號(hào)查進(jìn)程   在命令提示符窗口中輸入“netstat -ano”命令,列出系統(tǒng)當(dāng)前的端口列表,該命令的作用已在上面提過(guò)了。-o參數(shù)的作用主要是顯示各端口對(duì)應(yīng)的進(jìn)程PID號(hào),現(xiàn)在把你要查的端口對(duì)應(yīng)的進(jìn) 程PID號(hào)記下或復(fù)制。然后在命令提示符下繼續(xù)輸入tasklist /fi“PID eq 788”(在實(shí)際應(yīng)用中,需要把你復(fù)制或記下的PID號(hào)替換掉這里的788),這行語(yǔ)句/fi參數(shù)表示在“tasklist”中篩選,而“ID eq 788”則是指定篩選的條件,按“回車(chē)”鍵后,就會(huì)顯示出端口對(duì)應(yīng)的進(jìn)程。 三,查出進(jìn)程對(duì)應(yīng)的程序   知道了端口和進(jìn)程的關(guān)聯(lián)后,如何再進(jìn)一步查出該進(jìn)程是那個(gè)軟件或程序的進(jìn)程呢?下面的操作就需要用到Windows2000(Server或 Professional版都可以)安裝光盤(pán)中的一個(gè)工具。首先在安裝光盤(pán)的“Support\Tools\”目錄下,用解壓軟件打開(kāi) “support.cab”壓縮包,找到“tlist.exe”文件,將此文件釋放到任一目錄,如“D:\Support”。然后在命令提示符窗口中切換 到此目錄,運(yùn)行“tlist.exe”命令,把要查的進(jìn)程對(duì)應(yīng)的PID號(hào)記下或復(fù)制(第一列就是進(jìn)程的PID號(hào)),然后繼續(xù)輸入“tlist.exe 2012”命令(你輸入的時(shí)候,需要將剛才記下的PID號(hào)替換掉這里的2012),“CmdLine:”后面顯示的就是該進(jìn)程對(duì)應(yīng)的軟件所在的目錄。除此 之外,返回信息中還列出了該進(jìn)程所調(diào)用的文件,得到了這些信息就可以很容易查出進(jìn)程對(duì)應(yīng)的程序了。假如想關(guān)閉某個(gè)進(jìn)程,可把該進(jìn)程的PID號(hào)記下,在命令 提示符下輸入“taskkill/pid 2400”(2400是PID號(hào))就可以將PID號(hào)為2400的進(jìn)程關(guān)閉,如果要強(qiáng)制關(guān)閉該進(jìn)程,只須在這條命令的后面加個(gè)“/f”參數(shù)即可。
    來(lái)源:http://www.cn6154.com/ask/question.php?id=2623

    posted @ 2012-01-30 09:31 王樹(shù)東 閱讀(444) | 評(píng)論 (0)編輯 收藏

    2011年12月14日

    Ubuntu 25個(gè)快捷鍵

    @import url(http://m.tkk7.com/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 – 移動(dòng)當(dāng)前窗口到其他桌面

    4. Alt + Shift+ Up Arrow – 以很酷的方式顯示當(dāng)前窗口

    5. Alt+F9/F10 – 最小化/最大化當(dāng)前窗口

    6. Alt+F5 -不最大化當(dāng)前窗口

    7. Alt+F7 – 激活當(dāng)前窗口的移動(dòng)選項(xiàng),你可以使用方向鍵移動(dòng)當(dāng)前窗口,甚至移動(dòng)到其他桌面。

    8. Alt+F8 – 用方向鍵調(diào)整當(dāng)前窗口大小


    9. Ctrl + Alt + D – 顯示桌面/恢復(fù)當(dāng)前窗口

    10. Alt+ Tab – 切換窗口

    Nautilus

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

    12. Alt + Enter – 查看選擇文件/文件夾的屬性,代替單擊右鍵選擇屬性

    13. Ctrl + 1/2 – 改變文件夾視圖查看方式,圖標(biāo)視圖/列表視圖

    14. Ctrl + W – 關(guān)閉當(dāng)前Nautilus窗口

    15. Ctrl + Shift + W – 關(guān)閉所有Nautilus窗口

    16. Ctrl+T – 在Nautilus中新建一個(gè)標(biāo)簽

    17. Alt + Up/Down Arrow – 移動(dòng)到父文件夾/選擇的文件夾

    18. Alt + Left/Right Arrow – 后退/前進(jìn)

    19. Alt + Home -直接移動(dòng)到主文件夾

    20. F9 – 開(kāi)關(guān)顯示Nautilus側(cè)邊欄

    21. Ctrl + H -開(kāi)關(guān)顯示隱藏文件夾

    22. Ctrl + Alt + L -鎖屏

    23. Alt + F1 – 打開(kāi)應(yīng)用程序菜單

    24. Alt + F2 – 打開(kāi)運(yùn)行應(yīng)用程序?qū)υ捒?/span>

    25. Win + 鼠標(biāo)滾輪 – 放大/縮小屏幕

    posted @ 2011-12-14 22:58 王樹(shù)東 閱讀(276) | 評(píng)論 (0)編輯 收藏

    僅列出標(biāo)題  下一頁(yè)
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    常用鏈接

    留言簿

    隨筆分類(lèi)(17)

    隨筆檔案(15)

    文章分類(lèi)(4)

    文章檔案(5)

    收藏夾(4)

    Algorithm

    Design

    Environment Setup

    Installer

    Maven

    MINA

    OS

    Skills for Java

    VIM

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 在线a免费观看最新网站| 国产精成人品日日拍夜夜免费| 亚洲w码欧洲s码免费 | 亚洲Av无码乱码在线播放| 无码天堂亚洲国产AV| 四虎影视永久免费观看地址| 久久久久亚洲AV无码去区首| 免费真实播放国产乱子伦| 欧洲精品码一区二区三区免费看| yy6080亚洲一级理论| 一级成人毛片免费观看| 亚洲日本乱码在线观看| 91香蕉在线观看免费高清| 亚洲美女激情视频| 成人黄动漫画免费网站视频| 亚洲精品乱码久久久久蜜桃| 国产一级一片免费播放i| 精品女同一区二区三区免费播放 | 日韩精品无码区免费专区| 中文有码亚洲制服av片| 全部免费毛片免费播放| 久久免费观看视频| 亚洲欧洲国产精品久久| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲欧洲自拍拍偷综合| 成人看的午夜免费毛片| jizz免费在线影视观看网站| 亚洲Av永久无码精品三区在线| 最近中文字幕mv免费高清视频8 | 嫖丰满老熟妇AAAA片免费看| 亚洲人成色777777精品| 精品国产香蕉伊思人在线在线亚洲一区二区| 国产特黄一级一片免费| 亚洲H在线播放在线观看H| 哒哒哒免费视频观看在线www | 中国黄色免费网站| 亚洲制服丝袜精品久久| 亚洲色欲久久久久综合网| 67194成手机免费观看| 国产精品观看在线亚洲人成网| 国产精品亚洲片在线观看不卡|