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

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

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

    Java Home

    Java技術(shù)修煉中...
    posts - 20, comments - 22, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2007年6月19日

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

    FreeMarker被設(shè)計(jì)用來(lái)生成HTML Web頁(yè)面,特別是基于MVC模式的應(yīng)用程序

    雖然FreeMarker具有一些編程的能力,但通常由Java程序準(zhǔn)備要顯示的數(shù)據(jù),由FreeMarker生成頁(yè)面,通過(guò)模板顯示準(zhǔn)備的數(shù)據(jù)

    FreeMarker不是一個(gè)Web應(yīng)用框架,而適合作為Web應(yīng)用框架一個(gè)組件

    FreeMarker與容器無(wú)關(guān),因?yàn)樗⒉恢繦TTP或Servlet;FreeMarker同樣可以應(yīng)用于非Web應(yīng)用程序環(huán)境

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

    FreeMarker是免費(fèi)的

    1、通用目標(biāo)

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

    易于嵌入到你的產(chǎn)品中:輕量級(jí);不需要Servlet環(huán)境

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

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

    2、強(qiáng)大的模板語(yǔ)言

    所有常用的指令:include、if/elseif/else、循環(huán)結(jié)構(gòu)

    在模板中創(chuàng)建和改變變量

    幾乎在任何地方都可以使用復(fù)雜表達(dá)式來(lái)指定值

    命名的宏,可以具有位置參數(shù)和嵌套內(nèi)容

    名字空間有助于建立和維護(hù)可重用的宏庫(kù),或者將一個(gè)大工程分成模塊,而不必?fù)?dān)心名字沖突

    輸出轉(zhuǎn)換塊:在嵌套模板片段生成輸出時(shí),轉(zhuǎn)換HTML轉(zhuǎn)義、壓縮、語(yǔ)法高亮等等;你可以定義自己的轉(zhuǎn)換

    3、通用數(shù)據(jù)模型

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

    你可以使用抽象(接口)方式表示對(duì)象(JavaBean、XML文檔、SQL查詢(xún)結(jié)果集等等),告訴模板開(kāi)發(fā)者使用方法,使其不受技術(shù)細(xì)節(jié)的打擾

    4、為Web準(zhǔn)備

    在模板語(yǔ)言中內(nèi)建處理典型Web相關(guān)任務(wù)(如HTML轉(zhuǎn)義)的結(jié)構(gòu)

    能夠集成到Model2 Web應(yīng)用框架中作為JSP的替代

    支持JSP標(biāo)記庫(kù)

    為MVC模式設(shè)計(jì):分離可視化設(shè)計(jì)和應(yīng)用程序邏輯;分離頁(yè)面設(shè)計(jì)員和程序員

    5、智能的國(guó)際化和本地化

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

    數(shù)字格式本地化敏感

    日期和時(shí)間格式本地化敏感

    非US字符集可以用作標(biāo)識(shí)(如變量名)

    多種不同語(yǔ)言的相同模板

    6、強(qiáng)大的XML處理能力

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

    在模板中清楚和直覺(jué)的訪問(wèn)XML對(duì)象模型

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

    2007年6月6日

    當(dāng)jsp程序出現(xiàn)異常時(shí),往往是直接輸出到瀏覽器頁(yè)面上的,這樣以來(lái),可能使最終用戶(hù)感到不知所措,也可能因?yàn)楸┞斗?wù)器某些信息而導(dǎo)致服務(wù)器的安全性問(wèn)題。在jsp里我們可以通過(guò)制定errorPage="xxx"以使當(dāng)程序出現(xiàn)錯(cuò)誤時(shí)轉(zhuǎn)向指定的錯(cuò)誤頁(yè)面,但如果前期沒(méi)有考慮到這個(gè)辦法而在系統(tǒng)完成后再去這些工作則工作量可能會(huì)很大,好在jsp規(guī)范提供了一種簡(jiǎn)單的解決辦法,通過(guò)在web.xml中設(shè)定全局錯(cuò)誤處理頁(yè)面來(lái)對(duì)整個(gè)項(xiàng)目有效,web.xml中對(duì)于不同的http返回結(jié)果或異常類(lèi)型可以有不同的處理方式。
    在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>

    通過(guò)以上配置,程序會(huì)自動(dòng)根據(jù)錯(cuò)誤類(lèi)型轉(zhuǎn)向不同的錯(cuò)誤頁(yè)面。

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

    前段時(shí)間作了一個(gè)簡(jiǎn)單的系統(tǒng),其中涉及到后臺(tái)管理,當(dāng)然也就遇到了權(quán)限驗(yàn)證的問(wèn)題,由于初次做J2EE項(xiàng)目,所有這些東西懂我來(lái)說(shuō)都是個(gè)開(kāi)始。
    對(duì)于權(quán)限驗(yàn)證,如果程序由目錄劃分,如管理員訪問(wèn)的頁(yè)面都放在admin下,這樣我們可以寫(xiě)一個(gè)權(quán)限驗(yàn)證的過(guò)濾器,然后配置admin目錄都要經(jīng)過(guò)這個(gè)過(guò)濾器即可。這樣對(duì)于jsp頁(yè)面的權(quán)限驗(yàn)證比較容易。但對(duì)于action(控制器類(lèi))就不好控制了,因?yàn)閍ction是沒(méi)有目錄概念的,如我們?cè)L問(wèn)action的地址為:http://xxx/sample/ac1.action,同時(shí)如果使用http://xxx/sample/xx/xx/ac1.action同樣可以訪問(wèn),這是因?yàn)橹灰谶@個(gè)項(xiàng)目目錄下,訪問(wèn)的頁(yè)面如果為action則struts就會(huì)去查詢(xún)這個(gè)action名字對(duì)應(yīng)的類(lèi),而不管前面的目錄結(jié)構(gòu)。因此我們不能再用過(guò)濾器對(duì)管理員部分的action進(jìn)行驗(yàn)證。經(jīng)過(guò)查看struts2的相關(guān)資料發(fā)現(xiàn)了攔截器這個(gè)有用的東西。通過(guò)struts2的配置文件的包管理功能和攔截器可以輕松的對(duì)指定的action做管理(攔截),如
    ===================================================
    <package name="user" extends="struts-default">
    ??<!-- 前臺(tái)用戶(hù)操作部分 -->
    ??<!-- 框架頁(yè),顯示分類(lèi) -->
    ??<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>
    ??<!-- 默認(rèn)執(zhí)行的攔截器 -->
    ??<default-interceptor-ref name="authStack"/>
    ??<!-- 全局Action映射 -->
    ??<global-results>
    ???<result name="login" type="redirect">/managerLoginUI.action</result>
    ??</global-results>
    ??
    ??<!-- 后臺(tái)管理首頁(yè)面UI -->
    ??<action name="managerIndexUI"
    ???class="com.topsoft.bookmanage.web.action.ManagerIndexActionUI">
    ???<result>/admin/index.jsp</result>
    ??</action>
    ?。。。。。。
    </package>
    =================================================

    通過(guò)使用攔截器+過(guò)濾器可以完美解決權(quán)限驗(yàn)證的問(wèn)題。

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

    2007年5月20日

    struts.action.extension
    ????????? The URL extension to use to determine if the request is meant for a Struts action
    ?????????? 用URL擴(kuò)展名來(lái)確定是否這個(gè)請(qǐng)求是被用作Struts action,其實(shí)也就是設(shè)置 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自動(dòng)加載的一個(gè)配置文件列表

    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的完整連續(xù)的package名稱(chēng)

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

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


    struts.devMode
    ????????? Whether Struts is in development mode or not
    ?????????? 是否為struts開(kāi)發(fā)模式

    struts.dispatcher.parametersWorkaround
    ????????? Whether to use a Servlet request parameter workaround necessary for some versions of WebLogic
    ??????????? (某些版本的weblogic專(zhuān)用)是否使用一個(gè)servlet請(qǐng)求參數(shù)工作區(qū)(PARAMETERSWORKAROUND)

    struts.enable.DynamicMethodInvocation
    ????????? Allows one to disable dynamic method invocation from the URL
    ??????????? 允許動(dòng)態(tài)方法調(diào)用

    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
    ?????????? 國(guó)際化信息內(nèi)碼

    struts.i18n.reload
    ????????? Whether the localization messages should automatically be reloaded
    ?????????? 是否國(guó)際化信息自動(dòng)加載

    struts.locale
    ????????? The default locale for the Struts application
    ?????????? 默認(rèn)的國(guó)際化地區(qū)信息

    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請(qǐng)求信息的最大尺寸(文件上傳用)

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


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

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

    struts.objectFactory.spring.autoWire
    ????????? Whether Spring should autoWire or not
    ?????????? 是否自動(dòng)綁定Spring

    struts.objectFactory.spring.useClassCache
    ????????? Whether Spring should use its class cache or not
    ?????????? 是否spring應(yīng)該使用自身的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過(guò)濾器中提供的靜態(tài)內(nèi)容應(yīng)該被瀏覽器緩存在頭部屬性中

    struts.serve.static
    ????????? Whether the Struts filter should serve static content or not
    ?????????? 是否struts過(guò)濾器應(yīng)該提供靜態(tài)內(nèi)容

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

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

    struts.ui.theme
    ????????? The default UI template theme
    ?????????? 默認(rèn)的UI template主題

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

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

    struts.url.includeParams
    ????????? The default includeParams method to generate Struts URLs
    ????????? 在url中產(chǎn)生 默認(rèn)的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模版應(yīng)該被緩存

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

    2007年5月15日

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

    <beans>

    ??建立一個(gè)數(shù)據(jù)源
    ?<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>

    ? 建立會(huì)話工廠類(lèi),這個(gè)類(lèi)使用spring專(zhuān)門(mén)為hibernate3提供LocalSessionFactoryBean
    ?
    ?<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    ? <property name="dataSource">
    ?? <ref local="dataSource" />? --引用上面的數(shù)據(jù)源
    ? </property>
    ? <property name="mappingResources">? --調(diào)入映射文檔
    ?? <list>
    ??? <value>com/yourcompany/User.hbm.xml</value>?
    ?? </list>
    ? </property>
    ? <property name="hibernateProperties">? --相關(guān)設(shè)置
    ?? <props>
    ??? <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
    ??? <prop key="hibernate.show_sql">true</prop>
    ?? </props>
    ? </property>
    ?</bean>
    ??

    ??? 定義事務(wù)管理器,這個(gè)也是 spring專(zhuān)門(mén)為hibernate3提供的HibernateTransactionManager 事務(wù)管理器
    ?<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    ? <property name="sessionFactory">
    ?? <ref local="sessionFactory" />?? --引用會(huì)話工廠類(lèi)
    ? </property>
    ?</bean>

    ?定義實(shí)體DAO
    ?<bean id="userDAO" class="com.yourcompany.UserDAOImp">
    ? <property name="sessionFactory">
    ?? <ref local="sessionFactory" />--引用會(huì)話工廠類(lèi)
    ? </property>
    ?</bean>
    ?

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

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

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

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

    2007年3月11日

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

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

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

    2006年12月7日

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

    ?
    public ? class ?Pt32{
    ????
    // 思路:輾轉(zhuǎn)相除法
    ????? int ?divisor1( int ?m, int ?n){???? // 方法一:循環(huá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));
    ?????}

    ?}

    使用了輾轉(zhuǎn)相除法,分別使用循環(huán)和遞歸方法實(shí)現(xiàn)。

    吸取dreamstone大哥的程序?qū)懛ǎl(fā)現(xiàn)判斷m、n大小的部分可以刪除,因?yàn)槿绻鹠<n求余部分會(huì)自動(dòng)交換兩個(gè)變量。

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

    ?
    public?class?Pt32{
    ????
    //思路:輾轉(zhuǎn)相除法
    ?????int?divisor1(int?m,int?n){????//方法一:循環(huá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) | 評(píng)論 (4)編輯 收藏

    2006年12月5日

    游戲產(chǎn)業(yè)的快速發(fā)展,帶動(dòng)了游戲人才需求的大幅攀升。昨日,北京一家游戲?qū)W院在武漢舉行首期培訓(xùn)班,專(zhuān)門(mén)培養(yǎng)游戲人才。

      據(jù)介紹,目前中國(guó)的網(wǎng)絡(luò)游戲玩家已經(jīng)達(dá)到2633萬(wàn)人。中國(guó)出版工作者協(xié)會(huì)游戲工作委員會(huì)提供的數(shù)字表明,2004年,中國(guó)的網(wǎng)絡(luò)游戲僅銷(xiāo)售收入已經(jīng)上漲47.9%,達(dá)到24.7億元,并且該數(shù)字在2009年有望達(dá)到109.6億元。

      而據(jù)專(zhuān)家預(yù)測(cè),2006年中國(guó)網(wǎng)絡(luò)游戲市場(chǎng)將達(dá)93億元,中國(guó)手機(jī)游戲市場(chǎng)規(guī)模將達(dá)5億元。游戲行業(yè)的井噴式發(fā)展,引發(fā)了游戲?qū)I(yè)人才的極度匱乏。游戲研發(fā)人才匱乏,特別是中高級(jí)人才奇缺的情況,已成為嚴(yán)重制約產(chǎn)業(yè)持續(xù)發(fā)展的“瓶頸”。

      中華英才網(wǎng)近日公布的一項(xiàng)統(tǒng)計(jì)表明,從目前人才市場(chǎng)需求看,10類(lèi)游戲人才最受企業(yè)歡迎,分別為:游戲美術(shù)設(shè)計(jì)師(2D/3D)、網(wǎng)游&#8226;客服、3D游戲設(shè)計(jì)高級(jí)講師、手機(jī)游戲設(shè)計(jì)高級(jí)講師、在線網(wǎng)絡(luò)游戲設(shè)計(jì)高級(jí)講師、手機(jī)游戲開(kāi)發(fā)工程師、網(wǎng)絡(luò)游戲開(kāi)發(fā)工程師、J2ME游戲軟件工程師、游戲策劃師、片區(qū)渠道經(jīng)理。

      職業(yè)指導(dǎo)師指出,游戲人才將會(huì)成為就業(yè)市場(chǎng)下一個(gè)新的亮點(diǎn)。

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

    中國(guó)有很多精于編碼的人,但是中國(guó)軟件行業(yè),尤其是網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)方面誤區(qū)很大,很難形成有規(guī)模的軟件開(kāi)發(fā)力量和產(chǎn)品能力,不但比美國(guó)差距甚遠(yuǎn),和印度相比也是頗有不如。這些問(wèn)題不是在于中國(guó)程序員的智商和工作努力狀況,也不是在于國(guó)家和民間對(duì)開(kāi)發(fā)的投入程度,而是很大程度上,有一些對(duì)技術(shù),對(duì)程序開(kāi)發(fā),對(duì)項(xiàng)目設(shè)計(jì)方面的思想誤區(qū),這些誤區(qū),導(dǎo)致了軟件行業(yè)的產(chǎn)品化能力不足,缺乏規(guī)模化和大型復(fù)用系統(tǒng)研發(fā)能力,可以說(shuō),改變認(rèn)識(shí)誤區(qū),是解決軟件行業(yè)小作坊模式和個(gè)體英雄模式所帶來(lái)的局限性的重要工作。


    程序員是一種技術(shù)工作,在IT的發(fā)展中有相當(dāng)重要的地位,從底層硬件通訊協(xié)議的建立,到數(shù)據(jù)傳輸層的處理,到操作系統(tǒng)的建設(shè),到數(shù)據(jù)庫(kù)平臺(tái)的建設(shè),一直到應(yīng)用層上各種數(shù)據(jù)營(yíng)銷(xiāo)平臺(tái)的搭建,程序員在里面都扮演著舉足輕重的角色并為IT事業(yè)的發(fā)展做出了巨大的貢獻(xiàn)。

    中國(guó)有很多小朋友,他們18,9歲或21,2歲,通過(guò)自學(xué)也寫(xiě)了不少代碼,他們有的代碼寫(xiě)的很漂亮,一些技術(shù)細(xì)節(jié)相當(dāng)出眾,也很有鉆研精神,但是他們被一些錯(cuò)誤的認(rèn)識(shí)和觀點(diǎn)左右,缺乏對(duì)系統(tǒng),對(duì)程序的整體理解能力,這些人,一個(gè)網(wǎng)上的朋友說(shuō)得很好,他們實(shí)際上只是一些Codingfans,壓根沒(méi)有資格稱(chēng)為程序員,但是據(jù)我所知,不少小網(wǎng)絡(luò)公司的CTO就是這樣的codingfans,拿著嚇人的工資,做著嚇人的項(xiàng)目,項(xiàng)目的結(jié)局通常也很?chē)樔恕?
    程序員基本素質(zhì):

    作一個(gè)真正合格的程序員,或者說(shuō)就是可以真正合格完成一些代碼工作的程序員,應(yīng)該具有的素質(zhì)。

    1:團(tuán)隊(duì)精神和協(xié)作能力
    把它作為基本素質(zhì),并不是不重要,恰恰相反,這是程序員應(yīng)該具備的最基本的,也是最重要的安身立命之本。把高水平程序員說(shuō)成獨(dú)行俠的都是在囈語(yǔ),任何個(gè)人的力量都是有限的,即便如linus這樣的天才,也需要通過(guò)組成強(qiáng)大的團(tuán)隊(duì)來(lái)創(chuàng)造奇跡,那些遍布全球的為linux寫(xiě)核心的高手們,沒(méi)有協(xié)作精神是不可想象的。獨(dú)行俠可以作一些賺錢(qián)的小軟件發(fā)點(diǎn)小財(cái),但是一旦進(jìn)入一些大系統(tǒng)的研發(fā)團(tuán)隊(duì),進(jìn)入商業(yè)化和產(chǎn)品化的開(kāi)發(fā)任務(wù),缺乏這種素質(zhì)的人就完全不合格了。

    2:文檔習(xí)慣
    說(shuō)高水平程序員從來(lái)不寫(xiě)文檔的肯定是乳臭未干的毛孩子,良好的文檔是正規(guī)研發(fā)流程中非常重要的環(huán)節(jié),作為代碼程序員,30%的工作時(shí)間寫(xiě)技術(shù)文檔是很正常的,而作為高級(jí)程序員和系統(tǒng)分析員,這個(gè)比例還要高很多。缺乏文檔,一個(gè)軟件系統(tǒng)就缺乏生命力,在未來(lái)的查錯(cuò),升級(jí)以及模塊的復(fù)用時(shí)就都會(huì)遇到極大的麻煩。

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

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

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

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

    posted @ 2006-12-05 20:37 Yemoo'S Java Blog 閱讀(328) | 評(píng)論 (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) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲国产精品成人综合色在线| 77777亚洲午夜久久多人| 免费国产成人高清在线观看网站| 外国成人网在线观看免费视频| 在线观看人成视频免费无遮挡 | 亚洲AV无码成人网站久久精品大| 免费毛片毛片网址| 成a人片亚洲日本久久| 国产成人综合亚洲一区| 美女被爆羞羞网站免费| 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲精品视频免费在线观看| 日韩精品久久久久久免费| 99久久国产免费中文无字幕| 亚洲精品在线免费观看| 免费精品国偷自产在线在线| 成人黄动漫画免费网站视频| 日本牲交大片免费观看| 亚洲成网777777国产精品| 久久久久亚洲AV综合波多野结衣 | 亚洲精品国精品久久99热一| 香蕉蕉亚亚洲aav综合| 亚洲成人高清在线观看| 亚洲影院天堂中文av色| 国产成人久久精品亚洲小说| 2022国内精品免费福利视频| 久久国产乱子伦精品免费不卡| 美丽的姑娘免费观看在线播放| 成人免费看片又大又黄| 亚洲精品国产高清不卡在线| 亚洲国产AV无码专区亚洲AV| 亚洲毛片基地日韩毛片基地 | 亚洲国产精品久久久天堂| 久久久久久亚洲AV无码专区| 99亚偷拍自图区亚洲| 免费无码午夜福利片69| 久久久久国产精品免费免费不卡 | 国产免费久久久久久无码| 2019中文字幕免费电影在线播放| 嫩草视频在线免费观看| 久久影院亚洲一区|