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

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

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

    2009年3月19日

    “又是一年畢業時 ”,看到一批批學子離開人生的象牙塔,走上各自的工作崗位;想想自己也曾經意氣風發、躊躇滿志,不覺感嘆萬千……本文是自己工作6年的經歷沉淀或者經驗提煉,希望對所有的軟件工程師們有所幫助,早日實現自己的人生目標。本文主要是關于軟件開發人員如何提高自己的軟件專業技術方面的具體建議,前面幾點旨在確定大的方向,算是廢話吧。
    '\ i'E*o5?5g6]#g(y)n8L1、分享第一條經驗:“學歷代表過去、能力代表現在、學習力代表未來。”其實這是一個來自國外教育領域的一個研究結果。相信工作過幾年、十幾年的朋友對這個道理有些體會吧。但我相信這一點也很重要:“重要的道理明白太晚將抱憾終生!”所以放在每一條,讓剛剛畢業的朋友們早點看到哈! TechWeb-技術社區7N9{'t%a+M
    2、一定要確定自己的發展方向,并為此目的制定可行的計劃。不要說什么,“我剛畢業,還不知道將來可能做什么?”,“跟著感覺走,先做做看”。因為,這樣的觀點會通過你的潛意識去暗示你的行為無所事事、碌碌無為。一直做技術,將來成為專家級人物?向管理方向走,成為職業經理人?先熟悉行業和領域,將來自立門戶?還是先在行業里面混混,過幾年轉行做點別的?這很重要,它將決定你近幾年、十年內“做什么事情才是在做正確的事情!”。 8R(X1}1g R/D$Z*K$y5U
    3、軟件開發團隊中,技術不是萬能的,但沒有技術是萬萬不能的!在技術型團隊中,技術與人品同等重要,當然長相也比較重要哈,尤其在MM比較多的團隊中。在軟件項目團隊中,技術水平是受人重視和尊重的重要砝碼。無論你是做管理、系統分析、設計、編碼,還是產品管理、測試、文檔、實施、維護,多少你都要有技術基礎。算我孤陋寡聞,我還真沒有親眼看到過一個外行帶領一個軟件開發團隊成功地完成過軟件開發項目,哪怕就一個,也沒有看到。倒是曾經看到過一個“高學歷的牛人”(非技術型)帶一堆人做完過一個項目,項目交付的第二天,項目組成員扔下一句“再也受不了啦!”四分五裂、各奔東西。那個項目的“成功度”大家可想而知了。 tech.techweb.com.cn&F,q9R;K/u.@
    4、詳細制定自己軟件開發專業知識學習計劃,并注意及時修正和調整(軟件開發技術變化實在太快)。請牢記:“如果一個軟件開發人員在1、2年內都沒有更新過自己的知識,那么,其實他已經不再屬于這個行業了。”不要告訴自己沒有時間。來自時間管理領域的著名的“三八原則”告誡我們:另外的那8小時如何使用將決定你的人生成敗!本人自畢業以來,平均每天實際學習時間超過2小時。 +j&G1B p7U/? g
    5、書籍是人類進步的階梯,對軟件開發人員尤其如此。書籍是學習知識的最有效途徑,不要過多地指望在工作中能遇到“世外高人”,并不厭其煩地教你。對于花錢買書,我個人經驗是:千萬別買國內那幫人出的書!我買的那些家伙出的書,100%全部后悔了,無一本例外。更氣憤的是,這些書在二手市場的地攤上都很難賣掉。“擁有書籍并不表示擁有知識;擁有知識并不表示擁有技能;擁有技能并不表示擁有文化;擁有文化并不表示擁有智慧。”只有將書本變成的自己智慧,才算是真正擁有了它。
    ,U5p1B&q9s4u程序開發,操作系統,服務器,源碼下載,Linux,Unix,BSD,PHP,Apach,asp,下載,源碼,黑客,安全,技術社區,技術論壇6、不要僅局限于對某項技術的表面使用上,哪怕你只是偶爾用一、二次。“對任何事物不究就里”是任何行業的工程師所不應該具備的素質。開發Windows應用程序,看看Windows程序的設計、加載、執行原理,分析一下PE文件格式,試試用SDK開發從頭開發一個Windows應用程序;用VC++、 Delphi、Java、.Net開發應用程序,花時間去研究一下MFC、VCL、J2EE、.Net它們框架設計或者源碼;除了會用J2EE、 JBoss、Spring、Hibernate, http://www.bt285.cn 等等優秀的開源產品或者框架,抽空看看大師們是如何抽象、分析、設計和實現那些類似問題的通用解決方案的。試著這樣做做,你以后的工作將會少遇到一些讓你不明就里、一頭霧水的問題,因為,很多東西你“知其然且知其所以然”!
    $Z.F7B.I2u1X7、在一種語言上編程,但別為其束縛了思想。“代碼大全”中說:“深入一門語言編程,不要浮于表面”。深入一門語言開發還遠遠不足,任何編程語言的存在都有其自身的理由,所以也沒有哪門語言是“包治百病”的“靈丹妙藥”。編程語言對開發人員解決具體問題的思路和方式的影響與束縛的例子俯拾皆是。我的經驗是:用面對對象工具開發某些關鍵模塊時,為什么不可以借鑒C、C51、匯編的模塊化封裝方式?用傳統的桌面開發工具(目前主要有VC++、Delphi)進行系統體統結構設計時,為什么不可以參考來自Java社區的IoC、AOP設計思想,甚至借鑒像Spring、Hibernate、JBoss等等優秀的開源框架?在進行類似于實時通信、數據采集等功能的設計、實現時,為什么不可以引用來自實時系統、嵌入式系統的優秀的體系框架與模式?為什么一切都必須以個人、團隊在當然開發語言上的傳統或者經驗來解決問題???“他山之石、可以攻玉”。 程序開發,操作系統,服務器,源碼下載,Linux,Unix,BSD,PHP,Apach,asp,下載,源碼,黑客,安全,技術社區,技術論壇:q8~7X.v'p&B/S
    8、養成總結與反思的習慣,并有意識地提煉日常工作成果,形成自己的個人源碼庫、解決某類問題的通用系統體系結構、甚至進化為框架。眾所周知,對軟件開發人員而言,有、無經驗的一個顯著區別是:無經驗者完成任何任務時都從頭開始,而有經驗者往往通過重組自己的可復用模塊、類庫來解決問題(其實這個結論不應該被局限在軟件開發領域、可以延伸到很多方面)。這并不是說,所有可復用的東西都必須自己實現,別人成熟的通過測試的成果也可以收集、整理、集成到自己的知識庫中。但是,最好還是自己實現,這樣沒有知識產權、版權等問題,關鍵是自己實現后能真正掌握這個知識點,擁有這個技能。
    9M2s*m+V.W"?*[*W3v)l+O9、理論與實踐并重,內外雙修。工程師的內涵是:以工程師的眼光觀察、分析事物和世界。一個合格的軟件工程師,是真正理解了軟件產品的本質及軟件產品研發的思想精髓的人(個人觀點、歡迎探討)。掌握軟件開發語言、應用語言工具解決工作中的具體問題、完成目標任務是軟件工程師的主要工作,但從軟件工程師這個角度來看,這只是外在的東西,并非重要的、本質的工作。學習、掌握軟件產品開發理論知識、軟件開發方法論,并在實踐中理解、應用軟件產品的分析、設計、實現思想來解決具體的軟件產品研發問題,才是真正的軟件工程師的工作。站在成熟理論與可靠方法論的高度思考、分析、解決問題,并在具體實踐中驗證和修正這些思想與方式,最終形成自己的理論體系和實用方法論。
    6l)d+H,S7~(B+`10、心態有多開放,視野就有多開闊。不要抱著自己的技術和成果,等到它們都已經過時變成垃圾了,才拿出來丟人現眼。請及時發布自己的研究成果:開發的產品、有創意的設計或代碼,公布出來讓大家交流或者使用,你的成果才有進化和升華的機會。想想自己2000年間開發的那些Windows系統工具,5、6年之后的今天,還是那個樣子,今天流行的好多Windows系統工具都比自己的晚,但進化得很好,且有那么多用戶在使用。并且,不要保守自己的技術和思想,盡可能地與人交流與分享,或者傳授給開發團隊的成員。“與人交換蘋果之后,每個人還是只有一個蘋果;但交換思想之后,每個人都擁有兩種思想”,道理大家都懂,但有多少人真正能做到呢? :n4K*z,@0l#t$?&]"r
    11、盡量參加開源項目的開發、或者與朋友共同研制一些自己的產品,千萬不要因為沒有錢賺而不做。網絡早已不再只是“虛擬世界”,網上有很多的開源項目、合作開發項目、外包項目,這都是涉獵工作以外的知識的絕好機會,并且能夠結識更廣的人緣。不要因為工作是做ERP,就不去學習和了解嵌入式、實時、通信、網絡等方面的技術,反過來也是一樣。如果當別人拿著合同找你合作,你卻這也不會,那也不熟時,你將后悔莫及。
    &_8[,U&x'N4{12、書到用時方恨少,不要將自己的知識面僅僅局限于技術方面。諾貝爾經濟學獎得主西蒙教授的研究結果表明: “對于一個有一定基礎的人來說,他只要真正肯下功夫,在6個月內就可以掌握任何一門學問。”教育心理學界為感謝西蒙教授的研究成果,故命名為西蒙學習法。可見,掌握一門陌生的學問遠遠沒有想象的那么高難、深奧。多方吸取、廣泛涉獵。極力夯實自己的影響圈、盡量擴大自己的關注圈。財務、經濟、稅務、管理等等知識,有空花時間看看,韜光養晦、未雨綢繆。
    3z&W3]3c1s3h13、本文的總結與反思: 8w0b/e(y:E4y3n3Q3|"|+{-k
    A:不要去做技術上的高手,除非你的目標如此。雖然本文是關于提高軟件開發知識的建議,做技術的高手是我一向都不贊同的。你可以提高自己的專業知識,但能勝任工作即止。
    4w#v8I5?(f,q-A程序開發,操作系統,服務器,源碼下載,Linux,Unix,BSD,PHP,Apach,asp,下載,源碼,黑客,安全,技術社區,技術論壇B:提高軟件知識和技術只是問題的表面,本質是要提高自己認識問題、分析問題、解決問題的思想高度。軟件專業知識的很多方法和原理,可以很容易地延伸、應用到生活的其它方面。 TechWeb-技術社區:H:e7P"C/V,v-g
    C:在能勝任工作的基礎上,立即去涉獵其它領域的專業知識,豐富自己的知識體系、提高自己的綜合素質,尤其是那些目標不在技術方面的朋友。
    posted @ 2009-04-05 15:53 wang9354| 編輯 收藏

    我們通常在開發web應用過程中,展現層Action的單元測試經常被我們忽視了,主要原因是:

    1、Action層的業務邏輯比較簡單。大家潛意識認為這一部分的代碼不重要。

    2、Action層難以模擬http請求傳遞參數,需要依賴web容器,因此給單元測試編寫帶來一定的難度。

    我寫了一個簡單的Action單元測試用例,供大家參考。基于struts的mock和webwork的ActionProxyFactory都可以進行Action的單元測試。我個人比較傾向與ActionProxyFactory做單元測試。其實寫action單元測試非常簡單,大致分為三步就可以完成單元測試:

    一、設置ActionContext上下文參數

    將表單傳遞的請求參數添加到map中

    二、創建Action動態代理對象

    通過public abstract ActionProxy createActionProxy(String namespace, String actionName, Map extraContext) throws Exception 創建action代理對象。

    三、junit斷言執行結果

    assertEquals(testAction.login(),”success”)

    詳細用例參考:

    public class TestActionTest extends BaseCaseTest{

    private ActionProxy proxy = null;

    private IVoucherService voucherService;

    @Before

    public void setUp() throws Exception {

    IMocksControl control = EasyMock.createControl();

    voucherService = control.createMock(IVoucherService.class);

    Map<String, Object> params = new HashMap<String, Object>();

    params.put(”loginId”,”test”);

    params.put(”password”,”111111″);

    params.put(”website”,” http://www.bt285.cn  ″);

    params.put(”name”,”小說″);

    params.put(”voucherService”, voucherService);

    Map extraContext = new HashMap();

    extraContext.put(ActionContext.PARAMETERS,params);

    try {

    proxy = ActionProxyFactory.getFactory().createActionProxy(”/ http://www.5a520.cn user”, “testAction”, extraContext);

    proxy.setExecuteResult(false);

    assertEquals(proxy.execute(),”success”);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    @Test

    public void testLogin() {

     

    TestAction testAction = (TestAction) proxy.getAction();

    assertEquals(testAction.login(),”success”);

    }

    }

    注:創建代理action一定要執行proxy.execute()方法,否則參數不能夠增加到actionContext上下文中。因為proxy.execute()中會執行 invocation.invoke()核心方法,遍歷執行action中所有的攔截器,包括其中的參數攔截器

    posted @ 2009-03-21 23:24 wang9354| 編輯 收藏
     

    某天在服務器上的網頁打不開了,頻繁報以下錯誤。

    2007-3-18 1:08:26 org.apache.tomcat.util.threads.ThreadPool logFull
    嚴重: All threads (150) are currently busy, waiting. Increase maxThreads (150) or check the servlet status

    在網上找了些回答,以下是我覺得正確的回答:
    1.我想你的部分資源沒有釋放,積壓卡死的
    2.連接池問題
    3.應該是服務器端響應request的線程的處理時間過長導致的

    分析:
    當時使用網站的人數只有2個人,不可能答到到了并發線程150的上線。所以應該不是數據庫的問題。
    通過對出錯的提示判斷,應該是連接池使用不合理造成的,或者根本沒設置連接池。和數據庫連接的部分是使用Spring的數據源JDBC連的,如下:
    <beans>
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <!-- driver for MySQL-->
            <property name="driverClassName"><value>org.gjt.mm.mysql.Driver</value></property>
            <property name="url"><value>jdbc:mysql:// www.bt285.cn :3306/test?useUnicode=true&amp;characterEncoding=UTF8</value></property>
            <property name="username"><value>test</value></property>
            <property name="password"><value>test</value></property>      
    </beans>

    問題應該出現在Spring的DriverManagerDataSource上,它負責管理這些連接的。
    下邊是對DriverManagerDataSource 的解釋
    DriverManagerDataSource in Spring Framework

       javax.sql Interface DataSource

    Implementation of SmartDataSource that configures a plain old JDBC Driver via
    bean properties, and returns a new Connection every time.

    Useful for test or standalone environments outside of a J2EE container, either
    as a DataSource bean in a respective ApplicationContext, or in conjunction with
    a simple JNDI environment. Pool-assuming Connection.close() calls will simply
    close the connection, so any DataSource-aware persistence code should work.

    In a J2EE container, it is recommended to use a JNDI DataSource provided by the
    container. Such a DataSource can be exported as a DataSource bean in an
    ApplicationContext via JndiObjectFactoryBean, for seamless switching to and from
    a local DataSource bean like this class.

    If you need a "real" connection pool outside of a J2EE container, consider
    Apache's Jakarta Commons DBCP. Its BasicDataSource is a full connection pool
    bean, supporting the same basic properties as this class plus specific settings.
    It can be used as a replacement for an instance of this class just by changing
    the class name of the bean definition to
    "org.apache.commons.dbcp.BasicDataSource".

    -----------------------------------------------
    Many Jakarta projects support interaction with a relational database. Creating a
    new connection for each user can be time consuming (often requiring multiple
    seconds of clock time), in order to perform a database transaction that might
    take milliseconds. Opening a connection per user can be unfeasible in a
    publicly-hosted Internet application where the number of simultaneous users can
    be very large. Accordingly, developers often wish to share a "pool" of open
    connections between all of the application's current users. The number of users
    actually performing a request at any given time is usually a very small
    percentage of the total number of active users, and during request processing is
    the only time that a database connection is required. The application itself
    logs into the DBMS, and handles any user account issues internally.

    There are several Database Connection Pools already available, both within
    Jakarta products and elsewhere. This Commons package provides an opportunity to
    coordinate the efforts required to create and maintain an efficient,
    feature-rich package under the ASF license.

    The commons-dbcp package relies on code in the commons-pool package to provide
    the underlying object pool mechanisms that it utilizes.

    Applications can use the commons-dbcp component directly or through the existing
    interface of their container / supporting framework. For example the Tomcat
    servlet container presents a DBCP DataSource as a JNDI Datasource. James (Java
    Apache Mail Enterprise Server) has integrated DBCP into the Avalon framework. A
    Avalon-style datasource is created by wrapping the DBCP implementation. The
    pooling logic of DBCP and the configuration found in Avalon's excalibur code is
    what was needed to create an integrated reliable DataSource.

    看完了解釋,事實上是因為DriverManagerDataSource建立連接是只要有連接就新建一個connection,根本沒有連接池的作用。改為以下開源的連接池會好點。
    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName">
    <value>org.hsqldb.jdbcDriver</value>
    </property>
    <property name="url">
    <value>jdbc:hsqldb:hsql:// www.5a520.cn :9001</value>
    </property>
    <property name="username">
    <value>sa</value>
    </property>
    <property name="password">
    <value></value>
    </property>
    </bean>

    測試通過,問題消除,如果沒有搜索引擎找答案不會這么快解決問題。

    posted @ 2009-03-19 13:03 wang9354| 編輯 收藏

    導航

    <2009年3月>
    22232425262728
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    統計

    常用鏈接

    留言簿(2)

    隨筆檔案

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 热re99久久6国产精品免费| 成人网站免费大全日韩国产| 亚洲国产av一区二区三区| 亚洲人成高清在线播放| 真实国产乱子伦精品免费| 亚洲AV无码不卡在线播放| 久草视频在线免费看| 亚洲91av视频| 免费A级毛片无码视频| 666精品国产精品亚洲| 亚洲免费在线视频观看| 亚洲av成人一区二区三区| 欧美三级在线电影免费| 亚洲国产系列一区二区三区| 女人18毛片水真多免费播放| 国产精品久久久久久亚洲小说| 国产又长又粗又爽免费视频 | 黄瓜视频高清在线看免费下载| 亚洲另类小说图片| 午夜爱爱免费视频| 一级毛片aaaaaa视频免费看| 亚洲精品狼友在线播放| 免费A级毛片无码视频| 亚洲 欧洲 视频 伦小说| 国产一级淫片a免费播放口之| 4hu四虎免费影院www| 亚洲国产美国国产综合一区二区| 亚洲第一网站免费视频| 亚洲国产一区二区三区在线观看| 成人伊人亚洲人综合网站222| baoyu777永久免费视频| 亚洲国产精品综合一区在线| 国产成人高清精品免费鸭子| 国内永久免费crm系统z在线| 亚洲人成在线播放| 亚洲人成色7777在线观看不卡| 久久永久免费人妻精品下载| 亚洲成av人在线观看网站| 亚洲欧洲自拍拍偷午夜色无码| 久久久久久精品免费看SSS| 精品亚洲国产成人av|