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

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

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

    Java Home

    Java技術修煉中...
    posts - 20, comments - 22, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    2006年6月15日

    FreeMarker是一個模板引擎,一個基于模板生成文本輸出的通用工具,使用純Java編寫

    FreeMarker被設計用來生成HTML Web頁面,特別是基于MVC模式的應用程序

    雖然FreeMarker具有一些編程的能力,但通常由Java程序準備要顯示的數據,由FreeMarker生成頁面,通過模板顯示準備的數據

    FreeMarker不是一個Web應用框架,而適合作為Web應用框架一個組件

    FreeMarker與容器無關,因為它并不知道HTTP或Servlet;FreeMarker同樣可以應用于非Web應用程序環境

    FreeMarker更適合作為Model2框架(如Struts)的視圖組件,你也可以在模板中使用JSP標記庫

    FreeMarker是免費的

    1、通用目標

    能夠生成各種文本:HTML、XML、RTF、Java源代碼等等

    易于嵌入到你的產品中:輕量級;不需要Servlet環境

    插件式模板載入器:可以從任何源載入模板,如本地文件、數據庫等等

    你可以按你所需生成文本:保存到本地文件;作為Email發送;從Web應用程序發送它返回給Web瀏覽器

    2、強大的模板語言

    所有常用的指令:include、if/elseif/else、循環結構

    在模板中創建和改變變量

    幾乎在任何地方都可以使用復雜表達式來指定值

    命名的宏,可以具有位置參數和嵌套內容

    名字空間有助于建立和維護可重用的宏庫,或者將一個大工程分成模塊,而不必擔心名字沖突

    輸出轉換塊:在嵌套模板片段生成輸出時,轉換HTML轉義、壓縮、語法高亮等等;你可以定義自己的轉換

    3、通用數據模型

    FreeMarker不是直接反射到Java對象,Java對象通過插件式對象封裝,以變量方式在模板中顯示

    你可以使用抽象(接口)方式表示對象(JavaBean、XML文檔、SQL查詢結果集等等),告訴模板開發者使用方法,使其不受技術細節的打擾

    4、為Web準備

    在模板語言中內建處理典型Web相關任務(如HTML轉義)的結構

    能夠集成到Model2 Web應用框架中作為JSP的替代

    支持JSP標記庫

    為MVC模式設計:分離可視化設計和應用程序邏輯;分離頁面設計員和程序員

    5、智能的國際化和本地化

    字符集智能化(內部使用UNICODE)

    數字格式本地化敏感

    日期和時間格式本地化敏感

    非US字符集可以用作標識(如變量名)

    多種不同語言的相同模板

    6、強大的XML處理能力

    <#recurse> 和<#visit>指令(2.3版本)用于遞歸遍歷XML樹

    在模板中清楚和直覺的訪問XML對象模型

    posted @ 2007-06-19 08:26 Yemoo'S Java Blog 閱讀(497) | 評論 (0)編輯 收藏

    當jsp程序出現異常時,往往是直接輸出到瀏覽器頁面上的,這樣以來,可能使最終用戶感到不知所措,也可能因為暴露服務器某些信息而導致服務器的安全性問題。在jsp里我們可以通過制定errorPage="xxx"以使當程序出現錯誤時轉向指定的錯誤頁面,但如果前期沒有考慮到這個辦法而在系統完成后再去這些工作則工作量可能會很大,好在jsp規范提供了一種簡單的解決辦法,通過在web.xml中設定全局錯誤處理頁面來對整個項目有效,web.xml中對于不同的http返回結果或異常類型可以有不同的處理方式。
    在xml中配置如下:
    <error-page>
    ???<error-code>500</error-code>
    ???<location>error.jsp</location>
    </error-page>
    <error-page>
    ???<error-code>404</error-code>
    ???<location>notfound.jsp</location>
    </error-page>

    通過以上配置,程序會自動根據錯誤類型轉向不同的錯誤頁面。

    posted @ 2007-06-06 15:59 Yemoo'S Java Blog 閱讀(1759) | 評論 (0)編輯 收藏

    前段時間作了一個簡單的系統,其中涉及到后臺管理,當然也就遇到了權限驗證的問題,由于初次做J2EE項目,所有這些東西懂我來說都是個開始。
    對于權限驗證,如果程序由目錄劃分,如管理員訪問的頁面都放在admin下,這樣我們可以寫一個權限驗證的過濾器,然后配置admin目錄都要經過這個過濾器即可。這樣對于jsp頁面的權限驗證比較容易。但對于action(控制器類)就不好控制了,因為action是沒有目錄概念的,如我們訪問action的地址為:http://xxx/sample/ac1.action,同時如果使用http://xxx/sample/xx/xx/ac1.action同樣可以訪問,這是因為只要在這個項目目錄下,訪問的頁面如果為action則struts就會去查詢這個action名字對應的類,而不管前面的目錄結構。因此我們不能再用過濾器對管理員部分的action進行驗證。經過查看struts2的相關資料發現了攔截器這個有用的東西。通過struts2的配置文件的包管理功能和攔截器可以輕松的對指定的action做管理(攔截),如
    ===================================================
    <package name="user" extends="struts-default">
    ??<!-- 前臺用戶操作部分 -->
    ??<!-- 框架頁,顯示分類 -->
    ??<action name="queryCateForwardUI"
    ???class="com.topsoft.bookmanage.web.action.QueryCateForwardActionUI">
    ???<result>/mainPage.jsp</result>
    ??</action>
    ??? 。。。。。
    </package>
    <!-- 管理員操作部分 -->
    ?<package name="manager" extends="struts-default">
    ??<!-- 攔截器 -->
    ??<interceptors>
    ???<interceptor name="auth" class="com.topsoft.common.LogonInterceptor" />
    ???<interceptor-stack name="authStack">?
    ??????????????? <interceptor-ref name="auth"/>?
    ??????????????? <interceptor-ref name="paramsPrepareParamsStack"/>?
    ??????????? </interceptor-stack>?
    ??</interceptors>
    ??<!-- 默認執行的攔截器 -->
    ??<default-interceptor-ref name="authStack"/>
    ??<!-- 全局Action映射 -->
    ??<global-results>
    ???<result name="login" type="redirect">/managerLoginUI.action</result>
    ??</global-results>
    ??
    ??<!-- 后臺管理首頁面UI -->
    ??<action name="managerIndexUI"
    ???class="com.topsoft.bookmanage.web.action.ManagerIndexActionUI">
    ???<result>/admin/index.jsp</result>
    ??</action>
    ?。。。。。。
    </package>
    =================================================

    通過使用攔截器+過濾器可以完美解決權限驗證的問題。

    posted @ 2007-06-06 15:17 Yemoo'S Java Blog 閱讀(4978) | 評論 (6)編輯 收藏

    struts.action.extension
    ????????? The URL extension to use to determine if the request is meant for a Struts action
    ?????????? 用URL擴展名來確定是否這個請求是被用作Struts action,其實也就是設置 action的后綴,例如login.do的'do'字。

    struts.configuration
    ????????? The org.apache.struts2.config.Configuration implementation class
    ??????????? org.apache.struts2.config.Configuration接口名

    struts.configuration.files
    ????????? A list of configuration files automatically loaded by Struts
    ?????????? struts自動加載的一個配置文件列表

    struts.configuration.xml.reload
    ????????? Whether to reload the XML configuration or not
    ?????????? 是否加載xml配置(true,false)

    struts.continuations.package
    ?????????? The package containing actions that use Rife continuations
    ?????????? 含有actions的完整連續的package名稱

    struts.custom.i18n.resources
    ????????? Location of additional localization properties files to load
    ?????????? 加載附加的國際化屬性文件(不包含.properties后綴)

    struts.custom.properties
    ????????? Location of additional configuration properties files to load
    ?????????? 加載附加的配置文件的位置


    struts.devMode
    ????????? Whether Struts is in development mode or not
    ?????????? 是否為struts開發模式

    struts.dispatcher.parametersWorkaround
    ????????? Whether to use a Servlet request parameter workaround necessary for some versions of WebLogic
    ??????????? (某些版本的weblogic專用)是否使用一個servlet請求參數工作區(PARAMETERSWORKAROUND)

    struts.enable.DynamicMethodInvocation
    ????????? Allows one to disable dynamic method invocation from the URL
    ??????????? 允許動態方法調用

    struts.freemarker.manager.classname
    ????????? The org.apache.struts2.views.freemarker.FreemarkerManager implementation class
    ?????????? org.apache.struts2.views.freemarker.FreemarkerManager接口名

    struts.i18n.encoding
    ????????? The encoding to use for localization messages
    ?????????? 國際化信息內碼

    struts.i18n.reload
    ????????? Whether the localization messages should automatically be reloaded
    ?????????? 是否國際化信息自動加載

    struts.locale
    ????????? The default locale for the Struts application
    ?????????? 默認的國際化地區信息

    struts.mapper.class
    ????????? The org.apache.struts2.dispatcher.mapper.ActionMapper implementation class
    ??????????? org.apache.struts2.dispatcher.mapper.ActionMapper接口

    struts.multipart.maxSize
    ????????? The maximize size of a multipart request (file upload)
    ?????????? multipart請求信息的最大尺寸(文件上傳用)

    struts.multipart.parser
    ????????? The org.apache.struts2.dispatcher.multipart.MultiPartRequest parser implementation for a multipart request (file upload)
    ????????? 專為multipart請求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口(文件上傳用)


    struts.multipart.saveDir
    ????????? The directory to use for storing uploaded files
    ?????????? 設置存儲上傳文件的目錄夾

    struts.objectFactory
    ????????? The com.opensymphony.xwork2.ObjectFactory implementation class
    ?????????? com.opensymphony.xwork2.ObjectFactory接口(spring)

    struts.objectFactory.spring.autoWire
    ????????? Whether Spring should autoWire or not
    ?????????? 是否自動綁定Spring

    struts.objectFactory.spring.useClassCache
    ????????? Whether Spring should use its class cache or not
    ?????????? 是否spring應該使用自身的cache

    struts.objectTypeDeterminer
    ????????? The com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation class
    ??????????? com.opensymphony.xwork2.util.ObjectTypeDeterminer接口

    struts.serve.static.browserCache
    ????????? If static content served by the Struts filter should set browser caching header properties or not
    ?????????? 是否struts過濾器中提供的靜態內容應該被瀏覽器緩存在頭部屬性中

    struts.serve.static
    ????????? Whether the Struts filter should serve static content or not
    ?????????? 是否struts過濾器應該提供靜態內容

    struts.tag.altSyntax
    ????????? Whether to use the alterative syntax for the tags or not
    ?????????? 是否可以用替代的語法替代tags

    struts.ui.templateDir
    ????????? The directory containing UI templates
    ?????????? UI templates的目錄夾

    struts.ui.theme
    ????????? The default UI template theme
    ?????????? 默認的UI template主題

    struts.url.http.port
    ????????? The HTTP port used by Struts URLs
    ?????????? 設置http端口

    struts.url.https.port
    ????????? The HTTPS port used by Struts URLs
    ?????????? 設置https端口

    struts.url.includeParams
    ????????? The default includeParams method to generate Struts URLs
    ????????? 在url中產生 默認的includeParams


    struts.velocity.configfile
    ????????? The Velocity configuration file path
    ?????????? velocity配置文件路徑

    struts.velocity.contexts
    ????????? List of Velocity context names
    ?????????? velocity的context列表


    struts.velocity.manager.classname
    ????????? org.apache.struts2.views.velocity.VelocityManager implementation class
    ?????????? org.apache.struts2.views.velocity.VelocityManager接口名

    struts.velocity.toolboxlocation
    ????????? The location of the Velocity toolbox
    ?????????? velocity工具盒的位置
    struts.xslt.nocache
    ????????? Whether or not XSLT templates should not be cached
    ?????????? 是否XSLT模版應該被緩存

    posted @ 2007-05-20 19:05 Yemoo'S Java Blog 閱讀(543) | 評論 (0)編輯 收藏

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "

    <beans>

    ??建立一個數據源
    ?<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    ? <property name="driverClassName">
    ?? <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
    ? </property>
    ? <property name="url">
    ?? <value>jdbc:microsoft:sqlserver://192.168.0.6:1433</value>
    ? </property>
    ? <property name="username">
    ?? <value>sa</value>
    ? </property>
    ? <property name="password">
    ?? <value></value>
    ? </property>
    ?</bean>

    ? 建立會話工廠類,這個類使用spring專門為hibernate3提供LocalSessionFactoryBean
    ?
    ?<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    ? <property name="dataSource">
    ?? <ref local="dataSource" />? --引用上面的數據源
    ? </property>
    ? <property name="mappingResources">? --調入映射文檔
    ?? <list>
    ??? <value>com/yourcompany/User.hbm.xml</value>?
    ?? </list>
    ? </property>
    ? <property name="hibernateProperties">? --相關設置
    ?? <props>
    ??? <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
    ??? <prop key="hibernate.show_sql">true</prop>
    ?? </props>
    ? </property>
    ?</bean>
    ??

    ??? 定義事務管理器,這個也是 spring專門為hibernate3提供的HibernateTransactionManager 事務管理器
    ?<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    ? <property name="sessionFactory">
    ?? <ref local="sessionFactory" />?? --引用會話工廠類
    ? </property>
    ?</bean>

    ?定義實體DAO
    ?<bean id="userDAO" class="com.yourcompany.UserDAOImp">
    ? <property name="sessionFactory">
    ?? <ref local="sessionFactory" />--引用會話工廠類
    ? </property>
    ?</bean>
    ?

    ?為上面的實體DAO定義一個代理(proxy)類,這是spring為解決事務問題而提供TransactionProxyFactoryBean動態事務代理類
    ?<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    ? <property name="transactionManager">
    ?? <ref bean="transactionManager" />? --指定事務管理器(需要是spring專用的)
    ? </property>
    ? <property name="target"> --目標實體DAO類
    ?? <ref local="userDAO" />
    ? </property>
    ? <property name="transactionAttributes"> --定義要使用事務的方法
    ?? <props>
    ??? <prop key="insert*">PROPAGATION_REQUIRED</prop>? --所有insert開頭的方法都使用事務,出錯要回滾
    ??? <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> --所有get開頭的方法都使用只讀事務
    ??? <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>--所有ist開頭的方法都使用只讀事務
    ?? </props>
    ? </property>
    ?</bean>

    ??為 path="/login"?的struts action 定義實際的action類,該action?已經進行?type="org.springframework.web.struts.DelegatingActionProxy"設置
    ? <bean name="/login" class="com.yourcompany.struts.action.LoginAction" singleton="false">
    ??? <property name="userDAO">
    ??? <ref bean="userDAOProxy" />? --注意,這里指定的userDAO是上面定義的代理類
    ? </property>
    ?</bean>
    </beans>?

    posted on 2006-12-05 15:40 kelven 閱讀(1

    posted @ 2007-05-15 08:21 Yemoo'S Java Blog 閱讀(417) | 評論 (0)編輯 收藏

    今天把jdk從1.6.0卸載后又安裝了1.5.04,然后發現netbeans無法啟動,提示“Cannot find java.exe...”,在網上看到很多人說要修改環境變量,但是偶的環境變量在安裝完jdk后就配置好了,沒有問題。
    于是又費了老半天的力氣,終于解決了,辦法如下:
    1,啟動jdk時 --jdkhome參數指出jdk路徑
    2,修改netbean目錄下的/etc目錄下的netbeans.conf中的jdkhome的值為當前jdk路徑

    使用上面方法中之一即可!

    posted @ 2007-03-11 16:54 Yemoo'S Java Blog 閱讀(4441) | 評論 (0)編輯 收藏

    /**
    ?*Description:greatest?common?divisor
    ?*Author:yemoo?2006.12.06
    ?
    */

    ?
    public ? class ?Pt32{
    ????
    // 思路:輾轉相除法
    ????? int ?divisor1( int ?m, int ?n){???? // 方法一:循環法
    ????????? int ?temp;
    ?????????
    if (m < n){???? // if?m<n,swap?m,n
    ?????????????temp = m;
    ?????????????m
    = n;
    ?????????????n
    = temp;
    ?????????}
    ?????????
    while (m % n != 0 ){
    ?????????????temp
    = n;
    ?????????????n
    = m % n;
    ?????????????m
    = temp;
    ?????????}
    ?????????
    return ?n;
    ?????}

    ?????
    int ?divisor2( int ?m, int ?n){???? // 方法二:遞歸法
    ????????? int ?temp;
    ?????????
    if (m < n){
    ?????????????temp
    = m;
    ?????????????m
    = n;
    ?????????????n
    = temp;
    ?????????}
    ?????????
    return ?divisor22(m,n);
    ?????}

    ????
    int ?divisor22( int ?m, int ?n){
    ????????
    if (m % n == 0 ){
    ????????????
    return ?n;
    ????????}
    else {
    ????????????
    return ?divisor22(n,m % n);
    ????????}
    ????}

    ?????
    public ? static ? void ?main(String?args[]){
    ?????????KeyboardInput?in
    = new ?KeyboardInput();
    ?????????Pt32?obj
    = new ?Pt32();
    ?????????System.out.println(
    " input?two?integer: " );
    ?????????
    int ?a = in.readInt();
    ?????????
    int ?b = in.readInt();
    ?????????System.out.println(a
    + " , " + b + " 's?greatest?common?divisor?is? " + obj.divisor2(a,b));
    ?????}

    ?}

    使用了輾轉相除法,分別使用循環和遞歸方法實現。

    吸取dreamstone大哥的程序寫法,發現判斷m、n大小的部分可以刪除,因為如果m<n求余部分會自動交換兩個變量。

    改進后程序代碼(精簡了好多哦):
    /**
    ?*Description:greatest?common?divisor
    ?*Author:yemoo?2006.12.07?
    */

    ?
    public?class?Pt32{
    ????
    //思路:輾轉相除法
    ?????int?divisor1(int?m,int?n){????//方法一:循環法
    ?????????int?temp;
    ?????????
    while(m%n!=0){
    ?????????????temp
    =n;
    ?????????????n
    =m%n;
    ?????????????m
    =temp;
    ?????????}
    ?????????
    return?n;
    ?????}

    ?????
    int?divisor2(int?m,int?n){????//方法二:遞歸法
    ?????????if(m%n==0){
    ????????????
    return?n;
    ????????}
    else{
    ????????????
    return?divisor2(n,m%n);
    ????????}
    ?????}

    ?????
    public?static?void?main(String?args[]){
    ?????????KeyboardInput?in
    =new?KeyboardInput();
    ?????????Pt32?obj
    =new?Pt32();
    ?????????System.out.println(
    "input?two?integer:");
    ?????????
    int?a=in.readInt();
    ?????????
    int?b=in.readInt();
    ?????????System.out.println(a
    +","+b+"'s?greatest?common?divisor?is?"+obj.divisor2(a,b));
    ?????}

    ?}

    posted @ 2006-12-07 01:02 Yemoo'S Java Blog 閱讀(7759) | 評論 (4)編輯 收藏

    游戲產業的快速發展,帶動了游戲人才需求的大幅攀升。昨日,北京一家游戲學院在武漢舉行首期培訓班,專門培養游戲人才。

      據介紹,目前中國的網絡游戲玩家已經達到2633萬人。中國出版工作者協會游戲工作委員會提供的數字表明,2004年,中國的網絡游戲僅銷售收入已經上漲47.9%,達到24.7億元,并且該數字在2009年有望達到109.6億元。

      而據專家預測,2006年中國網絡游戲市場將達93億元,中國手機游戲市場規模將達5億元。游戲行業的井噴式發展,引發了游戲專業人才的極度匱乏。游戲研發人才匱乏,特別是中高級人才奇缺的情況,已成為嚴重制約產業持續發展的“瓶頸”。

      中華英才網近日公布的一項統計表明,從目前人才市場需求看,10類游戲人才最受企業歡迎,分別為:游戲美術設計師(2D/3D)、網游&#8226;客服、3D游戲設計高級講師、手機游戲設計高級講師、在線網絡游戲設計高級講師、手機游戲開發工程師、網絡游戲開發工程師、J2ME游戲軟件工程師、游戲策劃師、片區渠道經理。

      職業指導師指出,游戲人才將會成為就業市場下一個新的亮點。

    posted @ 2006-12-05 20:44 Yemoo'S Java Blog 閱讀(401) | 評論 (0)編輯 收藏

    中國有很多精于編碼的人,但是中國軟件行業,尤其是網絡應用開發方面誤區很大,很難形成有規模的軟件開發力量和產品能力,不但比美國差距甚遠,和印度相比也是頗有不如。這些問題不是在于中國程序員的智商和工作努力狀況,也不是在于國家和民間對開發的投入程度,而是很大程度上,有一些對技術,對程序開發,對項目設計方面的思想誤區,這些誤區,導致了軟件行業的產品化能力不足,缺乏規模化和大型復用系統研發能力,可以說,改變認識誤區,是解決軟件行業小作坊模式和個體英雄模式所帶來的局限性的重要工作。


    程序員是一種技術工作,在IT的發展中有相當重要的地位,從底層硬件通訊協議的建立,到數據傳輸層的處理,到操作系統的建設,到數據庫平臺的建設,一直到應用層上各種數據營銷平臺的搭建,程序員在里面都扮演著舉足輕重的角色并為IT事業的發展做出了巨大的貢獻。

    中國有很多小朋友,他們18,9歲或21,2歲,通過自學也寫了不少代碼,他們有的代碼寫的很漂亮,一些技術細節相當出眾,也很有鉆研精神,但是他們被一些錯誤的認識和觀點左右,缺乏對系統,對程序的整體理解能力,這些人,一個網上的朋友說得很好,他們實際上只是一些Codingfans,壓根沒有資格稱為程序員,但是據我所知,不少小網絡公司的CTO就是這樣的codingfans,拿著嚇人的工資,做著嚇人的項目,項目的結局通常也很嚇人。
    程序員基本素質:

    作一個真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應該具有的素質。

    1:團隊精神和協作能力
    把它作為基本素質,并不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是不可想象的。獨行俠可以作一些賺錢的小軟件發點小財,但是一旦進入一些大系統的研發團隊,進入商業化和產品化的開發任務,缺乏這種素質的人就完全不合格了。

    2:文檔習慣
    說高水平程序員從來不寫文檔的肯定是乳臭未干的毛孩子,良好的文檔是正規研發流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟件系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。

    3:規范化,標準化的代碼編寫習慣
    作為一些外國知名軟件公司的規矩,代碼的變量命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助于代碼的移植和糾錯,也有助于不同技術人員之間的協作。
    有些codingfans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己壓根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質需求。
    再看看整個linux的搭建,沒有規范化和標準化的代碼習慣,全球的研發協作是絕對不可想象的。
    4:需求理解能力
    程序員需要理解一個模塊的需求,很多小朋友寫程序往往只關注一個功能需求,他們把性能指標全部歸結到硬件,操作系統和開發環境上,而忽視了本身代碼的性能考慮,有人曾經放言說寫一個廣告交換程序很簡單,這種人從來不知道在百萬甚至千萬數量級的訪問情況下的性能指標是如何實現的,對于這樣的程序員,你給他深藍那套系統,他也做不出太極鏈的并訪能力。性能需求指標中,穩定性,并訪支撐能力以及安全性都很重要,作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。

    5:復用性,模塊化思維能力
    經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復寫一些沒有任何新意的代碼,這其實是中國軟件人才最大浪費的地方,一些重復性工作變成了熟練程序員的主要工作,而這些,其實是完全可以避免的。
    復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作,如果一個軟件研發單位和工作組能夠在每一次研發過程中都考慮到這些問題,那么程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投入到創新的代碼工作中去。
    一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統里面作為功能模塊都能適合的很好,而現在我看到的是,很多小公司軟件一升級或改進就動輒全部代碼重寫,大部分重復性工作無謂的浪費了時間和精力。

    6:測試習慣
    作為一些商業化正規化的開發而言,專職的測試工程師是不可少的,但是并不是說有了專職的測試工程師程序員就可以不進行自測;軟件研發作為一項工程而言,一個很重要的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成后進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
    測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。當然并不是程序員要對自己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和各種性能需求,有針對性的進行相關測試,并盡早發現和解決問題,當然這需要上面提到的需求理解能力。

    7:學習和總結的能力
    程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。
    善于學習,對于任何職業而言,都是前進所必需的動力,對于程序員,這種要求就更加高了。但是學習也要找對目標,一些小codingfans們,他們也津津樂道于他們的學習能力,一會學會了asp,一會兒學會了php,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目的追逐一些膚淺的,表面的東西和名詞,做網絡程序不懂通訊傳輸協議,做應用程序不懂中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提高。
    善于總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高,一個程序員才可能成長起來。
    一個不具備成長性的程序員,即便眼前看是個高手,建議也不要選用,因為他落伍的時候馬上就到了。
    具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的各種素質都不是由IQ決定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序員對自己工作的認識,是一種意識上的問題。

    posted @ 2006-12-05 20:37 Yemoo'S Java Blog 閱讀(328) | 評論 (0)編輯 收藏

    /**
    ?*Description:convert?Oct?to?Dec
    ?*Author:yemoo?2006.12.05
    ?
    */

    ?
    public ? class ?P38{
    ?????
    int ?convertOct2Dec(String?Oct){
    ?????????
    int ?result = 0 ;
    ?????????
    int ?power = 1 ;
    ?????????
    for ( int ?i = Oct.length() - 1 ;i >= 0 ;i -- ,power *= 8 ){
    ?????????????
    char ?temp = Oct.charAt(i);
    ?????????????
    int ?intTemp = Character.getNumericValue(temp);
    ?????????????
    if (intTemp >= 0 && intTemp < 8 ){
    ?????????????????result
    += intTemp * power;
    ?????????????}
    else {
    ?????????????????
    if (temp == ' - ' && i == 0 ){
    ?????????????????????result
    =- result;
    ?????????????????}
    else {
    ?????????????????????
    return ?result;
    ?????????????????}
    ?????????????}
    ?????????}
    ?????????
    return ?result;
    ?????}

    ?????String?readInput(){
    ?????????KeyboardInput?in
    = new ?KeyboardInput();
    ?????????System.out.print(
    " Please?input?a?october?number: " );
    ?????????
    return ?in.readString();
    ?????}

    ?????
    public ? static ? void ?main(String?args[]){
    ?????????P38?obj
    = new ?P38();
    ?????????String?oct
    = obj.readInput();
    ?????????
    int ?value = obj.convertOct2Dec(oct);
    ?????????System.out.println(
    " Oct: " + oct + " ==Dec: " + value);
    ?????}
    ?}

    posted @ 2006-12-05 11:34 Yemoo'S Java Blog 閱讀(2034) | 評論 (0)編輯 收藏

    今天參考課本寫了一個關于二進制與十進制轉換的程序,程序算法不難,但寫完后測試發現不論是二轉十還是十轉二,對于大于21億即超過整數范圍的數不能很好的轉換。都會變成0.
    參考書籍發現使用使用BigInteger可以解決這個問題。
    于是查找了下JDK,然后測試幾次終于寫成功了!
    使用心得如下:

    1,BigInteger屬于java.math.BigInteger,因此在每次使用前都要import 這個類。偶開始就忘記import了,于是總提示找不到提示符。

    2,其構造方法有很多,但現在偶用到的有:
    BigInteger(String?val)
    ??????????將 BigInteger 的十進制字符串表示形式轉換為 BigInteger。
    BigInteger(String?val, int?radix)
    ??????????將指定基數的 BigInteger 的字符串表示形式轉換為 BigInteger。
    如要將int型的2轉換為BigInteger型,要寫為BigInteger two=new BigInteger("2"); //注意2雙引號不能省略

    3,BigInteger類模擬了所有的int型數學操作,如add()==“+”,divide()==“-”等,但注意其內容進行數學運算時不能直接使用數學運算符進行運算,必須使用其內部方法。而且其操作數也必須為BigInteger型。
    如:two.add(2)就是一種錯誤的操作,因為2沒有變為BigInteger型。

    4,當要把計算結果輸出時應該使用.toString方法將其轉換為10進制的字符串,詳細說明如下:
    ?StringtoString()
    ??????????返回此 BigInteger 的十進制字符串表示形式。
    輸出方法:System.out.print(two.toString());

    5,另外說明三個個用到的函數。???
    ?BigIntegerremainder(BigInteger?val)
    ??????????返回其值為 (this % val) 的 BigInteger。
    ?BigIntegernegate()
    ??????????返回其值是 (-this) 的 BigInteger。
    ?int???????compareTo(BigInteger?val)
    ??????????將此 BigInteger 與指定的 BigInteger 進行比較。
    remainder用來求余數。
    negate將操作數變為相反數。
    compare的詳解如下:

    compareTo

    public int compareTo(BigInteger?val)
    將此 BigInteger 與指定的 BigInteger 進行比較。對于針對六個布爾比較運算符 (<, ==, >, >=, !=, <=) 中的每一個運算符的各個方法,優先提供此方法。執行這些比較的建議語句是:(x.compareTo(y) <op> 0),其中 <op> 是六個比較運算符之一。

    指定者:
    接口 Comparable<BigInteger> 中的 compareTo
    參數:
    val - 將此 BigInteger 與之比較的 BigInteger。
    返回:
    當此 BigInteger 在數值上小于、等于或大于 val 時,返回 -1,0,或 1。

    posted @ 2006-12-05 10:20 Yemoo'S Java Blog 閱讀(16432) | 評論 (4)編輯 收藏

    ??? 前些時間總是感到迷茫,不知道該學什么,也許是快要畢業的原因吧,我也開始盲目的學習開了,看到社會招聘這個那個,于是乎就什么都想一股腦學完,JAVA,JSP,PHP,JS,ASP.NET.Wap.....結果可想而知,如此只能是什么也學不成,痛惜過去,現在偶完全確定了今后的學習方向---JAVA-->J2EE/ORACLE.
    ??? 從今天偶會經常到這里來寫下偶的學習心的,痛補以前的過失。各位監視偶啊!
    ??? 這里將見證偶從菜鳥變成老鳥的歷史過程!
    ??? 偶的目標---第一流的JAVA程序員!!!--(人首先要自信,堅定信念,才能成功!)

    posted @ 2006-12-05 09:39 Yemoo'S Java Blog 閱讀(1100) | 評論 (3)編輯 收藏

    這兩天看了java面向對象編程部分得內容,感覺有不少需要注意得地方:
    重要知識點總結如下:
    1,抽象,封裝,繼承,多態是面向對象程序設計中得四個特點.
    2,面向對象得軟件開發大體分為:面向對象的分析,面向對象的設計,面向對象的實現.
    ?? 可概括為如下過程:分析用戶需求,從問題中抽取對象模型;細化模型,設計類,包括類的屬性和類間的
    ???相互關系,同時觀察是否有可以直接引用的已有類或部件;選定一種面向對象的編程語言,具體編碼實現
    ??上一階段類的設計,并在開發過程中引入測試,完善整個解決方案.
    3,面向對象程序設計方法的優點是:可重用性,可擴展性,可管理性.
    4,類的定義:class前的修飾符分為訪問控制符和非訪問控制符兩大類.訪問控制符包括public和private.
    ?? 非訪問控制符包括abstract(抽象),final(最終).
    5,final類是最終類,是不能有子類的類.abstract和final不能同時修飾一個類,因為抽象類本身沒有具體對象,
    ??? 需要派生出子類后在創建子類的對象.而最終類不可能有子類.
    6,創建對象的格式為: 類名 對象名=new 構造方法(參數);注意前面是類名后面是構造方法.
    ??? 注意構造方法沒有返回類型,也不能寫void,主要用于完成類對象的初始化工作,一般不能直接由編程
    ??? 直接調用,而是用new運算符來調用.
    7,如果class前面由public修飾符,則默認構造方法的前面也應該有public修飾符.
    8,類中有static修飾的域或方法,可用類名或對象名訪問,否則只能用對象名訪問.
    9,修飾域的訪問控制符可以是:public,private,protected,private protected.非訪問控制符可以是:
    ??? static,final,volatile(易失域)
    10,類變量的最本質的特點是:他們是類的域,不屬于任何一個類的具體對象實例.不是保存在某個對象實例的內存空間中,而是保存在類的內存區域的公共存儲單元中.
    11,局部變量是在方法體內聲明的,只有當方法被調用時他們才存在,因而只能在本方法內使用,不存在訪問控制符,也不能聲明為靜態變量(static),但可以聲明為final變量.局部變量必須初始化.
    12,修飾方法的訪問控制符可以是:public,private,protected,private protected,修飾方法的非訪問控制符可以是:static,final,abstract,native(本地方法),synchronized(同步方法)。
    13,用static修飾的變量或方法都為類成員,類成員可以用類名或實例名訪問,實例成員只能用實例名來訪問。
    14,如果一個類中含有抽象方法,則此類必須為抽象類,如果抽象類的子類不為抽象類,則子類必須實現父類的所有抽象方法。抽象方法不能用靜態方法和最終方法。抽想方法只有函數頭的聲明,而用分號來替代方法體,沒有大括號。如abstract void abstractmethod();
    15,this變量用在一個方法的內部,指向當前
    對象,當前對象指的是調用當前正在執行的方法的那個對象。super變量是直接指向父類的構造方法,用來引用父類種的變量和方法。(由于他們指的是對象,所以不能通過它來引用類變量和類方法)
    16,如果要引用一個包中的多個類,可以用星號來代替。使用星號只能表示本層次的所有類,而不包括子層次下的類。所以經常需要用兩條語句來引入兩個層次的類:import java.awt.*;import java.awt.event.*;
    17,訪問修飾符:
    --類中限定為public的成員可以被所有的類訪問。
    --類中先定位private的成員只能被這個類本身訪問。同一個類的不同對象可以訪問對方的private域變量或調用對方的域方法,這是因為訪問保護控制在類的級別上,而不是對象的級別上。
    --類中限定為protected的成員可以被這個類本身,它的子類(包括同一個包中和不同包中的子類),以及同一個包中的其他類訪問。
    --用private protected修飾的成員可以被該類本身訪問,也可以被該類的所有子類訪問。
    --默認訪問控制符規定只能被同一個包中的類訪問和引用,而不能被其他包的類訪問。即他的訪問權限是friendly。
    18,注意:
    ----abstract和private,static,final,native不能并列修飾同一個方法。
    ----abstract類中不能有private修飾的域和方法
    ----static方法不能處理非static的域。
    19,重載方法的參數必須不同,或者是參數個數不同,或者是參數類型不同。重載的多個方法必須返回
    相同的數據類型。
    20,在java中,一個類獲取某一接口定義的功能并不是通過直接繼承這個接口的屬性和方法來實現的。因為接口中的屬性都是常量,接口的方法都是沒有方法體的抽象方法,沒有具體定義操作。

    posted @ 2006-07-22 23:55 Yemoo'S Java Blog 閱讀(365) | 評論 (0)編輯 收藏

    java支持在命令行下后面直接跟參數:類似 程序名稱 參數1 [參數2] ....
    對于此類的程序,要注意的問題就是判斷后面參數個數和類型是否合法.如果程序需要的參數個數至少是兩個,當程序并沒有對參數長度進行判斷時如果用戶值輸入一個參數,則程序運行會返回錯誤!因此應該加以判斷:方法如下:
    if(args.length<2){
    ???System.out.println("Usage: String1 String2");
    ?? System.exit(0);
    }else{
    ???........
    }

    posted @ 2006-07-21 22:08 Yemoo'S Java Blog 閱讀(503) | 評論 (0)編輯 收藏

    通過做本章最后得習題,發現如下問題需要偶以后注意:
    1,注意用戶輸入數據得合法性.
    ???如需要輸入一個正整數才有效,如果對用戶輸入不加判斷,當用戶輸入一個負數時則會產生錯誤得結果.因此應該進行簡單的判斷.
    int n=0;
    ?? while(n<1)
    ?????????n=讀取用戶輸入的值
    這樣即可保證用戶輸入得時一個正整數.
    2,圖形界面中setText()得內容必須時字符串型,因此在輸出一個數字型時應該將其轉換成字符串型.
    ? 用Integer.toString(),Double.toString()方法即可.
    ? 例,int x=1;aa.setText(Integer.toString(x));
    3,圖形界面中捕獲哪個按鈕被按下得方法.
    ? 當存在多個button按鈕時,我們都用actionListener(this)來監聽.那么如何判斷用戶點擊了哪個按鈕呢?
    ??
    用getSource()方法
    ?
    例:btn1.addActionListener(this);btn2.addActionListener(this);
    ????? public void actionPerformed(ActionEvent e){
    ????????????if(e.getSource()==btn1)
    ??????????????????//do anything
    ??????????? else if(e.getSource==btn2)
    ???????????????? //do other things
    ????? }

    posted @ 2006-07-21 18:56 Yemoo'S Java Blog 閱讀(328) | 評論 (0)編輯 收藏

    java數組對象有一個很重要的方法getChars();其方法描述為:

    public void getChars(int srcBegin,int srcEnd,char dst[],int dstBegin);? 將當前字符串的部分字符復制到目標自負數組dst中,從srcBegin(包含在內)到srcEnd(不包含在內)之間的字符復制到目標字符數組中的字符從dstBegin位置開始存放.

    使用實例:
    String?ss="Visual?Basic";
    char?dst[]={'a','b','c','d'};

    ss.getChars(
    4,6,dst,2);
    System.out.println(dst);
    輸出結果為abal;

    注意數組參數只要寫入數組名即可,不要帶[],輸出可以直接用數組名輸出全部內容.

    posted @ 2006-07-12 10:41 Yemoo'S Java Blog 閱讀(3101) | 評論 (2)編輯 收藏

    今天看了書本上的楊歸三角程序寫法后,自己試著去寫,但寫完后編譯總是出現一個錯誤.
    先看代碼:
    ?1?public?class?YangHui{
    ?2?????public?static?void?main(String?args[]){
    ?3?????????final?int?max=10;
    ?4?????????int?a[][]=new?int[max][];
    ?5?????????for(int?i=0;i<a.length;i++){
    ?6?????????????int?a[i]=new?int[i+1];
    ?7?????????}
    ?8?????????a[0][0]=1;
    ?9?????????for(int?i=1;i<a.length;i++){
    10?????????????a[i][0]=1;
    11?????????????a[i][a[i].length-1]=1;
    12?????????????for(int?j=1;j<a[i-1].length;j++){
    13?????????????????a[i][j]=a[i-1][j-1]+a[i-1][j];
    14?????????????}
    15?????????}
    16?????????
    17?????????for(int?i=0;i<a.length;i++){
    18?????????????for(int?j=0;j<a[i].length;j++)
    19?????????????????System.out.print(a[i][j]+"\t");
    20?????????????System.out.println();
    21?????????}
    22?????}
    23?}

    JCreator返回如下錯誤信息:
    --------------------------------------------------
    D:\Java\JCreator\YangHui.java:6: 需要 ']'
    ??????????? int a[i]=new int[i+1];
    ????????????????? ^
    1 錯誤

    處理已完成。
    ---------------------------------------------------
    開始怎么都看不出第六行有什么錯誤,郁悶半天之后看了課本,發現原來多了一個int.突然醒悟這個數組已經在前面聲明過了,在這里寫int不是重復聲明嗎?......真是太粗心了,不過給偶一個深刻的教訓,一定注意不要范重復聲明數組的錯誤.
    刪掉int之后編譯通過,正確的程序是這樣的:

    public?class?YangHui{
    ????
    public?static?void?main(String?args[]){
    ????????
    final?int?max=10;
    ????????
    int?a[][]=new?int[max][];
    ????????
    for(int?i=0;i<a.length;i++){
    ????????????a[i]
    =new?int[i+1];
    ????????}
    ????????a[
    0][0]=1;
    ????????
    for(int?i=1;i<a.length;i++){
    ????????????a[i][
    0]=1;
    ????????????a[i][a[i].length
    -1]=1;
    ????????????
    for(int?j=1;j<a[i-1].length;j++){
    ????????????????a[i][j]
    =a[i-1][j-1]+a[i-1][j];
    ????????????}
    ????????}
    ????????
    ????????
    for(int?i=0;i<a.length;i++){
    ????????????
    for(int?j=0;j<a[i].length;j++)
    ????????????????System.out.print(a[i][j]
    +"\t");
    ????????????System.out.println();
    ????????}
    ????}
    }


    ?

    posted @ 2006-07-12 01:04 Yemoo'S Java Blog 閱讀(346) | 評論 (0)編輯 收藏

    這算是一個很簡單的程序,但還是值得我這樣的初學者去總結一下,畢竟applet不同于application程序:
    import?java.applet.*;
    import?java.awt.*;
    import?java.awt.event.*;

    public?class?LeapyearTest?extends?Applet?implements?ActionListener{
    ????Label?result;???
    //定義一個輸出結果的標簽對象
    ????TextField?t1;???//定義一個用于輸入年份的文本框
    ????Button?btn;?//定義一個button對象
    ????
    ????
    int?year;
    ????
    boolean?leap;
    ????
    ????
    public?void?init(){
    ????????result
    =new?Label("請輸入要判斷的年份:");
    ????????t1
    =new?TextField(5);
    ????????btn
    =new?Button("判斷");
    ????????
    ????????add(t1);
    ????????add(btn);
    ????????add(result);
    ????????
    ????????btn.addActionListener(
    this);????//為按鈕注冊事件,事件的監聽者為當前類的對象this
    ????}
    ????
    ????
    public?void?actionPerformed(ActionEvent?e){
    ????????year
    =Integer.parseInt(t1.getText());
    ????????
    ????????
    if((year%4==0)&&(year%100!=0)){
    ????????????leap
    =true;
    ????????}
    else?if(year%400==0){
    ????????????leap
    =true;
    ????????}
    else{
    ????????????leap
    =false;
    ????????}
    ????????
    ????????
    if(leap==true){
    ????????????result.setText(
    "你輸入的年份為閏年!");
    ????????}
    else{
    ????????????result.setText(
    "你輸入的年份不是閏年!");
    ????????}
    ????????
    ????????t1.setText(
    "");
    ????}
    }

    這里有幾點需要說明的:
    1,applet程序必須引入java.applet.*;
    2,使用文本框,按鈕等控件需要引入java.awt.*;
    3,有事件發生則要引入java.awt.event.*;
    4,在類名后加上extends Applet Implements ActionListener
    5,添加事件后,當事件被激活后會自動調用actionPerformed函數執行.因此應該為事件寫該函數.

    posted @ 2006-07-09 23:49 Yemoo'S Java Blog 閱讀(1835) | 評論 (2)編輯 收藏

    偶是一個java初學者,看了樹上一個簡單例子,然后自己試著寫了下,卻發現了很多問題....
    例子是一個判斷用戶輸入字母是大寫還是小寫的.
    偶開始這樣寫:

    import ?java.io. * ;

    public ? class ?UpLow{
    ????
    public ? static ? void ?main(String?args[])? {
    ????????C
    har ?x;
    ????????System.out.println(
    " 請輸入一個字母: " );
    ????????x
    = (C har )System.in.read();
    ????????
    if (Character.isUpperCase(x)){
    ????????????System.out.println(
    " 你輸入了一個大寫字母! " );
    ????????}
    ????????
    if (Character.isLowerCase(x)){
    ????????????System.out.println(
    " 你輸入了一個小寫字母! " );
    ????????}
    ????}
    }
    運行調試先后發現如下問題:
    1,Char x和(Char)System.in.read()中的Char中c應該小寫.
    2,由于用到system.in.read()所以應該加上throws IOException.

    這么簡單一程序就遇到這么多問題...崩潰...
    不過這樣就給了俺比較深刻的印象,以后一定不會范這些錯誤了.

    用到輸出語句"System.in.read()"要在main()中加上throws IOException 語句來拋出異常.

    posted @ 2006-07-09 23:16 Yemoo'S Java Blog 閱讀(251) | 評論 (0)編輯 收藏

    ??? 到了大學好像自己就開始浮躁起來,學什么都不能安安心心的坐下來,現在的學習猶如浮沙筑高臺,亂七八糟,什么都沒有系統學習過,這學期開始著手學習JAVA,再圖書館借了一些書籍看了不少,不知道時偶看的少還是什么原因,現在還是感覺什么都不會,哎,郁悶呢。。。今天又再圖書館翻了一下java的書,感覺迷茫,圖書館這方面的還真不少,偶都不知道該看什么了,到底怎樣學下去,才能少走彎路??摸索中。。。也請大家指點一二,謝謝!

    posted @ 2006-06-15 11:55 Yemoo'S Java Blog 閱讀(573) | 評論 (1)編輯 收藏

    主站蜘蛛池模板: 黄色网址大全免费| 91制片厂制作传媒免费版樱花 | 啦啦啦手机完整免费高清观看| 亚洲中文字幕一区精品自拍| 国产成人亚洲影院在线观看| 亚洲电影在线免费观看| 牛牛在线精品观看免费正| 久久亚洲私人国产精品vA| 四虎影视永久免费观看| 在线观看永久免费| 日韩在线观看免费| 亚洲va精品中文字幕| 在线亚洲精品自拍| 成年女人视频网站免费m| 久久免费高清视频| 国产精品亚洲а∨天堂2021| 亚洲国产成人久久综合一| 午夜国产大片免费观看| 每天更新的免费av片在线观看 | 亚洲国产精品综合久久久| 久久亚洲中文字幕精品一区四| 在线视频免费观看高清| 中文字幕无线码中文字幕免费| 中文字幕亚洲精品无码| 久久久久亚洲AV成人无码| 男人的天堂亚洲一区二区三区 | 久久九九AV免费精品| 美景之屋4在线未删减免费| 亚洲人成日本在线观看| 亚洲av综合avav中文| 亚洲成年看片在线观看| 久久精品a一国产成人免费网站| 久久狠狠躁免费观看2020| www在线观看免费视频| 亚洲日韩精品无码专区加勒比| 亚洲视频在线不卡| 亚洲高清国产AV拍精品青青草原| 亚洲福利中文字幕在线网址| 成在线人永久免费视频播放| 国产福利在线免费| 在线观看成人免费视频不卡|