春風(fēng)博客

          春天里,百花香...

          導(dǎo)航

          <2025年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統(tǒng)計(jì)

          公告

          MAIL: junglesong@gmail.com
          MSN: junglesong_5@hotmail.com

          Locations of visitors to this page

          常用鏈接

          留言簿(11)

          隨筆分類(224)

          隨筆檔案(126)

          個(gè)人軟件下載

          我的其它博客

          我的鄰居們

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          #

          面向?qū)ο缶幊讨谐R婎惖墓δ芎托螒B(tài)

          在面向?qū)ο缶幊讨校覀円话悴捎脧捻斚蛳碌木幊谭绞剑聪仍O(shè)計(jì)類的層次,如View,Controller,Service,Dao,Domain,Util等,再完善各層中的類。在這個(gè)過程中,我發(fā)現(xiàn)按功能和形態(tài)來分,系統(tǒng)中類可分為以下幾個(gè)類別:  

          1.實(shí)體類(Entity Classes):這種類一般是現(xiàn)實(shí)世界事物在代碼世界中的抽象表示,和現(xiàn)實(shí)事物有著一一對(duì)應(yīng)關(guān)系.存儲(chǔ)到持久介質(zhì)中時(shí)一般對(duì)應(yīng)著一條記錄.如MIS系統(tǒng)中常見的雇員類Employee,論壇系統(tǒng)中常見的Topic等.由于這些類可以直接從現(xiàn)實(shí)事物中歸納抽象得來,寫出它們的框架代碼一般相對(duì)方便容易,但要真正理順實(shí)體類之間的關(guān)系需要投入不少精力,這些類一般處于Domain層中. 

          2.通道類(Plumbing Classes):這種類一般用于充當(dāng)傳輸實(shí)體類的通道,在編程中,經(jīng)常需要從持久層取出一個(gè)或多個(gè)實(shí)體類的對(duì)象或是將實(shí)體類的對(duì)象存儲(chǔ)到持久層中,這種任務(wù)一般由通道類來完成.它們一般由Service或是Dao層中的類來承擔(dān).這些類一般不保存狀態(tài),對(duì)外界來說,它們的對(duì)外接口(Public Interface)一般比具體的實(shí)現(xiàn)重要,在數(shù)量較多時(shí),也經(jīng)常抽象出一些上層的抽象類或是接口出來以方便調(diào)用. 

          3.輔助類(Assistant Classes):這些類一般起輔助任務(wù),一般可以把共通的處理和變量放在其中供其他層次類調(diào)用,這樣做一能避免散彈式修改,二能減少重復(fù)代碼,三能提高代碼復(fù)用度.輔助類一般放在Util包中. 

          4.框架類(Framework Classes):這些類一般由固定的框架提供,程序員不能改變.在類的層次上它一般處于界面和業(yè)務(wù)層之間,即控制層的位置,jsp/servlet中的Servlet,Struts1,2中的Action都是這樣的類,它承擔(dān)了接受用戶輸入,并展示業(yè)務(wù)處理的結(jié)果的任務(wù).

          posted @ 2008-08-08 12:53 sitinspring 閱讀(374) | 評(píng)論 (0)編輯 收藏

          技術(shù)人之道

          一個(gè)技術(shù)人員要生存,要發(fā)展,要成一番事業(yè),必須遵循一定固定的法則,若逆天而行而不自覺,輕則徒勞無功,白費(fèi)精力;重則無法立足,庸碌一生。因此把握住自己的發(fā)展之道是技術(shù)人首要的大事,只有走在正確的道路上,前進(jìn)才有意義。 

          一個(gè)技術(shù)人員,首先要固本培元,什么是技術(shù)人的根本呢?無論語言,框架和技術(shù)如何發(fā)展,數(shù)據(jù)結(jié)構(gòu)和算法都是其核心內(nèi)容,所謂萬變不離其宗,有了良好的數(shù)據(jù)結(jié)構(gòu)和算法的根基,接受并掌握一個(gè)新興事物不過旬月時(shí)間,若沒有而盲目跟隨,事倍而功半矣。另外面向?qū)ο蟮木枰惨盐?從根本上來講,任何現(xiàn)代框架其核心思想還是沒有超越面向?qū)ο蟮姆懂?都是面向?qū)ο蟮睦^承和發(fā)展,理解掌握了面向?qū)ο蟮乃枷?就把握住了框架根本性的東西,學(xué)習(xí)掌握起來就更容易把握其本質(zhì). 

          其次,技術(shù)人員必須把握主流技術(shù)方向才不至于迷失自己。若在支流中迷失自己恐有空?qǐng)?zhí)屠龍之技無用武之地之憂,古代也許還能自?shī)首詷罚F(xiàn)代社會(huì)這樣做溫飽都無法解決,房子,車子,孩子更是白扯;只有置身主流,才能繼續(xù)奮斗下去。當(dāng)前的主流技術(shù)方向,無非SSH(Struts1/2,Spring,Hibernate)而已,徹底弄清楚它們,才有安身立命之本.君不見諸多招聘廣告,均寫SSH乎.這三項(xiàng)其實(shí)也不好掌握,尤其Hibernate,掌握不精深也不行,有些大俠也曾陰溝里翻過船。 

          其三,技術(shù)人員要樂于善于總結(jié)提高,對(duì)于已經(jīng)掌握的內(nèi)容,要及時(shí)歸納總結(jié)到紙面上,這樣做一能梳理脈絡(luò),讓自己掌握得更全面細(xì)致;二能查漏補(bǔ)缺,發(fā)現(xiàn)以前忽視或是未接觸過的領(lǐng)域;三能求其友聲,放在博客上供大家分析閱讀討論,彌補(bǔ)自己的不足.有此三益,于己于人都是一件大好事,何樂而不為呢? 

          其四,技術(shù)人員要展示自己的能力和價(jià)值,應(yīng)該具備自己的產(chǎn)品,它可以用來鞏固和展現(xiàn)自己的實(shí)力,在產(chǎn)品的研發(fā)過程中,技術(shù)人員能把自己的知識(shí)智慧實(shí)用化,可避免走入象牙塔之患;外界也能通過產(chǎn)品來了解發(fā)掘自己.這也是一件于己于人都有利的事情. 

          其五,技術(shù)人員應(yīng)該具備完整的思想體系,有自己獨(dú)到的見解并能有所突破創(chuàng)新. 人云亦云無異于鸚鵡學(xué)舌,有何能哉? 要想上一個(gè)層次,必須鯉魚躍龍門. Gosing和Kaven兩人可作為最好的榜樣。 

          最后,廣博的知識(shí)不可少.拘泥于一處難免死鉆牛角尖,很多情況下?lián)Q一種思維頓時(shí)有撥云見日之感,如有閑暇,技術(shù)人員應(yīng)該跳出圈子,廣采能用之材為我所用.

          posted @ 2008-08-08 12:51 sitinspring 閱讀(301) | 評(píng)論 (1)編輯 收藏

          用遞歸和掃描解決稱球問題

               摘要: 稱球問題經(jīng)常是面試中的常客,這里我用做了一個(gè)稱球的程序,主要的方法就是遞歸和掃描,貼出來請(qǐng)大家指正。  閱讀全文

          posted @ 2008-07-27 00:11 sitinspring 閱讀(1208) | 評(píng)論 (2)編輯 收藏

          二叉樹搜索樹代碼

               摘要: /** *//**  * 二叉樹節(jié)點(diǎn)類  * @author HEYANG  * @since 2008-7-26 下午02:59:06  */ class Node<T extends Comparable> {  ...  閱讀全文

          posted @ 2008-07-26 16:25 sitinspring 閱讀(1187) | 評(píng)論 (1)編輯 收藏

          蔓延法判斷兩個(gè)城市的連接狀態(tài)

               摘要: 這是一個(gè)美國(guó)IT企業(yè)的面試題,原題大意是從一個(gè)文件中讀取出可連通的城市對(duì),給出兩個(gè)城市,判斷是否可連通,如果可連通就輸出yes,不可連通就輸出no,否則給出命令行幫助。

          其實(shí)判斷連接狀態(tài)不用遍歷圖,用蔓延法即可,具體做法就是從起始城市開始,依次改變其周邊連通城市的連通狀態(tài),再?gòu)闹苓呴_始向周邊連通城市蔓延,如果能蔓延到結(jié)束城市的周邊可連通城市,則說明兩個(gè)城市是完全可連通的。這種做法和多米諾骨牌效應(yīng)很像。我姑且稱之為蔓延法。
            閱讀全文

          posted @ 2008-07-24 21:49 sitinspring 閱讀(1246) | 評(píng)論 (1)編輯 收藏

          用正則表達(dá)式找出每個(gè)屬性對(duì)應(yīng)的值

          找出以下字符串=符號(hào)后面對(duì)應(yīng)的屬性值

          "職務(wù)=GM 薪水=50000 , 姓名=職業(yè)經(jīng)理人 ; 性別=男  年齡=45 ";

          import java.util.regex.Matcher;
          import java.util.regex.Pattern;

          /**
           * 用正則表達(dá)式找出每個(gè)屬性對(duì)應(yīng)的值
           * 
          @author HEYANG
           * 
          @since 2008-7-23 下午08:12:45
           
          */

          public class RegexFindProperty {

            
          public static void main(String[] args) {
              String input 
          = "職務(wù)=GM 薪水=50000 , 姓名=職業(yè)經(jīng)理人 ; 性別=男  年齡=45 ";
              
              
          // =號(hào)和空白符之間是非空格字符,這種寫法比去分開組合字母,數(shù)字和漢字的方式要快捷
              Pattern pattern = Pattern.compile("=(\\S+)\\s*");

              
          // 用Pattern類的matcher()方法生成一個(gè)Matcher對(duì)象
              Matcher m = pattern.matcher(input);

              
          // 使用find()方法查找第一個(gè)匹配的對(duì)象
              boolean result = m.find();

              
          // 使用循環(huán)找出模式匹配的內(nèi)容打印
              while (result) {
                
          // 取得匹配的結(jié)果
                    String replaceStr = m.group(1);
                    System.out.println(
          "匹配的屬性等于=" + replaceStr);
                    
                result 
          = m.find();
              }

            }

          }

          posted @ 2008-07-24 21:37 sitinspring 閱讀(541) | 評(píng)論 (0)編輯 收藏

          動(dòng)態(tài)生成日歷

               摘要: package com.sitinspring.datetime; import java.util.ArrayList; import java.util.List; public class MonthlyCalendar{     private static f...  閱讀全文

          posted @ 2008-07-19 22:14 sitinspring 閱讀(1096) | 評(píng)論 (0)編輯 收藏

          日期時(shí)間處理實(shí)用類

               摘要: 輸出示例:

          當(dāng)前日期時(shí)間為:2008.07.18 10:48:57
          當(dāng)前日期為:2008.07.18
          當(dāng)前日期為:2008.7.18
          當(dāng)前時(shí)間為:10:48:57
          2008.07.05與2008.07.18之間相隔:13天
          當(dāng)前年月為:2008.07
          本月第一天為周2
          本月有31天
            閱讀全文

          posted @ 2008-07-18 10:52 sitinspring 閱讀(542) | 評(píng)論 (0)編輯 收藏

          java.util.Comparator使用示例

          Comparator的具體實(shí)現(xiàn)類
          public class AgeComparator implements Comparator {
            
          public int compare(Object op1, Object op2) {
              Employee eOp1 
          = (Employee) op1;
              Employee eOp2 
          = (Employee) op2;

              
          // 按年齡排序
              return eOp1.getAge()-(eOp2.getAge());
            }

          }


          public class NameComparator implements Comparator {
            
          public int compare(Object op1, Object op2) {
              Employee eOp1 
          = (Employee) op1;
              Employee eOp2 
          = (Employee) op2;

              
          // 按姓名排序
              return eOp1.getName().compareTo(eOp2.getName());
            }

          }


          public class SalaryComparator implements Comparator {
            
          public int compare(Object op1, Object op2) {
              Employee eOp1 
          = (Employee) op1;
              Employee eOp2 
          = (Employee) op2;

              
          // 按薪水排序
              return eOp1.getSalary()-(eOp2.getSalary());
            }

          }


          Employee類:

          public class Employee{
            
          protected String name;
            
          protected int age;
            
          protected int salary;
            
            
          public Employee(String name,int age,int salary){
              
          this.name=name;
              
          this.age=age;
              
          this.salary=salary;
            }

            
            
          public int getAge() {
              
          return age;
            }

            
          public void setAge(int age) {
              
          this.age = age;
            }

            
          public String getName() {
              
          return name;
            }

            
          public void setName(String name) {
              
          this.name = name;
            }

            
          public int getSalary() {
              
          return salary;
            }

            
          public void setSalary(int salary) {
              
          this.salary = salary;
            }
           
          }


          測(cè)試:
          public class Main{
            
          public static void main(String[] args){
              List
          <Employee> employees=new ArrayList<Employee>();
              
              employees.add(
          new Employee("Andy",21,2000));
              employees.add(
          new Employee("Felix",21,3000));
              employees.add(
          new Employee("Bill",35,20000));
              employees.add(
          new Employee("Helen",21,10000));
              employees.add(
          new Employee("Cindy",28,8000));
              employees.add(
          new Employee("Douglas",25,5000));
                  
              
          // 按名稱排序
                Collections.sort(employees,new NameComparator());
                display(employees);

                
          // 按年齡排序
                Collections.sort(employees,new AgeComparator());
                display(employees);
                
                
          // 按薪水排序
                Collections.sort(employees,new SalaryComparator());
                display(employees);
            }

            
            
          public static void display(List<Employee> employees){
              
          for(Employee e:employees){
                System.out.println(
          "雇員名="+e.getName()+" 年齡="+e.age+" 薪水="+e.getSalary());
              }

              
              System.out.println();
            }

          }


          輸出:
          雇員名=Andy 年齡=21 薪水=2000
          雇員名
          =Bill 年齡=35 薪水=20000
          雇員名
          =Cindy 年齡=28 薪水=8000
          雇員名
          =Douglas 年齡=25 薪水=5000
          雇員名
          =Felix 年齡=21 薪水=3000
          雇員名
          =Helen 年齡=21 薪水=10000

          雇員名
          =Andy 年齡=21 薪水=2000
          雇員名
          =Felix 年齡=21 薪水=3000
          雇員名
          =Helen 年齡=21 薪水=10000
          雇員名
          =Douglas 年齡=25 薪水=5000
          雇員名
          =Cindy 年齡=28 薪水=8000
          雇員名
          =Bill 年齡=35 薪水=20000

          雇員名
          =Andy 年齡=21 薪水=2000
          雇員名
          =Felix 年齡=21 薪水=3000
          雇員名
          =Douglas 年齡=25 薪水=5000
          雇員名
          =Cindy 年齡=28 薪水=8000
          雇員名
          =Helen 年齡=21 薪水=10000
          雇員名
          =Bill 年齡=35 薪水=20000


          posted @ 2008-07-15 11:52 sitinspring 閱讀(7606) | 評(píng)論 (1)編輯 收藏

          八皇后回溯版

               摘要: 回溯法有“通用的解題法“之稱。用它可以系統(tǒng)的搜索一個(gè)問題的所有解或任一解。會(huì)所法是一個(gè)既帶有系統(tǒng)性又帶有跳躍性的搜索算法,他在包含問題的所有解的解空間樹中,按照深度有限的策略,從根節(jié)點(diǎn)出發(fā)搜索解空間樹,算法搜索至解空間樹的任一節(jié)點(diǎn)時(shí),總是先判斷該節(jié)點(diǎn)是否肯定不包含問題的解。如果肯定不包含,則跳過對(duì)該節(jié)點(diǎn)為根的子樹的系統(tǒng)搜索,逐層向其祖先節(jié)點(diǎn)回溯,否則進(jìn)入該子樹,繼續(xù)按照深度優(yōu)先的策略進(jìn)行搜索。回溯法在用來求問題的任一接時(shí),只要搜索到問題的一個(gè)解就可以結(jié)束。
          這種深度優(yōu)先的解的算法稱為回溯法,它適合于解一些組合數(shù)較大的問題。

          用回溯法解n皇后問題時(shí),可以用一棵完全n叉樹來表示其解空間。剪去不滿足行列和斜線攻擊的子樹后,剩下的就是問題的解答。
            閱讀全文

          posted @ 2008-07-08 11:38 sitinspring 閱讀(781) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共13頁(yè): 上一頁(yè) 1 2 3 4 5 6 7 8 9 下一頁(yè) Last 
          sitinspring(http://www.aygfsteel.com)原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處.
          主站蜘蛛池模板: 揭东县| 元氏县| 任丘市| 即墨市| 兴文县| 赤水市| 通山县| 蓬莱市| 原平市| 上栗县| 讷河市| 南宁市| 刚察县| 壶关县| 内乡县| 电白县| 措勤县| 玉门市| 中西区| 长岭县| 怀仁县| 上饶县| 明光市| 东台市| 五大连池市| 淮滨县| 松溪县| 健康| 柳林县| 南宫市| 克东县| 顺平县| 紫金县| 额济纳旗| 乌鲁木齐市| 喜德县| 望奎县| 湘乡市| 武川县| 连城县| 城固县|