日出星辰

          2011年10月21日 #

          從需求開發(fā)會(huì)議談起

          今天項(xiàng)目組進(jìn)行了一個(gè)小時(shí)的需求討論,由于剛進(jìn)入項(xiàng)目組不久,對(duì)系統(tǒng)了解不多,幾乎沒有發(fā)言一直在旁聽。

          此次會(huì)議得出一點(diǎn)心得:系統(tǒng)開發(fā)中最重要的就是解決方案的敲定,解決方案選擇對(duì)的話,就算沒有達(dá)到事半功倍的效果,開發(fā)人員開發(fā)起來也能輕松很多。

          怎么才能產(chǎn)生一個(gè)好的解決方案,這就與對(duì)系統(tǒng)、需求、技術(shù)的掌握程度了,程度越高考慮事情越周全、解決方案越有效。

          由此也可以得出,企業(yè)在選擇員工時(shí)應(yīng)該看重分析問題、解決問題的能力,而不是技術(shù)能力。當(dāng)然了,技術(shù)能力一般,解決問題能力可能也不是多好。

          一個(gè)好的程序員:技術(shù)能力+解決問題能力(思維邏輯),所以技術(shù)是基礎(chǔ)、必備的,技術(shù)上要每天都有收獲,思維方式要時(shí)刻注意培養(yǎng),不僅僅是解決開發(fā)問題時(shí)注意,日常生活同樣使用。

          posted @ 2011-10-21 23:19 日出星辰 閱讀(148) | 評(píng)論 (0)編輯 收藏

          2011年10月9日 #

          你的成功在于你每天養(yǎng)成的習(xí)慣

          要成功,就馬上準(zhǔn)備有所付出吧!這就是每天你應(yīng)該養(yǎng)成的習(xí)慣。 
          1、不說“不可能”; 
          2、凡事第一反應(yīng): 找方法,不找借口; 
          3、遇到挫折對(duì)自己說聲:太好了,機(jī)會(huì)來了! 
          4、不說消極的話,不落入消極的情緒,一旦發(fā)生立即正面處理; 
          5、凡事先訂立目標(biāo); 
          6、行動(dòng)前,預(yù)先做計(jì)劃; 
          7、工作時(shí)間,每一分、每一秒做有利于生產(chǎn)的事情; 
          8、隨時(shí)用零碎的時(shí)間做零碎的事情; 
          9、守時(shí); 
          10、寫點(diǎn)日記,不要太依靠記憶; 
          11、隨時(shí)記錄想到的靈感; 
          12、把重要的觀念、方法寫下來,隨時(shí)提示自己; 
          13、走路比平時(shí)快30%,肢體語言健康有力,不懶散、萎靡; 
          14、每天出門照鏡子,給自己一個(gè)自信的微笑; 
          15、每天自我反省一次; 
          16、每天堅(jiān)持一次運(yùn)動(dòng); 
          17、聽心跳一分鐘,在做重要的事情,疲勞時(shí),緊張時(shí),煩躁時(shí)。。。。 
          18、開會(huì)做前排; 
          19、微笑; 
          20、用心傾聽,不打斷對(duì)方的話; 
          21、說話有力,感覺自己的聲音能產(chǎn)生感染力的磁場(chǎng); 
          22、說話之前,先考慮一下對(duì)方的感覺; 
          23、每天有意識(shí)贊美別人三次以上; 
          24、即使表示感謝,如果別人幫助了你的話; 
          25、控制住不要讓自己作出為自己辯護(hù)的第一反應(yīng); 
          26、不用訓(xùn)斥、指責(zé)的口吻與別人說話; 
          27、每天做一件”分外事“; 
          28、不關(guān)任何方面,每天必須至少做一次”進(jìn)步一點(diǎn)點(diǎn)“,并且有意識(shí)的提高; 
          29、每天提前15分上班,推遲30分下班; 
          30、每天下班前5分鐘做一下今天的整理工作; 
          31、定期存錢; 
          32、節(jié)儉; 
          33、時(shí)常運(yùn)用”頭腦風(fēng)暴“,利用腦力激蕩提升自己創(chuàng)新能力; 
          34、恪守誠信; 
          35、學(xué)會(huì)原諒。

          posted @ 2011-10-09 10:58 日出星辰 閱讀(179) | 評(píng)論 (0)編輯 收藏

          2011年10月8日 #

          數(shù)字轉(zhuǎn)換人民幣大寫

          通過JS完成,能滿足多種瀏覽器,不足之處是展示效果不是很理想,而且最多只能輸入13位數(shù)字,希望大家提出改正方法

          <html>
          <head>
          <title>數(shù)字轉(zhuǎn)換人民幣大寫</title>
          <script type="text/javascript">
          function convert() {
          var big = new Array("", "", "", "", "", "", "", "", "", "");
          var unit = new Array("", "", "", "", "", "", "", "", "", "",
          "", "", "");
          var num = document.getElementById("num").value;
          if (num =="") {
          alert(
          "輸入為空,請(qǐng)輸入數(shù)字");
          return false;
          }

          if (num.match(/[^,.\d]/) != null) {
          alert(
          "輸入內(nèi)容不合法,請(qǐng)輸入數(shù)字");
          return false;
          }
          var temp = "";
          if (num != null&&num.length<=13) {
          for (var i = 0; i < num.length; i++) {
          if(num.charAt(i)==0){
          alert(
          "輸入內(nèi)容不合法,不能以0開始");
          return false;
          }
          else{
          temp
          = temp + big[num.charAt(i)] + unit[num.length - i - 1];
          }

          }
          }
          else{
          alert(
          "最多只能輸入13位數(shù)字");
          return false;
          }
          document.getElementById(
          "rmb").innerText = temp;

          }


          </script>
          </head>

          <body>
          <input type="text" name="num" id="num"/>
          <input type="button" name="convert" value="轉(zhuǎn)換" onclick="return convert()"/>
          <input type="text" id="rmb"/>
          </body>
          </html>


           

           

          posted @ 2011-10-08 10:36 日出星辰 閱讀(188) | 評(píng)論 (0)編輯 收藏

          敲回車光標(biāo)跳到下一個(gè)輸入框(只能在IE中使用)

          <html>
          <head>
          <title> 敲回車光標(biāo)跳到下一個(gè)輸入框(只能在IE下使用) </title>
          </head>
          <script>
          function turnNext(object){
          if(object.keyCode==13){
          object.keyCode
          =9;
          }
          }
          </script>
          <body>
          <table>
          <tr>username<input type="text" name="name1" onkeydown="turnNext(event)"/></tr>
          <tr>password<input type="text" name="name2" /></tr>
          <tr>age<input type="text" name="name2" /></tr>
          </table>
          </body>
          </html>

          posted @ 2011-10-08 10:22 日出星辰 閱讀(281) | 評(píng)論 (0)編輯 收藏

          2011年9月30日 #

          各種文件注釋寫法

          JSP注釋

          在JSP中注釋最好用<%----注釋內(nèi)容----%>

          JSP注釋分兩種

          顯示注釋:在客戶端(源代碼)可以看到

          HTML中的注釋<!---注釋內(nèi)容--->  

          隱式注釋:在客戶端(源代碼)看不到

          使用JAVA中的“//”、“/*…………*/”,以及JSP中自己的注釋<%----注釋內(nèi)容----%>

          <%---JSP中的注釋,看不見---%>

          <%

           //注釋,看不見 單行注釋

           /*

           XXXXX

           注釋,看不見  多行注釋

           YYYYY

          */

          %>

          <!----顯示注釋--->

          <!--This page was loaded on <%= (new java.util.Date()).toLocaleString() %> -->

          結(jié)果:<!--This page was loaded on 2010-12-01 13:24:32 -->

          如果用顯示注釋,瀏覽器也會(huì)執(zhí)行里面的內(nèi)容,速度會(huì)低點(diǎn)

          HTML注釋

          只有一種 <!----注釋內(nèi)容-->

          <!----這里是HTML注釋--->

          XML注釋

          只有一種<!----注釋內(nèi)容-->

          CSS注釋

          只有一種 /*  注釋內(nèi)容 */

          JavaScript注釋

          單行注釋   //注釋內(nèi)容

          多行注釋  

          /*

          XXXX

          注釋內(nèi)容

          YYYY

          */

          posted @ 2011-09-30 15:52 日出星辰 閱讀(225) | 評(píng)論 (0)編輯 收藏

          2011年9月19日 #

          Struts1入門實(shí)例(簡(jiǎn)單登錄)

          現(xiàn)在開始加入公司的核心項(xiàng)目,但由于項(xiàng)目開發(fā)比較早,所以使用的技術(shù)不是很新潮,前臺(tái)用的還是struts1。

          雖然不是什么新技術(shù),但仍可以從中學(xué)到好多東西的。花了一個(gè)晚上的時(shí)間終于把struts1的流程跑通了。

          省略了創(chuàng)建過程及加入jar包的過程,直接進(jìn)入正題。

          首頁要在web.xml中添加相應(yīng)的struts配置:

          <servlet>
          <servlet-name>action</servlet-name>
          <servlet-class>
          org.apache.struts.action.ActionServlet
          </servlet-class>
          <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
          </init-param>
          <init-param>
          <param-name>debug</param-name>
          <param-value>2</param-value>
          </init-param>
          <init-param>
          <param-name>detail</param-name>
          <param-value>2</param-value>
          </init-param>
          <load-on-startup>2</load-on-startup>
          </servlet>
          <servlet-mapping>
          <servlet-name>action</servlet-name>
          <url-pattern>*.do</url-pattern>
          </servlet-mapping>

          然后在config所對(duì)應(yīng)的目錄下添加struts配置文件struts-config.xml

          <?xml version="1.0" encoding="UTF-8" ?>

          <!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"
          >

          <struts-config>

          <!-- ActionForm -->
          <form-beans>
          <!-- name:名稱 type:類路徑 -->
          <form-bean name="loginForm" type="com.login.LoginForm">
          </form-bean>
          </form-beans>
          <!-- 設(shè)置全局URL,必須寫在Action前面,這樣任何Action都可以使用 -->
          <global-forwards>
          <forward name="result" path="/result.jsp" />
          </global-forwards>

          <!-- 注冊(cè)Action -->
          <action-mappings>
          <!-- name:名稱 type:類路徑 path:客戶端(JSP)提交到服務(wù)器端時(shí)指定的路徑(Form表單中的action=”/login.do" -->
          <action path="/login" type="com.login.LoginAction"
          name
          ="loginForm" scope="request">
          <!-- 局部URL,只有這個(gè)action可以使用 -->
          <forward name="success" path="/success.jsp"></forward>
          <forward name="error" path="/error.jsp"></forward>
          </action>
          </action-mappings>


          </struts-config>
          
          
          注:Action和Form的關(guān)系是一個(gè)Action只能對(duì)應(yīng)一個(gè)Form(通過Action的name屬性)
          而一個(gè)Form可以被多個(gè)Action調(diào)用
          LoginAction.java
          package com.login;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;

          public class LoginAction extends Action {

          @Override
          public ActionForward execute(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response)
          throws Exception {
          LoginForm lf
          = (LoginForm) form;
          String username
          = lf.getUsername();
          String password
          = lf.getPassword();
          String errorInfo
          = "";
          String result
          = UserManager.getInstance().login(username, password);
          if (result.equals("success")) {
          request.setAttribute(
          "username", username);
          return mapping.findForward("success");
          }
          else if (result.equals("username")) {
          errorInfo
          = "密碼錯(cuò)誤";
          }
          else {
          errorInfo
          = "用戶名錯(cuò)誤";
          }
          request.setAttribute(
          "errorInfo", errorInfo);
          return mapping.findForward("error");
          }

          }
          LoginForm.java
          package com.login;

          import javax.servlet.http.HttpServletRequest;

          import org.apache.struts.action.ActionErrors;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionMapping;

          public class LoginForm extends ActionForm {

          private String username;
          private String password;

          public void reset(ActionMapping mapping, HttpServletRequest request) {
          System.out.println(
          "--------reset()-------------");
          super.reset(mapping, request);
          }

          public ActionErrors validate(ActionMapping mapping,
          HttpServletRequest request) {
          System.out.println(
          "--------validate()-------------");
          return super.validate(mapping, request);
          }

          public String getUsername() {
          return username;
          }

          public void setUsername(String username) {
          this.username = username;
          }

          public String getPassword() {
          return password;
          }

          public void setPassword(String password) {
          this.password = password;
          }

          }
          對(duì)我個(gè)人來說最重要的是前臺(tái)jsp頁面沒有掌握,經(jīng)常在頁面上花費(fèi)很多時(shí)間
          在編寫JSP頁面時(shí)要用struts標(biāo)簽,而我經(jīng)常會(huì)忘記
          引入jsp標(biāo)簽
          <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
          <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
          index.jsp
          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
          <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
          
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          	<head>
          		<title>首頁</title>
          	</head>
          
          	<body>
          		<html:form action="/login.do">
          			用戶名:<html:text property="username"></html:text><br/>
          			密碼: <html:password property="password"></html:password><br/>
          			<html:submit>submit</html:submit>
          		</html:form>
          	</body>
          </html>
          

           

          展示結(jié)果(將Action的返回值展示到JSP頁面上)

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
          <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
          
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          	<head>
          		<title>Error</title>
          	</head>
          	<body>
          		<bean:write name="errorInfo" scope="request" />
          	</body>
          </html>
          

           
           
          
          			
          			

          posted @ 2011-09-19 23:00 日出星辰 閱讀(140) | 評(píng)論 (0)編輯 收藏

          2011年9月14日 #

          Ant學(xué)習(xí)實(shí)例

          1.安裝Ant

          先從http://ant.apache.org/下載Ant,解壓到任一目錄下面,比如E:\Lab

          然后設(shè)置環(huán)境變量

          ANT_HOME=E:\Lab\apache-ant-1.8.2

          path=E:\Lab\apache-ant-1.8.2\bin

          最后驗(yàn)證是否安裝成功

          在dos中輸入ant,如果顯示

          Buildfile: build.xml does not exist!
          Build failed

          則安裝成功

          2.基礎(chǔ)元素

          project元素

          project元素是Ant文件的根元素

          project的屬性

          Attribute

          Description

          Required

          name

          項(xiàng)目名稱

          No

          default

          當(dāng)沒有指定target時(shí)使用的缺省target

          Yes

          basedir

          用于指定基路徑的位置。該屬性沒有指定時(shí),使用 Ant 的構(gòu)件文件的附目錄作為基準(zhǔn)目錄。

          No

          target元素

          target為Ant的基本執(zhí)行單元,它可以包含一個(gè)或多個(gè)具體的任務(wù)。多個(gè)target 可以存在相互依賴關(guān)系

          Ant會(huì)依照depends屬性中target出現(xiàn)的順序(從左到右)依次執(zhí)行每個(gè)target。然而,要記住的是只要某個(gè)target依賴于一個(gè)target,后者就會(huì)被先執(zhí)行。

          <target name="A"/>

          <target name="B" depends="A"/>

          <target name="C" depends="B"/>

          <target name="D" depends="C,B,A"/>

          假定我們要執(zhí)行target D。從它的依賴屬性來看,你可能認(rèn)為先執(zhí)行C,然后B,最后A被執(zhí)行。錯(cuò)了,C依賴于B,B依賴于A,所以先執(zhí)行A,然后B,

          然后C,最后D被執(zhí)行。

          一個(gè)target只能被執(zhí)行一次,即時(shí)有多個(gè)target依賴于它。

          若想更好的控制build過程,可以使用if或unless。

          if 屬性

              用于驗(yàn)證指定的屬性是否存在,若不存在,所在 target 將不會(huì)被執(zhí)行。

          unless 屬性

              該屬性的功能與 if 屬性的功能正好相反,它也用于驗(yàn)證指定的屬性是否存在,若不存在,所在 target 將會(huì)被執(zhí)行。

          property元素

          property元素可看作參量或者參數(shù)的定義(即經(jīng)常使用的變量),project 的屬性可以通過 property 元素來設(shè)定,也可在 Ant 之外設(shè)定。

          name是變量的名稱 value是變量的值,要用某個(gè)變量時(shí)使用${name}方式調(diào)用。

          3.完整示例

          創(chuàng)建一個(gè)java項(xiàng)目

          HelloWorld.java

          package com.test;
          
          public class HelloWorld {
          	public static void main(String[] args) {
          		System.out.println("Hello world");
          	}
          }

          編寫build.xml文件

          注:build.xml放在和src同級(jí)目錄,而不是在src下級(jí)目錄

          目錄結(jié)構(gòu)是

          MyProject <dir>
          |--lib <dir> --庫目錄
          |--classes <dir> --目的文件目錄
          |--src <dir> --源文件目錄
          |--doc <dir> --api文檔目錄
          |--build.xml

          <?xml version="1.0" encoding="UTF-8" ?>
          <project name="helloWorld" default="run" basedir=".">
          	<property name="src" value="src"/>
          	<property name="dest" value="build/classes"/>
          	<property name="lib" value="lib"></property>
          	<property name="hello_jar" value="hello1.jar"></property>
          	<!--初始化 之前執(zhí)行刪除操作-->
          	<target name="init" depends="clean">
          		<mkdir dir="${dest}"/>
          	</target>
          	<!--編譯生成class文件 -->
          	<target name="compile" depends="init">
          		<javac srcdir="${src}" destdir="${dest}"></javac>
          	</target>
          	<!--將編譯后的class文件打包-->
          	<target name="build" depends="compile">
          		<mkdir dir="${lib}"/>
          		<jar jarfile="${lib}/${hello_jar}" basedir="${dest}"></jar>
          	</target>
          	<target name="run" depends="build">
          		<java classname="com.test.HelloWorld" classpath="${lib}/${hello_jar}"></java>
          	</target>
          	<!--刪除-->
          	<target name="clean">
          		<delete dir="${dest}"></delete>
          		<delete dir="${lib}"></delete><!-- 是dir 刪除目錄 ,不是file 刪除文件-->
          	</target>
          </project>
          整個(gè)過程:初始化----編譯----打包---放到相應(yīng)的位置

          參考:

          http://www.cnblogs.com/philander/articles/1782254.html

          http://www.cnblogs.com/elric/archive/2011/03/19/1988840.html

          posted @ 2011-09-14 22:03 日出星辰 閱讀(195) | 評(píng)論 (0)編輯 收藏

          2011年9月8日 #

          請(qǐng)不要忘記,還有“思考”這個(gè)東西【轉(zhuǎn)】

          【轉(zhuǎn)自】http://www.cnblogs.com/tanky_woo/archive/2011/09/07/2169559.html

          最近準(zhǔn)備參加實(shí)習(xí)生招聘,于是開始關(guān)注起了各大公司的面試題,在看網(wǎng)易面試題的時(shí)候看到了這么一題:

          為什么現(xiàn)在的計(jì)算機(jī)采用二進(jìn)制?而不是八進(jìn)制或十六進(jìn)制?你認(rèn)為以后的計(jì)算機(jī)會(huì)采用幾進(jìn)制?

          我當(dāng)時(shí)就在問自己,為什么?但是無果,我隱約記得很多書上都講過,但是為了追求速度,追求更重要的知識(shí),我把這部分內(nèi)容給自動(dòng)濾過了。

          于是我又在想,是什么原因?qū)е逻@樣的呢?

          我開始回憶我的學(xué)習(xí)過程,我發(fā)現(xiàn),在大一大二開始接觸編程時(shí),我還是很喜歡思考的,但是為何后來就麻木了呢?

          于是我又開始分析我的學(xué)習(xí)方法,沒錯(cuò),就是學(xué)習(xí)方法出問題了—我過于的追求速度,追求廣泛,很多知識(shí),我都是一掃而過,很多代碼,我都是看一看就自以為懂了,曾經(jīng)剛開始學(xué)時(shí),我還經(jīng)常把代碼往電腦上敲,把代碼抄在紙上,然而現(xiàn)在卻是直接掃一下。

          我想到了一個(gè)詞—物極必反。雖然我看的很多,看的很快,但是收效卻不大。

          我突然就被驚醒了,是的,捫心自問一下,現(xiàn)在記在我腦海里的,還有多少知識(shí)呢?你了解的知識(shí)多嗎?你看書仔細(xì)嗎?

          我相信很多人都和我一樣,為了應(yīng)付考試,應(yīng)付以后的面試,工作,都在瘋狂的看書,瘋狂的吸納知識(shí),但是,你真的掌握了這些知識(shí)嗎?

          寫到這里的時(shí)候,我又想起來我昨天在伯樂在線看到的一篇文章:學(xué)一門語言,要了解他的歷史,哲學(xué)觀,這也是一種思考:

          比如文章中舉例的:拿python來說,他的設(shè)計(jì)哲學(xué)是“用一種方法,最好是只有一種方法來做一件事”,而perl的設(shè)計(jì)哲學(xué)是“總有多種方法來做同一件事”。

          其實(shí),這是多么有趣的一件事,然后,就這樣被大部分人給忽略了。想到這,我都替自己感覺到可惜。

          幸好今天發(fā)現(xiàn)了這個(gè)問題,就像《讓子彈飛》里面說的一樣“步子要一步步的走,邁得大了,會(huì)扯著蛋”,確實(shí),知識(shí)也要一步步的積累,沒有什么快速掌握的方法,最好的辦法就是一步一步的積累,要多思考,沒有思考,就沒有進(jìn)步;沒有思考,就沒有升華。

          我們應(yīng)該時(shí)刻要記住,學(xué),應(yīng)該是一種享受的過程,重點(diǎn)不在于結(jié)果,而是過程,一種發(fā)散思維的過程。

          希望自己能時(shí)刻記住這一點(diǎn),能應(yīng)付好接下來的實(shí)習(xí)生求職。

          注:上面那個(gè)問題的答案,大家可以相互交流下,我在網(wǎng)上找到這篇講的不錯(cuò):

          http://blog.csdn.net/hkx1n/article/details/4280036

          posted @ 2011-09-08 09:10 日出星辰 閱讀(142) | 評(píng)論 (0)編輯 收藏

          2011年9月7日 #

          IT草根職場(chǎng)必看【轉(zhuǎn)】

          前言:真實(shí)世界中的事情往往不是我們想象那么簡(jiǎn)單的,軟件項(xiàng)目的復(fù)雜的業(yè)務(wù)也不是市面上的什么”精通,企業(yè)級(jí)”之類書籍能夠講述明白的。不要以為管理系統(tǒng)就是數(shù)據(jù)增刪改查,不要以為數(shù)據(jù)相差零點(diǎn)零幾就沒有什么。

          你要清楚:作為一個(gè)開發(fā)人員,你最值得驕傲的是什么,職業(yè)操守是什么。

               這里有一點(diǎn)需要的明白的是:公司為什么請(qǐng)你?說的直接一點(diǎn),公司不是慈善機(jī)構(gòu),公司就是花錢請(qǐng)你來為她做事,創(chuàng)造價(jià)值的,一個(gè)不能創(chuàng)造價(jià)值的員工,公司會(huì)留你嗎?

              終于等到了上班的那天,我對(duì)任何人都珍惜今天的這個(gè)機(jī)會(huì),因?yàn)闆]有人知道,在此之前,我經(jīng)歷了怎樣的艱辛。

              Leader給了我系統(tǒng)的整個(gè)數(shù)據(jù)字典(所有數(shù)據(jù)庫表的圖),說了一句:“理解所有表的關(guān)系,下午我給你講講系統(tǒng)的業(yè)務(wù)背景”。

               看到這里,有一點(diǎn)要告訴大家的是:不要再天真的以為公司會(huì)花幾個(gè)星期,幾個(gè)月的事情,讓你慢慢的熟悉業(yè)務(wù),熟悉相關(guān)的知識(shí),一切要靠自己去快速的領(lǐng)悟與消化,這是一個(gè)“物競(jìng)天擇,能者居之”的社會(huì),不是沒有誰就不行。

              說道這里,打個(gè)岔!同時(shí)這里給剛剛畢業(yè)或者踏入整個(gè)行業(yè)的朋友們提個(gè)醒:不要再以自己大學(xué)多么有名而驕傲,也不要再因?yàn)樽约阂郧暗某煽?jī)多么的好而得以。一個(gè)人的學(xué)習(xí)能力就決定了他以后發(fā)展的深度和廣度。胸懷決定發(fā)展的高度!

               不要再以為有人會(huì)像老師那樣一行行的解釋代碼是什么意思,不要以為你是新人,犯錯(cuò)就是“理所當(dāng)然”。No excuse!

               在公司,我是最小的,周圍都是有幾年工作經(jīng)歷的同事,還有四十多歲的。如果公司要裁人(在中國it),那么新人和年紀(jì)很大的就是目標(biāo)群體(在你沒有核心競(jìng)爭(zhēng)力和很好的人緣之前),新人是最大的目標(biāo)!壓力!

               畢竟自己從大二就開始在外面兼職和實(shí)習(xí),這點(diǎn)覺悟還是有的。所以,接到這第一個(gè)任務(wù)之后,自己開始行動(dòng)起來。

               面對(duì)上百張數(shù)據(jù)表,無疑是個(gè)負(fù)責(zé)的蜘蛛網(wǎng),怎么辦?那就得看你如何處理了。如果說,你要找人幫忙,也得“察言觀色”。下面,我們就細(xì)細(xì)說來。

               首先說如何理解上百張表,無疑,從系統(tǒng)的功能入手時(shí)最快速的。系統(tǒng)的功能一般是分模塊實(shí)現(xiàn)的,那么表勢(shì)必和相關(guān)的功能掛鉤,那么把表按照功能劃分來看,就很方便了。

               所以這里就告誡朋友們一點(diǎn):要學(xué)會(huì)逆向思維。一直做項(xiàng)目的時(shí)候,總是先設(shè)計(jì)功能,讓后設(shè)計(jì)表,是吧!現(xiàn)在反推,從表到功能,再回到表,就能夠把問題變得簡(jiǎn)單一點(diǎn)!不要以為這很簡(jiǎn)單,我這里只是一個(gè)簡(jiǎn)單的例子而已,如果問題更加復(fù)雜,怎么辦?!

               因?yàn)槲沂切氯耍?jì)算機(jī)的權(quán)限有限,很多的資源都不能訪問,也沒有開通查看代碼的權(quán)限。但是,我現(xiàn)在需要可以運(yùn)行的系統(tǒng)來幫助我,怎么辦?

          那么就涉及到第二個(gè)問題,如何找人幫忙?

               不要傻不拉幾的一上去就隨便找個(gè)人,然后開口說:“幫我一下“!要知道,人家憑什么幫你?人家有事情要忙嗎?這個(gè)世界沒有誰幫助誰是理所當(dāng)然的!感激幫助過你的朋友和親人吧!

                所以,要學(xué)會(huì)“察言觀色“,這里不是貶義詞!做人要靈光點(diǎn)

                首先,最好請(qǐng)示leader,問他是否有時(shí)間?態(tài)度要好!如果沒有,那么就要問他,除了他還有誰可以問。

                當(dāng)問另外一個(gè)人的時(shí)候,首先要觀察這個(gè)人是不是忙的那種不可開交的樣子,如果是,那么,現(xiàn)在最好不要問,而是自己再次評(píng)估一下,如果要找人幫忙,估計(jì)要花人家多長(zhǎng)的時(shí)間?如何估算,這就是個(gè)人的本事了,呵呵!我這里暫且不說,免得又朋友說“你不說,我也知道“ !呵呵!

                然后,等自己這邊時(shí)間也估計(jì)好之后,然后態(tài)度很好的告訴你需要尋求幫助的人:“可以打擾你幾分鐘嗎“,然后,你就告訴他,你需要系統(tǒng)的一個(gè)可以運(yùn)行的版本! 如果人家沒有時(shí)間,不要退縮,你就要追問,估計(jì)什么時(shí)候可以有時(shí)間,是否有文檔,先讓自己熟悉下。然后你就到那個(gè)點(diǎn)在再去問,不要忘記,隨時(shí)注意態(tài)度!

               不管如何,不要靠指望別人,要靠自己的一些經(jīng)驗(yàn)或相關(guān)文檔,盡力的理解。一句話,用心的,帶著腦子做事情!

          posted @ 2011-09-07 21:05 日出星辰 閱讀(138) | 評(píng)論 (0)編輯 收藏

          2011年9月5日 #

          各種創(chuàng)建單例模式的優(yōu)缺點(diǎn)

          單例模式應(yīng)用于一個(gè)類只有一個(gè)實(shí)例的情況,并且為其實(shí)例提供一個(gè)全局的訪問點(diǎn)。

          特點(diǎn)

          1.一個(gè)類只有一個(gè)實(shí)例

          2.自己創(chuàng)建這個(gè)實(shí)例

          3.整個(gè)系統(tǒng)只能用這個(gè)實(shí)例

          應(yīng)用場(chǎng)景

          外部資源:每臺(tái)計(jì)算機(jī)有若干個(gè)打印機(jī),但只能有一個(gè)PrinterSpooler,以避免兩個(gè)打印作業(yè)同時(shí)輸出到打印機(jī)。

          內(nèi)部資源:大多數(shù)軟件都有一個(gè)(或多個(gè))屬性文件存放系統(tǒng)配置,這樣的系統(tǒng)應(yīng)該有一個(gè)對(duì)象管理這些屬性文件。

          實(shí)現(xiàn)方式

          1.餓漢式:?jiǎn)卫龑?shí)例在類裝載時(shí)就構(gòu)建,急切初始化。(預(yù)先加載法)

          /**
           * 餓漢式(推薦)
           *
           */
          public class Singleton1 {
          
          	private Singleton1() {
          	}
          
          	public static Singleton1 instance = new Singleton1();
          
          	public Singleton1 getInstance() {
          		return instance;
          	}
          
          }

          優(yōu)點(diǎn) 1.線程安全
          2.在類加載的同時(shí)已經(jīng)創(chuàng)建好一個(gè)靜態(tài)對(duì)象,調(diào)用時(shí)反應(yīng)速度快
          缺點(diǎn) 資源效率不高,可能getInstance()永遠(yuǎn)不會(huì)執(zhí)行到,但執(zhí)行該類的其他靜態(tài)方法或者加載了該類(class.forName),那么這個(gè)實(shí)例仍然初始化

           

          2.懶漢式:?jiǎn)卫龑?shí)例在第一次被使用時(shí)構(gòu)建,延遲初始化。

          class Singleton2 {
          	private Singleton2() {
          	}
          
          	public static Singleton2 instance = null;
          
          	public static Singleton2 getInstance() {
          		if (instance == null) {
                        //多個(gè)線程判斷instance都為null時(shí),在執(zhí)行new操作時(shí)多線程會(huì)出現(xiàn)重復(fù)情況
          			instance = new Singleton2();
          		}
          		return instance;
          	}
          }

          懶漢式在單個(gè)線程中沒有問題,但在多線程就可能會(huì)出現(xiàn)兩個(gè)或多個(gè)Singleton2實(shí)例情況,

          雖然后面實(shí)例化的Singleton2會(huì)覆蓋前面實(shí)例化的Singleton2,但最好避免這樣的情況。

          改進(jìn)方式就是加鎖synchornized

          class Singleton3 {
          	private Singleton3() {
          	}
          
          	public static Singleton3 instance = null;
          
          	public static synchronized Singleton3 getInstance() {
          		if (instance == null) {
          			instance = new Singleton3();
          		}
          		return instance;
          	}
          }
          優(yōu)點(diǎn) 資源利用率高,不執(zhí)行g(shù)etInstance()就不會(huì)被實(shí)例,可以執(zhí)行該類的其他靜態(tài)方法
          缺點(diǎn) 第一次加載時(shí)不夠快,多線程使用不必要的同步開銷大


          3.雙重檢測(cè)

          class Singleton4 {
          	private Singleton4() {
          	}
          
          	public static Singleton4 instance = null;
          
          	public static Singleton4 getInstance() {
          		if (instance == null) {
          			synchronized (Singleton4.class) {
          				if (instance == null) {
          					instance = new Singleton4();
          				}
          			}
          		}
          		return instance;
          	}
          }

          優(yōu)點(diǎn) 資源利用率高,不執(zhí)行g(shù)etInstance()就不被實(shí)例,可以執(zhí)行該類其他靜態(tài)方法
          缺點(diǎn) 第一次加載時(shí)反應(yīng)不快,由于java內(nèi)存模型一些原因偶爾失敗

           

          4.靜態(tài)內(nèi)部類

          class Singleton5 {
          	private Singleton5() {
          	}
          
          	private static class SingletonHelp {
          		static Singleton5 instance = new Singleton5();
          	}
          
          	public static Singleton5 getInstance() {
          		return SingletonHelp.instance;
          	}
          }

          優(yōu)點(diǎn) 資源利用率高,不執(zhí)行g(shù)etInstance()不被實(shí)例,可以執(zhí)行該類其他靜態(tài)方法
          缺點(diǎn) 第一次加載時(shí)反應(yīng)不夠快

           

          總結(jié):一般采用餓漢式(1),若對(duì)資源十分在意可以采用靜態(tài)內(nèi)部類(4),不建議采用懶漢式及雙重檢測(cè)(2、3)

          另外

          對(duì)于第二種可以采用volatile方式

          volatile用更低的代價(jià)代替同步

          解釋:同步的代價(jià)主要有覆蓋范圍決定,如果可以降低同步的覆蓋范圍,可大幅提升性能。

          而volatile覆蓋范圍是變量級(jí)別的,因此同步代價(jià)很低。

          volatile原理:告訴處理器,不要將其放入工作內(nèi)存,而是直接在主存操作。因此,當(dāng)多處理器或多線程在訪問該變量時(shí)

          都將直接操作主存,這在本質(zhì)上做到了變量共享。

          volation優(yōu)勢(shì):

          1.更大的程度吞吐量

          2.更少的代碼實(shí)現(xiàn)多線程

          3.程序伸縮性好

          4.比較好理解,無需太高的學(xué)習(xí)成本

          volatile不足:

          1.容易出問題

          2.比較難設(shè)計(jì)

          參考文獻(xiàn)

          http://yiminghe.iteye.com/blog/404334

          http://developer.51cto.com/art/201103/249322.htm

          posted @ 2011-09-05 21:54 日出星辰 閱讀(3381) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題  下一頁
          主站蜘蛛池模板: 江都市| 宁强县| 洛川县| 文安县| 耿马| 建始县| 开原市| 南溪县| 玉树县| 黄浦区| 丰宁| 沈阳市| 凤台县| 即墨市| 罗源县| 洪湖市| 郸城县| 广州市| 云浮市| 英山县| 平度市| 稷山县| 嘉义市| 平南县| 五莲县| 阿拉善左旗| 和顺县| 神木县| 安庆市| 镇沅| 宜都市| 东乌珠穆沁旗| 保定市| 辰溪县| 绥江县| 中西区| 屏边| 辛集市| 商都县| 溆浦县| 永州市|