天天看點

面試的一些準備

内連接配接,左、右連接配接,全連接配接

例子:

a表     id   name     b表     id   job   parent_id

            1   張3                   1     23     1

            2   李四                 2     34     2

            3   王武                 3     34     4

a.id同parent_id   存在關系

内連接配接

select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id

結果是  

1   張3                   1     23     1

2   李四                 2     34     2

左連接配接

select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id

結果是  

1   張3                   1     23     1

2   李四                 2     34     2

3   王武                 null

右連接配接

select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id

結果是  

1   張3                   1     23     1

2   李四                 2     34     2

null                 3     34     4

完全連接配接

select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id

結果是  

1   張3                   1     23     1

2   李四                 2     34     2

null                 3     34     4

3   王武                 null

冒泡排序

void BubbleSort(SeqList R)

   { //R(l..n)是待排序的檔案,采用自下向上掃描,對R做冒泡排序

     int i,j;

     Boolean exchange; //交換标志

     for(i=1;i<n;i++){ //最多做n-1趟排序

       exchange=FALSE; //本趟排序開始前,交換标志應為假

       for(j=n-1;j>=i;j--) //對目前無序區R[i..n]自下向上掃描

        if(R[j+1].key<R[j].key){//交換記錄

          R[0]=R[j+1]; //R[0]不是哨兵,僅做暫存單元

          R[j+1]=R[j];

          R[j]=R[0];

          exchange=TRUE; //發生了交換,故将交換标志置為真

         }

       if(!exchange) //本趟排序未發生交換,提前終止算法

             return;

     } //endfor(外循環)

    } //BubbleSort

三大範式

第一範式:確定每列的原子性.      如果每列(或者每個屬性)都是不可再分的最小資料單元(也稱為最小的原子單元),則滿足第一範式.          
例如:顧客表(姓名、編号、位址、……)其中"位址"列還可以細分為國家、省、市、區等。         
第二範式:在第一範式的基礎上更進一層,      
目标是確定表中的每列都和主鍵相關.      如果一個關系滿足第一範式,并且除了主鍵以外的其它列,都依賴于該主鍵,則滿足第二範式.            
例如:訂單表(訂單編号、産品編号、定購日期、價格、……),"訂單編号"為主鍵,"産品編号"和主鍵列沒有直接的關系,即"産品編号"      
列不依賴于主鍵列,應删除該列。        
第三範式:在第二範式的基礎上更進一層,目标是確定每列都和主鍵列直接相關,而不是間接相關.          
如果一個關系滿足第二範式,并且除了主鍵以外的其它列都不依賴于主鍵列,則滿足第三範式.      為了了解第三範式,需要根據Armstrong公      
裡之一定義傳遞依賴。假設A、B和C是關系R的三個屬性,如果A-〉B且B-〉C,則從這些函數依賴中,可以得出A-〉C,如上所述,      
依賴A-〉C是傳遞依賴。      例如:訂單表(訂單編号,定購日期,顧客編号,顧客姓名,……),初看該表沒有問題,滿足第二範式,      
每列都和主鍵列"訂單編号"相關,再細看你會發現"顧客姓名"和"顧客編号"相關,"顧客編号"和"訂單編号"又相關,最後經過傳遞依賴,      
"顧客姓名"也和"訂單編号"相關。為了滿足第三範式,應去掉"顧客姓名"列,放入客戶表中。      
short i =1; i=i+1與short i=1; i+=1編譯時的差別
 
       

short i =1; i=i+1;

short i=1;i+=1;

這兩有什麼差別呢 ?

對兩個容量不一樣的資料類型的變量進行算術運算時,java會自動将小容量的變量進行精度提升,然後再進行運算,得到的結果類型是提升後的大容量的資料類型.如果将該結果指派給小容量的資料類型的變量,則必須進行強制的類型轉換,否則編譯程式會報損失精度錯.如樓主示例,用i來表示1: short s1 = 1; int i = 1; 首先,因為short類型是16位的,而int類型是32位的,在進行 (s1+i) 運算時,自動将s1提升到32位,然後與i相加,得到的結果是32位的,而此時 s1=s1+i; 必然報錯,因為如果指派成功,隻是把低16位賦給了s1,這個雖然正是樓主想要的結果,但是編譯程式卻不能判定你的意圖是什麼. 執行強轉: s1=(short)(s1+i); 就沒問題了. s1+=i;能編譯通過并得到正确結果,而 s1=s1+i; 卻報錯,是因為它們并不像樓主認為的那樣是等價的,s1+=i的方式java會對i進行窄化轉換,由編譯程式自動執行. java規範中說: E1 op=E2 實際上等價于 : E1=(T)( (E1)op(E2) ) 其中T是E1的資料類型.這種類型轉換或者是一個恒等轉換,或者是一個窄化轉換. 這個說明java是一種強類型的語言,對資料類型的要求是非常嚴格的,否則會引起混亂. 下面解釋一下三種類型轉換:恒等轉換(相同容量的兩個資料類型之間的指派);拓寬轉換(小容量類型指派給大容量類型);窄化轉換(大容量指派給小容量類型). 實際上,前兩種轉換都是編譯程式自動執行的,而窄化轉換則要求必須顯式的執行.

