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

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

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

    posts - 167,  comments - 30,  trackbacks - 0
         摘要:   閱讀全文
    posted @ 2017-09-04 16:33 David1228 閱讀(305) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-08-02 11:41 David1228 閱讀(320) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-07-24 19:10 David1228 閱讀(11391) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-07-19 18:10 David1228 閱讀(3433) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-06-06 23:10 David1228 閱讀(292) | 評論 (0)編輯 收藏
    Netty客戶端與服務端通信
    posted @ 2017-06-06 23:09 David1228 閱讀(244) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-05-30 19:26 David1228 閱讀(3283) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-05-30 19:25 David1228 閱讀(1254) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2016-12-22 23:01 David1228 閱讀(4616) | 評論 (2)編輯 收藏
         摘要:   閱讀全文
    posted @ 2016-11-04 23:44 David1228 閱讀(2297) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2016-07-28 17:57 David1228 閱讀(401) | 評論 (0)編輯 收藏
         摘要: JVM調優總結 + jstat 分析jstat -gccause pid 1 每格1毫秒輸出結果jstat -gccause pid 2000 每格2秒輸出結果不斷的在屏幕打印出結果  S0     S1     E     &n...  閱讀全文
    posted @ 2016-01-03 23:26 David1228 閱讀(2997) | 評論 (2)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-12-27 16:49 David1228 閱讀(1089) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-10-31 12:37 David1228 閱讀(669) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-10-30 20:20 David1228 閱讀(2879) | 評論 (0)編輯 收藏
    轉載文章:http://www.qixing318.com/article/by-lua-adhesive-nginx-ecological-environment.html
    posted @ 2015-09-08 13:22 David1228 閱讀(512) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-09-08 09:34 David1228| 編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-07-29 13:48 David1228 閱讀(5555) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2014-12-03 23:56 David1228 閱讀(28338) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-11-19 11:48 David1228 閱讀(23742) | 評論 (1)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-11-18 18:01 David1228 閱讀(2901) | 評論 (4)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-10-31 17:32 David1228 閱讀(705) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-10-14 09:50 David1228 閱讀(21753) | 評論 (6)編輯 收藏
    Hibernate不支持left join帶on的條件查詢。
    解決辦法:使用原生SQL或者使用HQL方式需要修改hbm文件(如果項目中大部分不適用級聯配置情況下)
    需求是查詢網絡信息,網絡信息中關聯了分區、網絡IP(1個網絡--N個網絡IP),網橋信息.
    HQL:
    public void queryVnets(Page page) {
            StringBuffer hql = new StringBuffer();
            hql.append("select new Map(vn.id as id, vn.vnName as vnName, b.name as vnType, ");
            hql.append("vn.vnIptype as vnIptype, vn.vnIp as vnIp,vn.vnNat as vnNat, vn.vnFlag as vnFlag, ");
            hql.append("vn.vnetFlag as vnetFlag, (case when sum(vmvn.state)='0' then 0 else 1 endas vnState, ");
            hql.append("vn.useType as useType, vn.createTime as createTime, ");
            hql .append("zone.oneName as oneName, zone.oneHypervisor as oneHypervisor, zone.oneSeq as oneSeq) ");
            hql.append("from VnetTable vn, ZoneTable zone, BridgeTable b ");
            hql.append("left join fetch vn.VnTables vmvn where zone.id = vn.zoneId and vn.vnType = b.id ");

            ... ...
            hql.append(" group by vn.id");
            if (vnState != null && !"".equals(vnState)) {
                if ("0".equals(vnState)) {
                    hql.append(" having sum(vmvn.state)=0");
                } else if ("1".equals(vnState)) {
                    hql.append(" having sum(vmvn.state)!=0");
                }
            }
        }

    hbm配置文件:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.base.mapping.VnetTable" table="vnet_table" >
            <id name="id" type="java.lang.String">
                <column name="ID" length="32" />
                <generator class="uuid.hex" />
            </id>
            <property name="vnId" type="java.lang.Long">
                <column name="VN_ID">
                    <comment>創建虛擬網絡時得到的ID</comment>
                </column>
            </property>
             ...
            <property name="zoneId" type="java.lang.String">
                <column name="ZONE_ID" length="32">
                    <comment>分區ID</comment>
                </column>
            </property>
            <property name="vlanId" type="java.lang.Integer">
                <column name="VLAN_ID">
                    <comment>VLAN_ID</comment>
                </column>
            </property>
            <set name="vnTables" lazy="false" order-by="id asc" inverse="false" fetch="join" cascade="all">
                <key column="VN_NID"/>
                <one-to-many class="com.base.mapping.VnTable"/>
            </set>
        </class>
    </hibernate-mapping>

    理解inverse和cascade,可以參考:http://blog.csdn.net/wkcgy/article/details/6271321
    總結: 
    <one-to-many>中,建議inverse=”true”,由“many”方來進行關聯關系的維護 
    <many-to-many>中,只設置其中一方inverse=”false”,或雙方都不設置 
    Cascade,通常情況下都不會使用。特別是刪除,一定要慎重。
    操作建議 
      一般對many-to-one和many-to-many不設置級聯,這要看業務邏輯的需要;對one-to-one和one-to-many設置級聯。
      many-to-many關聯關系中,一端設置inverse=”false”,另一端設置為inverse=”true”。在one-to-many關聯關系中,設置inverse=”true”,由多端來維護關系表










    posted @ 2013-09-12 11:57 David1228 閱讀(16680) | 評論 (2)編輯 收藏
    -- 以下兩個查詢效率相當,查詢時間均為0.0xx秒,~ 但是Hibernate HQL不支持from后面接子查詢,可以直接使用SQL方式解決,ibatis當然可以用了。
    SELECT count(*from (
    SELECT sum(t2.STATE) as vnSum, t1.ID FROM
    vnetinfo_table t1, vm_vn_table t2 
    where t1.ID = t2.VN_NID and t1.ZONE_ID = '4028a49c3facdf26013fae12531b286e' GROUP BY t1.ID) t where t.vnSum = 0;

    SELECT count(*) FROM vnetinfo_table v ,(
    SELECT sum(t2.STATE) as vnSum, t1.ID as idd FROM
    vnetinfo_table t1, vm_vn_table t2 
    where t1.ID = t2.VN_NID and t1.ZONE_ID = '4028a49c3facdf26013fae12531b286e' GROUP BY t1.ID) t
    where v.ID = t.idd and t.vnSum = 0;

    -- 查詢效率太低了,查詢時間均為0.5xx秒左右。要比以上兩個SQL耗時很多倍。~ Hibernate支持在where后用子查詢作為查詢條件。
    SELECT count(*) FROM vnetinfo_table v WHERE v.id in 
    (SELECT CASE WHEN SUM(t2.STATE)=0 THEN t1.ID ELSE '' END
    FROM vnetinfo_table t1, vm_vn_table t2 
    where t1.ID = t2.VN_NID and t1.ZONE_ID = '4028a49c3facdf26013fae12531b286e' GROUP BY t1.ID);

    -- 使用join方式替換in 查詢時間均為0.09x秒左右。明顯提高了效率,但是Hibernate HQL任然不支持在這種聯合子查詢方式。
    SELECT count(*) FROM vnetinfo_table v INNER JOIN (SELECT CASE WHEN SUM(t2.STATE)=0 THEN t1.ID ELSE '' END as idd
    FROM vnetinfo_table t1, vm_vn_table t2 
    WHERE t1.ID = t2.VN_NID and t1.ZONE_ID = '4028a49c3facdf26013fae12531b286e' GROUP BY t1.ID) t ON v.ID = t.idd and t.idd IS not NULL;

    附:Mysql中關于Exists用法的介紹請參見:http://www.nowamagic.net/librarys/veda/detail/639
    posted @ 2013-08-21 13:47 David1228 閱讀(3757) | 評論 (2)編輯 收藏
    md5sum命令詳解:
    linux下的shell命令 ,制作md5碼 也用于軟件的md5校驗
    MD5算法常常被用來驗證網絡文件傳輸的完整性,防止文件被人篡改。MD5 全稱是報文摘要算法(Message-Digest Algorithm 5),此算法對任意長度的信息逐位進行計算,產生一個二進制長度為128位(十六進制長度就是32位)的“指紋”(或稱“報文摘要”),不同的文件產生相同的報文摘要的可能性是非常非常之小的。
    在linux或Unix上,md5sum是用來計算和校驗文件報文摘要的工具程序。一般來說,安裝了Linux后,就會有md5sum這個工具,直接在命令行終端直接運行。
    1、使用md5sum來產生指紋(報文摘要)命令如下:
    md5sum filename > filename.md5 或者
    md5sum filename >>filename.md5
    也可以把多個文件的報文摘要輸出到一個md5文件中,這要使用通配符*,比如某目錄下有幾個iso文件,要把這幾個iso文件的摘要輸出到iso.md5文件中,命令如下:
    md5sum *.iso > iso.md5
    2、使用md5報文摘要驗證文件,方法有二:
    把下載的文件file和該文件的file.md5報文摘要文件放在同一個目錄下,然后用如下命令進行驗證:
    md5sum -c file.md5
    然后如果驗證成功,則會輸出:正確結果。
    實戰案例:
    需求:虛擬機存在多份備份,當進行備份恢復時,要求檢查源備份壓縮文件的完整性。那么可以通過md5這種方式來驗證。
    壓縮備份文件并生成md5碼,部分shell腳本如下:
    #----------------------------------
    log "Compressing and moving $SRC_PATH"
    exec_and_log "$SSH $SRC_HOST mkdir -p ${SRC_PATH}_compress"
    for file in `$SSH $SRC_HOST ls $SRC_PATH | grep -v $SN_SIGN`
    do
         exec_and_log "$SSH $SRC_HOST cd $SRC_PATH;sudo chmod -R +r $SRC_PATH/*;tar -Sczvf ${SRC_PATH}_compress/${file}.tgz ${file}"
    done
    #----------------------------------

    #--------------md5 begin-----------------
    log "Create backup.md5"
    exec_and_log "$SSH $SRC_HOST $MD5SUM ${SRC_PATH}_compress/*.tgz > ${SRC_PATH}_compress/backup.md5"
    #--------------md5 end-----------------

    #其中 exec_and_log是另一個公共腳本中定義的。shell中可以通過點(.)的方式將腳本引入。該函數內如下:
    # Executes a command, if it fails returns error message and exits
    # If a second parameter is present it is used as the error message when
    # the command fails
    function exec_and_log
    {
        message=$2

        EXEC_LOG_ERR=`$1 2>&1 1>/dev/null`
        EXEC_LOG_RC=$?

        if [ $EXEC_LOG_RC -ne 0 ]; then
            log_error "Command \"$1\" failed: $EXEC_LOG_ERR"

            if [ -n "$2" ]; then
                error_message "$2"
            else
                error_message "Error executing $1: $EXEC_LOG_ERR"
            fi
            exit $EXEC_LOG_RC
        fi
    }

    # Logs a message, alias to log_info
    function log
    {
        log_info "$1"
    }

    # Log function that knows how to deal with severities and adds the
    # script name
    function log_function
    {
        echo "$1: $SCRIPT_NAME: $2" 1>&2
    }

    # Logs an info message
    function log_info
    {
        log_function "INFO" "$1"
    }

    # Logs an error message
    function log_error
    {
        log_function "ERROR" "$1"
    }

    # This function is used to pass error message to the mad
    function error_message
    {
        (
            echo "ERROR MESSAGE --8<------"
            echo "$1"
            echo "ERROR MESSAGE ------>8--"
        ) 1>&2
    }

    生成的backup.md5內容:
    $ md5sum *.tgz > backup.md5 
    2c07174d451a687bc0e401b1dc7d84b8  checkpoint.1376892493.tgz
    57a18d7f6eed36565b9012e519985130  checkpoint.1376903188.tgz
    b652990806e58a81b41dc1b23db9adda  checkpoint.1376904023.tgz
    f4e7adb46a8fde2643e082875cc60e21  checkpoint.1376904289.tgz
    ad2a59902652e2896b35507417b7016f  checkpoint.tgz
    4bd43eac64f238bb35c7194816da7d23  deployment.0.tgz
    ee3d9266cf92f7540cc75a94343bc20a  deployment.7.tgz
    fcd5aae37354b5cb66f4b90544eaa5c3  disk.0.tgz
    c1ef6d911b441660ec2d1e44b5a56f66  disk.1.iso.tgz
    25eae70a31a7c7cff3baade4cd65fe82  disk.1.tgz

    檢查備份文件是否完整:
    exec_and_log "$SSH $SRC_HOST $MD5SUM -c ${SRC_PATH}/backup.md5"

    檢測結果:
    $ md5sum -c backup.md5 
    checkpoint.1376892493.tgz: OK
    checkpoint.1376903188.tgz: OK
    checkpoint.1376904023.tgz: OK
    checkpoint.1376904289.tgz: OK
    checkpoint.tgz: OK
    deployment.0.tgz: OK
    deployment.7.tgz: OK
    disk.0.tgz: OK
    disk.1.iso.tgz: OK
    disk.1.tgz: OK
    posted @ 2013-08-20 11:34 David1228 閱讀(2440) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-08-20 09:46 David1228 閱讀(392) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-08-20 09:44 David1228 閱讀(393) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-07-24 16:11 David1228 閱讀(33410) | 評論 (0)編輯 收藏
         摘要: 根據官方的說法,在ibatis3,也就是Mybatis3問世之前,Spring3的開發工作就已經完成了,所以Spring3中還是沒有對Mybatis3的支持。因此由Mybatis社區自己開發了一個Mybatis-Spring用來滿足Mybatis用戶整合Spring的需求。下面就將通過Mybatis-Spring來整合Mybatis跟Spring的用法做一個簡單的介紹。MapperFactoryB...  閱讀全文
    posted @ 2013-07-10 18:07 David1228 閱讀(21427) | 評論 (2)編輯 收藏

    不得不承認的是,在目前的web應用開發中,Spring的應用越來越廣泛,其地位變得相當重要。而在最近推出的Spring 3.2版本中,又引入了一些新的值得關注的特性。本文中將介紹其中一些值得關注的新特性。

    一 不再需要web.xml

     在新的Spring 3.2中,可以不再需要web.xml這個文件了,這得益于Servlet 3.0的新特性。

    其中,可以使用@WebServlet在需要調用的servlet中,使用注解去設置servlet中的映射關系。這樣的話,就可以不再象以往那樣要通過在web.xml中對servlet進行配置,十分方便。

    此外,Servlet 3.0提供了既能在容器中動態注冊servlet的方法,也提供了通過實現

    ServletContainerInitializer接口的方法實現在容器啟動階段為容器動態注冊Servlet、Filter和listeners。容器會在應用的啟動階段,調用所有實現ServletContainerInitializer接口類中的onStartup()方法。而Spring 3.2中,則進一步簡化了這點,只需要實現WebApplicationInitializer接口就可以了,其中提供了一個相關的實現類--AbstractContextLoaderInitializer,它可以動態注冊DispatcherServlet。這意味著,只要spring-webmvc.jar放置在web應用的web-inf/lib中,就可以調用Dispatcher servlet了。可以參考如下的例子(來自Spring文檔):

    1. public class MyWebApplicationInitializer implements WebApplicationInitializer { 
    2.  
    3.     @Override 
    4.     public void onStartup(ServletContext container) { 
    5.         ServletRegistration.Dynamic registration = container.addServlet("dispatcher"new DispatcherServlet()); 
    6.         registration.setLoadOnStartup(1); 
    7.         registration.addMapping("/example/*"); 
    8.     } 
    9.  

    二 支持Java編程式配置在Spring mvc 3.2中,一個不錯的特性就是在之前版本中支持使用Java代碼配置各種依賴注入的基礎上,進一步簡化了配置。關于使用Java編程式配置的好處,可以通過下面這個鏈接文章的介紹去學習

    http://blog.frankel.ch/consider-replacing-spring-xml-configuration-with-javaconfig)。
    在Spring mvc 3.2中,提供了AbstractContextLoaderInitialize的一個子類AbstractAnnotationConfigDispatcherServletInitializer去實現零XML配置的效果,只需要創建的類繼承AbstractAnnotationConfigDispatcherServletInitializer就可以了,如下代碼所示:

    1. public  
    2.  
    3. class  
    4.  
    5. SugarSpringWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 
    6.  
    7.     @Override 
    8.     protected Class<?>[] getRootConfigClasses() { 
    9.         return new Class[] { JavaConfig.class }; 
    10.     } 
    11.  
    12.     @Override 
    13.     protected Class<?>[] getServletConfigClasses() { 
    14.         return new Class[] { WebConfig.class }; 
    15.     } 
    16.  
    17.     @Override 
    18.     protected String[] getServletMappings() { 
    19.         return new String[] { "/" }; 
    20.     } 
    21.  

    功能更強大的Spring Test 框架現在,單元測試顯得越來越重要了,每一個類都建議做好對應的單元測試。在Spring 3.2版本之前,如果要對Spring MVC進行單元測試的話,必須顯式去調用某個控制器類中的某個方法,而不能直接單元測試相關的mapping映射。而在Spring mvc 3.2中,重新整合和增強了測試框架的功能,支持直接用/*這樣的映射方式去測試某個控制器中的類。同時,之前的開源項目(https://github.com/SpringSource/spring-test-mvc也被收錄到Spring mvc 3.2中去了。此外,還新增加了對返回(return),重定向(redirect)model等的測試改進,下面是一個例子:

    1. public class SayHelloControllerIT extends AbstractTestNGSpringContextTests { 
    2.   
    3.     private MockMvc mockMvc; 
    4.   
    5.     @BeforeMethod 
    6.     public void setUp() { 
    7.   
    8.         mockMvc = webAppContextSetup((WebApplicationContext) applicationContext).build(); 
    9.     } 
    10.   
    11.     @Test(dataProvider = "pathParameterAndExpectedModelValue"
    12.     public void accessingSayhelloWithSubpathShouldForwardToSayHelloJspWithModelFilled(String path, String value) throws Exception { 
    13.   
    14.         mockMvc.perform(get("/sayHello/Jo")).andExpect(view().name("sayHello")).andExpect(model().attribute("name""Jo")); 
    15.     } 

    本文的示例代碼可以在: http://blog.frankel.ch/wp-content/resources/spring-3-2-sweetness/spring-sweet-1.0.0.zip中下載。

    原文鏈接:http://java.dzone.com/articles/spring-32-sweetness

    posted @ 2013-07-10 11:48 David1228 閱讀(2345) | 評論 (0)編輯 收藏
         摘要: 本文轉載自:http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html場景問題  舉個生活中常見的例子——組裝電腦,我們在組裝電腦的時候,通常需要選擇一系列的配件,比如CPU、硬盤、內存、主板、電源、機箱等。為討論使用簡單點,只考慮選擇CPU和主板的問題。  事實上,在選擇CPU的時候,面臨一系列的...  閱讀全文
    posted @ 2013-07-04 17:07 David1228 閱讀(400) | 評論 (0)編輯 收藏
    shell中可能經常能看到:>/dev/null 2>&1 

    命令的結果可以通過%>的形式來定義輸出

    分解這個組合:“>/dev/null 2>&1” 為五部分。

    1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
    2:/dev/null 代表空設備文件
    3:2> 表示stderr標準錯誤
    4:& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1
    5:1 表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同于 "1>/dev/null"

    因此,>/dev/null 2>&1 也可以寫成“1> /dev/null 2> &1”

    那么本文標題的語句執行過程為:
    1>/dev/null :首先表示標準輸出重定向到空設備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。
    2>&1 :接著,標準錯誤輸出重定向 到 標準輸出,因為之前標準輸出已經重定向到了空設備文件,所以標準錯誤輸出也重定向到空設備文件。

    最常用的方式有:
        
    command > file 2>file  與command > file 2>&1

    它們有什么不同的地方嗎?
          首先command > file 2>file 的意思是將命令所產生的標準輸出信息,和錯誤的輸出信息送到file 中.command  > file 2>file 這樣的寫法,stdout和stderr都直接送到file中, file會被打開兩次,這樣stdout和stderr會互相覆蓋,這樣寫相當使用了FD1和FD2兩個同時去搶占file 的管道。
          而command >file 2>&1 這條命令就將stdout直接送向file, stderr 繼承了FD1管道后,再被送往file,此時,file 只被打開了一次,也只使用了一個管道FD1,它包括了stdout和stderr的內容。
          從IO效率上,前一條命令的效率要比后面一條的命令效率要低,所以在編寫shell腳本的時候,較多的時候我們會command > file 2>&1 這樣的寫法。
     
    以上轉載自:http://sjolzy.cn/shell-in-the-dev-null-2-gt-amp-1-Detailed.html

    -
    -----------------------------------------------------------------------------------------------------
    那么,有這么個需求,我如何能判斷遠程主機上的某個文件是否存在呢,我能想到的有兩種方法,一種方法可以使用expect腳本,但是需要遠程主機上安裝expect包,但是只需要知道用戶名和密碼就可以了;第二種方法是要求兩臺主機之間做好ssh互信,然后如admin,那么通過shell可以直接判斷,但是文件宿主權限也需要是admin用戶下的。
    第二種方法腳本如下:
    #!/bin/bash

    ssh dst_host sh -s 2>&1 1>/dev/null <<EOF
    ls $NEW_DST_DIR
    EOF
    IS_EXIST=$?
    if [ "$IS_EXIST"x = "0"x ]; then
       echo "-The file exists------------------------------"
    else
       echo "No file-------------------------------"
    fi

    --大衛





    posted @ 2013-07-02 14:45 David1228 閱讀(957) | 評論 (0)編輯 收藏

    <2013年7月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章檔案

    新聞分類

    新聞檔案

    相冊

    收藏夾

    Java

    Linux知識相關

    Spring相關

    云計算/Linux/虛擬化技術/

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 358547
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久精品国产亚洲AV香蕉| 亚洲欧洲国产综合AV无码久久| 鲁大师在线影院免费观看| 亚洲国产亚洲综合在线尤物| 日本一区二区三区日本免费| 全亚洲最新黄色特级网站 | a级片免费在线观看| 亚洲最大在线观看| 99国产精品视频免费观看| 亚洲中文无码mv| 免费A级毛片无码免费视| 最好2018中文免费视频| 国产成人亚洲精品影院| 亚洲精品黄色视频在线观看免费资源 | 中文字幕在线免费看线人| 亚洲国产精品无码久久久| 免费在线观看黄网站| 24小时免费看片| 色噜噜亚洲男人的天堂| 在线观看免费a∨网站| 亚洲av日韩综合一区二区三区| 国产a级特黄的片子视频免费| 鲁丝片一区二区三区免费| 666精品国产精品亚洲| 一个人在线观看视频免费| AV激情亚洲男人的天堂国语| 亚洲国产天堂久久久久久| 1000部无遮挡拍拍拍免费视频观看| 成年免费大片黄在线观看com| 亚洲区小说区图片区QVOD| 全免费A级毛片免费看网站| 99re在线这里只有精品免费 | 成人免费大片免费观看网站| 国产日韩久久免费影院| 亚洲日本精品一区二区| 日本在线高清免费爱做网站| 亚洲av永久无码精品秋霞电影秋 | 亚洲码一区二区三区| 亚洲午夜福利717| 亚洲精品国产精品乱码不卡| 四虎影视免费在线|