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

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

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

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

        有段時(shí)間沒(méi)更新blog了。主要是這段時(shí)間內(nèi)自己處于一個(gè)比較莫名的階段,靜不下心來(lái)做事讀書(shū),或者說(shuō)不知道自己應(yīng)該做什么。原因有工作上的調(diào)動(dòng)問(wèn)題,有生活中的一些壓力。最近了換了項(xiàng)目小組,與arbow一起去搞某個(gè)產(chǎn)品的分布方案。這個(gè)產(chǎn)品已經(jīng)比較穩(wěn)定,我過(guò)去沒(méi)有參與過(guò)它的開(kāi)發(fā)工作,沒(méi)有經(jīng)歷過(guò)這個(gè)開(kāi)始顯的有點(diǎn)復(fù)雜的項(xiàng)目從無(wú)到有的過(guò)程,因此對(duì)代碼、對(duì)業(yè)務(wù)、對(duì)組員都顯的比較陌生。
        過(guò)往的項(xiàng)目經(jīng)歷都是在別人給出明確目標(biāo)下的開(kāi)發(fā)工作,或者說(shuō)習(xí)慣于接受別人安排的任務(wù),有的放矢地去實(shí)現(xiàn)一些東西。而現(xiàn)在的處境是到一個(gè)不熟悉的項(xiàng)目,去實(shí)現(xiàn)一個(gè)不大明確的目標(biāo),因而我自己有點(diǎn)搞不清楚狀況,再加上生活中那么些壓力,心態(tài)也出了問(wèn)題,很被動(dòng)地去等待,而非積極地去探討和介入這些工作,簡(jiǎn)單點(diǎn)說(shuō),有點(diǎn)像局外人的感覺(jué)。
        今天跟經(jīng)理談了下,我覺(jué)的自己最近的效率和狀態(tài)很差,想請(qǐng)假休息。經(jīng)理跟我聊了些他的經(jīng)驗(yàn),我才明白自己的問(wèn)題所在。過(guò)于急躁和被動(dòng),這不是休息能解決,首要的還是要調(diào)整心態(tài),以踏實(shí)謙虛的心理去學(xué)習(xí)新東西,主動(dòng)去做些事情,這樣才能找回那份工作熱情。
        題外話,廣州真的好熱,我這個(gè)福建人都很不習(xí)慣。熱還罷了,最主要是比較潮濕和悶氣,這兩天終于下雨了,感覺(jué)清爽很多。

    posted @ 2008-08-06 23:02 dennis 閱讀(413) | 評(píng)論 (0)編輯 收藏

        Ruby也能寫(xiě)servlet?是的,沒(méi)開(kāi)玩笑,而且挺方便的,因?yàn)镽uby的標(biāo)準(zhǔn)庫(kù)就自帶了一個(gè)webrick,webrick本身又有一個(gè)serlvet容器,隨時(shí)隨地啟動(dòng)一個(gè)web server,實(shí)在是很方便。
        先看個(gè)最簡(jiǎn)單的例子,輸出hello到瀏覽器:
    require 'webrick'
    require 
    'net/http'
    include WEBrick

    class HelloServlet < HTTPServlet::AbstractServlet
      
    def hello(resp)
        resp[
    "Content-Type"]="text/html;charset=utf-8"
        resp.body
    ="hello,ruby servlet"
      end
      private :hello
      
    def do_GET(req,resp)
        hello(resp)
      end
      
    def do_POST(req,resp)
        hello(resp)
      end
    end
    if $0==__FILE__
      server
    =HTTPServer.new(:Port=>3000)
      server.mount(
    "/hello",HelloServlet)
      trap(
    "INT"){ server.shutdown }
      server.start
    end
        是不是跟java很像?所有的serlvet都要繼承自HTTPServlet::AbstractServlet,并實(shí)現(xiàn)do_GET或者do_POST方法。在這行代碼:
    server=HTTPServer.new(:Port=>3000)

        我們啟動(dòng)了一個(gè)HTTP Server,端口是3000,然后將HelloServlet掛載到/hello這個(gè)路徑上,因此,執(zhí)行這個(gè)腳本后,可以通過(guò)http://localhost:3000/hello調(diào)用HelloServlet,簡(jiǎn)單地只是顯示字符串"hello,ruby servlet"。
       
    這個(gè)簡(jiǎn)單的例子沒(méi)有任何交互,并且顯示的html也是寫(xiě)死在腳本中,顯然更好的方式應(yīng)該通過(guò)模板來(lái)提供,可以使用Ruby標(biāo)準(zhǔn)庫(kù)的erb模板。再給個(gè)有簡(jiǎn)單交互的例子,現(xiàn)在要求用戶輸入姓名,然后提交給HelloServlet,顯示"hello,某某某"。嗯,來(lái)個(gè)最簡(jiǎn)單的提交頁(yè)面:
    <html>
    <body>
    <center>
       
    <form action="http://localhost:3000/hello" method="post">
         
    <input type="text" name="name" size=10/><br/><br/>
         
    <input type="submit" name="submit" value="submit"/>
       
    </form>
       
    </center>
    </body>
    </html>

        注意到,我們采用POST方法提交。再看看erb模板:
    <html>
        
    <head></head>
        
    <body>
          hello,
    <%=name%>
        
    </body>
    </html>   
        其中的name是我們將要綁定的變量,根據(jù)用戶提交的參數(shù)。最后,修改下HelloServlet:
    require 'webrick'
    require 
    'net/http'
    include WEBrick

    class HelloServlet < HTTPServlet::AbstractServlet
      
    def do_GET(req,resp)
        do_POST(req,resp)
      end
      
    def do_POST(req,resp)
        name
    =req.query["name"]
        
    #讀取模板文件
        template=IO.read(File.dirname(__FILE__)+"/hello.html")
        message
    =ERB.new(template)
        resp[
    "Content-Type"]="text/html;charset=utf-8"
        resp.body
    =message.result(binding)
      end
    end
    if $0==__FILE__
      server
    =HTTPServer.new(:Port=>3000)
      server.mount(
    "/hello",HelloServlet)
      trap(
    "INT"){ server.shutdown }
      server.start
    end
        與前一個(gè)例子相比,不同點(diǎn)有二,一是通過(guò)req.query["name"]獲得用戶提交的參數(shù)name,二是resp的body是由模板產(chǎn)生,而不是寫(xiě)死在代碼中。在一些臨時(shí)報(bào)表、臨時(shí)數(shù)據(jù)的展示上,可以充分利用Ruby的這些標(biāo)準(zhǔn)庫(kù)來(lái)快速實(shí)現(xiàn)。
       

    posted @ 2008-07-23 12:02 dennis 閱讀(2883) | 評(píng)論 (0)編輯 收藏

    1、如果用java6的ScriptEngineManager來(lái)調(diào)用JRuby,并且腳本使用到了Ruby的標(biāo)準(zhǔn)庫(kù)(比如我用到了YAML庫(kù)),如果沒(méi)有正確設(shè)置,是會(huì)找不到標(biāo)準(zhǔn)庫(kù)的。通過(guò)打印$:變量可以看到文件的加載路徑,比如在某臺(tái)機(jī)器上的打印的結(jié)果:
       puts $:
       輸出:
    .
    /root/.jruby/lib/ruby/site_ruby/1.8
    /root/.jruby/lib/ruby/site_ruby
    /root/.jruby/lib/ruby/1.8
    /root/.jruby/lib/ruby/1.8/java
    lib/ruby/1.8
    ......略

    顯然,默認(rèn)會(huì)到當(dāng)前用戶的主目錄下尋找.jruby隱藏目錄,將此目錄作為Ruby的安裝目錄,因此,可以在~user/.jruby放置一個(gè)jruby實(shí)現(xiàn),一勞永逸地解決問(wèn)題,不然就要自己手工添加完整的路徑到$:變量中。

    2、nio的臨時(shí)selector的使用,了解grizzly的都知道,Grizzly框架有一個(gè)比較與眾不同的地方在于使用臨時(shí)selector注冊(cè)channel進(jìn)行讀或者寫(xiě)。這個(gè)帶來(lái)什么好處呢?一個(gè)是,通常我們可能將read派發(fā)到其他線程中去,如果一次沒(méi)有讀完,那么就得繼續(xù)注冊(cè)O(shè)P_READ到主selector上;注意,nio在一些平臺(tái)上有個(gè)問(wèn)題,就是SelectionKey.interestOps方法跟Selector.select方法會(huì)有并發(fā)沖突,產(chǎn)生奇怪的現(xiàn)象,因此,你會(huì)看到大多數(shù)的nio框架都會(huì)保證SelectionKey.interestOps跟Selector.select的調(diào)用在同一個(gè)線程;在沒(méi)有讀完繼續(xù)注冊(cè)這個(gè)場(chǎng)景下,免不了線程間的context switch,如果采用一個(gè)臨時(shí)selector注冊(cè)并讀取,就可以避免這個(gè)切換開(kāi)銷(xiāo)。另外,對(duì)于write調(diào)用,通常你可能這樣寫(xiě):
    while (byteBuffer.hasRemaining()) {
      
    int len = socketChannel.write(byteBuffer);
      
    if (len < 0){
       
    throw new EOFException(); 
      }
    }


       在負(fù)載比較高的時(shí)候,write返回0的次數(shù)會(huì)越來(lái)越多,while循環(huán)將空耗多次導(dǎo)致CPU占用偏高,這個(gè)問(wèn)題在win32上比較嚴(yán)重,同樣可以采用臨時(shí)selector的解決(Cindy2.x是留在隊(duì)列,等待下次寫(xiě))。下例是采用臨時(shí)Selector進(jìn)行讀的例子:

                    Selector readSelector = SelectorFactory.getSelector();
                    SelectionKey tmpKey 
    = sc.register(readSelector,
                            SelectionKey.OP_READ);
                    tmpKey.interestOps(tmpKey.interestOps() 
    | SelectionKey.OP_READ);
                    
    int code = readSelector.select(1000);
                    tmpKey.interestOps(tmpKey.interestOps()
                            
    & (~SelectionKey.OP_READ));
                    
    if (code > 0) {
                        
    do {
                            n 
    = sc.read(in);
                        } 
    while (n > 0 && in.hasRemaining());
                        in.flip();
                        decode();
                        in.compact();
                    }
                    SelectorFactory.returnSelector(readSelector);
        這樣的方式,某種意義上可以認(rèn)為是non-blocking模式下的阻塞讀,在網(wǎng)絡(luò)條件穩(wěn)定的情況下(比如內(nèi)網(wǎng)),能帶來(lái)比較高的效率。

    3、spymemcached,是另一個(gè)memcached的java client實(shí)現(xiàn),采用nio。最近遇到的問(wèn)題是它跟原來(lái)的MemcachedClient的兼容問(wèn)題,用它去操作MemcachedClient存儲(chǔ)的數(shù)據(jù)。spymemcached是通過(guò)Transcoder來(lái)實(shí)現(xiàn)序列化,Transcoder的WhalinTranscoder實(shí)現(xiàn)類兼容了Greg Whalin的MemcachedClient:
    private Transcoder whalinTranscoder = new WhalinTranscoder();


    Future
    <Object> f = memcachedClient.asyncGet(id, whalinTranscoder);

       各個(gè)方法都有重載的版本用以指定Transcoder。

    posted @ 2008-07-07 20:41 dennis 閱讀(1256) | 評(píng)論 (2)編輯 收藏

        http://wuhanpin.blogcn.com/index.shtml,來(lái)自一線記者關(guān)于XXXX事件的blog,謊話重復(fù)千遍也就成了真理,但是歷史終將還原真實(shí)。要看的趕緊看哦,過(guò)不了幾天恐怕要被河蟹了。

    posted @ 2008-07-03 09:16 dennis 閱讀(560) | 評(píng)論 (0)編輯 收藏

        沸沸揚(yáng)揚(yáng)的華南虎案(更想說(shuō)是鬧劇)終于告一段落,在廣大網(wǎng)民的火眼金睛下,假老虎終究沒(méi)有變成真老虎,沒(méi)有上演指“畫(huà)”為“虎”的現(xiàn)代成語(yǔ)故事。盡管處理結(jié)果有那么點(diǎn)抓小放大的意思,但還是值的紀(jì)念的一個(gè)日子。
    更正:我還是太樂(lè)觀了,貴州某地發(fā)生的事情,讓我無(wú)法平靜,我能做些什么?

    posted @ 2008-06-29 16:07 dennis 閱讀(467) | 評(píng)論 (0)編輯 收藏

        主動(dòng)關(guān)閉的Socket端會(huì)進(jìn)入TIME_WAIT狀態(tài),并且持續(xù)2MSL時(shí)間長(zhǎng)度,MSL就是maximum segment lifetime(最大分節(jié)生命期),這是一個(gè)IP數(shù)據(jù)包能在互聯(lián)網(wǎng)上生存的最長(zhǎng)時(shí)間,超過(guò)這個(gè)時(shí)間將在網(wǎng)絡(luò)中消失。MSL在RFC 1122上建議是2分鐘,而源自berkeley的TCP實(shí)現(xiàn)傳統(tǒng)上使用30秒,因而,TIME_WAIT狀態(tài)一般維持在1-4分鐘。
        TIME_WAIT狀態(tài)存在的理由:
    1)可靠地實(shí)現(xiàn)TCP全雙工連接的終止
        在進(jìn)行關(guān)閉連接四路握手協(xié)議時(shí),最后的ACK是由主動(dòng)關(guān)閉端發(fā)出的,如果這個(gè)最終的ACK丟失,服務(wù)器將重發(fā)最終的FIN,因此客戶端必須維護(hù)狀態(tài)信息允許它重發(fā)最終的ACK。如果不維持這個(gè)狀態(tài)信息,那么客戶端將響應(yīng)RST分節(jié),服務(wù)器將此分節(jié)解釋成一個(gè)錯(cuò)誤(在java中會(huì)拋出connection reset的SocketException)。因而,要實(shí)現(xiàn)TCP全雙工連接的正常終止,必須處理終止序列四個(gè)分節(jié)中任何一個(gè)分節(jié)的丟失情況,主動(dòng)關(guān)閉的客戶端必須維持狀態(tài)信息進(jìn)入TIME_WAIT狀態(tài)。

    2)允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝 
        TCP分節(jié)可能由于路由器異常而“迷途”,在迷途期間,TCP發(fā)送端可能因確認(rèn)超時(shí)而重發(fā)這個(gè)分節(jié),迷途的分節(jié)在路由器修復(fù)后也會(huì)被送到最終目的地,這個(gè)原來(lái)的迷途分節(jié)就稱為lost duplicate。在關(guān)閉一個(gè)TCP連接后,馬上又重新建立起一個(gè)相同的IP地址和端口之間的TCP連接,后一個(gè)連接被稱為前一個(gè)連接的化身(incarnation),那么有可能出現(xiàn)這種情況,前一個(gè)連接的迷途重復(fù)分組在前一個(gè)連接終止后出現(xiàn),從而被誤解成從屬于新的化身。為了避免這個(gè)情況,TCP不允許處于TIME_WAIT狀態(tài)的連接啟動(dòng)一個(gè)新的化身,因?yàn)門(mén)IME_WAIT狀態(tài)持續(xù)2MSL,就可以保證當(dāng)成功建立一個(gè)TCP連接的時(shí)候,來(lái)自連接先前化身的重復(fù)分組已經(jīng)在網(wǎng)絡(luò)中消逝。

    新的SCTP協(xié)議通過(guò)在消息頭部添加驗(yàn)證標(biāo)志避免了TIME_WAIT狀態(tài)。

    posted @ 2008-06-23 01:25 dennis 閱讀(17840) | 評(píng)論 (3)編輯 收藏

        歐洲杯開(kāi)賽至今,由于要上班,擔(dān)心起不了床,完整的比賽沒(méi)看過(guò)幾場(chǎng),錯(cuò)過(guò)好多場(chǎng)精彩對(duì)決了,今天晚上熬夜看俄羅斯VS.荷蘭,真值了,阿爾沙文成了俺的新偶像,過(guò)人如草芥,太牛X了。這廝在FM2008里就很猛了,我的樸茨茅斯檔第一個(gè)買(mǎi)的就是他,第一年就排上了聯(lián)賽第三,讓他打前腰,助攻第一,進(jìn)球全隊(duì)第三,性價(jià)比超值。


    posted @ 2008-06-22 05:43 dennis 閱讀(513) | 評(píng)論 (0)編輯 收藏

        加班在國(guó)內(nèi)的公司好像是司空見(jiàn)慣的事情,更司空見(jiàn)慣的是加班不給加班費(fèi)。從業(yè)三年,加班次數(shù)也不少,不過(guò)最長(zhǎng)的一次是連續(xù)加了一個(gè)月的班,天天10點(diǎn)多才回家,比起某些同學(xué)深更半夜還在加班的差了些。在目前的公司,除了剛開(kāi)始偶爾加班外,現(xiàn)在我基本就是下班就走人了,還沒(méi)有因?yàn)槲邑?fù)責(zé)的模塊延期導(dǎo)致的項(xiàng)目的延期,相反,自信工作的效率還是比較高的,自然上班時(shí)間能搞定的事情,何必拖到下班后?
        不排除有些人喜歡安靜的環(huán)境,下班后,人少了,一個(gè)人敲代碼感覺(jué)更好,效率更高。這其實(shí)顛倒了問(wèn)題的本質(zhì),本質(zhì)是公司沒(méi)有為員工創(chuàng)造一個(gè)舒適的工作環(huán)境,“家具警察”們是絕不樂(lè)意給你安排一個(gè)私人小空間的。問(wèn)題是,代碼不是生活的全部,如果天天這樣晚上在公司加班,可以想見(jiàn)這人的生活該如何枯燥,而生活枯燥的人很容易失去想象力和直覺(jué),并且心理上難免會(huì)有點(diǎn)毛病。公司不應(yīng)該鼓勵(lì)加班,公司應(yīng)該鼓勵(lì)的是大家在上班期間高效地完成工作,然后盡快回家去“生活”。其實(shí)吧,如果我們上班少看點(diǎn)新聞,少開(kāi)點(diǎn)小差,這個(gè)效率絕對(duì)是不低的。
        聽(tīng)聞?dòng)蓄I(lǐng)導(dǎo)對(duì)我們部門(mén)不滿,說(shuō)我們部門(mén)總是下班后人都走光了:)這樣的觀點(diǎn)真是奇怪,難道加班就能顯示這個(gè)部門(mén)很努力、很負(fù)責(zé)?況且,我看到很多加班的同學(xué)更多是在玩游戲或者干自己的事情,公司領(lǐng)導(dǎo)們難道看不到這一點(diǎn)?或者他們只要看見(jiàn)有人在那,心里就比較舒服點(diǎn)。這其實(shí)很奇怪的,我認(rèn)為經(jīng)常加班的部門(mén)絕對(duì)是有問(wèn)題的,而且很大程度上是項(xiàng)目管理不當(dāng)引起的。

    posted @ 2008-06-21 12:32 dennis 閱讀(1139) | 評(píng)論 (11)編輯 收藏

        SocketChannel和ServerSocketChannel,兩者的父類是SelectableChannel,它在jdk中的文檔有這么段話:

        Once registered with a selector, a channel remains registered until it is deregistered.This involves deallocating whatever resources were allocated to the channel by the selector.
        A channel cannot be deregistered directly; instead, the key representing its registration must be cancelled. Cancelling a key requests that the channel be deregistered during the selector's next selection operation.

        也就是說(shuō)關(guān)閉一個(gè)已經(jīng)注冊(cè)的SelectableChannel需要兩個(gè)步驟:

    1)取消注冊(cè)的key,這個(gè)可以通過(guò)SelectionKey.cancel方法,也可以通過(guò)SelectableChannel.close方法,或者中斷阻塞在該channel上的IO操作的線程來(lái)做到。

    2)后續(xù)的Selector.selectXXX方法的調(diào)用才真正地關(guān)閉本地Socket。

        因而,如果,如果在取消SelectionKey后沒(méi)有調(diào)用到selector的select方法(因?yàn)镃lient一般在取消key后, 我們都會(huì)終止調(diào)用select的循環(huán),當(dāng)然,server關(guān)閉一個(gè)注冊(cè)的channel我們是不會(huì)終止select循環(huán)的),那么本地socket將進(jìn)入CLOSE-WAIT狀態(tài)(等待本地Socket關(guān)閉)。簡(jiǎn)單的解決辦法是在 SelectableChannel.close方法之后調(diào)用Selector.selectNow方法,類似:

       Selector sel;
       SocketChannel sch;
       // …
       sch.close();
       sel.selectNow();


        Nio編程有很多這樣細(xì)節(jié)性的東西需要注意,通常情況下還是利用成熟的框架為妙。

    posted @ 2008-06-18 01:50 dennis 閱讀(2455) | 評(píng)論 (2)編輯 收藏

      JavaOne2008上有個(gè)session《Upcoming Java Programming Language Features》,講了即將到來(lái)的jdk7可能引入的新的語(yǔ)言特性,比較開(kāi)眼界的是jsr308對(duì)Annotation的擴(kuò)展使用,更多地作為斷言或者說(shuō)checker使用以便減少bug。在ppt前面,我覺(jué)的更有意思的是對(duì)java語(yǔ)言演化的講述,做個(gè)筆記。

    1、應(yīng)用VS.語(yǔ)言

    應(yīng)用是特性越多越好,應(yīng)用是rich的;而語(yǔ)言是pure的,更少的、普通的特性更好。

    2、添加一個(gè)java語(yǔ)言特性的三個(gè)前提:尊重過(guò)去、著眼未來(lái)以及顧及模型。

    無(wú)論是增加、減少或者改變一個(gè)feature都可能broken已經(jīng)存在的代碼,一個(gè)新增加的feature必須兼容已經(jīng)存在的代碼,兼容是個(gè)沉重的包袱,就java語(yǔ)言而言,我相當(dāng)認(rèn)同尊重過(guò)去這一點(diǎn),哪怕加入閉包這樣的特性也不應(yīng)當(dāng)以損壞兼容性為代價(jià),更好的選擇是將這些特性讓jvm上的新語(yǔ)言去實(shí)現(xiàn)(比如JRuby、Scala),java語(yǔ)言作為成熟的工業(yè)語(yǔ)言本身不應(yīng)當(dāng)做太大的改變。而著眼未來(lái),也就是說(shuō)新的語(yǔ)言特性應(yīng)該為未來(lái)的語(yǔ)法擴(kuò)展留有空間,它的語(yǔ)法/語(yǔ)義不應(yīng)當(dāng)跟現(xiàn)存的或者潛在的特性相沖突,以便可以持續(xù)地演化。再談?lì)櫦爱?dāng)前的模型,一門(mén)語(yǔ)言代表著一種計(jì)算模型,比如simulaOO模型(classes)Erlang就是inter-process communication的模型(actor)。Java語(yǔ)言也有一個(gè)簡(jiǎn)單的模型:首先它是“高層”語(yǔ)言,是一門(mén)通用、并發(fā)、基于類的OO語(yǔ)言,其次,它跟APIJVM有良好的結(jié)合。Java語(yǔ)言模型有四個(gè)原則:

    a)鼓勵(lì)high-level實(shí)踐,通過(guò)抽象來(lái)隱藏偶然復(fù)雜度。簡(jiǎn)而言之:do the right thing

    b)追求清晰,程序被讀的時(shí)候遠(yuǎn)遠(yuǎn)多于寫(xiě)。簡(jiǎn)而言之:do the thing right.

    c)青睞靜態(tài)類型,靜態(tài)類型能增進(jìn)對(duì)代碼的信心,靜態(tài)類型能證明bug在編譯時(shí)的不存在,而測(cè)試和動(dòng)態(tài)類型能證明bug的存在。我的觀點(diǎn)是,大多數(shù)難以尋找和解決的bug都是runtime的,靜態(tài)類型在此方面能給出的幫助有限,充分并且適宜的測(cè)試更加能增強(qiáng)你對(duì)應(yīng)用的信心。

    d)語(yǔ)言比之API的更廣泛。one language,many apiAPI來(lái)去匆匆,而語(yǔ)言卻是forever,因而將語(yǔ)言和API分離是明智的,一些特性可以做為庫(kù)來(lái)實(shí)現(xiàn),jdk5并發(fā)庫(kù)的引入就很好,jdk7在并發(fā)方面同樣將引入fork/join模型。

    java語(yǔ)言的演化也當(dāng)遵循這四個(gè)原則。再看看傳說(shuō)中的閉包語(yǔ)言,當(dāng)它跟泛型結(jié)合的時(shí)候?qū)懗鰜?lái)的東西還談得上清晰嗎?閉包的實(shí)現(xiàn)能否解決兼容性問(wèn)題也是個(gè)疑問(wèn)。就四個(gè)提案,C3S需要引入method關(guān)鍵字(類似lambda),F(xiàn)CM的#號(hào)看起來(lái)比較怪異,在我看來(lái),CICE和BGGA更符合胃口,CICE對(duì)java語(yǔ)言的變動(dòng)應(yīng)該最小,學(xué)習(xí)曲線也比較平緩,BGGA的=>符號(hào)更有函數(shù)式語(yǔ)言的味道。閉包的引入,某種程度上能減少敲擊鍵盤(pán)的次數(shù)并實(shí)現(xiàn)一些高階功能,特別是在聚合操作(如filter、map等)和單抽象方法類(如Runnable,Callable)的使用上,但是在現(xiàn)代IDE的自動(dòng)化幫助下,這個(gè)帶來(lái)的價(jià)值是值的懷疑的。




    posted @ 2008-06-18 00:20 dennis 閱讀(2060) | 評(píng)論 (0)編輯 收藏

    僅列出標(biāo)題
    共56頁(yè): First 上一頁(yè) 24 25 26 27 28 29 30 31 32 下一頁(yè) Last 
    主站蜘蛛池模板: 亚洲精品国产成人| 波多野结衣中文一区二区免费| 日韩电影免费在线观看| 免费无码又爽又刺激网站| jyzzjyzz国产免费观看| 一区二区在线免费视频| 又长又大又粗又硬3p免费视频 | 日日操夜夜操免费视频| 在线免费视频一区二区| 国产成人高清精品免费鸭子 | 色猫咪免费人成网站在线观看| 日韩在线永久免费播放| 免费A级毛片无码A∨免费| 免费能直接在线观看黄的视频 | 日本亚洲欧洲免费天堂午夜看片女人员| 99久久婷婷免费国产综合精品| 最新亚洲成av人免费看| 色猫咪免费人成网站在线观看 | 一级特级女人18毛片免费视频| 免费无码午夜福利片 | 国产午夜亚洲精品国产| 欧美色欧美亚洲另类二区| 美女裸免费观看网站| 天黑黑影院在线观看视频高清免费| a级毛片免费播放| 蜜桃AV无码免费看永久| 欧美最猛性xxxxx免费| 国产jizzjizz免费看jizz| 亚洲一区无码精品色| 亚洲av无码无在线观看红杏| 亚洲图片中文字幕| 久久精品国产亚洲AV天海翼| eeuss影院免费92242部| 精品熟女少妇av免费久久| 妞干网免费视频观看| jlzzjlzz亚洲乱熟在线播放| 亚洲AV本道一区二区三区四区| 国产亚洲玖玖玖在线观看| 一本一道dvd在线观看免费视频| 无码A级毛片免费视频内谢| 毛片a级毛片免费观看免下载|