編寫一個截取字元串的函數,輸入為一個字元串和位元組數,輸出為按位元組截取的字元串。 但是要保證漢字不被截半個,如“我ABC”4,應該截為“我AB”,輸入“我ABC漢DEF”,6,應該輸出為“我ABC”而不是“我ABC+漢的半個”。

  1. public class SplitStr {   
  2.     /*  
  3.      * 判斷是否為漢字  
  4.      *   
  5.      * @param cc 輸入字元  
  6.      */  
  7.     public static boolean strIfChinese(char cc) {   
  8.         String ccStr = String.valueOf(cc);   
  9.         return ccStr.getBytes().length > 1 ? true : false;   
  10.     }   
  11.     /*  
  12.      * 計算輸入字元串的總位元組數  
  13.      *   
  14.      * @param str  
  15.      */  
  16.     public static int strTotalLen(String str) {   
  17.         int len = 0;   
  18.         char[] chr = str.toCharArray();   
  19.         for (char cc : chr) {   
  20.             if (!strIfChinese(cc)) {   
  21.                 len = len + 1;   
  22.             } else {   
  23.                 len = len + 2;   
  24.             }     
  25.         }   
  26.         return len;   
  27.     }   
  28.     /*  
  29.      *   
  30.      * @param inputStr 輸入的字元串  
  31.      *   
  32.      * @param len 指定長度的位元組數  
  33.      */  
  34.     public String retStr(String inputStr, int len) {   
  35.         // 如果輸入的字元串為空或者是"",則直接輸出"";   
  36.         if (inputStr == null || inputStr.equals(""))   
  37.             return "";   
  38.         // 如果len為0或大于總位元組數   
  39.         if (len == 0 || len > strTotalLen(inputStr))   
  40.             return inputStr;   
  41.         char[] chr = inputStr.toCharArray();   
  42.         String str="";   
  43.         int count = 0;   
  44.         for(char cc:chr){   
  45.             if (count < len) {   
  46.                 if (strIfChinese(cc)) {   
  47.                     if (count + 1 == len)   
  48.                         return str;   
  49.                     count = count + 2;   
  50.                     str = str + String.valueOf(cc);   
  51.                 } else {   
  52.                     count = count + 1;   
  53.                     str = str + String.valueOf(cc);   
  54.                 }   
  55.             }               
  56.         }   
  57.         return str;   
  58.     }   
  59.     /**  
  60.      * @param args  
  61.      */  
  62.     public static void main(String[] args) {   
  63.         /*  
  64.          * String str = "a我bc"; char[] chr = str.toCharArray(); byte[] byt =  
  65.          * str.getBytes(); for (byte bb : byt) { System.out.println(bb); }  
  66.          *   
  67.          * for (char cc : chr) { System.out.println(cc); }  
  68.          */  
  69.         // System.out.println(chr.length + "&&&" + byt.length + "%%%" + by);   
  70.         SplitStr splitStr = new SplitStr();   
  71.         String str = "我b們c";   
  72.         System.out.println(splitStr.retStr(str, 6));   
  73.     }   
  74. }  
ERP實施工程師
1、一定的技術基礎。 
身為軟體實施顧問,你不能不了解你的産品,當然你可以了解得粗略,不必象技術工程師那樣精通,你要能夠回答客戶提出的大部分問題,是以需要你掌握的知識非常綜合、全面——強調的是廣度而不是深度,當然,如果你的深度夠好,那麼會更加有利。如果你的深度不夠,經常回答不上客戶的問題,不要緊,關鍵是你要留一個緩沖餘地,你要知道,你應該從哪裡獲得幫助和支援。優秀的實施顧問,應該懂得如何排程資源。 
以下為我認為實施顧問應該掌握的技術: 
(1)ERP軟體本身,如SAP, ORACLE中的某個或某些子產品,用友、金蝶等。 
(2)系統管理知識,包括WINDOWS 2000,WINXP。 
(3)資料庫知識,包括SQL2000、ORACLE、DB2等等,SQL技能。細分可為查詢分析器的使用,資料表的操作,報表的基本技能等等。 
(4)網絡知識。 
(5)一定的硬體知識。 

