内連接配接,左、右連接配接,全連接配接
例子:
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+漢的半個”。 - public class SplitStr {
- /*
- * 判斷是否為漢字
- *
- * @param cc 輸入字元
- */
- public static boolean strIfChinese(char cc) {
- String ccStr = String.valueOf(cc);
- return ccStr.getBytes().length > 1 ? true : false;
- }
- /*
- * 計算輸入字元串的總位元組數
- *
- * @param str
- */
- public static int strTotalLen(String str) {
- int len = 0;
- char[] chr = str.toCharArray();
- for (char cc : chr) {
- if (!strIfChinese(cc)) {
- len = len + 1;
- } else {
- len = len + 2;
- }
- }
- return len;
- }
- /*
- *
- * @param inputStr 輸入的字元串
- *
- * @param len 指定長度的位元組數
- */
- public String retStr(String inputStr, int len) {
- // 如果輸入的字元串為空或者是"",則直接輸出"";
- if (inputStr == null || inputStr.equals(""))
- return "";
- // 如果len為0或大于總位元組數
- if (len == 0 || len > strTotalLen(inputStr))
- return inputStr;
- char[] chr = inputStr.toCharArray();
- String str="";
- int count = 0;
- for(char cc:chr){
- if (count < len) {
- if (strIfChinese(cc)) {
- if (count + 1 == len)
- return str;
- count = count + 2;
- str = str + String.valueOf(cc);
- } else {
- count = count + 1;
- str = str + String.valueOf(cc);
- }
- }
- }
- return str;
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- /*
- * String str = "a我bc"; char[] chr = str.toCharArray(); byte[] byt =
- * str.getBytes(); for (byte bb : byt) { System.out.println(bb); }
- *
- * for (char cc : chr) { System.out.println(cc); }
- */
- // System.out.println(chr.length + "&&&" + byt.length + "%%%" + by);
- SplitStr splitStr = new SplitStr();
- String str = "我b們c";
- System.out.println(splitStr.retStr(str, 6));
- }
- }
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、一定的運氣和機遇
謀事在人,成事在天。機遇也是非常重要的,一定要善于尋找機遇,創造機遇,抓住機遇。
想要成為優秀的顧問,需要一個漫長的過程,要多多用心,潛心體會,自然會有心得。常常要耐得住寂寞清靜。多付出,不要太在意回報。堅韌不拔,終将修成正果。優秀的實施顧問,前途必然是光明的。 |