青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

杰 & C++ & Python & DM

2012年9月6日

命令行下Java的編譯及運行(2)


  上篇博文中說明了如何通過命令編譯及運行自己的Java文件。但是當前都是以項目為單位的,如何組織項目中的文件以及對項目的編譯運行,是命令行編譯主要解決的問題。

  1. 項目組織
  我們以下面的項目作為樣例來說明:
Test/
|-- Test.jar
|-- classes
|   |-- Main.class
|   |-- OutterTest.class
|   `-- inner
|       `-- InnerTest.class
|-- run.py
|-- run.sh
`
-- src
    
|-- Main.java
    
|-- OutterTest.java
    `
-- inner
        `
-- InnerTest.java

  上面是一個項目:Test。其中,有兩個文件夾,src用來放置所有的源代碼,也就是.java文件;classes用來放置相應的.class文件。Test.jar是最終生成的jar文件,run.py和run.sh是項目的腳本文件。下面列出三個.java文件,只是簡單的顯示一句話:
// Main.java
import inner.*;
public class Main
{
    
public static void main(String[] args)
    {
        System.out.println(
"main: hello word!");

        OutterTest out1 
= new OutterTest();
        out1.hello();

        InnerTest in1 
= new InnerTest();
        in1.hello();
    }
}

// OutterTest.java
public class OutterTest
{
        
public void hello()
        {
                System.out.println(
"Hello OutterTest!");
        }
}

// InnerTest.java
package inner;
public class InnerTest
{
        
public void hello()
        {
                System.out.println(
"Hello InnerTest!");
        }
}

  注意上面的InnerTest類,它在package inner中,所以將InnerTest.java放在inner文件夾下,這樣可以保證統一。在Eclipse中,新建一個類時,會讓你填寫package名,然后Eclipse會為你新新建一個相應的文件夾。

  2. 項目編譯
  
  javac -d classes src/*.java src/inner/*.java
  
  由上一篇知道,javac中-d表示”指定存放生成的類文件的位置“,也就是將生成的.class文件放在-d指定的文件夾中。需要指出的是,classes文件夾是手動建立的。
  另外,javac還可以批量編譯.java文件,上面的命令表示編譯src目錄下的所以.java文件、編譯src/inner目錄下的所有.java文件。這樣就可以批量編譯.java文件,并將生成的.class文件放在classes文件夾中。這里同樣要指出一點,因為package inner的關系,會自動建立inner文件夾,并將所有package inner下的類文件.class放在classes/inner下。

  3.項目打包
  
  jar -cvf Test.jar -C classes/ .

  這個命令將會把classes下的所有文件(包括.class和文件夾等)打包為Test.jar文件。
  上篇博客中,介紹了參數-C的意義:-C  更改為指定的目錄并包含其中的文件,如果有任何目錄文件, 則對其進行遞歸處理。它相當于使用 cd 命令轉指定目錄下。
  注意后面的"."的用法,jar可以遞歸的打包文件夾,"."表示是當前文件夾。如果執行命令“jar -cvf Test.jar .”,表示將當前目錄下的所有文件及文件夾打包。所以上面的命令的意思就是“將classes下的所有文件打包為Test.jar”。

  4.項目運行
  
  java -cp Test.jar Main

  通過上面的命令就可以執行Test.jar中的Main.class。其中,cp指定了jar文件的位置。

  5. 腳本文件
  通過上面的幾步,我們就可以完成整個項目的編譯和運行。而且,通過src和classes兩個文件夾將源文件和目標文件分開,使項目比較整潔。但是如果每次編譯、運行都要輸入上面一系列命令,還是比較繁瑣的,尤其當項目文件較多時,這時通過腳本文件管理整個項目是明智的選擇。
  下面是項目的腳本文件run.py
import os
import sys

if __name__ == "__main__":

        ProjectJar 
= "Test.jar"

        
if sys.argv[1== "c":
                
print("Compile program.")

                src 
= "src/*.java src/inner/*.java"
                os.system(
"javac -d classes " + src)
                os.system(
"jar -cvf " + ProjectJar + " -C classes/ .")

        
if sys.argv[1== "r":
                
print("Run program.")
                os.system(
"java -cp " + ProjectJar + " Main")

        
print("Over!")

  通過這個腳本文件,可以使用"python run.py c"完成項目的編譯、打包;使用"python run.py r"運行項目。

  通過這篇文章,我們已經了解了Java項目的管理方法,以及編譯、打包、運行的命令行,最后介紹了使用腳本文件有效管理項目。
  附件中包含整個項目,同時還包括一個run.sh,方便不熟悉python的人查看。
  附件: Test.tar

posted @ 2012-09-06 18:56 jaysoon 閱讀(3371) | 評論 (0)編輯 收藏

2012年8月22日

命令行下Java的編譯及運行(1)


  當前大部分開發者在開發Java程序時使用Eclipse,它可以方便的進行程序的編譯、打包和運行。但是不使用IDE,在完全的命令行下進行Java開發者從未用過的。在命令行下進行開發不是用來在展現自己有多牛,而是通過命令行開發,可以對Java的編譯、jar包等各個部分有一個深入了解。
  下面的幾篇博客將會對Java的編譯、打包和運行方法由淺入深的進行介紹。
  在這里使用的操作系統是Linux,并提供相應的shell和python腳本。

  首先介紹一下三個常用的命令:javac、jar、java。每個命令都有不同的參數,這些參數的用法會詳細介紹。

  1. javac
  javac的功能是對java源代碼進行編譯,將后綴為.java的文件編譯為.class的文件。javac的一般格式是
  javac <選項> <源文件>
  例如:
  javac Main.java
  會產生Main.class文件。
  
  javac的常用選項有:
  -classpath <路徑>      指定查找用戶類文件的位置
  -cp <路徑>                指定查找用戶類文件的位置(與上面的選項一樣,cp是classpath的簡寫)
  -d <目錄>                指定存放生成的類文件的位置

  2.jar
  jar的功能是根據選項將指定的一些.class文件打包為一個jar包。jar的一般格式是
  jar {ctxui}[vfm0Me] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
  例如,
  jar cvf Test.jar Main.class Bar.class
  它將Main.class和Bar.class打包為一個文件Test.jar。

  jar命令的選項比較多,用到選項包括:
  -c  創建新的歸檔文件
  -t  列出歸檔目錄
  -x  從檔案中提取指定的 (或所有) 文件
  -u  更新現有的歸檔文件
  -v  在標準輸出中生成詳細輸出
  -f  指定歸檔文件名
  -m  包含指定清單文件中的清單信息
  -e  為捆綁到可執行 jar 文件的獨立應用程序,指定應用程序入口點
  -C  更改為指定的目錄并包含其中的文件,如果有任何目錄文件, 則對其進行遞歸處理。

  例如,
  上例中的cvf參數,分別表示創建新的jar文件、創建時顯示jar包的信息(可以執行看一下)、指定jar包名為Test.jar。
  jar tf Test.jar      查看Test.jar的內容,其中t表示列出jar包內容,f指定jar包名
  jar xf Test.jar      解壓Test.jar文件
  jar xf Test.jar Main.class      僅解壓Test.jar中的Main.class文件
  這里要指出的是,f/m/e都指定一個名稱(jar包名, 清單文件名和入口點名稱),相應的名稱順序與參數的順序要一致。

  3.java
  java的功能是執行應用程序。java的一般格式是
  執行一個類:    java [ options ] class [ argument ... ]
  執行一個jar包:java [ options ] -jar file.jar [ argument ... ]
  例如:
  java Main
  執行Main.class,注意上面沒有.class后綴
  java Test.jar
  執行一個jar包,這個jar包中要指定了程序入口點(通過在MANIFEST.MF文件中指定)。

  常用的java的選項:
  -classpath<類搜索路徑>    指定用戶類文件的位置,可能為文件夾、zip、jar文件


  總結
  通過這篇內容,我們應用學會了如何使用javac編譯自己的類,并使用java執行自己的類。但是關于打包的操作及jar的執行比較復雜,將在以后繼續介紹。


  

posted @ 2012-08-22 15:45 jaysoon 閱讀(637) | 評論 (0)編輯 收藏

2012年8月17日

Java中計算中文的MD5值

Java中計算中文的MD5值
  前幾天的工作中,需要計算中文的MD5值,計算的函數接口及調用方式如下:
public static String getMD5(byte[] source);
String s 
= "中文編碼";
String md5_value 
= getMD5(s.getBytes());
  其中getBytes函數使用平臺默認的字符集將string編碼為byte序列。由于平臺的中文編碼方式可能不同,所以同一中文經過getBytes得到的二進制是不一樣的。為保證每次得到的結果一致,或者使用指定的編碼方式得到byte序列,應該在getBytes中使用參數。
String md5_value = getMD5(s.getBytes("utf-8"));
  這樣得到的值就是一樣的。

posted @ 2012-08-17 15:32 jaysoon 閱讀(1329) | 評論 (1)編輯 收藏

2012年5月14日

遇到java與crontab問題


  crontab命令是Unix/Linux中的一個常用命令,用于設置周期性被執行的指令。沒有用過的可以查一下,在運行服務端程序時會經常用到。

  程序使用Java讀取一個含有中文的文件,進行處理后,將結果寫到一個結果文件中。在運行的程序時,出現了這樣一個問題:在本地環境下,運行正確;但是當使用crontab定時執行時,得到的卻是錯誤的結果。

  經過一定的調研發現原來是對crontab的機制沒有弄明白導致的。crontab運行程序時,會使用它自己的環境變量,這個環境變量與你本地的環境變量可能會不同。比如,在你本地情況下,環境變量的語言為en_US.UTF-8,而在crontab中,環境變量可能是zh_CN.GBK,這樣會導致讀寫文件時——尤其是讀寫中文文件時內容編碼錯誤,進而導致結果出錯。

  所以在使用Java讀寫文件時,一定要指定編碼格式,而不是使用環境變量的格式。例如下面的語句用于讀取utf-8格式的文件

String encodeType = "utf-8";
File in_file 
= new File("test.txt");
BufferedReader reader 
= new BufferedReader(new InputStreamReader(new FileInputStream(in_file), encodeType));
  
  網上也有關于修改crontab環境變量的方法,但是我不建議使用,因為一個系統可能是很多人共用的,修改crontab環境變量可能會引起他人程序的問題,最好修改自己的程序,保證它不依賴具體的環境變量。



posted @ 2012-05-14 15:20 jaysoon 閱讀(861) | 評論 (0)編輯 收藏

2011年7月20日

算法的態度

很多同學和朋友經常向我抱怨說,算法已經成為他們學習和工作中的一個負擔。在他們看來,算法只能應付一下考試,在學習中沒有任何用處;也有人說,求職過程中考算法純粹是浪費精力,在實際工作中沒有用到任何算法。

在我的本科四年中,花了大量時間學習算法,參加算法比賽——成績很濫,朋友們都說,和我的付出嚴重不成比例,但是我一點也不后悔花費時間學習算法。算法讓我在平時的學習中應對各個科目都從容自如,學習起來事半功倍。

在平時的學習交流中,有時看其他人的代碼相當別扭,不是看不懂(有時真看不懂),而是很納悶,為什么要這么寫呢,明明有很明顯的順暢的思路,干嗎要寫這么繞呢?我將我覺得正確的思路寫出來的時候,對方也會覺得這樣寫順暢了很多,代碼也小了很多。

在一般應用中,不會說讓你寫一個KMP算法,或者給你設計一個動態規劃的題目讓你來解。但是如果你會這些算法,掌握了這種優化的思想,在平時的編寫中會不知不覺的寫出比較高效的代碼。

有人說,現在中國的軟件現狀就是這樣,不在乎你實現的有多快,只會在乎你有沒有實現所有的功能點,隨著硬件條件的改善,一般情況下都能滿足要求。這樣說也是沒錯,如果你甘愿只做一名碼工,因為對于相當大的一部分軟件,效率并不是最重要的,甚至第二、第三重要都排不上。但是對于企業級的應用和軟件的核心部分,往往效率是非常重要的。

如果將編程和寫作類比的話,可以進行這個的比較。編程必須會語言C/C++JavaPython等,寫作也一定要會一個語言漢語、英語、法語,當然計算機語言有效率的優劣以及適合的應用的場景,而自然語言沒有這種屬性。算法修養之于編程就像文學修養之于創作,沒有一定的文學修養就寫不出好的作品,同樣沒有良好的算法修養也創造不出好的代碼。數據結構就像寫作中的排比句等,它們是骨架,結構化編程就像是寫作中的段落,它們使得層次分明。

在靜靜的夜晚,明月透過窗子,照進小屋,頓時一種異樣的情懷涌上心頭。這時有下面幾種人,第一種,嚎啕大哭,“媽媽……”;第二種,潸然淚下,“我嚓,想家了是不”;第三種,沉思狀,“有首詩可以表達這個情懷”,拿起全唐詩,查找了整晚,夜盡天明時,驚呼“找到了,原來是‘舉頭望明月,底頭思故鄉’啊,我記得有的。”;第四種,徘徊低吟“舉頭望明月,底頭思故鄉”;第五種,心中油然而生,“獨在異鄉為異客,明月千里寄鄉思”。

同樣地,這也反映了一個程序員算法修養的幾種境界。第一種,菜鳥,不會表達自己的思想,這種多見于初學語言的人,只會寫hello world之類程序的人;第二種,入門,可以表達出自己的想法,但是不懂什么算法,只是憑自己對計算機語言的理解寫程序,當然寫出的程序功能點可能不少,但是不完善,潛在的bug很多;第三種,有一定的算法基礎,但是沒有掌握完全,寫程序時有高效的意識,對一些核心程序,看著資料也能寫出相應的代碼,但是不能活學活用;第四種,有不錯的算法修養,寫出的代碼清晰高效,可勝任關鍵代碼的編寫;第五種,有很高的算法修養,理解了算法的精髓,自己可以得出算法供世人學習,一般是大師級人物。國內有相當一部分程序員就是處于第二階段,他們也有穩定的工作,甚至不錯的收入,但是總感覺遇到了瓶頸,自己的能力躊躇不前。

有人說,現在各種庫都有,那些代碼都非常高效,我只要熟練使用這些庫就行了,不用學習算法。可以達到熟練使用幾個庫的程序員也算是第三階段,但是要想熟練駕馭更多的庫,將庫函數熟練的使用,沒有一定的算法基礎是不行的。比如,如果你想熟練使用STL庫,那么對各種容器和算法都應該有一定的認識,什么時候使用list,為什么快排不能應用于list?要想回答這些問題,必須掌握初步的算法。

對于想要在技術上有一定作為的程序員,沒有算法修養,就如同金庸小說中的學武之人不學習內功,它可以將外功學的爐火純清,憑著這份功力可以走遍半個江湖,但是一旦遇到高手就掛了;反之如果有內功修為,學習外功可學一知十,觸類旁通,內功修為越高將來的成就越大。

學習算法吧!

posted @ 2011-07-20 23:59 jaysoon 閱讀(619) | 評論 (2)編輯 收藏

2011年1月21日

數據挖掘中的指數函數

            最近做數據時,使用神經網絡建模。在神經網絡中,會用到激發函數(activation function)。

        典型的激發函數有Sigmod函數:

                  image

        雙曲正切函數:

                 image

          這兩個都涉及到指數函數,在C中,為求指數函數,使用exp()函數。

      在數次出錯后找到問題,原來是我的指數值過大,數據中有時會出現超過1000的數字,這導致在求值過程中,即使使用double型,也使得結果溢出。

      解決方法是定義一個指數函數,當指數值超過一定界限便指定一個相對無窮大的值,這樣也符合數學定義。在我的處理中,將界限設定為15,當該值大于15時,返回3000000;當界限值小于-15時,返回0。

posted @ 2011-01-21 23:40 jaysoon 閱讀(1128) | 評論 (0)編輯 收藏

2010年4月11日

配置本地文件共享

    在配置文件共享時,對沒有經驗的用戶會出現很多問題,這里介紹三點注意事項:
    1. 首先打開菜單中“工具”->“文件夾選項”->“查看”,確認“使用簡單文件共享”沒有被選上;
    2. 右鍵“我的電腦”,“管理”->“系統工具”->“本地用戶和組”->“用戶”,右鍵“Guest”,“屬性”,在“常規”選項卡中,取消“賬戶已停用”;
    3. 打開“控制面板”->“管理工具”->“本地安全策略”,打開“本地策略”->“用戶權利指派”,雙擊“拒絕從網絡訪問這臺計算機”,確認其中的“guest”已刪除。

    
     本文針對XP用戶,其它用戶可參照。

posted @ 2010-04-11 17:08 jaysoon 閱讀(337) | 評論 (0)編輯 收藏

2009年4月29日

賦值運算符和復制構造函數

      賦值運算符復制構造函數都是用已存在A的對象來創建另一個對象B。不同之處在于:賦值運算符處理兩個已有對象,即賦值前B應該是存在的;復制構造函數是生成一個全新的對象,即調用復制構造函數之前B不存在。   
      CTemp a(b);      //復制構造函數,C++風格的初始化
      CTemp a=b;      //仍然是復制構造函數,不過這種風格只是為了與C兼容,與上面的效果一樣
      在這之前a不存在,或者說還未構造好。

      CTemp a;
      a=b;               //賦值運算符
      在這之前a已經通過默認構造函數構造完成。

      我覺得將賦值運算符稱為“賦值構造函數”是錯誤的,構造函數發生在對象創建時期,而賦值是運算符,發生在“運算”時期,賦值運算前,對象已經構造完成,所以不能稱之為“構造函數”。
      一家之言!!

posted @ 2009-04-29 18:32 jaysoon 閱讀(1922) | 評論 (2)編輯 收藏

C++是類層次保護的

 

class CStack
{
public:
       CStack();  
       CStack(
int  size); 
       CStack(
const CStack& st);   //復制構造函數,注意使用引用
private:    
       
int _size;
       
int _count;
       
int* _s;           
}
;
CStack::CStack(
const CStack& st)
{
      _size
=st._size;
      
if(_size > 0)
      
{
               _s 
= new int[_size];
               _count 
= st._count;                  //訪問st的私有數據
               for(int i=0; i<_count; ++i)
                       _s[i] 
= st._s[i];             
      }
         
      
else
      
{
          _s 
=  0;
          _count 
= 0;           
      }
                                            
}

      在C++模型中,保護是在類層次應用的,而不是在對象層次。
      這句話的意思是,類的任意一個對象可以訪問該類的另一個對象的內部的任何東西。在上面的例子中,復制構造函數中的賦值語句_size = st._size;訪問了st的私有數據。
      這說明,C++中的訪問保護是按照層次的原則定義的,那么什么事對象層次的保護呢?
      在Smalltalk中,成員函數可以當前對象的私有數據,但不能訪問任何其它對象的私有數據,即使它們屬于相同的類。

posted @ 2009-04-29 17:57 jaysoon 閱讀(306) | 評論 (0)編輯 收藏

C++中關于構造函數的幾個問題

首先我們給出一個類的例子

class CStack
{
public:
       CStack();  
       CStack(
int  size=100); 
       CStack(
const CStack& st);   //復制構造函數,注意使用引用
private:    
       
int _size;
       
int _count;
       
int* _s;           
}
;
CStack::CStack(
const CStack& st)
{
      _size
=st._size;
      
if(_size > 0)
      
{
               _s 
= new int[_size];
               _count 
= st._count;         
               
for(int i=0; i<_count; ++i)
                       _s[i] 
= st._s[i];             
      }
         
      
else
      
{
          _s 
=  0;
          _count 
= 0;           
      }
                                            
}


int main()
{
    CStack st;
    
return 0;    
}



一. 在main()中,對象st不知道該調用哪一個構造函數,因為CStack()和CStack(int  size=100)都滿足條件,此時正確的編譯器會立即標示這種沖突,強迫實現者解決這個問題。

二. 假設我們已經有了一個CStack對象s1
CSatck s2=s1;      //這個句子將會調用復制構造函數
CStack s3 = CStack(200);   //這個句子將會做什么呢?

首先,產生一個臨時CStack對象,不妨命名為sss,并調用構造函數CStack::CStack(200),隨后執行復制構造函數。也就是說,它相當于

CStack sss(200);
CStack s3(sss);

這很浪費時間,不過,大多數編譯器還是能優化這種語句。但是我們為什么不養成一個好的習慣,直接寫成
CStack s3(200)呢?

posted @ 2009-04-29 17:45 jaysoon 閱讀(417) | 評論 (0)編輯 收藏

僅列出標題  
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章分類

文章檔案

收藏夾

C++

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道久久综合狠狠躁的推荐| 欧美成人免费在线观看| 欧美日本不卡| 亚洲精品欧美激情| 亚洲国产视频一区| 欧美三级韩国三级日本三斤| 亚洲婷婷在线| 亚洲午夜一级| 国产午夜久久| 久久全国免费视频| 欧美xart系列高清| 亚洲国产一区二区三区高清| 亚洲经典在线| 国产老肥熟一区二区三区| 久久九九99视频| 欧美激情91| 久久九九免费| 欧美激情精品久久久六区热门| 亚洲视频一二| 久久亚洲综合色一区二区三区| 日韩视频在线你懂得| 欧美一级久久久| 亚洲美女免费视频| 亚洲综合三区| 亚洲日韩欧美视频一区| 亚洲视频网在线直播| 很黄很黄激情成人| 一区二区三区av| 亚洲黄网站在线观看| 亚洲专区国产精品| 亚洲精品免费看| 午夜精品理论片| 一区二区三区视频观看| 久久精品99| 亚洲欧美国产不卡| 久久综合影视| 欧美一级理论性理论a| 欧美极品在线播放| 久久久午夜电影| 国产精品日韩在线| 亚洲国产综合视频在线观看| 国产中文一区二区| 亚洲天堂av高清| 一区电影在线观看| 免费高清在线视频一区·| 欧美亚洲系列| 欧美性大战久久久久久久蜜臀 | 欧美超级免费视 在线| 亚洲欧美日韩精品久久奇米色影视 | 亚洲自拍都市欧美小说| 欧美freesex交免费视频| 欧美日韩a区| 亚洲欧洲日本专区| 久久av二区| 欧美亚洲综合久久| 欧美视频一区二区| 亚洲理论电影网| 亚洲精品美女在线| 另类成人小视频在线| 久久精品国产清自在天天线| 国产精品久久久久婷婷| 99国产精品久久久久久久成人热| 91久久久国产精品| 欧美成人午夜激情在线| 美女免费视频一区| 亚洲国产精品va| 久久伊人精品天天| 欧美高清在线一区二区| 在线看日韩av| 毛片一区二区三区| 欧美激情91| 亚洲精品色婷婷福利天堂| 欧美大胆a视频| 91久久久一线二线三线品牌| 一级成人国产| 欧美丝袜第一区| 中文精品视频| 久久精品国产视频| 伊人久久大香线蕉av超碰演员| 欧美在线视频一区二区三区| 久久久.com| 亚洲激情网址| 欧美日韩国产小视频| 艳女tv在线观看国产一区| 性欧美激情精品| 在线欧美日韩| 欧美日韩第一区日日骚| 亚洲综合第一页| 免费看av成人| 在线午夜精品自拍| 国产在线精品成人一区二区三区| 久久手机精品视频| 日韩一级不卡| 麻豆精品在线视频| 一区二区三区久久网| 国产啪精品视频| 噜噜噜久久亚洲精品国产品小说| 亚洲免费大片| 久久这里只精品最新地址| 99re亚洲国产精品| 国产精品乱码妇女bbbb| 久久久青草青青国产亚洲免观| 最新国产の精品合集bt伙计| 亚洲免费视频网站| 亚洲国产成人在线视频| 欧美视频1区| 久久亚洲综合| 亚洲欧洲av一区二区三区久久| 欧美国产精品专区| 久久精品视频网| 亚洲天堂免费在线观看视频| 狠狠色丁香久久综合频道| 欧美色图五月天| 免费在线成人av| 久久激情视频| 午夜精品久久久久久| 日韩视频中文字幕| 欧美激情一区二区三区| 久久久久久亚洲综合影院红桃 | 在线欧美不卡| 国产欧美日韩精品专区| 一本久久a久久免费精品不卡| 国产精品黄色在线观看| 久热国产精品视频| 午夜精品亚洲| 亚洲一区二区三区精品动漫| 亚洲欧洲综合另类| 男女精品网站| 久久免费视频观看| 久久动漫亚洲| 欧美怡红院视频一区二区三区| 日韩视频一区二区三区在线播放免费观看| 国产午夜久久| 欧美日韩天堂| 欧美三级精品| 欧美日韩一区二区三区| 欧美日韩精品在线视频| 欧美精品国产精品| 欧美精品一区二区在线播放| 免费久久99精品国产自| 久久午夜影视| 免费欧美日韩国产三级电影| 久久亚洲一区二区三区四区| 亚洲性视频h| 亚洲毛片视频| 99国产精品国产精品久久| 一本大道久久a久久精品综合| 亚洲国产清纯| 日韩视频免费| 在线一区欧美| 性8sex亚洲区入口| 久久精品国产亚洲一区二区| 久久久福利视频| 美国十次成人| 欧美日韩免费高清| 国产精品视频一区二区高潮| 国产麻豆成人精品| 韩国一区电影| 亚洲国产欧美在线| 一区二区三区你懂的| 亚洲男人av电影| 久久久久91| 亚洲电影下载| 宅男精品视频| 久久精品欧美日韩| 欧美精品一区二区三区蜜臀| 欧美性猛交一区二区三区精品| 欧美午夜精品久久久久久浪潮| 国产日本精品| 最新成人在线| 欧美有码在线观看视频| 美日韩精品视频免费看| 999在线观看精品免费不卡网站| 亚洲午夜91| 久久亚洲精品一区| 欧美日韩理论| 激情久久久久久久| 99国产精品视频免费观看| 久久国产日韩| 日韩系列欧美系列| 久久久久99| 国产精品xvideos88| 亚洲国产精品传媒在线观看 | 快射av在线播放一区| 亚洲精品国产无天堂网2021| 亚洲欧美日韩一区二区三区在线| 毛片一区二区| 国产中文一区二区| 亚洲欧美另类中文字幕| 欧美国产视频在线| 性感少妇一区| 欧美性大战久久久久久久| 亚洲国产99精品国自产| 久久成人精品| 国产精品99久久99久久久二8 | 欧美系列电影免费观看| 日韩视频一区二区三区在线播放| 日韩一级大片| 久久这里只有精品视频首页| 国产精品久久网|