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

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

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

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理


    來源:http://moonbase.rydia.net/mental/blog/programming/the-biggest-mistake-everyone-makes-with-closures.html

    看下面的Ruby代碼
    = []
    for x in 1..3
      k.push(
    lambda { x })
    end

    執(zhí)行
    k[0].call

    你可能預(yù)期返回1,實際的結(jié)果卻是3。這是為何?這是因為在迭代過程中共用了同一個context,導(dǎo)致k中的三個閉包都引用了同一個變量x。不僅僅Ruby有這個問題,python也一樣
    = [lambda: x for x in xrange(14)]
    k[0]()

    Javascript同樣如此

    var k = [];
    for (var x = 1; x < 4; x++) {
      k.push(function () { 
    return x; });
    }
    alert(k[0]())


    解決這個問題很簡單,就是將閉包包裝到一個函數(shù)里,建立新的context,那么迭代過程中生成的閉包所處的context不同:
    def make_value_func(value)
      
    lambda { value }
    end
    = (1..3).map { |x| make_value_func(x) }

    這個時候,k[0].call正確地返回1。

    這個問題并非在所有支持閉包的語言里都存在,例如scheme中就沒有問題

    (define k '())
    (do ((x 1 (+ x 1)))
        ((
    = x 4'())
      (set! k (cons (lambda () x) k)))
    (set! k (reverse k))

    ((car k)) 
    =>1


    Erlang也沒有問題
    K=[ fun()->X end || X <- [1,2,3]].

    lists:map(fun(F)
    -> F() end,K).

    再試試Clojure:
    (def k (for [i (range 1 4)] (fn [] i)))
    (map #(
    %) k)

    同樣沒有問題。這里Erlang和Clojure都采用列表推斷。




    posted @ 2010-07-09 23:52 dennis 閱讀(1730) | 評論 (4)編輯 收藏

        一些常見的關(guān)于xmemcached的問題,收集整理,集中解答在此。事實上這里的大部分問題都可以在用戶指南里找到。

    一、XMemcached是什么?
    經(jīng)常碰到的一個問題是很多朋友對memcached不了解,誤以為xmemcached本身是一個緩存系統(tǒng)。Memcached是一個開源的,C寫的分布式key-value緩存,XMemcached只是它的一個訪問客戶端。Memcached通過網(wǎng)絡(luò)協(xié)議跟客戶端交互,通過客戶端你才可以去使用memcached,xmemcached是它的java客戶端之一。

    二、為什么要選擇xmemcached?

    memcached的java客戶端有多個選擇,為什么要選擇xmemcached?理由如下:

    1、支持所有的文本協(xié)議和二進制協(xié)議,支持連接KestrelTokyoTyrant等memcached協(xié)議兼容的系統(tǒng)并作特殊處理。
    2、支持動態(tài)添加和刪除memcached節(jié)點。
    3、支持客戶端統(tǒng)計
    4、支持JMX監(jiān)控和統(tǒng)計,可以通過JMX增刪節(jié)點。
    5、高性能
    6、支持節(jié)點的權(quán)重設(shè)置
    7、支持nio的連接池,在高負載環(huán)境下提高吞吐量。

    三、對jdk版本有什么要求?

    Xmemcached僅支持jdk1.5及以上版本。

    四、使用的時候需要創(chuàng)建多個MemcachedClient對象嗎?MemcachedClient是不是線程安全?

    MemcachedClient是線程安全的,由于xmemcached的網(wǎng)絡(luò)層實現(xiàn)是基于nio長連接的,因此你并不需要重復(fù)創(chuàng)建多個MemcachedClient對象,通常來說將MemcachedClient設(shè)置為全局的唯一單例的服務(wù)使用,如果是使用spring配置,那更是簡單,在spring配置文件里配置一個MemcachedClient,其他對象引用即可使用。

    五、為什么會拋出java.util.TimeoutException?

    這是由于xmemcached的通訊層是基于非阻塞IO的,那么在請求發(fā)送給memcached之后,需要等待應(yīng)答的到來,這個等待時間默認(rèn)是1秒,如果超過1秒就拋出java.util.TimeoutExpcetion給用戶。如果你頻繁拋出此異常,可以嘗試將全局的等待時間設(shè)置長一些,如我在壓測中設(shè)置為5秒:
    MemcachedClient  memcachedClient=……
    memcachedClient.setOpTimeout(
    5000L);

    請注意,setOpTimeout設(shè)置的是全局的等待時間,如果你僅僅是希望將get或者set等操作的超時延長一點,那么可以通過這些方法的重載方法來使用:
    <T> T get(java.lang.String key,long timeout)

    boolean set(java.lang.String key, int exp,java.lang.Object value,
                
    long timeout)

    ……


    六、Kestrel和TokyoTyrant不支持flag字段,xmemcached是怎么解決的?

    Xmemcached在存儲的value前面自動加上和去除4個字節(jié)的flag,這一切對應(yīng)用來說是透明的。具體請看用戶指南。


    七、連接memcacheq,取出來的消息比放進去的多?


    這是由于memcacheq和kestrel一樣,不支持multi get協(xié)議,因此只要關(guān)閉xmemcached的multi get優(yōu)化就可以了。

    memcachedClient.setOptimizeGet(false);

    所謂multi get優(yōu)化是指xmemcached會將連續(xù)的單個get請求合并成一個multi get請求作批量獲取,提高效率。

    八、連接kestrel,為什么過一段時間會自動斷開并重連?

    你可能使用的是kestrel 1.2以下版本,kestrel 1.2才支持version協(xié)議,xmemcached是基于version協(xié)議做心跳檢測,因此當(dāng)使用kestrel 1.2以下版本的時候會發(fā)生心跳檢測失敗并斷開連接重連的情況,你可以升級kestrel,也可以關(guān)閉心跳檢測:

    memcachedClient.setEnableHeartBeat(false);

    九、我使用maven,怎么引用xmemcached?

    xmemcached 1.2.5已經(jīng)加入了maven的中心倉庫,因此你可以直接引用
      <dependency>
          
    <groupId>com.googlecode.xmemcached</groupId>
          
    <artifactId>xmemcached</artifactId>
          
    <version>1.2.5</version>
     
    </dependency>

    如果是之前版本,我推薦你升級,或者自己手工加入私人的maven倉庫。

    十、連接池是怎么回事?設(shè)置多大為好?

    在高負載環(huán)境下,nio的單連接也會遇到瓶頸,此時你可以通過設(shè)置連接池來讓更多的連接分擔(dān)memcached的請求負載,從而提高系統(tǒng)的吞吐量。設(shè)置連接池通過
    MemcachedClientBuilder builder = new    XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:12000"));

    builder.setConnectionPoolSize(
    5);
    MemcachedClient client
    =builder.build();

    或者通過spring配置也可以。

    連接池通常不建議設(shè)置太大,我推薦在0-30之間為好,太大則浪費系統(tǒng)資源,太小無法達到分擔(dān)負載的目的。

    十一、性能建議及優(yōu)化手段

        性能的調(diào)整只能給出一般性的原則,實際情況千差萬別,每次調(diào)整都需要做實際的測量才能確定是否帶來期望的效果。

    1、如果你的數(shù)據(jù)較小,如在1K以下,默認(rèn)的配置選項已經(jīng)足夠。如果你的數(shù)據(jù)較大,我會推薦你調(diào)整網(wǎng)絡(luò)層的TCP選項,如設(shè)置socket的接收和發(fā)送緩沖區(qū)更大,啟用Nagle算法等等:   
                MemcachedClientBuilder builder = new XMemcachedClientBuilder(
                        AddrUtil.getAddresses(servers));
                builder.setSocketOption(StandardSocketOption.SO_RCVBUF, 
    32 * 1024); // 設(shè)置接收緩存區(qū)為32K,默認(rèn)16K
                builder.setSocketOption(StandardSocketOption.SO_SNDBUF, 16 * 1024); // 設(shè)置發(fā)送緩沖區(qū)為16K,默認(rèn)為8K
                builder.setSocketOption(StandardSocketOption.TCP_NODELAY, false); // 啟用nagle算法,提高吞吐量,默認(rèn)關(guān)閉

    默認(rèn)如果連接超過5秒沒有任何IO操作發(fā)生即認(rèn)為空閑并發(fā)起心跳檢測,你可以調(diào)長這個時間: 
      builder.getConfiguration().setSessionIdleTimeout(10000);  // 設(shè)置為10秒;

    更多網(wǎng)絡(luò)層配置選項請參見Configuration類。

    2、Xmemcached默認(rèn)會做兩個優(yōu)化:將連續(xù)的單個get合并成一個multi get批量操作獲取,將連續(xù)的請求合并成socket發(fā)送緩沖區(qū)大小的buffer發(fā)送。
    如果你對響應(yīng)時間比較在意,那么可以將合并的因子減小,或者關(guān)閉合并buffer的優(yōu)化:
        memcachedClient.setMergeFactor(50);   //默認(rèn)是150,縮小到50
        memcachedClient.setOptimizeMergeBuffer(false);  //關(guān)閉合并buffer的優(yōu)化

    如果你對吞吐量更在意,那么也可將合并因子調(diào)大,默認(rèn)是150。但是也不可太大,太大可能導(dǎo)致平均響應(yīng)時間延長。

    3、如果你對心跳檢測不在意,也可以關(guān)閉心跳檢測,減小系統(tǒng)開銷
    memcachedClient.setEnableHeartBeat(false);
    這個關(guān)閉,僅僅是關(guān)閉了心跳的功能,客戶端仍然會去統(tǒng)計連接是否空閑,禁止統(tǒng)計可以通過:
    builder.getConfiguration().setStatisticsServer(false);





    posted @ 2010-07-08 18:37 dennis 閱讀(20462) | 評論 (35)編輯 收藏

       讓你不帶薩隊,讓你不帶坎比亞所,我太他媽高興了。
       布爾迪索、德米凱利斯這樣的著名漏勺,還有古鐵雷斯這樣的牛B后衛(wèi),想進決賽完全在做夢。
       什么藝術(shù)足球,什么功利足球,看看德國隊的配合,臉紅不?
       只會在弱隊身上刷數(shù)據(jù)到伊瓜因,給米利托擦鞋都不配。
       梅球王被吹捧得太多了,相對于真小人的C羅,小動作、下陰招的梅球王終于帶著0進球到記錄回家了。88,阿根廷,世界清凈了。當(dāng)然,馬上有一幫惡心阿迷矯情地唱著“阿根廷別為我哭泣”為他們的“潘帕斯雄鷹”招魂呢。


      

    posted @ 2010-07-04 00:08 dennis 閱讀(793) | 評論 (0)編輯 收藏

         摘要:     《飛行大亨》是我很喜歡的一部電影,不過這里我想介紹的是一個叫Aviator的開源的Java表達式求值器。 一、輪子的必要性     表達式的求值上,java的選擇非常多,強大的如Groovy、JRuby,N年沒維護的beanshell,包括javaeye上朋友的IKExpression。為什么還需要Aviator?或者說Avi...  閱讀全文

    posted @ 2010-06-29 11:44 dennis 閱讀(22087) | 評論 (15)編輯 收藏

    Java memcached客戶端——XMemcached發(fā)布1.2.5版本,這是1.2的最后一個小版本,主要的改進如下:

    1、合并yanf4j到xmemcached,目前只是簡單的源碼合并,以及去除了不需要的udp支持。因此從1.2.5開始,xmemcached不再依賴yanf4j,僅依賴slf4j

    2、支持SASL驗證。memcached 1.4.3新增了SASL授權(quán)特性,啟用了SASL的memcached會要求客戶端進行授權(quán)驗證,否則將拒絕請求,對于需要驗證的用戶來說是個可選的特性,關(guān)于memcached的SASL支持更多請看這里Xmemcached 1.2.5開始支持客戶端的SASL驗證,一個典型的使用例子如下:

            MemcachedClientBuilder builder = new XMemcachedClientBuilder(
                                            AddrUtil.getAddresses(
    "localhost:11211"));
            builder.addAuthInfo(AddrUtil.getOneAddress(
    "localhost:11211"), AuthInfo
                                            .typical(
    "cacheuser""123456"));
            
    // Must use binary protocol
            builder.setCommandFactory(new BinaryCommandFactory());
            MemcachedClient client
    =builder.build();

     

    3、加快MemcachedClient.shutdown()方法的速度,應(yīng)用可以更快地關(guān)閉xmemcached。

    4、完善中文用戶指南,添加客戶端分布和SASL驗證兩節(jié)。

       如果你使用maven,1.2.5已經(jīng)放入maven的中心倉庫,因此添加依賴即可使用:

     <dependency>
           
    <groupId>com.googlecode.xmemcached</groupId>
           
    <artifactId>xmemcached</artifactId>
           
    <version>1.2.5</version>
      
    </dependency>


    更多信息請參見wiki和changelog

    XMemcached是一個基于java nio的memcached客戶端

    項目主頁:  http://code.google.com/p/xmemcached/

    下載地址: http://code.google.com/p/xmemcached/downloads/list

    wiki地址:http://code.google.com/p/xmemcached/w/list

    posted @ 2010-06-22 18:17 dennis 閱讀(3511) | 評論 (2)編輯 收藏



    一、傳統(tǒng)并發(fā)模型的缺點


    基于線程的并發(fā)


    特點:
    每任務(wù)一線程
    直線式的編程
    使用資源昂高,
    context切換代價高,競爭鎖昂貴
    太多線程可能導(dǎo)致吞吐量下降,響應(yīng)時間暴漲。

    基于事件的并發(fā)模型



    特點:
    單線程處理事件
    每個并發(fā)流實現(xiàn)為一個有限狀態(tài)機
    應(yīng)用直接控制并發(fā)
    負載增加的時候,吞吐量飽和
    響應(yīng)時間線性增長


    二、SEDA架構(gòu)




    特點:
    (1)服務(wù)通過queue分解成stage:
       每個stage代表FSM的一個狀態(tài)集合
       Queue引入了控制邊界
    (2)使用線程池驅(qū)動stage的運行:
       將事件處理同線程的創(chuàng)建和調(diào)度分離
       Stage可以順序或者并行執(zhí)行
       Stage可能在內(nèi)部阻塞,給阻塞的stage分配較少的線程

    1、Stage-可靠構(gòu)建的基礎(chǔ)



    (1)應(yīng)用邏輯封裝到Event Handler
       接收到許多事件,處理這些事件,然后派發(fā)事件加入其他Stage的queue
       對queue和threads沒有直接控制
       Event queue吸納過量的負載,有限的線程池維持并發(fā)
    (2)Stage控制器
      負責(zé)資源的分配和調(diào)度
      控制派發(fā)給Event Handler的事件的數(shù)量和順序
      Event Handler可能在內(nèi)部丟棄、過濾、重排序事件。

    2、應(yīng)用=Stage網(wǎng)絡(luò)

       (1)有限隊列
            入隊可能失敗,如果隊列拒絕新項的話
            阻塞在滿溢的隊列上來實現(xiàn)吸納壓力
            通過丟棄事件來降低負載
       (2) 隊列將Stage的執(zhí)行分解
            引入了顯式的控制邊界
            提供了隔離、模塊化、獨立的負載管理
       (3)方便調(diào)試和profile
            事件的投遞可顯
            時間流可跟蹤
            通過監(jiān)測queue的長度發(fā)現(xiàn)系統(tǒng)瓶頸

    3、動態(tài)資源控制器

    (1)、線程池管理器

    目標(biāo): 決定Stage合理的并發(fā)程度
    操作:
    觀察queue長度,如果超過閥值就添加線程
    移除空閑線程



    (2)、批量管理器
    目的:低響應(yīng)時間和高吞吐量的調(diào)度
    操作:
    Batching因子:Stage一次處理的消息數(shù)量
    小的batching因子:低響應(yīng)時間
    大的batching因子:高吞吐量

    嘗試找到具有穩(wěn)定吞吐量的最小的batching因子
    觀察stage的事件流出率
    當(dāng)吞吐量高的時候降低batching因子,低的時候增加


    三、小結(jié)
       SEDA主要還是為了解決傳統(tǒng)并發(fā)模型的缺點,通過將服務(wù)器的處理劃分各個Stage,利用queue連接起來形成一個pipeline的處理鏈,并且在Stage中利用控制器進行資源的調(diào)控。資源的調(diào)度依據(jù)運行時的狀態(tài)監(jiān)視的數(shù)據(jù)來進行,從而形成一種反應(yīng)控制的機制,而stage的劃分也簡化了編程,并且通過queue和每個stage的線程池來分擔(dān)高并發(fā)請求并保持吞吐量和響應(yīng)時間的平衡。簡單來說,我看中的是服務(wù)器模型的清晰劃分以及反應(yīng)控制。



      

    posted @ 2010-06-20 23:53 dennis 閱讀(7281) | 評論 (6)編輯 收藏

        Java的垃圾收集算法是分代的,因為根據(jù)2/8原則,80%的Java對象都是速生速滅的,因此將Java Heap劃分為new和old,對兩個區(qū)域采用不同的垃圾回收算法,在new代存活下來的對象轉(zhuǎn)移到old區(qū),這樣一來大大提高了Java GC的效率。
        類似分代的思想在很多地方可以用到,分代的本質(zhì)是根據(jù)對象生命周期的不同做區(qū)別處理,而不是采取一刀切的方式來提高系統(tǒng)的處理效率。推而廣之,比如緩存的使用,現(xiàn)在很多web應(yīng)用都采用了類似memcached這樣的緩存擋在數(shù)據(jù)庫前面分擔(dān)負載,那么你可以將memcached理解成new代,而數(shù)據(jù)庫是old代。memcached中存儲的是查詢的熱點數(shù)據(jù),新鮮火熱,但是易失,并且在數(shù)據(jù)更新的時候被移除;而數(shù)據(jù)庫保存了所有的數(shù)據(jù),當(dāng)緩存沒有命中的時候才去查詢數(shù)據(jù)庫并存儲到緩存。new和old這只是簡單的二代劃分,事實上現(xiàn)在越來越多的系統(tǒng)是多級緩存,頁面緩存、memcached緩存、JVM內(nèi)部緩存、查詢緩存等等直到數(shù)據(jù)庫,從web頁面到后端是一個越來越old的過程,緩存對象持續(xù)的生命周期逐漸增長直到persist狀態(tài)。
        具體到JVM內(nèi)部緩存,我們通常使用LRU算法來實現(xiàn)一個安全有限的緩存,如直接繼承LinkedHashMap將可以實現(xiàn)一個簡單的LRUMap。基于內(nèi)存使用上的考慮,我們會給LRUMap設(shè)定一個最大的capacity,當(dāng)數(shù)據(jù)量超過這個capacity的時候?qū)⒆罱钌僭L問的元素移除來容納新的元素。這樣處理產(chǎn)生的問題是這個capactity不能設(shè)置得太大,因為怕內(nèi)存不夠用,但是不夠大的結(jié)果可能是命中率沒有那么高(跟你的場景相關(guān)),那么如何在保存內(nèi)存安全的前提下更進一步緩存更多的對象呢?答案也是分代。LRUMap默認(rèn)存儲的都是對象的強引用,我們知道Java還有其他3種引用類:soft,weak和phantom。其中Soft引用是在jvm內(nèi)存不夠的時候進行回收,weak引用是在垃圾回收碰到的時候會被回收,顯然weak->soft->strong三類引用的生命周期可以劃分為3個代,我們將可以實現(xiàn)一個可以容納更多對象的LRUMap:LRUMap設(shè)置兩個閥值,一個是強引用的最大閥值,這個不能太大,一個是軟引用的最大數(shù)目,當(dāng)超過第一個閥值的時候,不是將LRU替換出來的對象移除,而是替代轉(zhuǎn)換為軟引用存儲;如果軟引用的數(shù)目也超過閥值,那么可以將軟引用這個Map里的對象LRU替換成Weak引用存儲或者簡單移除。處理元素查詢的時候,多了一個步驟,在查詢強引用未果的情況下,需要再去查詢軟引用集合,不過都是O(1)復(fù)雜度的查詢,不會成為明顯的瓶頸。通過將緩存對象分代,我們實現(xiàn)了容難更多緩存對象的目標(biāo),大部分對象以強引用的形式存儲,被LRU替換出去最近最少訪問的元素以軟引用存儲,它們在內(nèi)存不夠的時候被垃圾回收,保證了內(nèi)存使用上的安全性。我們在系統(tǒng)中采用了類似這樣的緩存,緩存的命中率有了明顯的提高。
        題目是《緩存的分代》,其實談的是分代這種常見的設(shè)計或者說技巧,在需要處理大量對象的場景中,不采用一刀切的方式,而是根據(jù)對象的特點進行適當(dāng)?shù)姆执幚恚瑤淼男侍嵘赡苁求@人的。

        PS.關(guān)于這個招聘羅嗦兩句,我是這個小組的成員,有人質(zhì)疑我的目的是為了賺推薦費,這個不能說沒有,不過主要目的還是招人,我們很缺人。那么多要求可以歸結(jié)為一句話:我們找Java基礎(chǔ)良好、對并發(fā)通信有豐富實踐經(jīng)驗、寫代碼相對靠譜、為人相對靠譜的人。那些要求并非硬性,如果你覺的合適,盡管投簡歷,謝謝。我們小組做的東西我認(rèn)為還是有價值的,也很有挑戰(zhàn),淘寶內(nèi)部的很多應(yīng)用都在使用,如果你希望你做的產(chǎn)品被成千上萬的人每天使用,歡迎加入。

         

       

    posted @ 2010-06-05 10:13 dennis 閱讀(4517) | 評論 (5)編輯 收藏

        作為一個coder,我不僅在寫程序,也在寫bug。遇到bug總是比較尷尬的事情,如果這個bug還是別人發(fā)現(xiàn),那更是心里不好受。責(zé)備自己是沒有用的,能做的是建立一個BUG數(shù)據(jù)庫,時常回顧下自己犯過那些愚蠢的事情,怎么避免以后再犯同樣的事情。昨天讀《程序員》看到一笑話,說優(yōu)秀的程序員哪怕在過單行道的時候也會向左右兩邊看,笑話其實不好笑,反而再次提醒我:小心、小心、再小心。
        毫不慚愧地說,我也是今年才開始有意識地去做回顧bug這件事情,今天回顧下最近寫出來的這幾個BUG:三個是麻痹大意導(dǎo)致的,一個是switch語句竟然沒寫break,一個是并發(fā)BUG,一個是考慮問題不全面導(dǎo)致的問題。這里主要還是想講那三個麻痹大意寫出來的BUG,都是在急匆匆修改問題的情況下寫出來的,本意是為了解決原有的BUG,在自以為很有信心地情況下匆忙地修改代碼,沒有認(rèn)真做review,沒有添加單元測試,在解決問題的同時引入了新的問題。
        這些愚蠢的BUG修正起來非常簡單,但是為什么那個時候卻沒有發(fā)現(xiàn)呢?我自省下,還是盲目自信導(dǎo)致的,因為快速地修復(fù)BUG似乎很能給人一種虛假的快感:瞧,這個問題我修正起來很快,我是代碼快槍手,哦耶~,修復(fù)也還罷了,如果能再補充下測試,也許這些問題就能避免,但是我卻又一次自信過了頭。我在想,如果下次還遇到這種需要快速修改問題的時候我該怎么做,我該先深呼吸下,停一停,先想想怎么改再動手,想想風(fēng)險點,改完之后至少review三遍,并且一定要添加這些情況的測試。盡管我相信以后我還會寫下一些愚蠢的BUG,但是希望能讓自己少后悔一點點。

    posted @ 2010-06-05 01:06 dennis 閱讀(1105) | 評論 (0)編輯 收藏

    聯(lián)系郵箱: boyan@taobao.com
    簡歷格式: 最好是純文本格式

    淘寶分布式產(chǎn)品組誠聘Java工程師,有興趣的請聯(lián)系,謝謝,此招聘長期有效。具體職位和要求如下:

    消息中間件資深Java工程師
    工作地點:杭州
    職位描述:
    負責(zé)消息中間件的設(shè)計、開發(fā)等工作

    職位要求:
    1、扎實的Java開發(fā)基礎(chǔ)知識
    2、Java多線程、并發(fā)以及網(wǎng)絡(luò)通信有深厚的經(jīng)驗
    3、熟悉大規(guī)模分布式系統(tǒng)架構(gòu),熟悉分布式存儲系統(tǒng)
    4、熱愛技術(shù),對技術(shù)有不懈的追求。
    5、熟悉消息中間件,并了解消息中間件原理的優(yōu)先考慮

    分布式數(shù)據(jù)層資深Java工程師
    工作地點:杭州
    職位描述:
    負責(zé)分布式數(shù)據(jù)層的設(shè)計、開發(fā)等工作

    職位要求:
    1、扎實的Java開發(fā)基礎(chǔ)知識
    2、Java多線程、并發(fā)以及網(wǎng)絡(luò)通信有深厚的經(jīng)驗
    3、對JDBC,JPA,JTA有深厚的理解
    4、熟悉常見的分布式存儲解決方案
    5、熱愛技術(shù),對技術(shù)有不懈的追求
    6、熟悉數(shù)據(jù)層的原理和應(yīng)用
    7、熟悉關(guān)系數(shù)據(jù)庫模型、有分布式事務(wù)相關(guān)經(jīng)驗優(yōu)先

    Java框架和工具開發(fā)工程師
    工作地點:杭州
    職位描述:
    1、 設(shè)計、開發(fā)、改進基于Java的工具和框架。
    2、 指導(dǎo)開發(fā)團隊使用工具和框架,解決疑難問題。

    職位要求:
    1、 熟悉并自如運用Java語言及JDK類庫,具備良好的編程習(xí)慣。
    2、 熟悉多種Java開源項目,精通目前主流的Java開源項目的使用方法和設(shè)計理念。有獨到見解者更佳。
    3、 熟悉OOP理念及常見設(shè)計模式。
    4、 熟悉Eclipse開發(fā)平臺,了解Eclipse Plugin的開發(fā)。
    5、 視野廣闊,了解業(yè)內(nèi)發(fā)展動態(tài)。
    6、 喜愛專研,精益求精,有較強的學(xué)習(xí)能力。
    7、 善于交流,樂于分享。
    8、 具備英文閱讀能力和書寫能力。

    應(yīng)用管理工具開發(fā)工程師
    工作地點:杭州
    職位描述:
    1、承擔(dān)應(yīng)用、系統(tǒng)管理工具及其他相關(guān)的工具、應(yīng)用的開發(fā)
    2、大規(guī)模應(yīng)用管理相關(guān)技術(shù)的預(yù)研工作

    職位要求:
    1、兩年及以上開發(fā)Java或Php開發(fā)經(jīng)驗
    2、對技術(shù)充滿興趣,有扎實的編程基礎(chǔ)
    3、對經(jīng)歷過的產(chǎn)品、項目有深入的理解,而不僅停留在開發(fā)



    聯(lián)系郵箱: boyan@taobao.com
    簡歷格式: 最好是純文本格式

    附注: 如果管理員覺的放在首頁不合適,請拿下,不好意思,招人不容易啊。

    posted @ 2010-06-03 16:05 dennis 閱讀(6022) | 評論 (27)編輯 收藏

         每天下班后回家跟兒子的例行對話:

    爸爸:你今天乖不乖?
    兒子:啊
    爸爸:有沒有想爸爸?
    兒子:啊
    爸爸:吃飯了沒?
    兒子:哦
    爸爸:有沒有吃飽啊?
    兒子:呃
    ……
         今天是兒童節(jié),昨天晚上帶小家伙去買玩具,兒子很替老爸省錢,自己只挑了氣球。最后還是老爸老媽狠狠心給他買了畫板和音樂小屋子,慶幸的是兒子很喜歡,一個晚上在那邊“打電話”。兒子,節(jié)日快樂,希望你健康成長,快樂每一天。




    posted @ 2010-06-01 11:18 dennis 閱讀(1416) | 評論 (0)編輯 收藏

    僅列出標(biāo)題
    共56頁: First 上一頁 8 9 10 11 12 13 14 15 16 下一頁 Last 
    主站蜘蛛池模板: 日本红怡院亚洲红怡院最新| 亚洲精品视频免费| 亚洲精品高清视频| 一本色道久久88综合亚洲精品高清| **毛片免费观看久久精品| 一级午夜a毛片免费视频| 亚洲日韩精品国产3区| 久久亚洲sm情趣捆绑调教| 国产亚洲精品激情都市| 国产免费观看黄AV片| 欧美三级在线电影免费| 99久久99热精品免费观看国产| 国产免费区在线观看十分钟| 色偷偷亚洲第一综合网| 在线观看亚洲AV每日更新无码| 亚洲视频国产视频| 亚洲AV无码乱码在线观看裸奔| 国产a v无码专区亚洲av| 国产无遮挡裸体免费视频 | 国产免费av一区二区三区| 久久久久久久久免费看无码| 最近在线2018视频免费观看| 久久大香香蕉国产免费网站| 你好老叔电影观看免费| 成全视成人免费观看在线看| 一进一出60分钟免费视频| 野花视频在线官网免费1| 免费无码一区二区| 美女露隐私全部免费直播| 国产精品亚洲综合网站| 在线观看亚洲视频| 美女18毛片免费视频| 麻豆安全免费网址入口| 免费人妻精品一区二区三区| 日韩久久无码免费毛片软件| 免费又黄又爽又猛大片午夜| 深夜免费在线视频| 波霸在线精品视频免费观看| 中国性猛交xxxxx免费看| 日本免费一区二区久久人人澡| 无码成A毛片免费|