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

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

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

    posts - 122,  comments - 25,  trackbacks - 0
    1、介紹
    通過證書驗(yàn)證用戶身份(瀏覽器),其核心是利用cookie實(shí)現(xiàn)http和https的信息共享(同域名)。如http://test.abc.com/app/index.html 發(fā)現(xiàn)未驗(yàn)證后,跳轉(zhuǎn)到https://test.abc.com:443/app/checkCrt.html身份驗(yàn)證,要求出去證書,確認(rèn)后將身份信息帶入http請(qǐng)求頭部,跳轉(zhuǎn)到原請(qǐng)求頁面(http://test.abc.com/app/index.html ),讀取身份信息后進(jìn)入頁面(出于安全考慮Cookie需要加密)。

    流程圖

    流程說明:
    登錄流程詳細(xì)介紹:
    1). 未登錄用戶訪問頁面 如:http://test.abc.com/app/index.html
    2). 【CertAuthValve】判斷是否訪問受限制資源,如訪問受限制的資源則判斷用戶身份是否已驗(yàn)證,未驗(yàn)證則將用戶重定向到身份驗(yàn)證頁面,原始請(qǐng)求的url做為
    query的一部分,登錄成功后可以跳轉(zhuǎn)回來, 如:https://test.abc.com:443/app/checkCrt.htm?done=/index.html。
    3). 【CertAuthValve】對(duì)于https請(qǐng)求,apache讀取請(qǐng)求提供的用戶證書,獲取證書中的郵件地址,并將該信息寫入請(qǐng)求頭中。
    4). 【GetUserInfoValve】讀取請(qǐng)求頭,獲取剛剛設(shè)置的用戶郵件地址信息,進(jìn)一步獲取用戶的詳細(xì)信息,然后將這些信息加密后放入cookie中。
    5). 登錄完成,將用戶外部重定向回原始頁面。
    2、具體實(shí)現(xiàn)
    1)、安裝apache、ssh、java、jboss等環(huán)境,略。
    2)、生成服務(wù)證書和服務(wù)密碼
    openssl req -new -x509 -nodes -out /home/admin/app/conf/ssl.crt/server.crt -keyout /home/admin/app/conf/ssl.crt/server.key -days 3600
    因?yàn)橐蛢?nèi)網(wǎng)證書交互,所以需要一個(gè)內(nèi)網(wǎng)證書公鑰文件,可以通過以下方式獲取:
    獲取方法:IE->工具->Internet選項(xiàng)->內(nèi)容->證書->受信任的根證書頒發(fā)機(jī)構(gòu),找到intranet行,點(diǎn)擊導(dǎo)出,選擇下一步,選擇Base64編碼X.509,將證書文件保存為intranet-ca.crt,拷貝到目錄/home/admin/app/conf/ssl.crt/。
    3)、apache(httpd.conf)配置
    應(yīng)用和身份驗(yàn)證頁面放在一起,所以需要同時(shí)配置兩個(gè)虛擬主機(jī),同時(shí)監(jiān)聽80(處理http請(qǐng)求)、443(處理https請(qǐng)求)端口。
    #監(jiān)聽端口
    Listen 80
    Listen 443

    #app的虛擬主機(jī)配置
    NameVirtualHost *:80
    <VirtualHost *:80>
        ServerAdmin sa@abc.com
        ServerName test.abc.com
        DocumentRoot /home/admin/app/target/app/htdocs/
    </VirtualHost>

    #身份驗(yàn)證的虛擬主機(jī)配置
    NameVirtualHost *:443
    <VirtualHost *:443>
        ServerAdmin sa@abc.com
        ServerName test.abc.com
        DocumentRoot /home/admin/app/target/app/htdocs/
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+SSLv3:+EXP:+eNULL

        #該指令為虛擬主機(jī)指定證書文件名。
        SSLCertificateFile /home/admin/app/conf/ssl.crt/server.crt

        #該指令為證書指定一個(gè)對(duì)應(yīng)的私鑰文件
        SSLCertificateKeyFile /home/admin/app/conf/ssl.crt/server.key

        #該指令為指定一個(gè)包含Certificate Authority證書的文件
        #證書公鑰
        SSLCACertificateFile /home/admin/app/conf/ssl.crt/intranet-ca.cer
        SSLProxyEngine on
        RewriteEngine on
        #設(shè)置客戶端證書驗(yàn)證為必須
        SSLVerifyClient require

        #因?yàn)橐粋€(gè)CA證書能夠被另一個(gè)CA證書驗(yàn)證,所以可以形成一個(gè)CA證書鏈.使用該指令可指定服務(wù)器驗(yàn)證用戶證書時(shí)可以查找多少個(gè)CA證明。
        #設(shè)置認(rèn)證深度:一般用默認(rèn)10。
        SSLVerifyDepth  10

        #把mod_ssl里的變量變?yōu)槿汁h(huán)境的變量
        SSLOptions +StdEnvVars

        #將證書中的郵件地址添加到請(qǐng)求頭中
        RequestHeader unset SSL_CLIENT_S_DN_Email
        RequestHeader add SSL_CLIENT_S_DN_Email %{SSL_CLIENT_S_DN_Email}e
    </VirtualHost>

    4)、代碼片段
            //CertAuthValve.java
            
    //判斷session中是否有用戶郵箱地址
            SessionValue session = SessionHelper.getSessionValue(rundata);
            if (StringUtil.isNotEmpty(session.getCropEmail())) {
                return null;
            }
            
            // 從內(nèi)網(wǎng)證書中獲取用戶郵箱地址: SSL_CLIENT_S_DN_Email
            String cropEmail = rundata.getRequest().getHeader(SSL_CLIENT_HEADER_MAIL);
            if (StringUtil.isNotEmpty(cropEmail)) {
                //將郵箱地址保存到session
                session.setCropEmail(cropEmail);
                SessionHelper.saveSessionValue(rundata, session);
                if (log.isDebugEnabled()) {
                    log.debug("用戶" + session.getCropEmail() + "已經(jīng)通過證書驗(yàn)證");
                }
                return null;
            }
            
            URIBrokerService uriBrokerService = (URIBrokerService) getWebxComponent().getService(
                    URIBrokerService.SERVICE_NAME);
            URIBroker noPermissionUriBroker = uriBrokerService.getURIBroker(CHECK_CRT_URL);
            //請(qǐng)求的原始URL & 驗(yàn)證的URL
            String requestPath = rundata.getPathInfo().replace("_", "");
            String checkCrtUrl = (String) noPermissionUriBroker.getPath().get(
                    noPermissionUriBroker.getPath().size() - 1);

            try {
                //原始請(qǐng)求判斷
                if (requestPath.equalsIgnoreCase(checkCrtUrl)) {
                    //當(dāng)前是https請(qǐng)求,但是依然不能得到證書信息,轉(zhuǎn)到禁止頁面
                    
    //(要將禁止頁面加入到允許訪問的配置文件中,不然會(huì)導(dǎo)致循環(huán)重定向)
                    URIBroker uriBroker = uriBrokerService.getURIBroker("forbidden");
                    rundata.setRedirectLocation(uriBroker.render());
                } else {
                    //轉(zhuǎn)到證書驗(yàn)證頁面
                    rundata.setRedirectLocation(noPermissionUriBroker.render() + "?done=" + rundata.getPathInfo());
                }
            } catch (IOException e) {
                log.error("權(quán)限驗(yàn)證重定向出錯(cuò)", e);
            }
            return new BreakPipeline();

            //GetUserInfoValve.java
            Object user = rundata.getSession().getAttribute("userInfo");
            if (user == null) {
                SessionValue session = SessionHelper.getSessionValue(rundata);
                String email = session.getCropEmail();
                Employe employe = PersonInfoUtil.getPersonInfoByEmail(email);

                // 寫入cookie
                session.setEmployeeId(employe.getEmployeId());
                session.setName(employe.getName());
                session.setCropEmail(employe.getEmail());
                SessionHelper.saveSessionValue(rundata, session);
            }

    posted @ 2011-12-09 16:09 josson 閱讀(2441) | 評(píng)論 (0)編輯 收藏
    受限于證書的原因,以前經(jīng)常不得已用IE打開一些應(yīng)用。其實(shí)有一工具可以幫助我們導(dǎo)出IE證書,用于firefox,解決證書的困惑。

    Jailbreak [https://www.isecpartners.com/application-security-tools/jailbreak.html],win32的一個(gè)小軟件,可以幫助我們導(dǎo)出IE證書,使用很簡(jiǎn)單。
    1、windows環(huán)境(xp\win7均可),以adminstrator登錄;
    2、下載jailbreak,解包后,運(yùn)行jailbreak.exe(非jailbreak.msc);
    3、導(dǎo)出證書:Certificates - Current User > 個(gè)人 > 證書,選所有任務(wù)導(dǎo)出;


    選擇導(dǎo)出私鑰。
    4、在firefox中導(dǎo)入證書:選項(xiàng) > 高級(jí) > 查看證書(您的證書) > 導(dǎo)入(剛導(dǎo)出證書文件);

    5、搞定。
    posted @ 2011-12-09 13:54 josson 閱讀(3107) | 評(píng)論 (1)編輯 收藏

    互聯(lián)網(wǎng)的產(chǎn)品大都是面向海量用戶的服務(wù),且用戶分布區(qū)域廣泛,其教育水平、習(xí)慣也大多不同,具有高度不確定性,我們必須非常關(guān)注用戶的行為和反饋。因而,在互聯(lián)網(wǎng)產(chǎn)品服務(wù)的整個(gè)用戶研究,需求分析、產(chǎn)品研發(fā)及交付服務(wù)的過程中,都采用探索式、適應(yīng)性的研發(fā)理念進(jìn)行產(chǎn)品的研發(fā)。通常,會(huì)把整個(gè)產(chǎn)品研發(fā)周期劃分為若干個(gè)迭代,采用迭代式的演進(jìn)過程,不斷的去交付新的產(chǎn)品特性,并通過觀察用戶的行為和反饋獲取,進(jìn)而隨時(shí)調(diào)整產(chǎn)品的思路和方向。一切以用戶價(jià)值為核心是互聯(lián)網(wǎng)產(chǎn)品最核心的特點(diǎn),而以價(jià)值驅(qū)動(dòng)的敏捷開發(fā)方法非常符合這一特點(diǎn)。

    一、敏捷項(xiàng)目管理實(shí)踐


    從阿里軟件開始,內(nèi)貿(mào)團(tuán)隊(duì)就一直在實(shí)行著敏捷項(xiàng)目管理實(shí)踐,通過小步快跑,快速迭代、增量交付用戶價(jià)值,不斷獲取用戶反饋,持續(xù)、快速的調(diào)整產(chǎn)品,驗(yàn)證并適合用戶價(jià)值。正是通過這些實(shí)踐活動(dòng),我們以迭代的、增量的交付用戶價(jià)值,最大限度的保證產(chǎn)品朝著符合用戶實(shí)際需求方向發(fā)展。目前,在內(nèi)貿(mào)團(tuán)隊(duì)?wèi)?yīng)用較成熟的敏捷實(shí)踐活動(dòng)有:

    1)、迭代計(jì)劃(Sprint Planning Meeting)

    2)、每日晨會(huì)(Daily Scrum Meeting) & 任務(wù)墻(Task Wall)

    3)、功能預(yù)演(Spring Review)

    4)、項(xiàng)目總結(jié)(Retrospect Meeting)

    5)、結(jié)對(duì)編程(Pair Programming)

    6)、其他技術(shù)實(shí)踐活動(dòng)等

     二、敏捷團(tuán)隊(duì)

    1)、自組織文化

    如google、facebook等互聯(lián)網(wǎng)企業(yè),他們很少甚至沒有特定的項(xiàng)目流程,通常怎么敏捷怎么做,具有濃厚的工程師驅(qū)動(dòng)文化。我們則有較完整的開發(fā)流程指導(dǎo)和規(guī)范我們的項(xiàng)目研發(fā)工作,相比而言,喪失了一些靈活性和積極性,不利于我們工程師自我管理、自我驅(qū)動(dòng)意識(shí)的培養(yǎng)。臃腫、缺乏靈活性的流程同互聯(lián)網(wǎng)產(chǎn)品快速更新、快速發(fā)展是不相適應(yīng)的,同時(shí)也弱化我們的責(zé)任心意識(shí)。除了遵守詳盡的流程,我們是否可以換個(gè)角度、換種方法,提倡和營造一種自我管理、自我驅(qū)動(dòng)的開發(fā)文化,省卻一些并不能給我們帶來幫助卻影響效率的流程呢?

    敏捷團(tuán)隊(duì)的自組織特性弱化了團(tuán)隊(duì)技術(shù)領(lǐng)導(dǎo)這個(gè)角色,強(qiáng)調(diào)自我管理和自我驅(qū)動(dòng)。雖然這對(duì)工程師的素質(zhì)要求更高,相對(duì)技術(shù)能力更難提高。但是,團(tuán)隊(duì)導(dǎo)向很重要,我們努力營造這樣的氛圍,從小團(tuán)隊(duì)做起,逐漸鍛煉和培養(yǎng)自組織團(tuán)隊(duì)。相信在這樣的開發(fā)氛圍下,會(huì)讓我們做的更高效、更敏捷,可以走的更穩(wěn)、更遠(yuǎn)。

    2)、追求一體化

    一體化團(tuán)隊(duì)作為敏捷開發(fā)方法中最具精益思想基因的實(shí)踐,是指每個(gè)項(xiàng)目團(tuán)隊(duì)包括分析,開發(fā),測(cè)試等角色,使團(tuán)隊(duì)滿足一個(gè)需求從設(shè)計(jì),開發(fā)到測(cè)試各個(gè)階段順利完成,達(dá)到符合質(zhì)量標(biāo)準(zhǔn)并滿足需求的軟件。這種以項(xiàng)目/產(chǎn)品為單位的虛擬團(tuán)隊(duì),坐在一起,全身心的為共同的目標(biāo)而努力,可以更好的凝聚項(xiàng)目組中的各種角色,消除部門墻。 

     3)、追求全功能

    這里所指的全功能是希望項(xiàng)目團(tuán)隊(duì)能打破工程師角色之間的邊界,如研發(fā)、測(cè)試和前端工程師的界線,消除開發(fā)、測(cè)試流程中一些潛在浪費(fèi),提高效率。在項(xiàng)目團(tuán)隊(duì)內(nèi)部通過角色互換,不限角色的結(jié)對(duì)工作,加強(qiáng)不同角色,不同模塊間的知識(shí)傳遞,打破技術(shù)壁壘,幫助員工從不同視角理解項(xiàng)目,鍛煉技能,進(jìn)而增加團(tuán)隊(duì)均衡生產(chǎn)的能力。

    為什么要提倡打破邊界?項(xiàng)目整體效率依賴于項(xiàng)目過程中各環(huán)節(jié)的工作效率,而整體效率的優(yōu)化往往依賴于均衡生產(chǎn)(精益思想的按需生產(chǎn)),即消除生產(chǎn)的波峰(過度生產(chǎn))和波谷(生產(chǎn)不足),只有局部效率的增加無法直接轉(zhuǎn)換為整體效率的增加(就象桶能裝多少水,決定于最短的那塊板)。整體效率的優(yōu)化要求IT團(tuán)隊(duì)消除技能壁壘,培養(yǎng)多面手,根據(jù)計(jì)劃的的變動(dòng),彈性地調(diào)整任務(wù),達(dá)到各角色和流程之間的平衡。

    三、質(zhì)量保證

    我們追求開發(fā)效率,同時(shí)也注重項(xiàng)目質(zhì)量。如何去保證質(zhì)量?就象美國的一位教授愛德化.戴明(W.Edwards Deming)所說:“我們應(yīng)該停止依靠大量檢驗(yàn)來保證質(zhì)量,而是要改進(jìn)工藝流程,從一開始就生產(chǎn)出優(yōu)質(zhì)的產(chǎn)品”。我們要在整個(gè)開發(fā)過程中多個(gè)環(huán)節(jié)去保證質(zhì)量。同時(shí),質(zhì)量保證是整個(gè)團(tuán)隊(duì)的責(zé)任,就如同前面所說的追求全功能團(tuán)隊(duì),打破邊界。

    至于在哪些環(huán)節(jié)采用哪些實(shí)踐,我們先做個(gè)分類,按是否能被系統(tǒng)用戶感知將質(zhì)量問題區(qū)分內(nèi)部質(zhì)量和外部質(zhì)量。外部質(zhì)量指能直接被系統(tǒng)用戶感知,如運(yùn)行緩慢,不可操作或是操作復(fù)雜就屬于外部質(zhì)量低劣。而不能直接為系統(tǒng)用戶所直接感知的要素,對(duì)產(chǎn)品鍵壯性、可維護(hù)性有深遠(yuǎn)影響的問題就屬于外部質(zhì)量,如系統(tǒng)設(shè)計(jì)的一致性、代碼可讀性、邏輯完整性等。內(nèi)部質(zhì)量對(duì)用戶的影響比較間接,但比外部質(zhì)量意義更深遠(yuǎn)。一般來說,系統(tǒng)內(nèi)部質(zhì)量?jī)?yōu)秀,外部質(zhì)量仍有可能很差。而內(nèi)部質(zhì)量差的系統(tǒng),外部質(zhì)量肯定也不怎么樣。

    1)、外部質(zhì)量保證

    在外部質(zhì)量保證上,大部分會(huì)在開發(fā)后期介入,可以通過性能測(cè)試、自動(dòng)化測(cè)試及工程師的功能測(cè)試來保證,通過這些實(shí)踐活動(dòng)發(fā)現(xiàn)并保證例如運(yùn)行緩慢、不可操作等質(zhì)量問題不會(huì)存在。針對(duì)交互特別復(fù)雜的web應(yīng)用,可以更多的考慮采用webui自動(dòng)化測(cè)試工具,如selenium、pwaitr(b2b)、automan(淘寶)等,可以很好的完成那些簡(jiǎn)單、重復(fù)的TC用例,可以大大提高測(cè)試效率,解決測(cè)試工程師的資源瓶頸。

    2)、內(nèi)部質(zhì)量保證

    相對(duì)于外部質(zhì)量,內(nèi)部質(zhì)量問題影響更為深遠(yuǎn),在開發(fā)開始階段就應(yīng)該去保證。如通過單元測(cè)試、靜態(tài)代碼掃描(PMD\findbugs)、持續(xù)集成、重構(gòu)、結(jié)對(duì)編程、code review等多種實(shí)踐活動(dòng)來保證項(xiàng)目代碼的健康。

    除了一些實(shí)踐活動(dòng)去檢查代碼質(zhì)量外,更為重要的是研發(fā)工程師對(duì)內(nèi)部質(zhì)量的重視,如果工程師沒有形成良好的質(zhì)量意識(shí),很可能這些實(shí)踐也只是停留于形式,并不能帶來較好的結(jié)果。如我們?cè)陂_發(fā)過程中的編碼規(guī)范、單元測(cè)試的質(zhì)量及覆蓋率,code review的及時(shí)性及問題是否持續(xù)跟進(jìn)等等。此外,有選擇的采用結(jié)對(duì)編程實(shí)踐,有助于質(zhì)量的提高。

    本文以敏捷、精益(消除浪費(fèi)、按需生產(chǎn))思想的角度試圖去探討一種適合互聯(lián)網(wǎng)公司的產(chǎn)品開發(fā)體系,上述概要的介紹了項(xiàng)目管理、團(tuán)隊(duì)、質(zhì)量方面的一些敏捷實(shí)踐活動(dòng),主要涉及了我們對(duì)敏捷方面的經(jīng)驗(yàn)分享或者是些正在研究探討的課題。文中涉及的實(shí)踐活動(dòng),后續(xù)我將逐一展開詳細(xì)介紹,幫助大家更好的理解和認(rèn)識(shí)。希望本文的分享能成為一個(gè)引子,引起大家對(duì)敏捷開發(fā)的思考和討論,或者更好的了解敏捷和精益思想。
    posted @ 2011-06-13 15:53 josson 閱讀(524) | 評(píng)論 (0)編輯 收藏

    以下為本人在公司內(nèi)部關(guān)于項(xiàng)目質(zhì)量和工作效率郵件回復(fù)的一此意見和想法。

    1、 談流程

    不可否認(rèn)流程的重要性,但我們需要根據(jù)具合格情況分析,不斷的梳理和優(yōu)化我們的流程,讓流程更好的指導(dǎo)我們工作,而不是束縛。目前,我們的流程慢慢多了起來,感覺不如以前敏捷了。經(jīng)過rpm改造后,無論在測(cè)試環(huán)節(jié)還是發(fā)布階段,較之前失去了很大的靈活性。測(cè)試階段,開發(fā)bugfix后想在測(cè)試環(huán)境驗(yàn)證,每次必須重走aone的流程及打包布署,相比之前的build效率真的差了好多。當(dāng)然,也許是我們項(xiàng)目組對(duì)這個(gè)流程熟練度、方法還不夠,很多環(huán)節(jié)有待改進(jìn)。

    發(fā)布階段,目前統(tǒng)一由SCM來發(fā)布,必然會(huì)導(dǎo)致開發(fā)對(duì)線上環(huán)境及發(fā)流程更加陌生,同我們提倡的打破邊界,敏捷響應(yīng)有些相背。再者,SCM資源有限的原因,要支持ITU眾多產(chǎn)品線,能否應(yīng)付的過來,始終是個(gè)問題。發(fā)布統(tǒng)一管理有好處,同樣也帶來了弊端,ITU不同于網(wǎng)站,大多數(shù)的技術(shù)團(tuán)隊(duì)共同在維護(hù)在幾個(gè)應(yīng)用,而itu的應(yīng)用多、規(guī)模相對(duì)小、環(huán)境各異,這樣的產(chǎn)品線采用統(tǒng)一管理性價(jià)比不高。希望相應(yīng)的owner,能不定期的搜集各產(chǎn)品線的意見和反饋,不斷的優(yōu)化,讓我們的流程更合理。

    2、 談自測(cè)

    我們團(tuán)隊(duì)一直在強(qiáng)調(diào)自測(cè)意識(shí),也在這方面不斷的總結(jié)和改進(jìn)。我覺的要提高自測(cè),首先應(yīng)讓每位開發(fā)同學(xué)形成較好的自測(cè)意識(shí),而不是自上而下的命令式管理,只有自己有這方面的意,才會(huì)去思考、去想辦法,去實(shí)踐。再者,需要PM或技術(shù)經(jīng)理去思考,目前階段實(shí)行自測(cè)會(huì)有什么困難,如沒有系統(tǒng)的自測(cè)方法、時(shí)間不充足(需要熟悉下階段的UC、下迭代的設(shè)計(jì)、單元測(cè)試補(bǔ)寫等),找到這些困難或問題,就容易對(duì)癥下藥了。最后,不斷總結(jié)和積累自測(cè)方式,優(yōu)化項(xiàng)目流程。自測(cè)不是一種形式,而要追求效果,開發(fā)自測(cè)同樣需要計(jì)劃和方法,所以我們需要向QA同學(xué)請(qǐng)教,總結(jié)過去 bug常犯的錯(cuò)誤,整理自己的check項(xiàng)。相信通過這樣的一些自測(cè)方法,能真正提高我們的項(xiàng)目質(zhì)量,打破同QA的界線,我們的開發(fā)、測(cè)試資源比例可以得到更大的優(yōu)化,將以前開發(fā)階段緊,測(cè)試階段松的狀況加以改善,使整個(gè)項(xiàng)目過程中的緊張度趨于平緩。

    3、 談故障分

    “盡量不要讓故障分成為大家包袱,可以考慮被實(shí)施產(chǎn)品對(duì)事故級(jí)和A類才對(duì)個(gè)人計(jì)故障分,B和C類故障分記在主管頭上!”,個(gè)人也比較支持駱駝的觀點(diǎn)。目前大家對(duì)線上故障都小心翼翼,大家對(duì)質(zhì)量的意識(shí)很高,這當(dāng)然是好事,但同時(shí)帶來的影響是效率低了。我的觀點(diǎn)是,作為增值服務(wù)的互聯(lián)網(wǎng)產(chǎn)品,我們更需要快速迭代增量提供用戶價(jià)值,盡快獲取用戶反饋并改善產(chǎn)品,產(chǎn)品推出的遲早,不僅影響獲得回報(bào)的時(shí)間,還影響到獲得價(jià)值的多少,錯(cuò)過了一個(gè)時(shí)間窗口,產(chǎn)品可能就不再有任何價(jià)值。所以,我們需要找到一個(gè)平衡量點(diǎn),可接受的質(zhì)量狀況達(dá)到最大的效率。

    從客戶第一角度談質(zhì)量,某些時(shí)候,客戶可以接受服務(wù)偶而不可用重啟下,卻不能接受產(chǎn)品沒價(jià)值、交互性太差,操作太復(fù)雜。所以,對(duì)于客戶來說什么對(duì)他們更重要,就需要我們每個(gè)人去分析和評(píng)估。所以,我們一味只注重質(zhì)量,而忽略客戶真實(shí)需求,那就太悲哀。我的觀點(diǎn)是,case by case,帶著這樣的觀點(diǎn)去思考和解決問題。

    4、談敏捷項(xiàng)目團(tuán)隊(duì)

    從打破邊界,我想到了一體化的敏捷項(xiàng)目管理團(tuán)隊(duì),一個(gè)目標(biāo)一致、自我管理的團(tuán)隊(duì),應(yīng)該具備良好的目標(biāo)意識(shí)和執(zhí)行力,不僅能管好自己的一畝三分地,同時(shí)也能站在項(xiàng)目、團(tuán)隊(duì)的角度看待問題。PD出現(xiàn)了問題,開發(fā)積極去彌補(bǔ);開發(fā)出現(xiàn)了問題,QA積極去彌補(bǔ),項(xiàng)目團(tuán)隊(duì)的目標(biāo)非常一致。每位項(xiàng)目組成員一定要把好每一關(guān),萬不可把問題向下拋,因?yàn)檫€有開發(fā)或QA會(huì)把關(guān),所以差不多就行了,這樣往往就是災(zāi)難的開始。

    posted @ 2011-05-20 16:39 josson 閱讀(480) | 評(píng)論 (0)編輯 收藏
    2010已成為歷史,記憶里2010年變化很多、做的很多、收獲也很多。2010是個(gè)轉(zhuǎn)型期、創(chuàng)業(yè)期,從年初開始,就在新的Marking中努力耕耘。前半年,以新產(chǎn)品研發(fā)為主;后半年,結(jié)合客戶使用產(chǎn)品后的反饋,不斷的優(yōu)化和改進(jìn)產(chǎn)品功能,努力提升產(chǎn)品價(jià)值和用戶體驗(yàn)。通過大家的努力,幾款新產(chǎn)品還是彼受用戶歡迎的,最欣喜的是我們提前完成了2010年的KPI目標(biāo)。

    過去的一年,有著太多的痛苦和艱辛,為了新產(chǎn)品的上線,晚上、周未都沒了,唯一想的和做的就是確保產(chǎn)品如期上線。過程雖然很艱苦,但大家都努力堅(jiān)持,齊心協(xié)力,確保任務(wù)如期完成,我們保持了一貫的說到做到、如期交付的作風(fēng)。因?yàn)檫@樣的磨練,我和我們的團(tuán)隊(duì)得到了更多成長(zhǎng)。困難并不可怕,熬過去,明天的太陽會(huì)更加燦爛。

    1、談?wù)劤砷L(zhǎng)和不足:

    1)、職業(yè)轉(zhuǎn)型,開發(fā)到管理
    雖然Team Leader已經(jīng)做了幾年了,但一直停留在項(xiàng)目上,多為管事不管人,對(duì)細(xì)節(jié)問題關(guān)注較多,所以之前談不上管理,只能算是積累些項(xiàng)目管理經(jīng)驗(yàn)。經(jīng)過這一年的學(xué)習(xí)和發(fā)展,有了更多的管理意識(shí),逐漸關(guān)注團(tuán)隊(duì)建設(shè)、團(tuán)隊(duì)成長(zhǎng),注意給小組成員更多的機(jī)會(huì)和空間,讓他們得到鍛煉和成長(zhǎng),承擔(dān)更多團(tuán)隊(duì)或項(xiàng)目中的重要事項(xiàng),而他們通過完成這些重要任務(wù),不僅得到了磨練,同時(shí)在團(tuán)隊(duì)中建立了自己的影響力。
    放在以前,我會(huì)認(rèn)為有風(fēng)險(xiǎn),或者自己做更快,更省事,或最有把握的人去。現(xiàn)在想來,以前認(rèn)識(shí)太膚淺了,我們需要的團(tuán)隊(duì)?wèi)?zhàn)斗力,而不是個(gè)別人的能力,若平常不注重團(tuán)隊(duì)成員的培養(yǎng),團(tuán)隊(duì)的戰(zhàn)斗力永遠(yuǎn)不行,承擔(dān)不了關(guān)鍵任務(wù)。
    談到成長(zhǎng)和培養(yǎng),團(tuán)隊(duì)需要什么樣的人呢?作為互聯(lián)網(wǎng)企業(yè),同一般軟件企業(yè)不同,產(chǎn)品在推出之前,誰也無法肯定是否會(huì)受用戶歡迎,只能快速推出,讓市場(chǎng)來驗(yàn)證,不斷的改進(jìn)和適應(yīng)用戶的需要。因而,需要我們技術(shù)人員也具備技術(shù)判斷力,改變命令式管理體制下的工作習(xí)慣,充分發(fā)揮主觀能動(dòng)性和創(chuàng)新意識(shí),共同做好產(chǎn)品。

    2)、學(xué)會(huì)擁抱變化;
    2010年變化很多,有些也許對(duì)個(gè)人、團(tuán)隊(duì)沒有影響或影響很小,有些直接關(guān)系自己或團(tuán)隊(duì),如團(tuán)隊(duì)的核心成員不斷的被抽調(diào)、人員調(diào)整、KPI的271考評(píng)等,每次的變化都會(huì)帶來不同的問題。持續(xù)輸血,新人補(bǔ)允,使團(tuán)隊(duì)?wèi)?zhàn)斗力大打折扣,很長(zhǎng)一段時(shí)間非常的糾結(jié)和無耐。事情總是具有兩面性,往好處看,這對(duì)我、對(duì)團(tuán)隊(duì)也未必是件壞事,沒有經(jīng)驗(yàn)過挫折和磨練,又怎能成佛呢?既然是組織需要或Boss的決定,那就多些理解和支持,支持和協(xié)助上級(jí)完成也是每個(gè)下屬的職責(zé);況且,某些變化至少對(duì)于一些同學(xué)也是件好事,他們有更多的機(jī)會(huì)和更大的平臺(tái)去一展才華。

    大概人都是喜歡按習(xí)慣辦事的緣故,每每有變化都覺的很痛苦。我覺的如何擁抱變化關(guān)鍵在于心態(tài),我們需要理性看待變化,多往積極的方向思考,不僅更容易調(diào)整好心態(tài),而且可以在變化中吸取經(jīng)驗(yàn)和教訓(xùn),鞭策我們成長(zhǎng)。

    3)、提升項(xiàng)目管理能力
    雖然在項(xiàng)目管理知識(shí)上沒有太多的時(shí)間和精力去系統(tǒng)的學(xué)習(xí),但通過不斷實(shí)踐和總結(jié),還是有了不少的積累和沉淀,對(duì)項(xiàng)目管理有了更多的理解和把握,對(duì)敏捷項(xiàng)目管理也有不同的認(rèn)識(shí),結(jié)合團(tuán)隊(duì)自身尋找適合我們的實(shí)踐方式。在項(xiàng)目管理方面,還有很多需要去提升和學(xué)習(xí),2011年希望安排更多的時(shí)間系統(tǒng)的學(xué)習(xí)項(xiàng)目管理知識(shí)及敏捷項(xiàng)目管理,并結(jié)合實(shí)際應(yīng)用到工作中。

    4)、提升向上溝通力
    在擁抱變化的同時(shí),同樣需要理性的分析和積極的向上溝通。在過去,雖然會(huì)盡可能的去表達(dá)和反饋?zhàn)约旱南敕ê鸵庖姡抑匦聦徱曄拢傆X得表達(dá)還不夠明確或不是那么的到位,或許在表達(dá)時(shí)還有更好的方式,至少還有提升的必要。向上溝通也是門學(xué)問,需要好好研究下。

    5)、提升團(tuán)隊(duì)建設(shè)和輔導(dǎo)能力
    相對(duì)來說,過去的一年所有的同學(xué)都會(huì)關(guān)注到,但領(lǐng)悟能力和基礎(chǔ)較好的同學(xué)成長(zhǎng)更快,基礎(chǔ)稍弱的沒有太大變化。顯然,平常輔導(dǎo)工作沒有做好或做到位,關(guān)注程度不夠。越是基礎(chǔ)差些的同學(xué)需要關(guān)注和幫助的點(diǎn)越多,需要幫助他們找到不足和問題所在,一起找改進(jìn)辦法,并給予必要的督促和檢查,養(yǎng)成好的學(xué)習(xí)習(xí)慣,促進(jìn)成長(zhǎng)。2011年,這方面需要做的還有更多。

    2、談?wù)?011年的期望
    1)、團(tuán)隊(duì)
    解決目前團(tuán)隊(duì)新人多,有效資源少的問題;積極關(guān)注和幫助新人溶入團(tuán)隊(duì),熟悉業(yè)務(wù),以減少對(duì)項(xiàng)目開展的影響;
    抓好梯隊(duì)建設(shè),關(guān)注和輔導(dǎo)基礎(chǔ)較差同學(xué)的,共同制定改進(jìn)計(jì)劃和Action,做好必要的監(jiān)督和指導(dǎo),促進(jìn)成長(zhǎng);
    2)、能力
    系統(tǒng)學(xué)習(xí)項(xiàng)目管理和敏捷軟件開發(fā)方面的知識(shí),并應(yīng)用到項(xiàng)目管理實(shí)踐中;同時(shí)積極參與相關(guān)方面的分享和討論。
    3)、影響
    推動(dòng)興趣小組活動(dòng)的開展,借開發(fā)工具的發(fā)展和分享,建立團(tuán)隊(duì)在部門或技術(shù)部的影響;
    鼓勵(lì)團(tuán)隊(duì)成員積極參與技術(shù)部的公共事務(wù),提升影響力。

    給力2010,加油2011!!!


    posted @ 2011-02-02 21:46 josson 閱讀(312) | 評(píng)論 (0)編輯 收藏
    1、什么是iteration和release?
    iteration和release是兩個(gè)不同的概念,但在敏捷實(shí)踐活動(dòng)中,我們往往認(rèn)識(shí)的比較模糊,一個(gè)Iteration就是一次release,其實(shí)不然。那么,具體有什么區(qū)別和聯(lián)系呢?
    Iteration(迭代):在固定的周期內(nèi),經(jīng)過需求分析、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試等活動(dòng),完成計(jì)劃的的業(yè)務(wù)需求,迭代結(jié)束提供一個(gè)可工作的產(chǎn)品。計(jì)劃的業(yè)務(wù)需求,可能是一個(gè)完整的User Story,也可能是一個(gè)Story中的若干task。
    Release(發(fā)布):經(jīng)過一個(gè)或若干個(gè)iteration后,完成計(jì)劃中的所有User Story,經(jīng)過測(cè)試后才release,最終真正交付給客戶使用。
    在我們的實(shí)踐活動(dòng)中,一個(gè)User Story所需的工作量超過我們的有效資源,無法安排在一個(gè)iteration內(nèi)。我們就會(huì)想當(dāng)然的會(huì)去延長(zhǎng)迭代周期,增加有效資源以適應(yīng)所需工作量。殊不知,這更象是形式上的迭代開發(fā),無異于瀑布式項(xiàng)目開發(fā)過程。

    2、建立固定的迭代周期,保持穩(wěn)定的開發(fā)節(jié)奏
    Scurm方法也非常強(qiáng)調(diào)穩(wěn)定的迭代節(jié)奏,一個(gè)穩(wěn)定的迭代節(jié)奏就如同項(xiàng)目的的心跳。Simon Baker描述說:"就像心臟有規(guī)律地跳動(dòng)來保持身體運(yùn)行,固定的迭代長(zhǎng)度提供了一個(gè)恒量,有助于建立開發(fā)和交付的節(jié)奏。根據(jù)我的經(jīng)驗(yàn),節(jié)奏是幫助取得不變的步幅的重要因素"(2004)。對(duì)于敏捷開發(fā)的團(tuán)隊(duì)而言,穩(wěn)定的迭代節(jié)奏可以讓產(chǎn)品保持更穩(wěn)定的交付。

    3、如何保持穩(wěn)定的開發(fā)節(jié)奏?
    當(dāng)一個(gè)迭代期內(nèi)可提供的有效資源無法實(shí)現(xiàn)一個(gè)User Story時(shí),我們?nèi)绾伟磁拍兀?在 談迭代周期控制的困惑 中已談到,這里不在細(xì)述。

    4、如何選擇適合自己團(tuán)隊(duì)的迭代周期?
    一般需要考慮以下因素:
    1)、整個(gè)項(xiàng)目周期長(zhǎng)度(完成計(jì)劃的商業(yè)需求所需時(shí)間)
    較短的迭代周期將會(huì)有以下一些好處:更頻繁的向客戶展示/交付可用的軟件;更頻繁的度量開發(fā)進(jìn)度;更頻繁的取得反饋并改進(jìn);一般大的項(xiàng)目最好有多次(3次或以上)獲取反饋、修正的機(jī)會(huì),根據(jù)項(xiàng)目周期調(diào)整迭代周期長(zhǎng)度。
    2)、不確定性的多少
    不確定性有多種形式,客戶到底想要的是什么?小組的工作效率,時(shí)間?技術(shù)門檻等都不存在不確定性,不確定性越多,迭代就應(yīng)該越短。
    3)、獲得反饋的難易程度
    指小組獲取反饋數(shù)量、頻度和及時(shí)性,視所處的環(huán)境不同,選擇合適的迭代長(zhǎng)度;
    4)、優(yōu)先級(jí)要以多久保持不變
    開發(fā)小組承諾在一次迭代中完成一組特定的功能,重要的是不要改變他們的目標(biāo)方向,
    優(yōu)先級(jí)不會(huì)被改變的時(shí)間長(zhǎng)度是選擇迭代長(zhǎng)度時(shí)需要考慮的因素。
    5)、迭代的系統(tǒng)開銷
    每次迭代的成本(時(shí)間),如迭代中進(jìn)行的完整回歸測(cè)試。最佳迭代周期的目標(biāo)之一就是減少或近似消除每次迭代的系統(tǒng)開銷。如每次回歸時(shí)間成本很高,那決定周期長(zhǎng)度時(shí)更傾向于長(zhǎng)一些。
    6)、團(tuán)隊(duì)成員的緊迫感
    Niels Malotaux指出:"只要項(xiàng)目的結(jié)束日期還在遙遠(yuǎn)的將來,我們就不會(huì)感到任何壓力,并從容不迫的工作。當(dāng)結(jié)束日期逼近時(shí),我們才會(huì)開始更努力的工作"。意思指項(xiàng)目開始大家比較放松,而越臨近結(jié)束,工作越忙壓力越大。因此,選擇一個(gè)合適的迭代周期長(zhǎng)度,讓團(tuán)隊(duì)成員在整個(gè)迭代過程中感受到的壓力更平均,不是給團(tuán)隊(duì)更多的壓力,而是壓力總量平均分布在迭代過程中。

    每個(gè)團(tuán)隊(duì)根據(jù)所在環(huán)境和條件確定一個(gè)合適的迭代長(zhǎng)度,一般建議2~4周。在我們的實(shí)踐中,以2周一次迭代的頻率,保持相對(duì)穩(wěn)定的開發(fā)和交付的節(jié)奏。

    5、參考資料:
    《敏捷估計(jì)與規(guī)劃》 Mike Cohn
    posted @ 2011-01-31 14:26 josson 閱讀(3418) | 評(píng)論 (0)編輯 收藏
    敏捷宣言中說到:"最好的架構(gòu)、需求和設(shè)計(jì)來自于自組織的團(tuán)隊(duì)"。在自組織團(tuán)隊(duì)中,我們每個(gè)人既是團(tuán)隊(duì)/項(xiàng)目的管理者,又是執(zhí)行者,要取得優(yōu)異的結(jié)果,必須加強(qiáng)自我管理。

    如何做好自我管理呢?

    1、平和的心態(tài):我們會(huì)不斷的遇到各類或好事或壞事、或成功或挫折,什么樣的心態(tài)去對(duì)待決定了我們成長(zhǎng)的方向及高度,"態(tài)度決定一切"。
    2、目標(biāo)感:大到個(gè)人職業(yè)規(guī)劃,小到每件事的期望,對(duì)于目標(biāo)(期望)的制定和管理,都需要我們認(rèn)真的去對(duì)待;
    3、執(zhí)行力:目標(biāo)是方向,不能執(zhí)行就不會(huì)有結(jié)果,好的執(zhí)行力是優(yōu)秀個(gè)人或團(tuán)隊(duì)的必要條件。
    4、時(shí)間管理:工作需要區(qū)分輕重緩急,不能對(duì)事情沒有計(jì)劃和按排,對(duì)事需要分析重要性和緊急程度,分別對(duì)待;
    5、學(xué)習(xí)能力:"學(xué)歷代表過去,能力代表現(xiàn)在,學(xué)習(xí)能力代表將來。",一個(gè)人的學(xué)習(xí)能力決定他將來的成績(jī);

    任何人都不希望自己被人管著,但要想不被人管只有一種辦法:時(shí)時(shí)嚴(yán)格要求自己,主動(dòng)、出色的完成每項(xiàng)工作,努力學(xué)習(xí),與團(tuán)隊(duì)共成長(zhǎng)。
    posted @ 2011-01-28 18:56 josson 閱讀(271) | 評(píng)論 (0)編輯 收藏
    昨日PM小組例會(huì),談到了需求評(píng)估工作量遠(yuǎn)大于有效資源情況下,如何保證迭代周期穩(wěn)定的問題。討論的內(nèi)容,對(duì)于PM如何控制、保持迭代周期穩(wěn)定有較大的參考價(jià)值。

      有效資源 評(píng)估工作量
    1
    2
    3 相同 相同
    注:
    有效資源:指迭代周期內(nèi),開發(fā)團(tuán)隊(duì)所能提供的有效工作日,單位人/天。
    評(píng)估工作量:指迭代周期內(nèi),產(chǎn)品經(jīng)理提供需要實(shí)現(xiàn)的業(yè)務(wù)需求所評(píng)估的工作量之和。

    上表描述以固定周期為兩周的迭代中,可能會(huì)出現(xiàn)的有效資源和評(píng)估工作量對(duì)比情況。其中,1、3兩種情況因?yàn)樵u(píng)估工作量小于或等同能提供的有效資源,所以不會(huì)影響迭代周期。重點(diǎn)需討論的是有效資源小于評(píng)估工作量時(shí),如何保持固定周期?

    例舉:一迭代周期,能提供有效資源20人/天,需求評(píng)估工作量30人/天。
    1、功能較獨(dú)立,需求不能拆分發(fā)布;
    安排一個(gè)release,兩個(gè)iterative。這種情況需要在迭代2中附加一些技術(shù)改造或低優(yōu)先級(jí)的小需求、bugfix,release日期相對(duì)會(huì)慢幾天。

    2、一個(gè)迭代中包括多個(gè)產(chǎn)品的需求(需要各位產(chǎn)品經(jīng)理協(xié)商,決定需求優(yōu)先級(jí));
    a)、以保證質(zhì)量為重:
    忽略商業(yè)優(yōu)先級(jí),先處理一個(gè)迭代中就能全部完成的需求。

    b)、保證價(jià)值
    分兩個(gè)迭代完成,一次release。

    通常情況下,我們盡力保證迭代周期的穩(wěn)定,但也允許例外,如:商業(yè)需求,產(chǎn)品上確定了發(fā)布時(shí)間點(diǎn),或者節(jié)假期間團(tuán)隊(duì)請(qǐng)假比較多,一個(gè)迭代所能提供的有效資源相對(duì)比較少的情況。

    保持迭代周期穩(wěn)定,其核心是:固定Timebox和可提供的資源,讓產(chǎn)品經(jīng)理來決定需求的優(yōu)先級(jí),每迭代只接納(開發(fā)/QA資源)可承受的需求。
    posted @ 2011-01-13 15:31 josson 閱讀(1024) | 評(píng)論 (0)編輯 收藏
    對(duì)于互聯(lián)網(wǎng)行業(yè)來說,快速推出產(chǎn)品占領(lǐng)市場(chǎng)、快速檢驗(yàn)產(chǎn)品的價(jià)值和方向性、快速調(diào)整及優(yōu)化是極期重要的。因此,采用小步快跑、持續(xù)迭代的敏捷實(shí)踐一種不錯(cuò)的項(xiàng)目管理方法。我們團(tuán)隊(duì)在敏捷項(xiàng)目管理方面持續(xù)開展了二年多時(shí)間,在scrum、xp等敏捷最佳實(shí)踐的基礎(chǔ)上,結(jié)合團(tuán)隊(duì)自身的基礎(chǔ)和條件,不斷的償試和優(yōu)化,總結(jié)和積累了一些經(jīng)驗(yàn)。目前,這些敏捷項(xiàng)目管理實(shí)踐在項(xiàng)目組開展情況良好,得到了大多數(shù)團(tuán)隊(duì)成員的認(rèn)同,特別是業(yè)務(wù)方、QA等合作方的認(rèn)可。


    上圖描述了一個(gè)基本項(xiàng)目迭代流程,其中涉及三個(gè)角色,其職責(zé)同等于Scrum中的Product Owner、Scrum Master、Scrum Team。迭代流程中分別包含了以下敏捷實(shí)踐:
    1)、迭代計(jì)劃會(huì)議,按商業(yè)優(yōu)先級(jí)篩選需求列表,確定本項(xiàng)目需求范圍;
    2)、確認(rèn)本次迭代需求、資源、時(shí)間的具體情況;
    3)、簡(jiǎn)單設(shè)計(jì),對(duì)關(guān)鍵技術(shù)點(diǎn)進(jìn)行必要的設(shè)計(jì);
    4)、晨會(huì);
    5)、結(jié)對(duì)編程;
    6)、持續(xù)集成;
    7)、showcase;
    8)、項(xiàng)目總結(jié)會(huì);
    9)、新迭代的開始... ...

    以上具體實(shí)踐活動(dòng)內(nèi)容及組織形式,后續(xù)將逐一介紹,敬請(qǐng)關(guān)注。
    posted @ 2010-12-16 15:57 josson 閱讀(344) | 評(píng)論 (0)編輯 收藏

    1、什么是java序列化

    Java 序列化 API 提供一種處理對(duì)象序列化的標(biāo)準(zhǔn)機(jī)制。序列化Serialization是指將java對(duì)象用一連串字節(jié)描述的一個(gè)過程;反序列化deserialization是一種將這一串字節(jié)構(gòu)建成一個(gè)對(duì)象的過程。


    2、序列化的作用(必要性)

    Java中,一切都是對(duì)象,在分布式環(huán)境中經(jīng)常需要將對(duì)象從這一端網(wǎng)絡(luò)或設(shè)備傳遞到另一端。Java 序列化機(jī)制就是一種解決在網(wǎng)絡(luò)兩端傳輸數(shù)據(jù)的問題而產(chǎn)生的協(xié)議。下圖表示客戶端/服務(wù)器之間通信,一個(gè)對(duì)象是從客戶端傳送到服務(wù)器通過序列化的視圖。


    3、如何序列化一個(gè)對(duì)象

    為序列化一個(gè)對(duì)象,你需確保對(duì)象類實(shí)現(xiàn)Serializable接口。Serializable接口沒有方法,只要實(shí)現(xiàn)了序列化接口,Class 就能被序列化機(jī)制處理。

    示例代碼,需序列化的java對(duì)象:

    1 import java.io.Serializable;
    2 
    3 public class TestClassSerial implements Serializable  {
    4     public byte version = 100;
    5     public byte count = 0;  
    6 }

    示例代碼,TestClassSerial對(duì)照象輸出成 Byte 流,存儲(chǔ)到 temp.out 文件里:
     1     public static void main(String args[]) throws IOException {
     2         FileOutputStream fos = null;
     3         ObjectOutputStream oos = null;
     4         try {
     5             fos = new FileOutputStream("c:/temp.out");
     6             oos = new ObjectOutputStream(fos);
     7             TestClassSerial tcs = new TestClassSerial();
     8             oos.writeObject(tcs);
     9             oos.flush();
    10         }
    11         finally {
    12             if(oos != null) {
    13                 oos.close();
    14             }
    15             if(fos != null) {
    16                 fos.close();
    17             }
    18         }
    19     }

    示例代碼,從持久的文件中讀取 Bytes 重建對(duì)象
     1     public static void main1(String args[]) throws IOException {
     2         FileInputStream fis = null
     3         ObjectInputStream oin = null;
     4         try {
     5             fis = new FileInputStream("c:/temp.out");
     6             oin = new ObjectInputStream(fis);
     7             TestClassSerial tcs = (TestClassSerial) oin.readObject();
     8             System.out.println("version="+tcs.version);
     9         }
    10         finally {
    11             if(fis != null) {
    12                 fis.close();
    13             }
    14             if(oin != null) {
    15                 oin.close();
    16             }
    17         }
    18     }

    執(zhí)行結(jié)果為:100.


    4、對(duì)象的序列化格式

    TestClassSerial對(duì)象序列化輸出的 temp.out 文件,以 16 進(jìn)制方式顯示,內(nèi)容如下:

    AC ED 00 05 73 72 00 0A 53 65 72 69 61 6C 54 65
    73 74 A0 0C 34 00 FE B1 DD F9 02 00 02 42 00 05
    63 6F 75 6E 74 42 00 07 76 65 72 73 69 6F 6E 78
    70 00 64

    這些二進(jìn)制字節(jié)就是用來描述序列化以后的TestClassSerial對(duì)象的,我們注意到 TestSerial 類中只有兩個(gè)域:

    1 public  byte version = 100;
    2 public byte count = 0;

    都是 byte 型,理論上存儲(chǔ)這兩個(gè)域只需要 2 個(gè) byte ,但是實(shí)際上 temp.out 占據(jù)空間為 51bytes ,也就是說除了數(shù)據(jù)以外,還包括了對(duì)序列化對(duì)象的其他描述。


    5、Java 的序列化算法

    序列化算法一般會(huì)按步驟做如下事情:

    1、將對(duì)象實(shí)例相關(guān)的類的元數(shù)據(jù)輸出;
    2、
    遞歸地輸出類的超類元數(shù)據(jù)描述直到不再有超類;
    3、
    類元數(shù)據(jù)完了以后,開始從最頂層的超類開始輸出對(duì)象實(shí)例的實(shí)際數(shù)據(jù)值;
    4、
    從上至下遞歸輸出實(shí)例的數(shù)據(jù);


    更多序例化事例及二進(jìn)制字節(jié)含義參考文檔:http://my.oschina.net/god/blog/1291

    posted @ 2010-12-16 14:52 josson 閱讀(816) | 評(píng)論 (0)編輯 收藏
    1、員工激勵(lì)
    通過各種外部或內(nèi)部的刺激,以激發(fā)員工的需要、動(dòng)機(jī)、欲望,調(diào)動(dòng)人的工作積極性,充分挖掘潛力,全力達(dá)到預(yù)期目標(biāo)的過程。

    2、激勵(lì)形式、方法:
    廣義的分物質(zhì)激勵(lì)和精神激勵(lì)(職務(wù)、榮譽(yù)、目標(biāo)、信任、情感等)。

    3、原則:
    1)、精神激勵(lì)為主;
    2)、只激勵(lì)該激勵(lì)的人;
    3)、只激勵(lì)該激勵(lì)的事;
    4)、激勵(lì)方法、手段因人而異,把握按需激勵(lì);
    5)、鼓勵(lì)公開競(jìng)爭(zhēng)、和諧競(jìng)爭(zhēng);

    4、案例:
    1)、壓力非常大的時(shí)候,采用激勵(lì)手段 -- 目標(biāo)激勵(lì)
    2)、當(dāng)前員工不開心,采用的手段 -- 先溝通,明確原因
    3)、表現(xiàn)好的員工 -- 信任激勵(lì),肯定
    4)、推行新方法 -- 目標(biāo)激勵(lì),競(jìng)賽

    5、附:
    馬斯洛需求層次理論(Maslow's hierarchy of needs),亦稱“基本需求層次理論”,是行為科學(xué)的理論之一,由美國心理學(xué)家亞伯拉罕·馬斯洛于1943年在《人類激勵(lì)理論》論文中所提出。



    安全、生理需要屬于物質(zhì)性價(jià)值需求;社會(huì)需要、尊重需要、自我實(shí)現(xiàn)屬于精神價(jià)值需求;

    posted @ 2010-12-09 16:17 josson 閱讀(377) | 評(píng)論 (0)編輯 收藏
    解決沖突的法則
    1. 在不了解對(duì)方動(dòng)機(jī)之前千萬不要表明自己的立場(chǎng)
    2. 準(zhǔn)確把握自己的需求底線
    3. 解決沖突的最好辦法是談判
    決策的法則
    1. 首先,以事實(shí)而后數(shù)據(jù)為依據(jù),如果沒有,
    2. 以嚴(yán)密的邏輯推理為依據(jù),如果沒有,
    3. 以民主評(píng)議,如果沒有,
    4. 以最終負(fù)責(zé)人來決斷
    獎(jiǎng)懲制度
    1. 在構(gòu)建獎(jiǎng)勵(lì)制度的同時(shí)不要忘記處罰制度的建設(shè)
    2. 物質(zhì)與非物質(zhì)的獎(jiǎng)勵(lì)(以非物質(zhì)的獎(jiǎng)勵(lì))
    3. 側(cè)重獎(jiǎng)勵(lì)行為還是結(jié)果?

    表揚(yáng)要及時(shí)(3天為限)、有理有據(jù)、真誠。
    表揚(yáng)是最不花錢最辭舊的激勵(lì)手段,表揚(yáng)是為下一個(gè)成功設(shè)立起點(diǎn)。
    不要過度的物質(zhì)獎(jiǎng)勵(lì),在這種方式的激勵(lì)下,員工永遠(yuǎn)得不到激勵(lì)。
    要注重精神上的獎(jiǎng)勵(lì),只有精神是永存的。

    posted @ 2010-11-24 10:31 josson 閱讀(365) | 評(píng)論 (0)編輯 收藏
    垃圾收集的目的在于清除不再使用的對(duì)象,釋放那些不再使用的對(duì)象所占用的內(nèi)存。GC兩種常用的方法是引用計(jì)數(shù)和對(duì)象引用遍歷,早期的jvm使用引用計(jì)數(shù),現(xiàn)在大多數(shù)jvm采用對(duì)象引用遍歷。

    1、對(duì)象引用計(jì)數(shù):
    當(dāng)應(yīng)用程序創(chuàng)建引用以及引用超出作用域(范圍)時(shí),jvm必須適當(dāng)增減引用數(shù)。當(dāng)某對(duì)象的引用數(shù)為0時(shí),對(duì)象便可以進(jìn)行垃圾收集。

    2、對(duì)象引用遍歷:
    (1)、標(biāo)記(marking)對(duì)象:從一組對(duì)象開始,沿著整個(gè)對(duì)象圖上的引用鏈,遞歸確定可到達(dá)的對(duì)象,GC將標(biāo)記這些可到達(dá)的對(duì)象。如果某對(duì)象不能從這些根對(duì)象的一個(gè)(至少一個(gè))到達(dá),則表示它可被收集。

    (2)、清除(sweeping)對(duì)象:GC刪除不可到達(dá)的對(duì)象,刪除時(shí),有些GC只是簡(jiǎn)單的掃描堆棧,刪除未標(biāo)記的對(duì)象,并釋放它們的內(nèi)存以生成新的對(duì)象。這種方法的問題在于內(nèi)存會(huì)分成好多小段,而它們不足以用于新的對(duì)象,但是組合起來卻很大。因此,許多gc可以重新組織內(nèi)存中的對(duì)象,并進(jìn)行壓縮(compact),形成可利用的空間。
    posted @ 2010-09-25 12:13 josson| 編輯 收藏
    不一定要將所有的真話講出來,但你講的每一句真話必須是真話。(white lie)
    posted @ 2010-07-28 14:37 josson 閱讀(248) | 評(píng)論 (0)編輯 收藏

    最近一個(gè)項(xiàng)目主要涉及前端的交互優(yōu)化,由于UED資源不足,所以一起做了一些前端的工作,

    由于各瀏覽器的標(biāo)準(zhǔn)不一樣,如要兼容像ie6,7,8firefox,樣式調(diào)整比較費(fèi)事,現(xiàn)在css相關(guān)

    的一些技巧分享一下,希望對(duì)大家有所幫助。

     

    1、什么是css hack.

    針對(duì)不同的瀏覽器去寫不同的CSS,讓它能夠同時(shí)兼容不同的瀏覽器,能在不同的瀏覽器中也

    能得到我們想要的頁面效果,這種針對(duì)不同的瀏覽器寫不同的CSS code的過程,稱之為CSS hack

     

    通過下表中的hack code就可以實(shí)現(xiàn)不同版本ie瀏覽器間的兼容:

    hack code

    ie6

    ie7

    firefox

    _

    ×

    ×

    *

    ×

    !import

    ×

    ‘_’ : 只有ie6能識(shí)別_ie7,8”width:100px; “的樣式是OK,但ie6不夠?qū)挄r(shí),可以在”width:100px”后面增加一段”_width:105px;” 那么ie7,8不會(huì)解析_width:105px,但ie6會(huì)執(zhí)行。

    ‘*’ : ie6,7都能識(shí)別*,但firefox不能識(shí)別;

    ‘!import’ : ie 6不能識(shí)別,ie7ie8都能識(shí)別;

     

    2css調(diào)試工具

    (1). ie8的調(diào)試工具,ie8下按F12能呼出開發(fā)人員開發(fā)工具,如下圖:

    選中圖中的箭頭鼠標(biāo)按鈕,在瀏覽器中選中需要優(yōu)化的HTML對(duì)象,HTML窗口就會(huì)

    定位到選中HTML對(duì)象的代碼上(如上圖左),則右窗口中則顯示當(dāng)前對(duì)象的所有樣式,

    通過對(duì)右窗口中的樣式調(diào)整,達(dá)到預(yù)期效果后,找到css文件的class,并作相同修

    改。通過這個(gè)工具,修改樣式后所見即所得,確定樣式后再修改樣式文件。

     

    (2). Firebugfirefox下可以通過Firebug工具,來定位HTML對(duì)象并調(diào)試該對(duì)象的樣式,如下圖:

     

    posted @ 2010-06-29 11:03 josson 閱讀(2194) | 評(píng)論 (0)編輯 收藏
    事件 解說
    一般事件 onclick 鼠標(biāo)點(diǎn)擊時(shí)觸發(fā)此事件
    ondblclick 鼠標(biāo)雙擊時(shí)觸發(fā)此事件
    onmousedown 按下鼠標(biāo)時(shí)觸發(fā)此事件
    onmouseup 鼠標(biāo)按下后松開鼠標(biāo)時(shí)觸發(fā)此事件
    onmouseover 當(dāng)鼠標(biāo)移動(dòng)到某對(duì)象范圍的上方時(shí)觸發(fā)此事件
    onmousemove 鼠標(biāo)移動(dòng)時(shí)觸發(fā)此事件
    onmouseout 當(dāng)鼠標(biāo)離開某對(duì)象范圍時(shí)觸發(fā)此事件
    onkeypress 當(dāng)鍵盤上的某個(gè)鍵被按下并且釋放時(shí)觸發(fā)此事件.
    onkeydown 當(dāng)鍵盤上某個(gè)按鍵被按下時(shí)觸發(fā)此事件
    onkeyup 當(dāng)鍵盤上某個(gè)按鍵被按放開時(shí)觸發(fā)此事件
    頁面相關(guān)事件 onabort 圖片在下載時(shí)被用戶中斷
    onbeforeunload 當(dāng)前頁面的內(nèi)容將要被改變時(shí)觸發(fā)此事件
    onerror 出現(xiàn)錯(cuò)誤時(shí)觸發(fā)此事件
    onload 頁面內(nèi)容完成時(shí)觸發(fā)此事件
    onmove 瀏覽器的窗口被移動(dòng)時(shí)觸發(fā)此事件
    onresize 當(dāng)瀏覽器的窗口大小被改變時(shí)觸發(fā)此事件
    onscroll 瀏覽器的滾動(dòng)條位置發(fā)生變化時(shí)觸發(fā)此事件
    onstop 瀏覽器的停止按鈕被按下時(shí)觸發(fā)此事件或者正在下載的文件被中斷
    oncontextmenu 當(dāng)彈出右鍵上下文菜單時(shí)發(fā)生
    onunload 當(dāng)前頁面將被改變時(shí)觸發(fā)此事件
    表單相關(guān)事件 onblur 當(dāng)前元素失去焦點(diǎn)時(shí)觸發(fā)此事件
    onchange 當(dāng)前元素失去焦點(diǎn)并且元素的內(nèi)容發(fā)生改變而觸發(fā)此事件
    onfocus 當(dāng)某個(gè)元素獲得焦點(diǎn)時(shí)觸發(fā)此事件
    onreset 當(dāng)表單中RESET的屬性被激發(fā)時(shí)觸發(fā)此事件
    onsubmit 一個(gè)表單被遞交時(shí)觸發(fā)此事件
    posted @ 2010-04-11 13:05 josson 閱讀(154) | 評(píng)論 (0)編輯 收藏
    1、讓用戶隨時(shí)了解系統(tǒng)的狀態(tài);
    2、系統(tǒng)應(yīng)與真實(shí)世界相符合;
    3、給予用戶控制權(quán)和自主權(quán);
    4、提倡一致性和標(biāo)準(zhǔn)化;
    5、幫助用戶識(shí)別、診斷和修復(fù)錯(cuò)誤;
    6、預(yù)防錯(cuò)誤;
    7、依賴識(shí)別而不是記憶;
    8、強(qiáng)調(diào)使用的靈活性及有效性;
    9、最小化設(shè)計(jì);
    10、提供幫助及文檔;
    posted @ 2010-04-11 13:05 josson 閱讀(204) | 評(píng)論 (0)編輯 收藏
    1、新建 archetype 項(xiàng)目(模板項(xiàng)目):
    mvn archetype:genera -DgroupId=org.simple -DartifactId=simple -DarchetypeArtifactId=maven-archetype-archetype
    2、修改主要模板文件:archetype-resources/pom.xml
    1)修改 META-INF/maven/archetype.xml 中相關(guān)的 sources
    2)安裝此項(xiàng)目:mvn install
    3、根據(jù)模板項(xiàng)目創(chuàng)建新項(xiàng)目:
    mvn archetype:generate
    -DarchetypeGroupId=org.simple\
    -DarchetypeArtifactId= simple \
    -DarchetypeVersion=1.0-SNAPSHOT

    【安裝私有庫】
    1、復(fù)制 mylib-1.2.3.jar 到本地代碼庫
    2、編寫 mylib-1.2.3.pom 文件:
    <project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mylib</groupId>
    <artifactId>mylib</artifactId>
    <version>1.2.3</version>
    </project>
    如果有依賴關(guān)系,可以將依賴關(guān)系描述在 pom 中
    3、用Ant 來生成 jar 包和 pom 文件的 checksum 文件:
    build.xml:
    <project default="checksum">
    <target name="checksum">
    <checksum file="mylib-1.2.3.jar" algorithm="SHA" fileext=".sha1"/>
    <checksum file="mylib-1.2.3.pom" algorithm="SHA" fileext=".sha1"/>
    </target>
    </project>
    4、生成 mylib-1.2.3.jar.sha1 和 mylib-1.2.3.pom.sha1 文件
    ant build.xml
    【使用版本控制】
    提交:mvn scm:checkin -Dmessage="Message"
    檢出:mvn scm:checkout
    更新:mvn scm:update
    posted @ 2010-04-11 13:02 josson 閱讀(874) | 評(píng)論 (0)編輯 收藏
    作為一名開發(fā)者,通常會(huì)忽視系統(tǒng)可用性及用戶體驗(yàn)。但系統(tǒng)的可用性和用戶體驗(yàn)對(duì)于一個(gè)真正優(yōu)秀的Web-based系統(tǒng)卻至關(guān)重要,因此,我們有必要花一些時(shí)間來了解和學(xué)習(xí)一下。

    一、相關(guān)的概念:

    用戶體驗(yàn),user experience(或稱ux/ue),指用戶訪問或使用一個(gè)產(chǎn)品/服務(wù)時(shí)的全部感受。具有主觀性,不同的用戶本身的知識(shí)、愛好、價(jià)值觀等會(huì)有不同的結(jié)果,因人而異。

    可用性,指產(chǎn)品是否易學(xué)、使用是否有效果,以及通用性是否良好等。衡量一個(gè)產(chǎn)品的可用性,可以通過一些具體目標(biāo)來評(píng)判,相對(duì)用戶體驗(yàn)而言,比較客觀。考察產(chǎn)品可用性的目標(biāo)可分為:
    1、可行性,指產(chǎn)品使用的效果;
    2、有效性,產(chǎn)品使用的工作效率;
    3、安全性,指產(chǎn)品能否安全的使用,或稱為容錯(cuò)性;
    4、通用性,指產(chǎn)品是否具備良好的通用性;
    5、易學(xué)性,指產(chǎn)品的是否容易上手,易操作;
    6、易記性,指產(chǎn)品的操作方法簡(jiǎn)單,易記性;

    二、開發(fā)人員的特點(diǎn)
    作為一名開發(fā)者,通常會(huì)對(duì)目標(biāo)用戶的判斷有較大的偏差,往往高估實(shí)際用戶的操作能力和理解能力,忽視產(chǎn)品的易學(xué)性和易操作性。再者,作為技術(shù)人員,開發(fā)工作者通常重視功能實(shí)現(xiàn),忽視產(chǎn)品界面、視覺外觀,不重視用戶體驗(yàn)。

    三、一些案例
    1、iPhone的成功
    iPhone的成功,產(chǎn)品的可用度及用戶體驗(yàn)有者至關(guān)重要的作用。其產(chǎn)品的很多細(xì)節(jié),都凝聚著apple公司的創(chuàng)新。如3.5吋屏幕上觸摸輸入,比較費(fèi)輕且易出錯(cuò),但iphone在輸入過程中,會(huì)放大選中的字符,便于用戶確認(rèn),同時(shí),作一些輸入校驗(yàn),進(jìn)行容錯(cuò)處理,避免用戶輸入錯(cuò)誤字符引起的麻煩。

    2、在線訂票、論壇注冊(cè)
    再如個(gè)在線訂票系統(tǒng),用戶興沖沖的跑上來想體驗(yàn)一把,千辛萬苦輸入一大段信息,終于注冊(cè)成功,想下單的時(shí)候,即發(fā)現(xiàn)自己有的銀行卡不支持,試想此時(shí)用戶的心情會(huì)多么的糟糕。試想一下,如果在用戶注冊(cè)前,提示系統(tǒng)當(dāng)前支持的銀行卡的話,用戶可以第一時(shí)間選擇其他的方式來實(shí)現(xiàn)自己的目的。

    再談?wù)搲臅?huì)員管理機(jī)制,網(wǎng)上這種案例也很多。用戶費(fèi)了好大的勁完成注冊(cè)后,即告知新注冊(cè)用戶不能立即發(fā)言,很可能這個(gè)用戶就這樣失去了。

    所以要做好一個(gè)產(chǎn)品,需要每位項(xiàng)目成員的投入,從用戶角度出度,解決用戶的實(shí)際問題。

    posted @ 2009-11-18 11:32 josson 閱讀(333) | 評(píng)論 (0)編輯 收藏

    Codereivew是開發(fā)團(tuán)隊(duì)中經(jīng)常采用的,為提高代碼質(zhì)量、提高編碼規(guī)范的一種手段。針對(duì)實(shí)際工作組織review過程中的一些想法、見解,作一下總結(jié)。

    關(guān)于CodeReview的幾點(diǎn)作用:

    1、提高團(tuán)隊(duì)的編碼規(guī)范,培養(yǎng)良好的coding風(fēng)格
    旨在提高整個(gè)團(tuán)隊(duì)的編碼規(guī)范程度,統(tǒng)一編碼風(fēng)格。通過每次的codereivew,發(fā)現(xiàn)團(tuán)隊(duì)成員在實(shí)際開發(fā)中的一些細(xì)節(jié)問題,如不良的編碼習(xí)慣、錯(cuò)誤的調(diào)用方式等。通過多次的發(fā)現(xiàn)、解決問題,使大家都養(yǎng)成良好的編碼習(xí)慣。review的內(nèi)容一般包括:
    1)、異常、日志的處理;
    2)、常量的定義及使用;
    3)、字符串處理、BigDecimal.ZERO等;
    4)、代碼的封裝,提高重用性;
    5)、代碼注釋情況;
    6)、javascript文件的抽取情況;

    2、檢查業(yè)務(wù)邏輯
    對(duì)項(xiàng)目實(shí)現(xiàn)的功能邏輯進(jìn)行一次reivew,結(jié)合眾人發(fā)散思維,檢查業(yè)務(wù)邏輯是否有盲點(diǎn)或錯(cuò)誤。通常需要參與review的成員能夠靜下心來深入地認(rèn)真分析,比較耗費(fèi)時(shí)間。

    3、分享和培訓(xùn)
    每個(gè)項(xiàng)目的工作安排相對(duì)來說都是比較緊湊的,所以每個(gè)團(tuán)隊(duì)成員在完成自己的開發(fā)任務(wù)完,沒有太多的時(shí)間去了解或熟悉其他成員的功能實(shí)現(xiàn)。但對(duì)于敏捷開發(fā)來說,每個(gè)功能模塊的開發(fā)者并不是固定的,根據(jù)項(xiàng)目需要,很有可能由非原開發(fā)人員來完成增值功能或重構(gòu),所以codereivew是一次不錯(cuò)的培訓(xùn)及分享機(jī)會(huì),特別是對(duì)功能相對(duì)復(fù)雜的需求實(shí)現(xiàn)。可以讓團(tuán)隊(duì)成員了解或熟悉基本的設(shè)計(jì)思想和相關(guān)的類定義,確保在今后接手這一塊工作時(shí),可以更快的上手或找到最到最合適的人去了解更深層的邏輯。

    關(guān)于reivew的方式:

    1、集體review;
    項(xiàng)目成員一起參與codereive,成本比較大,一般一個(gè)項(xiàng)目組織一次。比較適合開發(fā)經(jīng)驗(yàn)分享,以及新功能的實(shí)現(xiàn)介紹,利于其他成員了解、熟悉實(shí)現(xiàn)者的設(shè)計(jì)思路及代碼結(jié)構(gòu),在后續(xù)項(xiàng)目接手這些新功能時(shí),更加從容。

    2、TM組織若干開發(fā)經(jīng)驗(yàn)豐富的一起review;

    3、分組、交叉review;
    具有較好的靈活性,根據(jù)情況隨時(shí)找相關(guān)人員一起對(duì)已實(shí)現(xiàn)的代碼進(jìn)行review,及時(shí)發(fā)現(xiàn)過程中問題并予以修正。比較適合分組\抱團(tuán)開發(fā),以2-3人為單位,對(duì)具體的功能模塊負(fù)責(zé),一起分析、設(shè)計(jì)、編碼,每位成員對(duì)于功能邏輯都比較邏輯,對(duì)業(yè)務(wù)邏輯reivew有比較好的效果。

    實(shí)際工作中,根據(jù)實(shí)際情況靈活選擇合適的review方式,不應(yīng)拘于某種形式。review過程,應(yīng)有明確的目的,具有針對(duì)性,而不是停留于表面,避免逐漸成為一種負(fù)擔(dān),流于形式。另外,應(yīng)對(duì)每次review結(jié)果,整理出一份問題列表,進(jìn)行分析和總結(jié),避免相同問題的重復(fù)出現(xiàn)。同時(shí),也應(yīng)按排相關(guān)人員跟進(jìn)并解決問題。總之,通過codereivew這一手段,盡可能的在提交測(cè)試之前去發(fā)現(xiàn)代碼中存在的一些實(shí)際問題,從項(xiàng)目經(jīng)歷中得到成長(zhǎng)。

    posted @ 2009-09-20 16:50 josson 閱讀(421) | 評(píng)論 (0)編輯 收藏
    <2009年9月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 中文字幕亚洲色图| 在线观看黄片免费入口不卡| 我想看一级毛片免费的| 亚洲成a人片77777老司机| g0g0人体全免费高清大胆视频| 国产成人免费a在线视频app| 亚洲av无码一区二区三区观看| 最近2019免费中文字幕6| 亚洲AV无码一区二区三区系列| 国产精品极品美女自在线观看免费 | 男人和女人高潮免费网站| 国产网站免费观看| 亚洲色成人网站WWW永久四虎| 免费国产作爱视频网站| 亚洲国产高清美女在线观看| 5g影院5g天天爽永久免费影院| 图图资源网亚洲综合网站| 精品一卡2卡三卡4卡免费视频| 亚洲精品成人片在线播放| 中文字幕手机在线免费看电影 | 免费大片av手机看片高清| 免费真实播放国产乱子伦| 亚洲第一成年网站视频| 日本19禁啪啪无遮挡免费动图| 亚洲精品无码久久久久牙蜜区| 妞干网在线免费观看| 亚洲爆乳大丰满无码专区| 国产成人高清精品免费鸭子 | 亚洲av福利无码无一区二区 | 亚洲av日韩综合一区在线观看| 免费一级毛片无毒不卡| 亚洲国产成人精品不卡青青草原| 久久这里只精品国产免费10| 亚洲国产精品久久| 亚州免费一级毛片| 亚洲中文字幕日本无线码| 国产精品无码素人福利免费| 黄色免费网站在线看| 久久久久亚洲AV成人网人人网站| 成人妇女免费播放久久久| 亚洲国产香蕉碰碰人人|