2、行業知識。 
行業知識浩如煙海,沒有人可以掌握全部。把握好你的定位,你要了解全部的産品有什麼,但你要標明一個方向,在這方面成為專家。既要廣博,也要有自己的專精所在。 

不要貪多,很多東西知道架構即可,用的時候懂得較快地搜尋、查找出來即可。時間精力極為有限,有些東西要懂得放棄。 

3、管理知識和項目管理知識。 
應當具備豐富的管理知識。要與客戶保持好關系,要有良好的服務意識。客戶管理層是項目推進中最好的資源,一定要取得他們充分的信任和合作。如果你不了解管理知識,你難以讓客戶信服和接受。軟體之是以需要實施顧問,就在于實施顧問能夠通過資源排程使它具備生命力,沒有産品是盡善盡美的,但是一名盡責的、優秀的實施顧問,卻可以彌補産品本身的不足。網絡上管理知識應有盡有,隻看個人的吸收能力。另外的一個好的學習途徑就是客戶方管理人員,他們的管理經驗更有實效性。是以,在項目的實施過程中,我們事實上就可以學到很多管理知識。這也是這項工作的誘惑和魅力之一。 

作為實施顧問,項目管理非常重要。要掌握基礎的項目管理知識,掌握項目管理常用的軟體工具。如果你是由技術工程師轉型而來,觀念上的轉變至為重要。實施顧問不是替客戶做事,而是指導客戶做事。是以盡管你眼看着一個簡單的問題卻在客戶手中無法解決,禁不住着急,想要代做,也請你管住自己。牢牢記住實施顧問的定位,不要混淆。事實證明,這是很多做慣了技術服務的工程師在轉型到實施顧問時的一個瓶頸。身為實施顧問,你的專業化,恰恰是展現在“項目管理”上面。項目管理的知識,可以充分利用網際網路,用BAIDU、GOOGLE去搜吧。然後,不要浮躁,用心體會。 

4、英語水準。 
SAP以及其他重要的ERP系統,大多都是西方人開發的,相關資料,尤其是最新的資料基本都是英文的,如果英語不靈,那真有跛腿的味道。況且用SAP的公司,大多是跨國企業,顧問本身又是一個很注重交流溝通的工作,是以,良好的英文水準,絕對是非常必要的。 

5、你應有一個清爽整潔、職業化儀表。 
要知道顧問基本上是一個服務性質的工作,必須得到客戶方的認可,必須讓人家喜歡和你相處。不修邊幅的人,不适合擔任實施顧問。你的氣質與風度,你能否征服你的客戶讓他們接受你,信任你,是項目順利進展的關鍵。曾有客戶講過,如果他們不接受顧問本身,也就難以接受顧問帶來的一切。除了相貌,氣質,還有談吐。彬彬有禮、條理清晰、善于表達,是良好溝通的基礎。當然,自信心也很重要。而職業化,不僅僅是實施顧問的要求,它是身在職場的人們都必須具備的常識。如果想在這方面得到提高,可以去買本公關禮儀方面的書或者查詢網站上的相關知識。另外可以多留心一下那些公認有修養、善談吐人士的言談舉止,逐漸地養成習慣,固化下來。 

6、學習能力。 
上述幾條,不是獨立存在,而是相輔相成,技術、管理、企業業務流程,都需要不斷地學習。知識是日新月異的,必須與時俱進,活到老學到老,你往往需要在知識上走在客戶的前面,有時候你必須要向客戶學習,要學的東西永遠太多,是以想要成為一名優秀的實施顧問,時間管理是必須要掌握的,如何合理的安排時間、有效利用時間是一門大學問,需要自己不斷探索、總結。唯有熱愛這個行業,對它感興趣,甚至到了吃飯、走路、坐車、如廁也常常思考相關的問題。(睡覺就不要想了,容易失眠。: ) ) 這樣算是進入狀态了。你才有希望成為佼佼者。 

7、一定的運氣和機遇 
謀事在人,成事在天。機遇也是非常重要的,一定要善于尋找機遇,創造機遇,抓住機遇。 

想要成為優秀的顧問,需要一個漫長的過程,要多多用心,潛心體會,自然會有心得。常常要耐得住寂寞清靜。多付出,不要太在意回報。堅韌不拔,終将修成正果。優秀的實施顧問,前途必然是光明的。      

繼續閱讀