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

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

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

    Sky's blog

    我和我追逐的夢

    常用鏈接

    統(tǒng)計

    其他鏈接

    友情鏈接

    最新評論

    2010年9月18日 #

    使用javap命令查看編譯版本信息

         摘要: 之前遇到幾次現(xiàn)場故障,都是和class文件有關,比如版本不兼容造成Bad Version錯誤之類,需要檢查class文件的編譯版本信息。 今天無意中發(fā)現(xiàn), jdk自帶的javap 命令其實可以方便的搞定這個事情  閱讀全文

    posted @ 2013-02-17 15:50 sky ao 閱讀(1697) | 評論 (0)編輯 收藏

    編碼最佳實踐(6)--那些年,我們一起建的索引

         摘要: 前幾次的編碼最佳實踐系列,我們都著眼于Java代碼,今天我們換個話題,看看另外一個領域,和Java代碼大相徑庭的SQL。   閱讀全文

    posted @ 2013-01-04 12:08 sky ao 閱讀(2192) | 評論 (1)編輯 收藏

    編碼最佳實踐(5)--小心!這只是冰山一角

         摘要: 本期的案例依然是來自實際項目,很尋常的代碼,卻意外遭遇傳說中的Java"內(nèi)存溢出"。   閱讀全文

    posted @ 2012-09-06 15:09 sky ao 閱讀(3153) | 評論 (1)編輯 收藏

    解決drupal的globalrediect模塊的重定向循環(huán)問題

         摘要: 昨晚繼續(xù)折騰俺的小站http://www.javauniversity.net,準備給它加上SEO支持,安裝了SEO tools模塊和相應的依賴模塊。

    結果安裝完成之后就陷入重定向循環(huán)了,每個頁面都被重定向到新地址,然后新地址再次被重定向。chrome瀏覽器會稍后報錯說太多重定向,而ie則傻傻的一直在死循環(huán)。   閱讀全文

    posted @ 2012-07-11 07:28 sky ao 閱讀(1574) | 評論 (0)編輯 收藏

    Java University 網(wǎng)站開通過程吐糟

         摘要: 折騰了兩天,終于將Java University這個站點開通,過程真不容易的,決定寫下來吐吐 糟,以紀念TIANCHAO和諧之光普照下P民的美好生活  閱讀全文

    posted @ 2012-06-24 10:34 sky ao 閱讀(1926) | 評論 (3)編輯 收藏

    編碼最佳實踐(4)--小心LinkedHashMap的get()方法

         摘要: 這是一個來自實際項目的例子,在這個案例中,有同事基于jdk中的LinkedHashMap設計了一個LRUCache,為了提高性能,使用了 ReentrantReadWriteLock 讀寫鎖:寫鎖對應put()方法,而讀鎖對應get()方法,期望通過讀寫鎖來實現(xiàn)并發(fā)get()。  閱讀全文

    posted @ 2012-06-18 12:31 sky ao 閱讀(4670) | 評論 (1)編輯 收藏

    編碼最佳實踐(3)--盡量重用昂貴的初始化對象

         摘要: 這里將要講述的是一系列的類似案例,都是在各個產(chǎn)品進行performance tuning時被發(fā)現(xiàn)的,非常具有普適性。可以說在日常開發(fā)中,有非常大的概率遇到相同或者類似的情形,因此需要對其保持警惕以便避免陷入類似的性能問題。 我們從JAXBContext這個對象開始...  閱讀全文

    posted @ 2012-06-17 23:02 sky ao 閱讀(2703) | 評論 (0)編輯 收藏

    編碼最佳實踐(2)--推薦使用concurrent包中的Atomic類

         摘要: 這是一個真實案例,曾經(jīng)惹出碩大風波,故事的起因卻很簡單,就是需要實現(xiàn)一個簡單的計數(shù)器,每次取值然后加1......  閱讀全文

    posted @ 2012-06-16 17:54 sky ao 閱讀(2897) | 評論 (5)編輯 收藏

    編碼最佳實踐(1)--小心"數(shù)據(jù)溢出"

         摘要: 最近在公司內(nèi)部做了一些收集和整理的工作,關于trouble shooting和performace tuning 中遇到并解決的典型問題,做了一些內(nèi)部分享。我整理了一下,準備陸續(xù)放上來分享給大家。

    這些問題,單個看每個問題都不算復雜或高深,但是都是在實際項目開發(fā)中出現(xiàn)并一度造成困擾的,而且?guī)в幸欢ǖ钠者m性,具體表現(xiàn)為不知道這些問題的同學很容易在日常開發(fā)中中招。因此我們開了一個專題,叫做編碼最佳實踐,似乎名字起的有點大......

    先來看看第一個,如何做compare。  閱讀全文

    posted @ 2012-06-09 23:27 sky ao 閱讀(3112) | 評論 (2)編輯 收藏

    解決Jetty下EL版本沖突的問題

         摘要: 今天用jetty做嵌入式web container,來做web項目的integration test,結果發(fā)現(xiàn)出現(xiàn)在渲染使用EL表達式的jsp頁面時出現(xiàn)異常:

    javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;

    檢查了一下,發(fā)現(xiàn)javax.el.ExpressionFactory.newInstance()這個方法是EL2.2版本之后才有的方法,而在EL2.1之中是沒有這個方法的,問題很明顯:org.apache.jasper中試圖調(diào)用2.2版本的EL,當時提供的EL的版本是2.1版本,所以解決的方式無非就是兩個,要不降低org.apache.jasper的版本,要不提升el的版本。考慮到現(xiàn)在使用的jetty已經(jīng)是最新的版本8.1.2.v20120308,因此提升EL的版本為2.2更為合適。  閱讀全文

    posted @ 2012-05-25 07:11 sky ao 閱讀(11100) | 評論 (2)編輯 收藏

    解決jenkins執(zhí)行sonar時重復執(zhí)行兩次test的問題

         摘要: 在jenkins上建立了一個job,通過標準的maven命令來執(zhí)行打包測試和上傳artifact到nexus倉庫。隨后發(fā)現(xiàn)有些性能問題:sonar的job執(zhí)行時,需要重新update SCM,然后需要再次執(zhí)行test,之后才能進行真正屬于sonar的任務如代碼檢測等。明顯update SCM 和執(zhí)行test是重復了原有job,純屬浪費。這個重復執(zhí)行問題隨著測試案例和測試執(zhí)行時間的增加,會越來越明顯。因此需要考慮消除這里的重復問題,減少build的時間,并節(jié)約jenkins的資源。  閱讀全文

    posted @ 2012-02-14 14:53 sky ao 閱讀(5673) | 評論 (5)編輯 收藏

    搜索maven依賴的網(wǎng)站推薦

        使用maven填寫依賴的時候,常會遇到需要查一下groupId/artifactId和version,有時候還要看看有沒有新的版本更新。 

        原來一直用http://mvnrepository.com/ 這個網(wǎng)站來搜索,最近發(fā)現(xiàn)maven官網(wǎng)也提供了類似的功能,http://search.maven.org/。 

        簡單試用了一下search.maven.org,功能基本和mvnrepository.com相同,而且界面更簡潔友好。推薦使用。

    posted @ 2011-12-02 16:06 sky ao 閱讀(10620) | 評論 (4)編輯 收藏

    cloudfoundry介紹-(1)申請試用

         摘要: cloudfoundry是vmvare新推出來的開源PaaS平臺,我試用了一下,發(fā)現(xiàn)還是很不錯的,申請過程很簡單。發(fā)出來分享給大家,有需要的可以去申請,畢竟可以支持java的免費的空間實在太難得了。  閱讀全文

    posted @ 2011-06-11 13:52 sky ao 閱讀(10688) | 評論 (6)編輯 收藏

    解決gradle與sonar集成過程中的版本問題

         摘要: 初學gradle,一切都還在摸索的過程中。今天剛剛試圖將之前基于ant + ivy的一個小項目轉(zhuǎn)移到gradle下,結果在和sonar集成時出現(xiàn)問題.  閱讀全文

    posted @ 2011-05-15 13:12 sky ao 閱讀(5311) | 評論 (0)編輯 收藏

    easymock教程-自定義參數(shù)匹配器

         摘要: 雖然easymock中提供了大量的方法來進行參數(shù)匹配,但是對于一些特殊場合比如參數(shù)是復雜對象而又不能簡單的通過equals()方法來比較,這些現(xiàn)有的參數(shù)匹配器就無能為力了。easymock為此提供了IArgumentMatcher 接口來讓我們實現(xiàn)自定義的參數(shù)匹配器。  閱讀全文

    posted @ 2010-11-30 18:18 sky ao 閱讀(3150) | 評論 (0)編輯 收藏

    easymock教程-改變同一個方法調(diào)用的行為

         摘要: 在easymock中,對于mock對象的同一個方法,可以為每一次的調(diào)用定制不同的行為。在record階段easymock會精確的記錄我們錄入的行為,基于每一次的方法調(diào)用。  閱讀全文

    posted @ 2010-11-30 17:06 sky ao 閱讀(2539) | 評論 (0)編輯 收藏

    easymock教程-運行時返回值或者異常

         摘要: 前面的教程中,我們看到easymock可以通過expect方法來設定mock方法的返回值或者異常,但是注意這些案例中設置的返回值都是在調(diào)用被測試的類的方法前就已經(jīng)確定下來的,即我們其實在測試類的代碼運行前(實際是在EasyMock.replay()方法調(diào)用前)就已經(jīng)"預知"了返回結果。

    但是在某些情況下,我們可能無法預知返回值,比如我們需要根據(jù)輸入的參數(shù)值來決定返回什么,而這個參數(shù)可能無法在record階段獲得。因此在mock方法中我們無法在record階段就決定應該返回什么。

    對于這種場景,easymock提供了IAnswer接口和andAnswer()方法來提供運行時決定返回值或者異常的機制。  閱讀全文

    posted @ 2010-11-30 16:36 sky ao 閱讀(3607) | 評論 (0)編輯 收藏

    easymock教程-partial class mocking

         摘要: easymock中提供對于類的mock功能,我們可以方便的mock這個類的某些方法,指定預期的行為以便測試這個類的調(diào)用者。這種場景下被mock的類在測試案例中扮演的是次要測試對象或者說依賴的角色,主要測試對象是這個mock類的調(diào)用者。但是有時候我們需要將這個測試類作為主要測試對象,我們希望這個類中的部分(通常是大部分)方法保持原有的正常行為,只有個別方法被我們mock掉以便測試。  閱讀全文

    posted @ 2010-11-30 14:23 sky ao 閱讀(3113) | 評論 (0)編輯 收藏

    easymock教程-參數(shù)匹配

         摘要: easymock中提供了非常多的方法來實現(xiàn)參數(shù)匹配,基本能滿足一般參數(shù)匹配的要求。  閱讀全文

    posted @ 2010-11-29 18:57 sky ao 閱讀(4924) | 評論 (2)編輯 收藏

    easymock教程-命名mock對象

         摘要: 在創(chuàng)建mock對象的時候,我們可以命名mock對象。
    命名mock對象有什么好處呢?其實就是一點,即在當測試案例因為某個mock對象的狀態(tài)或行為不符合要求而失敗的時候,在異常信息里面可以輸出這個mock對象的名稱。  閱讀全文

    posted @ 2010-11-29 16:34 sky ao 閱讀(2491) | 評論 (1)編輯 收藏

    easymock教程-放寬調(diào)用次數(shù)

         摘要: 對于mock對象上的mock方法的調(diào)用,easymock支持指定次數(shù),默認為1.同時easymock提供了其他的方法,用于指定具體調(diào)用次數(shù)或者放寬調(diào)用次數(shù)檢驗。  閱讀全文

    posted @ 2010-11-29 15:55 sky ao 閱讀(1801) | 評論 (0)編輯 收藏

    easymock教程-mock的限制

         摘要: easymock并不是萬能的,在使用easymock時有一些限制需要注意。  閱讀全文

    posted @ 2010-11-25 11:12 sky ao 閱讀(3305) | 評論 (0)編輯 收藏

    easymock教程-創(chuàng)建stub對象

         摘要:
    前面教程中有個章節(jié)討論到mock和stub的概念差別,一般來說easymock如其名所示,主要是用來做mock用的,但是easymock中也提供有對stub的支持, 主要體現(xiàn)在andStubAnswer(),andStubDelegateTo(),andStubReturn(),andStubThrow()和asStub()等方法的使用上。  閱讀全文

    posted @ 2010-11-23 17:51 sky ao 閱讀(2137) | 評論 (0)編輯 收藏

    sonar 與 NOSONAR


        大家都知道sonar是個好東東,在有CI支持的情況下,使用好了可以非常好的控制代碼的質(zhì)量,諸如代碼覆蓋率,代碼規(guī)則檢查等。 

        而解決violation的辦法,除了正統(tǒng)的修改代碼來滿足規(guī)則外,還有一個變通的方法, NOSONAR。這個標記本意是在一些特殊情況,有不得已的理由不得不違反規(guī)則,為了避免sonar繼續(xù)報錯而不得已做了一個"變通"。 

        NOSONAR本意雖好,但要是有人濫用,變通就會變成取巧,因為解決sonar violation的最簡單的方法,就是直接NOSONAR! 

        當問題很簡單時,一般人都會選擇正常的方式修改代碼,如果只是舉手之勞基本上還是能遵守規(guī)則的。但是當問題復雜時,或者說當解決問題不再是舉手之勞時,每個人都要受到NOSONAR的誘惑。而NOSONAR的底線在哪里?沒有人定義,沒有人檢測,自然不會每個人都堅守,NOSONAR的底線隨著一個一個的NOSONAR慢慢的在降低。退五十步的人,是沒有資格笑百步的。 

        返回到現(xiàn)實代碼中,不知道是大家都沒有頂住誘惑,還是說我們開啟的規(guī)則不大合理,總之越來越頻繁的在代碼中看到NOSONAR了,雖然還沒有到泛濫的地步,但是已經(jīng)讓我有些不安了。簡單搜索了一下剛才讓我感覺到很多NOSONAR的project,結果是58個。 

        更糟糕的是,每個NOSONAR后面都不會帶有注釋說明為什么要NOSONAR,因此一個個飛舞的NOSONAR就變成了一個個謎團。想知道為什么要NOSONAR嗎?恩,你猜...... 

        我沒有辦法去檢查這個58個NOSONAR是不是都合理的,都站得住腳的。出于程序員的習慣,對于一切不可確認性都報以懷疑的眼光和質(zhì)疑的姿態(tài),我總覺得這58個NOSONAR讓我總是沒有底,每次我看到sonar上100%的規(guī)則檢測通過率時,我總是禁不住在心里浮現(xiàn)NOSONAR的字樣。 

        好吧,我承認,我是個心里有些陰暗的家伙...... 

    posted @ 2010-11-22 11:04 sky ao 閱讀(3914) | 評論 (2)編輯 收藏

    easymock教程-strict和nice

         摘要: 在easymock的使用過程中,當創(chuàng)建mock對象時,我們會遇到 strict mock和nice mock的概念。上述的測試案例驗證了strict mock和nice mock的基本使用,對于同一個mock對象,strict模式下多個方法之間的調(diào)用順序在record階段和replay階段下是需要保持一致的。但是故事并不是到此結束,更有意思的內(nèi)容在后面:如果出現(xiàn)多個mock對象,那么這些不同mock對象的方法之間,他們的調(diào)用順序是否檢測?普通mock和nice mock模式下自然是不會檢測順序,但是strict模式下呢?

      閱讀全文

    posted @ 2010-11-19 11:39 sky ao 閱讀(2623) | 評論 (0)編輯 收藏

    easymock教程-使用MockControl

         摘要: IMocksControl接口容許創(chuàng)建多個mock對象,這些創(chuàng)建的對象自動關聯(lián)到這個mocksControl實例上,以后再調(diào)用replay()/verify()/reset()時就不需要逐個列舉出每個mock對象。當mock對象比較多,尤其是原有代碼上新增mock 對象時非常方便。
      閱讀全文

    posted @ 2010-10-26 17:18 sky ao 閱讀(2616) | 評論 (0)編輯 收藏

    easymock教程-class mocking

         摘要: 前面的例子中,mock的對象都是基于interface,雖然說我們總是強調(diào)要面對接口編程,而不要面對實現(xiàn),但是實際開發(fā)中不提取interface而直接使用class的場景非常之多。尤其是一些當前只有一個明確實現(xiàn)而看不到未來擴展的類,是否應該提取interface或者說是否應該現(xiàn)在就提取interface,總是存在爭論。

    這種情況下,我們就會面臨主要測試對象依賴到一個具體類而不是interface的情況,easymock中通過class extension 來提供對class mocking的支持。  閱讀全文

    posted @ 2010-10-26 16:54 sky ao 閱讀(2021) | 評論 (0)編輯 收藏

    easymock教程-easymock的典型使用

         摘要: 關于easymock的典型使用方式,在easymock的官網(wǎng)文檔中,有非常詳盡的講解,文檔地址為 http://easymock.org/EasyMock3_0_Documentation.html,文檔的開頭一部分內(nèi)容都是easymock中最基本的使用介紹,雖然是英文,但是非常容易看懂,適用新學者入門。

    這里只羅列一些簡單的常用功能。
      閱讀全文

    posted @ 2010-10-15 17:14 sky ao 閱讀(13866) | 評論 (0)編輯 收藏

    easymock教程-record-replay-verify模型

         摘要: record-replay-verify 模型容許記錄mock對象上的操作然后重演并驗證這些操作。這是目前mock框架領域最常見的模型,幾乎所有的mock框架都是用這個模型,有些是現(xiàn)實使用如easymock,有些是隱式使用如jmockit。

    record-replay-verify 模型非常好的滿足了大多數(shù)測試場景的需要:先指定測試的期望,然后執(zhí)行測試,再驗證期望是否被滿足。這個模型簡單直接,易于實現(xiàn),也容易被開發(fā)人員理解和接受,因此被各個mock框架廣泛使用。  閱讀全文

    posted @ 2010-10-15 14:50 sky ao 閱讀(3841) | 評論 (0)編輯 收藏

    easymock教程-單元測試中的主要測試對象和依賴

         摘要: 在單元測試中,通常我們都會有一個明確的測試對象,我們測試的主要目的就是為了驗證這個類的工作如我們預期。  閱讀全文

    posted @ 2010-10-14 14:01 sky ao 閱讀(1732) | 評論 (0)編輯 收藏

    easymock教程-目錄

         摘要: easymock是目前java mock 工具中比較流行的工具,這個教程將系統(tǒng)的介紹easymock的使用。

    主要內(nèi)容來自easymock的官網(wǎng)教程,針對日常使用進行了一些篩選和補充,另外增加一些個人的理解和認識。

    另外考慮到網(wǎng)絡上已有不少分散的教程,我將適當?shù)逆溄舆M來。

    教程的內(nèi)容將在隨后逐漸添加,目前計劃的目錄如下,相應內(nèi)容完成之后我將逐個更新此文的鏈接。  閱讀全文

    posted @ 2010-10-14 10:44 sky ao 閱讀(2996) | 評論 (3)編輯 收藏

    hudson中subversion HEAD check out 的問題及疑惑

    近期發(fā)現(xiàn)一個問題,hudson執(zhí)行任務時,經(jīng)常不能獲取到最新的代碼,從而導致出現(xiàn)各種問題。 

    日常開發(fā)中的典型例子:發(fā)現(xiàn)一個bug,修改代碼,本地測試通過,提交代碼到subversion,手工激活hudson構建,原本期望hudson獲取到剛剛提交的代碼并測試/打包/發(fā)布。結果事與愿違,測試的結果發(fā)現(xiàn)剛剛做出的修改似乎沒有生效。正費解之時,再執(zhí)行一次hudson構建,又成功了... 

    經(jīng)歷過幾次上述蹊蹺遭遇之后,發(fā)現(xiàn)這個問題不是偶然。之后檢查hudson的日志,發(fā)現(xiàn)問題的發(fā)現(xiàn)在最開始update / check out subversion代碼時,明明已經(jīng)提交的代碼,hudson做update / check out時,居然沒有update / check out下來!顯示的subversion版本號也和subversion上實際的最新版本不一致,hudson總是要小一些,換言之,hudson update / check out的代碼要比當前最新代碼老一些。 

    google一番,發(fā)現(xiàn)這個問題之前就有人遭遇過,hudson上甚至已經(jīng)有了好幾個關于這個問題的bug,比如 http://issues.hudson-ci.org/browse/HUDSON-1241 "force using HEAD SVN version for build"。問題的根源在于hudson 獲取subversion代碼的方式,hudson是通過時間戳的方式來獲取代碼,而不是我們一般認為的"最新代碼"即"HEAD"。這種方式通常沒有問題,因為獲取當前時間戳,然后要求update / checkout這個時間戳前的代碼,理論上也是可以拿到最新代碼的。 

    但是,如果hudson所在的服務器和subversion服務器時間不一致,這個機制就會出現(xiàn)問題: 

    我們假設subversion服務器的時間是準確的,再假設當時時間是15:10分,開發(fā)人員A提交代碼,subversion上當前這個最新提交的代碼時間戳為15:10:00。然后開發(fā)人員A手工激活hudson進行構建。hudson在15:10:20時開始check out代碼。如果hudson時間無誤,則hudson會發(fā)出請求說要求獲取時間戳在15:10:20之前的代碼,這樣這個實際提交時間為15:10:00的新代碼就可以如期的被check out。但是如果hudson的時鐘有誤,由于某些原因?qū)е聲r鐘偏慢2分鐘,即在hudson上,"當前時間"為"15:08:20",則hudson獲取代碼的請求為:獲取時間戳為15:08:20之前的代碼,此時時間戳為15:10:00的新代碼就無法checkout。 

    幾分鐘之后,疑惑的開發(fā)人員A再次激活hudson再次構建,假設此時時間時間是15:15:00,hudson慢兩分鐘為15:13:00。此時hudson發(fā)出請求: 獲取時間戳為15:13:00之前的代碼, 因此實際提交時間為15:10:00的新代碼可以正常checkout,問題又在不知不覺被回避了。 

    總結說,hudson 獲取代碼的機制不是我們直覺中的獲取最新代碼(即subversion中HEAD checkout),而是基于時間戳。由于這個方式通常如HEAD般工作,因此我們總是容易誤解為是獲取最新代碼。當hudson的時鐘晚于subversion時,悲劇就出現(xiàn)了。 

    對這個問題,有幾點疑惑: 

    1. 不明白為什么hudson不采用最直接最簡單最容易被人理解最不容易出誤解的HEAD checkout,而要基于時間戳 

    2. 這個問題很早就發(fā)生了,上面提到的bug 08年就被人提出, "Created: 31/Jan/08 05:37 AM   Updated: 01/Jul/10 11:06 AM",三年了類似的bug被多次提出,但是就是始終沒有修復。 

    修復的方式很簡單,就改一個類的一行代碼 

    in Class: hudson.scm.SubversionSCM 

    line 377: 
    final SVNRevision revision = SVNRevision.create(timestamp); 
    replace to: 
    final SVNRevision revision = SVNRevision.HEAD; 

    hudson拒絕修復的理由是什么?

    posted @ 2010-09-29 23:02 sky ao 閱讀(2682) | 評論 (0)編輯 收藏

    Maven 3.0 RC1 版本發(fā)布

        
    Maven 3.0 的第一個RC版本終于發(fā)布了,下面是sonatype給出的發(fā)布信息:
    http://www.sonatype.com/people/2010/09/please-try-maven-3-0-rc1/

    Maven 在apache上的頁面目前還沒有放出RC1版本。下面是關于mavne3.*版本相對于2.* 版本的改進列表:

    https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes

    PS: 坦言說,改進很少,尤其沒有大的功能改進,有點失望。

    修訂:上面的URL是兼容性列表,因此看起來和2.*差別不大,是我理解錯了,抱歉。

    posted @ 2010-09-20 10:08 sky ao 閱讀(1922) | 評論 (0)編輯 收藏

    confluence 3.3.1 linux安裝筆記

         摘要: 最新版本的confluence 3.3.1 linux 安裝筆記。  閱讀全文

    posted @ 2010-09-18 15:20 sky ao 閱讀(4862) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: www.亚洲色图| 亚洲大片免费观看| 日韩免费无码视频一区二区三区| 亚洲欧洲久久精品| 国产片免费在线观看| 国产自国产自愉自愉免费24区| 亚洲免费闲人蜜桃| 亚洲综合最新无码专区| 国产成人精品免费视| 美女扒开屁股让男人桶爽免费| 亚洲αv久久久噜噜噜噜噜| 国产在线国偷精品产拍免费| 99麻豆久久久国产精品免费 | 免费欧洲美女牲交视频| 一级毛片免费观看不卡的| 亚洲AV无码片一区二区三区 | 又硬又粗又长又爽免费看 | 99久热只有精品视频免费观看17| 亚洲AV无码一区二区一二区| 亚洲高清在线观看| 免费a级毛片网站| 免费视频爱爱太爽了| 中文字幕久无码免费久久| 亚洲国产精品无码久久| 亚洲黄色三级网站| 亚洲香蕉成人AV网站在线观看 | 国产成人精品日本亚洲11| 国产精品久久久亚洲| 亚洲七七久久精品中文国产| 成人免费a级毛片无码网站入口| 国产无遮挡裸体免费视频在线观看 | 免费一级毛片正在播放| 色婷婷7777免费视频在线观看| 毛片在线全部免费观看| 一区在线免费观看| 狼人大香伊蕉国产WWW亚洲 | 久久九九免费高清视频| 美美女高清毛片视频黄的一免费| 91丁香亚洲综合社区| 亚洲第一永久在线观看| 久久久久亚洲精品成人网小说|