第一篇:plc學(xué)習(xí)心得,初學(xué)者必看
1.不要看到別人的回復(fù)第一句話就說:給個(gè)代碼吧!你應(yīng)該想想為什么。當(dāng)你自己想 出來再參考別人的提示,你就知道自己和別人思路的差異。
2.別小家子氣,買本書幾十塊都舍不得,你還學(xué)個(gè)P。為了省錢看電子書,浪費(fèi)的時(shí)間絕對超過書的價(jià)值。當(dāng)然如果查資料,只能看PDF。
3.學(xué)習(xí)新的開發(fā)軟件時(shí),一定要看幫助手冊。買的書不夠全面。剛接觸一個(gè)軟件,什么都不懂,就盲目的問東問西,讓人看起來很幼稚。
4.不要蜻蜓點(diǎn)水,得過且過,細(xì)微之處往往體現(xiàn)實(shí)力。
5.把時(shí)髦的技術(shù)掛在嘴邊,還不如把過時(shí)的技術(shù)記在心里。
6.看得懂的書,請仔細(xì)看;看不懂的書,請硬著頭皮看。別指望看第一遍書就能記住和掌握什么——請看第二遍、第三遍。
7.多實(shí)踐,調(diào)試,去寫去調(diào),只用軟件模擬,是永遠(yuǎn)成不了高手的。
8.保存好你做過的所有的源程序、原理圖等----那是你最好的積累之一。
9.對于網(wǎng)絡(luò),還是希望大家能多利用一下,很多問題不是非要到論壇來問的,首先你要學(xué)會自己找答案,比如google、百度都是很好的搜索引擎,你只要輸入關(guān)鍵字就 能找到很多相關(guān)資料,別老是等待別人給你希望,看的出你平時(shí)一定也很懶!到一個(gè)論壇,你學(xué)會去看以前的帖子,不要什么都不看就發(fā)帖子問,也許你的問題早就有人問過了,你再問,別人已經(jīng)不想再重復(fù)了,做為初學(xué)者,誰也不希望自己的帖子沒人回的。
引用 回復(fù) 舉報(bào) 評分
什么樣的人是浮躁的人
浮躁的人容易問:誰有xxx程序嗎?--(你給人家多少錢???自己的勞動(dòng)白送你?)浮躁的人容易說:【男兒膝下有黃金】xxx ---(就算網(wǎng)絡(luò)也要點(diǎn)尊嚴(yán)吧?)浮躁的人容易說:緊急求救---(其實(shí)只是個(gè)簡單的課程設(shè)計(jì))
浮躁的人容易說:有沒有xxx中文資料?---一個(gè)字:懶。別說別的。E文不行?誰不是從 ABC學(xué)起的???
浮躁的人容易說:求xxx,我的email是xxx@xxx.com,然后消失 ---- 你以為你是大爺啊,人 家請你吃飯,還要喂到你口里不成?
浮躁的人容易問:做PLC有錢途嗎----只是為了錢,搞不好技術(shù)的,你去搶銀行好了。浮躁的人容易說:哪里有xxx資料?(其實(shí)大部分資料網(wǎng)絡(luò)上都有,但是偏偏來找人 問,懶!)浮躁的人分兩種:只觀望而不學(xué)的人;只學(xué)而不堅(jiān)持的人; 浮躁的人永遠(yuǎn)不是一個(gè)高手。
第二篇:PLC初學(xué)者心得
鄙人原本是化工專業(yè)畢業(yè)的,后因工作需要,加之個(gè)人興趣,才轉(zhuǎn)行搞儀表、機(jī)械。十年前,我剛開始使用PLC時(shí),也是一頭霧水。仗著自己對硬件、工程知識的熟悉,和對組態(tài)軟件的粗淺了解,硬著頭皮接下了任務(wù)。當(dāng)時(shí)已經(jīng)來不及接受培訓(xùn),相關(guān)資料極其缺乏,僅有的參考資料是一本英文的S7-200手冊,以及西門子網(wǎng)站上找到的一些全西文的示例,總算在三個(gè)月內(nèi)完成了系統(tǒng)的構(gòu)建、軟件的編寫工作。期間走彎路、出故障是家常便飯,經(jīng)常搞得我茶飯不思,而且還由于操作不慎燒毀過一臺PLC。所以我非常理解那些剛?cè)腴T的網(wǎng)友兩手抓瞎的感覺。
在此,我想粗略的總結(jié)一下自己的學(xué)習(xí)之路,供網(wǎng)友們參考。
1、編程需要堅(jiān)強(qiáng)的毅力和足夠的耐心
人各有所長。有些人把編程看作一項(xiàng)冗長而枯燥的工作;有些人把編程看作一項(xiàng)趣味的智力游戲。如果你是前者,強(qiáng)烈建議你遠(yuǎn)離這份工作。畢竟編程工作是對人的毅力和耐心的挑戰(zhàn)。我所在實(shí)驗(yàn)室中,很多學(xué)生看到我編程序就會驚訝于我面對這一堆堆符號所表現(xiàn)出的專注。其實(shí),這是興趣使然。興趣使我具備了足夠的毅力和耐心。經(jīng)過無數(shù)次失敗后,當(dāng)看到一個(gè)個(gè)符號按我的思路整齊的排列,PLC按我的要求有條不紊的運(yùn)行時(shí),興趣得到了極大的滿足,如同打通了一個(gè)游戲的關(guān)口。所以,我告訴這些學(xué)生:你們看到的是一堆枯燥怪異的符號,我看到的卻是一群熱情奔放的舞者,而我則是她們的導(dǎo)演。
2、編程需要敢于實(shí)踐的信心
我曾經(jīng)教過一個(gè)學(xué)生學(xué)AutoCAD,我對她的唯一要求就是實(shí)踐。我告訴她:你隨便怎么操作,大不了一張圖重畫;最壞的結(jié)果是系統(tǒng)崩潰,沒關(guān)系,系統(tǒng)重做,再來;只要電腦沒被砸了,怎么都行。兩年后,我再看到她做的CAD圖紙,也自嘆不如。
同樣道理,只有不斷地在PLC上運(yùn)行這些指令,觀察運(yùn)行的結(jié)果,才能弄清PLC指令的作用。很多初學(xué)者對PLC一臉的迷茫,往往是出于一種畏懼,擔(dān)心損壞設(shè)備。而這些畏懼是沒有任何道理的。仔細(xì)的閱讀手冊是非常重要的,但是僅靠讀書是成不了一個(gè)工程師的。更何況手冊上的內(nèi)容并非面面俱到。我在接觸到那些不熟悉的指令時(shí),喜歡單獨(dú)編一個(gè)小程序,讓PLC運(yùn)行。然后逐個(gè)修改條件,觀察運(yùn)行的結(jié)果(MicroWin為用戶提供了非常好的監(jiān)控手段),反過來再重新理解手冊的描述,這樣就可以非常直觀的理解這些指令的作用和使用方法。不必?fù)?dān)心自己寫的程序會有什么問題,會影響PLC的正常工作。程序有沒有問題,只有讓PLC運(yùn)行了才能發(fā)現(xiàn)。而發(fā)現(xiàn)問題并解決問題就是對自己能力的提高。撇開硬件操作不談,單就軟件來說,我還真沒有遇到過由于軟件問題而損壞PLC的事。在這里不必?fù)?dān)心繼電器電路接錯(cuò)線可能造成的后果。所以,大膽的實(shí)踐是PLC編程的必由之路。
當(dāng)然,大膽實(shí)踐并不是野蠻操作,而是必須遵循必要的規(guī)范。還有一個(gè)要注意的,在程序未經(jīng)可靠性證實(shí)之前,千萬不要掛接負(fù)載,以免造成不必要的損失。數(shù)字量的輸出有LED顯示;而模擬量處理可以采用一些硬件或軟件模擬手段來解決。
3、編程需要有縝密的邏輯思維
編程本身就是一種邏輯思維過程。在高級語言中,使用最多的是ifthenelse、select這些條件判別語句,這就是邏輯中的因果關(guān)系。PLC程序就是由這些因果關(guān)系組成的:判別條件是否成立,進(jìn)而決定執(zhí)行相應(yīng)的指令。最初的PLC是用來替代繼電器邏輯電路的,所以繼承了繼電器電路以觸點(diǎn)作為觸發(fā)條件的描述方式。在PLC中,以虛擬觸點(diǎn)代替了繼電器的金屬觸點(diǎn),而繼電器電路所表達(dá)的邏輯關(guān)系還是被完整的保留
下來。即使引入了繼電器電路難以勝任的數(shù)值處理過程,PLC從根本上還是在執(zhí)行一個(gè)個(gè)因果關(guān)系。所以,理順對象的各個(gè)事件之間的邏輯關(guān)系,是編程之前必須精心做好的準(zhǔn)備工作。我在接到一項(xiàng)任務(wù)后,第一件事就是整理出一份邏輯關(guān)系圖,與用戶反復(fù)商討,取得用戶的認(rèn)可,然后才真正進(jìn)入程序的編寫過程。
4、不可或缺的相關(guān)知識
PLC的程序是直接作用于對象的具體工藝過程,那么對對象具體工藝過程的理解是非常重要的的。我在與用戶的交流過程中,會用我所掌握的UnitOperation的知識分析用戶的工藝過程,協(xié)助用戶整理過程控制中的各個(gè)邏輯關(guān)系,甚至包括各種儀表、硬件的配置。這得益于我原本所學(xué)的專業(yè)。當(dāng)然,不能要求所有搞PLC程序的工程師都有我這樣的經(jīng)歷。但是有兩門知識卻是不可或缺的:一是過程儀表的硬件知識,包括傳感器、變送器(二次儀表)和PLC本身,這是構(gòu)建控制系統(tǒng)的基礎(chǔ);二是過程控制理論,包括各種控制模型的原理和應(yīng)用,其中最重要的是二位調(diào)節(jié)和PID調(diào)節(jié)模型。PID調(diào)節(jié)是目前用得最廣泛的過程控制手段,且變化多端。學(xué)習(xí)PID最好的方法就是讀書。幾乎所有講解過程控制的書籍都有關(guān)于PID的內(nèi)容,多讀基本相關(guān)的書籍對理解PID是很有益處的。我發(fā)現(xiàn)不少網(wǎng)友在進(jìn)入PLC領(lǐng)域時(shí),缺乏這些相關(guān)知識。這并不可怕;可怕的是當(dāng)事者不能靜下心來彌補(bǔ)知識的缺陷。我們不要怪罪學(xué)校沒有教授這些內(nèi)容,而是要注重自己如何去學(xué)習(xí)這些知識。工作中遇到的許多問題是學(xué)校里沒講過的,這不能成為我們拒絕工作的理由,而應(yīng)該以積極的態(tài)度去應(yīng)對這些問題。我的體會是,為了解決工作中的問題而學(xué)習(xí)的知識,比課堂上學(xué)的東西更容易記住。
5、養(yǎng)成良好的編程習(xí)慣
每個(gè)人編程都會有不同的習(xí)慣和特點(diǎn),不能強(qiáng)求一致。但是一些好的習(xí)慣還是應(yīng)該為大多數(shù)人所遵循。一是理順邏輯關(guān)系、時(shí)序關(guān)系,編制程序框圖;二是合理分配主程序、子程序和中斷程序;三是合理分配寄存器,編制寄存器符號表。
PLC編程更接近于單片機(jī),或者說PLC就是模塊化的單片機(jī)。因此PLC的很多操作都是直接針對寄存器的,如果在程序中出現(xiàn)不合理的寄存器地址重疊,一定會出現(xiàn)不可預(yù)想的后果。編制寄存器符號表不僅可以避免上述問題(MicroWin會有問題提示),而且可以使程序具備更好的可讀性。這和VB中定義變量有異曲同工之處。
VB編程中關(guān)注的是事件,不強(qiáng)調(diào)主程序和子程序的觀念,因?yàn)閂B主程序的工作是由PC的操作系統(tǒng)完成的。PLC則不然。PLC程序是以主程序?yàn)橹鞲傻?,CPU不斷的循環(huán)執(zhí)行主程序,只有觸發(fā)條件成立時(shí)才會調(diào)用子程序或中斷程序。即子程序和中斷程序所執(zhí)行的任務(wù)不是全時(shí)需要的。如果把這些任務(wù)都放在主程序中會無端增加主程序的工作量,降低程序的效率。這點(diǎn)和單片機(jī)的編程思路是一致的。子程序的使用可以使整個(gè)程序的邏輯更清晰。而且子程序可以分開編寫、調(diào)試,最后“安裝”到主程序上。這樣你可以一個(gè)一個(gè)解決問題。
PLC編程,無論是LAD,抑或STL,都不如VB那么直觀、有趣,更不如CAD那么形象。但比單片機(jī)的匯編語言的可視性強(qiáng)多了。對于初學(xué)者,LAD(梯形圖)的編程相對直觀,更容易上手。
最后,PLC提供了豐富的指令、模塊,比單片機(jī)方便了很多。但是初學(xué)者編程時(shí)應(yīng)盡量先使用簡單的指令達(dá)到目的。盡管看上去有點(diǎn)土,卻不失為一個(gè)入門的好途徑,且對你理解那些較為復(fù)雜的指令會有幫助。具備了一定經(jīng)驗(yàn)后,應(yīng)該考慮掌握復(fù)雜指令的應(yīng)用,以及程序的優(yōu)化。
看到不少新手的帖子,感覺得到樓主著急的心情,特別是遇到跟書上理論不相符的現(xiàn)象更是上火。
鑒于此,“曾經(jīng)的新手”給正在準(zhǔn)備入門的學(xué)弟們介紹幾點(diǎn)經(jīng)驗(yàn)。
1、先通讀一遍“系統(tǒng)手冊”(不管能不能看懂,先了解個(gè)大概,以便學(xué)習(xí)編程時(shí)查找);
2、由位控邏輯入手,逐漸增加定時(shí)、計(jì)數(shù)等條件,把或、與、非關(guān)系理順;
3、進(jìn)而練習(xí)整數(shù)運(yùn)算、實(shí)數(shù)運(yùn)算、類型轉(zhuǎn)換;
4、量程轉(zhuǎn)換、PID調(diào)節(jié)回路的建立及P、I、D參數(shù)的理解(最好是有個(gè)物理回路驗(yàn)證,比如變頻器+電機(jī)+測速傳感器);
5、循環(huán)、順序、跳轉(zhuǎn)等程序控制(盡量避免跳轉(zhuǎn),非跳不可時(shí)也是跳的越近越好);
6、中斷、通訊、位置控制....特別提醒:
①如果發(fā)現(xiàn)PLC工作不正常,先清除,再下載。
②有疑問第一個(gè)動(dòng)作按“F1”,第二動(dòng)作查“系統(tǒng)手冊”,第三動(dòng)作“論壇搜索”,第四動(dòng)作“提問”。
③無論是編程還是實(shí)際接線驗(yàn)證,切忌急躁,如果腦子不清楚就先別干,防止發(fā)生安全事故或損壞設(shè)備。
④自己的驗(yàn)證過的程序注意收藏,程序文件命名要簡明清晰,以備今后復(fù)習(xí)或直接應(yīng)用到項(xiàng)目中。
第三篇:初學(xué)者學(xué)英語 必看電影
The Sound of Music 《音樂之聲》; Titanic(泰坦尼克號)
Gone With the Wind(亂世佳人)Jane Eyre 《簡·愛》 Ice Age(冰河世紀(jì))The Lion King獅子王
Pride and Prejudice傲慢與偏見 Roman Holiday(羅馬假日)Finding Nemo(海底總動(dòng)員)Sleepless In Seattle(西雅圖不眠夜)A Walk in clouds 《云中漫步》; You've got mail(電子情書)Young Victoria(年輕的維多利亞)Love Actually(真愛至上)Shawshank Redemption肖申克的救贖 Kung Fu Panda(功夫熊貓)
Forrest Gump(阿甘正傳)A Beautiful Mind(美麗心靈)
Beauty And The Beast(美女與野獸)Legally Blonde(律政俏佳人)The Graduate(畢業(yè)生)Garfield(加菲貓)
Brave heart(勇敢的心)The Good Girl(好女孩)Happy Feet(歡樂的大腳)My Fair Lady(窈窕淑女)Runaway Bride(落跑新娘)
Night At The Museum(博物館驚魂夜)Philadelphia(費(fèi)城故事)
The Shawshank Redemption(肖申克的救贖)The Wizard of Oz(綠野仙蹤)
Ice Age 2:The Meltdown(冰河世紀(jì)2:消融)The Incredibles(超人特工隊(duì))Madagascar(馬達(dá)加斯加)Thirteen(十三歲)
Casino Royale(皇家賭場)American Beauty(美國麗人)
To Kill a Mockingbird(殺死一只知更鳥)Shrek(怪物史萊克)
Casablanca(卡薩布蘭卡)
The Bourne Ultimatum(諜影重重3)When Harry Met Sally(當(dāng)哈利遇上莎莉)A Mighty Wind(歌聲滿人間/風(fēng)載歌行)Rain Man(雨人)Wall Street(華爾街)
Meet the Parents(非常女婿拜見岳父母大人)A Walk in the Clouds(云中漫步)Apollo 13(阿波羅13號)
The Sixth Sense(靈異第六感)Man On the Moon(月亮上的人)Ratatouille(料理鼠王)Firewall(防火墻)
The Fugitive(亡命天涯)Groundhog Day(偷天情緣)Dumb and Dumber(阿呆與阿瓜)In America(新美國夢)
You can count on Me(我可成為你的依靠)American Graffiti(美國風(fēng)情畫)Erin Brockovich(永不妥協(xié))The Station Agent(心靈驛站)Elf(圣誕精靈)
Best In Show(愛犬大賽)
Almost Famous(成名在望/成名之路)
The Truman Show(楚門的世界)
Fantastic 4 Rise of the Silver Surfer(神奇四俠2:銀影俠)Animal House(動(dòng)物屋)Awakenings(無語問蒼天)
Breakfast at Tiffany's(第凡內(nèi)早餐)A League Of Their Own(紅粉聯(lián)盟)
One Flew Over the Cuckoo's Nest(飛越瘋?cè)嗽海〥ead Poet's Society(死亡詩社)
My Big Fat Greek Wedding(我的盛大希臘婚禮)Witness(證人)
Stand By Me(伴我同行)Annie Hall(安妮·霍爾)
The Nutty Professor(肥佬教授)The Tao Of Steve(追女至尊)
Good Will Hunting(驕陽似我心靈捕手)The Truth About Cats and Dogs(愛情叩應(yīng))American Splendor(美國奇觀)Sleeping Beauty(睡美人)
Ghost(人鬼情未了)
The Day After Tomorrow(后天)After the Sunset(日落之后/鬼膽神偷)Face Off(變臉/奪面雙雄)Oceans 13(十三羅漢)Hollow Man II(透明人2)
第四篇:Java初學(xué)者如何學(xué)習(xí)(必看)(本站推薦)
這篇文章是我無意中在網(wǎng)上看到的,很有感觸,感覺對初學(xué)者肯定會有幫助,打算整理一下再發(fā)出來的,可是改了半天,還是沒人家原本的內(nèi)容連貫,有邏輯性。所以直接拿過來了。希望想學(xué)習(xí)java朋友可以花點(diǎn)時(shí)間看看,看完肯定會有所收獲的,我不多說了,趕緊看看牛人的建議吧。JAVA交流群四一八,三五五,加上五三一。給初學(xué)者之一:淺談java及應(yīng)用 學(xué)java不知不覺也已經(jīng)三年了
每次上網(wǎng),泡bbs逛論壇,沒少去java相關(guān)的版面 總體感覺初學(xué)者多,高手少,精通的更少
很多人對java感到茫然,不知所措,不懂java能做什么 即便知道了java很有用,也不清楚該從哪里入手 所以就有了 java入門難 這一說法
ok,那我們就從java到底能做什么聊起 先說什么是java java是一種面向?qū)ο笳Z言,真正的面向?qū)ο?,任何函?shù)和變量都以類(class)封裝起來 至于什么是對象什么是類,我就不廢話了
關(guān)于這兩個(gè)概念的解釋任何一本面向?qū)ο笳Z言的教材里面都有 知道了什么是java,那自然就會對java能干什么感興趣
在說java能做什么之前,先說java作為一個(gè)真正面向?qū)ο笳Z言的優(yōu)點(diǎn) 首先第一個(gè),既然是真正的面向?qū)ο?,那就要做到徹底的封裝
這是java和c++最大的不同,java所有的源碼以及編譯后的文件都以類的形式存在
java沒有所謂的類外部定義,所有的函數(shù)(方法)以及變量(屬性)都必須在類內(nèi)部定義 這樣就不會出現(xiàn)一個(gè)類被切割成這里一塊那里一塊的情況,c++就可以,不是么? 這樣做使得整個(gè)程序的結(jié)構(gòu)異常清晰,明了
其次第二個(gè),最讓人歡呼雀躍的是完全屏蔽了指針,同時(shí)引入了垃圾回收機(jī)制 任何一個(gè)寫過c/c++代碼的人,都會對內(nèi)存管理深惡痛絕 因?yàn)檫@使得我們不能把主要精力放在我們關(guān)心的事情上 而需要考慮計(jì)算機(jī)內(nèi)部的一些事情,作為一個(gè)軟件工程師
我想沒有一個(gè)人愿意把大量的時(shí)間花在內(nèi)存管理上,畢竟我們不是電子工程師 此時(shí)java的優(yōu)勢體現(xiàn)出來了,它完全屏蔽了內(nèi)存管理
也就是說,如果你用java寫程序,寫出來的任何一個(gè)程序內(nèi)存上的開銷,都不受你控制 乍一看,似乎你受到了束縛,但實(shí)際上不是這樣
因?yàn)殡m然你的程序無法對內(nèi)存進(jìn)行管理,降低了一定的速度 但你的程序會非常非常的安全,因?yàn)槟銦o法調(diào)用一個(gè)空指針 而不像以前寫c的時(shí)候那樣,成天因?yàn)榭罩羔樁鴵?dān)驚受怕
當(dāng)然,如果你深入了解這一行,就會發(fā)現(xiàn)java其實(shí)也無法保證程序不去調(diào)用空的指針 但是它會在最大程度上避免空指針的調(diào)用
這已經(jīng)很好了,安全,這是java的最突出的優(yōu)點(diǎn)
第三個(gè),虛擬機(jī)跨平臺,這是java最大的特點(diǎn),跨平臺 可能所有人都知道windows,但是不是所有人都知道unix 和java一樣,很多人都不知道unix這種操作系統(tǒng)干什么用
我不想多說unix的應(yīng)用,這不是主要,但是我要說,大部分小型機(jī) 工作站,都跑在unix一族的操作系統(tǒng)上,比如linux/solaris unix比起windows有一個(gè)最顯著的特點(diǎn),穩(wěn)定,這就好比思科和華為 思科的機(jī)器慢但穩(wěn)定,華為的機(jī)器快但不穩(wěn)定,作為服務(wù)器這一端來說還是非常有市場的 而且很重要的windows不安全,在ms的宣傳中我想所有人都很少看到安全二字 因?yàn)閣indows操作系統(tǒng)針對的是pc用戶,pc死機(jī)就死機(jī)咯,大不了重啟 最經(jīng)常冒出來的就是藍(lán)屏,在服務(wù)器這一端上因?yàn)閙s沒有自己的芯片
所以要做系統(tǒng)有些力不從心啊。扯遠(yuǎn)了,那么java可以做到在windows上編譯 然后在unix上運(yùn)行,這是c/c++做不到的 那么說到這里,java能做什么逐漸清晰起來 剛才說到了,java程序有一個(gè)的特點(diǎn)是安全
這個(gè)安全是針對你的系統(tǒng)來說得,系統(tǒng)在跑了java程序之后會特別地穩(wěn)定
而且還能跨平臺,那么很明顯,java主要應(yīng)用于除了windows操作系統(tǒng)以外所有的平臺 比如手機(jī),服務(wù)器
想想看,如果你寫的程序要跑在手機(jī)上,而手機(jī)有多少款用的是windows? 就算有,那如果你用c/c++,是不是要針對每一款手機(jī)寫一套程序呢? 累死,那跨平臺的java就不用,做到編譯一次,隨時(shí)運(yùn)行
同樣,在服務(wù)器這一端,如果我想給一個(gè)網(wǎng)絡(luò)門戶站點(diǎn),比如sina 寫一個(gè)應(yīng)用程序,pc的性能肯定無法滿足sina這樣大站點(diǎn)并發(fā)數(shù)量的要求 那么它就需要買服務(wù)器,那么服務(wù)器ms沒有市場,而且windows很不安全 那么十之八九會買一個(gè)sun/ibm的機(jī)器,或者h(yuǎn)p,但不管是誰的機(jī)器
它裝的操作系統(tǒng)也不會是windows,因?yàn)閣indows太不安全了,而且多核的支持太差了 這個(gè)有空再說,那么如果你要寫一個(gè)程序在這樣的機(jī)器上跑
難道我們就在這個(gè)機(jī)器上做開發(fā)么?當(dāng)然不可能,一般程序員開發(fā)用的都是pc,windows 那么該怎么辦?寫一個(gè)程序,然后再拿到服務(wù)器上去編譯,去調(diào)試? 肯定不可能,所以我們就希望找到一個(gè)語言,編譯完生成程序之后
在pc上調(diào)試,然后直接移植到服務(wù)器上去,那么此時(shí),我們就會毫不猶豫地選擇java 因?yàn)樵诳缙脚_以及安全性來說,java永遠(yuǎn)是第一選擇 ok,下面說java的缺點(diǎn)
一慢,這其實(shí)是一種誤區(qū),這就好比goto語句一樣
java也拋棄了指針,雖然看上去似乎變慢了,但是在這個(gè)兩三年硬件性能就能翻番的年代 速度已經(jīng)不是我們關(guān)心的問題了,而且對于企業(yè)級的應(yīng)用來說
沒有什么比安全穩(wěn)定更重要的,換句話說,我們可以忍受慢,但是不能忍受死機(jī)和藍(lán)屏 而且越大型的應(yīng)用,這種慢的劣勢體現(xiàn)得越模糊
因?yàn)楫?dāng)系統(tǒng)項(xiàng)目越做越大,任何一個(gè)環(huán)節(jié)做不好都可能影響全局的情況下 安全尤其重要,而且就像goto語句一樣
這種過分追求速度的主張會給系統(tǒng)開發(fā)和糾錯(cuò)以及維護(hù)帶來無可挽回甚至不可避免的損失 把內(nèi)存交給計(jì)算機(jī)去管理吧,這種代價(jià)值得
我們做的不是pc游戲,沒必要把內(nèi)存的那一點(diǎn)點(diǎn)消耗當(dāng)親爹
二難看,又是一個(gè)誤區(qū),很多人甚至拿出java swing控件畫出的界面來說 呵呵,其實(shí)java不是不能畫得好看,IDEA就是java寫的IDE,挺漂亮的
但為什么難看呢,是因?yàn)閟wing控件它本身就是unix時(shí)代的產(chǎn)物,swing控件貼近unix界面
老外看unix界面其實(shí)挺順眼的,他們就是吃unix飯長大的
而unix又是吃百家飯的,不像ms那么唯利是圖,所以不怎么對中國人友好 加上我國又沒有公司在做操作系統(tǒng),所以看上去是不怎么順眼 其實(shí)玩過unix的人都知道,unix對中文的支持一直不怎么好 給初學(xué)者之二:從JDK說起
在知道了java有什么優(yōu)點(diǎn),能做什么之后 就該說一下java該如何去學(xué)了
在說java如何去學(xué)之前,有必要把java的幾個(gè)大方向做一個(gè)簡單說明 早在99年的時(shí)候
sun公司做出了一個(gè)決定,將java應(yīng)用平臺做一個(gè)劃分 畢竟在不同領(lǐng)域,語言應(yīng)用特性是有區(qū)別的
針對不同領(lǐng)域內(nèi)的應(yīng)用,sun公司可以發(fā)布相關(guān)高端標(biāo)準(zhǔn)來統(tǒng)一規(guī)范代碼 這三大塊就是J2SE,J2EE以及J2ME 這個(gè)舉措今天看來無疑是非常了不起的
正是由于這次革命性的發(fā)展,使java從一種小打小鬧游戲性的語言 發(fā)展成為今天企業(yè)級應(yīng)用的基礎(chǔ)
這里要特別說明一下J2SE J2EE J2ME中2的意思 其實(shí)2就是英文單詞to的諧音,就是to的意思
而不是second edition,當(dāng)然java 2本身版本號就是1.2,也有點(diǎn)2nd edition的味道 說點(diǎn)題外的,sun公司發(fā)布的java版本很有意思
雖然總是寫是1.X但其實(shí)外界對這種版的說法也就是X.0 比如java 2,其實(shí)就是java 1.2 1.3其實(shí)就是3.0,1.4就是4.0,現(xiàn)在所說的5.0 其實(shí)就是1.5 只是以前我們更習(xí)慣叫1.X而已
可能到了5.0以后,就全改叫X.0而不是1.X了
所以以后聽到別人說java 5.0,千萬別驚訝,其實(shí)就是1.5 在這三個(gè)J2*E中J2SE是基礎(chǔ),就是java 2的標(biāo)準(zhǔn)版(java 2 standard edition)也就是最基礎(chǔ)的java語言部分,無論學(xué)什么java技術(shù),J2SE都是必須掌握的 要使用J2SE就必須安裝JDK(java development kit)
JDK在sun公司的主頁上可以免費(fèi)下載,下載后需要安裝,具體安裝流程看教材 JDK包含有五個(gè)部分:核心API,集成API,用戶界面API,發(fā)布技術(shù)還有java虛擬機(jī)(JVM)先說運(yùn)行環(huán)境,運(yùn)行環(huán)境最主要要說的就是java虛擬機(jī)(JVM)
前面我們說過java是跨平臺的語言,那么如何做到跨平臺呢?畢竟每種操作系統(tǒng)都是不同的
java的設(shè)計(jì)者們提出了一個(gè)虛擬機(jī)的概念
在操作系統(tǒng)之上建立一個(gè)統(tǒng)一的平臺,這個(gè)平臺必須實(shí)現(xiàn)某些功能以支持程序的運(yùn)行 如下圖:
------| program |------| JVM |------| UNIX | Windows | Linux | Solaris |..------程序員所寫的每一個(gè)程序都先運(yùn)行在虛擬機(jī)上 所有操作都必須經(jīng)過虛擬機(jī)才能和操作系統(tǒng)交互
這樣做不僅統(tǒng)一了所有操作系統(tǒng),同時(shí)也保證了操作系統(tǒng)的安全 要死機(jī)的話,死的是虛擬機(jī)(JVM)而操作系統(tǒng)并不會受此影響 而我們所說的java運(yùn)行環(huán)境指的主要是JVM,其他的不說了,省略
下面說說JDK(java development kit)的API,其實(shí)用JDK來包括運(yùn)行環(huán)境以及開發(fā)工具 個(gè)人感覺是不恰當(dāng)?shù)?,因?yàn)檫@三個(gè)單詞僅能說明開發(fā)工具,也就是幾個(gè)標(biāo)準(zhǔn)的API 而沒有讓人感覺到有運(yùn)行環(huán)境的意思在里面,這是題外 那么什么是API? 簡單地說就是Application Programming Interface,應(yīng)用程序編程接口 在java里面,就是一些已經(jīng)寫好了的類打成的包
這又要解釋什么是類什么是包了,簡單說一下,包就是類的集合 一個(gè)包包含零個(gè)或多個(gè)類,嗯,具體的可以去看書
這些類是java的基礎(chǔ)類,常用的類,可以簡單理解成java的工具集 最后說一下JDK的發(fā)布技術(shù),其實(shí)按我的理解,講白了就是編譯器將.java文件轉(zhuǎn)換成.class文件的一種技術(shù)
這三部分組成了JDK,有了JDK,就可以開發(fā)出J2SE應(yīng)用軟件了 最原始的只要用一個(gè)記事本寫幾行代碼就可以了
但一般來說我們會使用效果比較好的開發(fā)工具,也就是IDE 在J2SE這一塊,特別推薦JCreator這款I(lǐng)DE sun公司的產(chǎn)品,與JDK結(jié)合得幾乎是天衣無縫,非常適合初學(xué)者使用
教材方面中文的推薦電子工業(yè)出版社出版的《java教程》初級與高級篇各一本 還有就是《21天學(xué)通java》雖然有人說21天系列是爛書,但個(gè)人感覺
對于j2se,這本書翻譯得已經(jīng)很不錯(cuò)了,基本沒有什么語法錯(cuò)誤,語句也很通順 最后要說的就是《thinking in java》
這本書自然很經(jīng)典,說得比較細(xì),只是我覺得不太適合初學(xué)者,其實(shí)也不難
初學(xué)者直接看也不成問題,但個(gè)人感覺還是找本教材也就是前面推薦的兩款來看比較好 基本概念的理解還是用教材的,畢竟thinking in java有的版本翻譯得很爛 而且個(gè)人建議還是看原版比較好,當(dāng)然這幾本都看最好了,但如果沒時(shí)間 至少精讀其中一本,然后再看其他兩本就可以,其實(shí)三本書內(nèi)容也差不多
但看問題的角度方式以及面向的讀者也都不同,嗯,怎么說呢,找適合自己的吧 最后要說的是
由于虛擬機(jī)的存在,J2SE的大多數(shù)軟件的使用會比一般桌面軟件慢一些 效果不盡如人意,現(xiàn)在大概只有swing控件還在使用吧,其它沒怎么聽說 J2EE&J2ME 這是java應(yīng)用的重中之重,如果想拿高薪,最好把J2EE學(xué)好
記得以前在csdn上看過一個(gè)調(diào)查,月薪上萬的程序員主要從事哪方面的工作 十個(gè)中有八個(gè)是做J2EE的,其他兩個(gè)一個(gè)做J2ME,還有一個(gè)做嵌入式 也許有些夸張,但也從某一方面說明J2EE人才的稀缺以及應(yīng)用的廣泛
所以如果想學(xué)java,只精通j2se是永遠(yuǎn)不夠的,至少還需要時(shí)間去了解其它兩個(gè)J2*E
給初學(xué)者之三:java企業(yè)級應(yīng)用之硬件篇
總算講到企業(yè)級應(yīng)用了,內(nèi)容開始逐漸有趣起來 java企業(yè)級應(yīng)用分為硬件篇和軟件篇
重點(diǎn)在軟件,硬件是外延,嚴(yán)格地說與java沒有必然聯(lián)系 但是,由于java是網(wǎng)絡(luò)語言,不了解硬件的一些基礎(chǔ)知識
軟件知道再多也沒什么用,不要上了戰(zhàn)場還不知道為什么而打仗
硬件是軟件的基礎(chǔ),在這個(gè)前提下,有必要專門花一點(diǎn)點(diǎn)篇幅來聊一下硬件 硬件,簡單地說就是我們實(shí)際生活中看得見摸得著的東西,也就是那些冰冷的機(jī)器,比如服務(wù)器,個(gè)人電腦還有網(wǎng)絡(luò)交換機(jī),路由器等等,那么先拋開網(wǎng)絡(luò)設(shè)備不談,先來說說計(jì)算機(jī)電腦的歷史
在很早很早以前,人類創(chuàng)造了第一臺電腦,那時(shí)候的電腦只是一臺用來計(jì)算的機(jī)器 無比大,無比重,無比傻,除了算其它屁事不會做,沒有所謂的人工智能與計(jì)算機(jī)網(wǎng)絡(luò) 但是總算是誕生了,雖然以今天的眼光去看那時(shí)候的機(jī)器巨傻無比 只配叫做計(jì)算器而不是電腦,沒有邏輯思維能力,只會死算 但千里之行,始于足下,反正是造出來了 然后隨著時(shí)間的推移,制造業(yè)發(fā)展發(fā)展發(fā)展
電腦性能逐漸得到提升,速度快了起來,成本也逐漸低了下來
于是人們造出了第二臺,第三臺,第四臺,第五臺……第n臺計(jì)算機(jī) 人們就造出了無數(shù)臺計(jì)算機(jī)并使其成為一種產(chǎn)品
逐漸應(yīng)用于許多復(fù)雜計(jì)算領(lǐng)域,不僅僅是科研,許多生產(chǎn)領(lǐng)域也開始出現(xiàn)計(jì)算機(jī)的影子 然后又隨著時(shí)間的推移,人們發(fā)現(xiàn)不可能把所有的計(jì)算機(jī)都做成一個(gè)樣子 因?yàn)楦餍懈鳂I(yè)對計(jì)算機(jī)性能的要求各不相同
于是開始把計(jì)算機(jī)劃分檔次,最簡單地是按照計(jì)算機(jī)的大小劃分 就是教科書上寫的大型機(jī),中型機(jī),小型機(jī)
//個(gè)人感覺這樣分純粹扯淡,還以為是小孩子玩球,分為大球,中球和小球 但是不管怎樣,計(jì)算機(jī)不再是千篇一律一個(gè)樣子了
按照性能的不同,在不同領(lǐng)域,出現(xiàn)了滿足符合不同要求的計(jì)算機(jī) 幾乎在同時(shí),人們也開始考慮計(jì)算機(jī)之間通訊問題
人們開始考慮將不同的計(jì)算機(jī)連接起來,于是網(wǎng)線出現(xiàn)了,網(wǎng)絡(luò)出現(xiàn)了 又隨著網(wǎng)絡(luò)的發(fā)展,出現(xiàn)了一下專門為了尋址而存在的機(jī)器 這就是路由器和交換機(jī),然后又出現(xiàn)了一些公益性的組織或團(tuán)體 他們制定了一系列的標(biāo)準(zhǔn)來規(guī)范以及管理我們的網(wǎng)絡(luò) 于是3w出現(xiàn)了,計(jì)算機(jī)的網(wǎng)絡(luò)時(shí)代來臨了
嗯,說到這里,計(jì)算機(jī)發(fā)展到今天的歷史大概說完了,我們來詳細(xì)說說網(wǎng)絡(luò)時(shí)代的計(jì)算機(jī)以及各個(gè)硬件供應(yīng)商之間的關(guān)系
前面說到了,計(jì)算機(jī)分為大型機(jī),中型機(jī)和小型機(jī)……
但是現(xiàn)在市場上沒有人這樣分,要是出去買機(jī)器,對硬件供應(yīng)商說
我要買一款中型機(jī),或者說,我要買一款小型機(jī),硬件供應(yīng)商肯定會問問題
他們會問你買機(jī)器干什么用的?科學(xué)計(jì)算啊還是居家用,是作服務(wù)器啊還是圖形設(shè)計(jì) 但不管怎樣,簡單地說大中小型機(jī)已經(jīng)沒有什么意義了 我們按照使用范疇來劃分 簡單劃分為
服務(wù)器,工作站還有微機(jī) 服務(wù)器(server)
服務(wù)器涵蓋了幾乎所有的大型機(jī)以及大部分中型機(jī)甚至一些小型機(jī) 用通俗點(diǎn)話說??衿骶褪悄掣齬??4小時(shí)不間斷運(yùn)行提供服務(wù)的機(jī)器 比如賣飛機(jī)票(中航信),比如酒店預(yù)定(攜程)
比如提供門戶站點(diǎn)相關(guān)服務(wù)(sina),比如電子商務(wù)(ebay,amazon,阿里巴巴)這些服務(wù)對機(jī)器都有一些特定的要求,尤其強(qiáng)調(diào)安全和穩(wěn)定 工作站(workstation)
工作站其實(shí)是圖形工作站的簡稱,說白了,就是某種功能極其強(qiáng)大的計(jì)算機(jī) 用于特定領(lǐng)域,比如工程設(shè)計(jì),動(dòng)畫制作,科學(xué)研究等 個(gè)人電腦/微機(jī)(pc)
計(jì)算機(jī)網(wǎng)絡(luò)的最末端,這個(gè)應(yīng)該不用我說太多了 網(wǎng)絡(luò)時(shí)代的pc已經(jīng)普及到千家萬戶
說完了分類,我們就來說說各個(gè)硬件供應(yīng)商 首先是服務(wù)器還有工作站
這兩類硬件供應(yīng)商主要是以下三家 Sun,IBM還有HP(惠普)然后是PC 以前IBM還有PC事業(yè)部,現(xiàn)在被聯(lián)想吞并了(蛇吞象)
現(xiàn)在國際市場上有聯(lián)想和DELL(戴爾),目前戴爾還是國際老大 還有HP康柏
然后是網(wǎng)絡(luò),也就是路由器和交換機(jī)
這塊市場嘛,Cisco(思科)Brocade(博科)還有McDATA三足鼎立 內(nèi)核(CPU)PC內(nèi)核
主要是AMD和Intel,前者最近與Sun公司合作,Sun也有一部分單雙核服務(wù)器用的是AMD的
服務(wù)器與工作站內(nèi)核 這一塊與硬件廠商綁定
還是Sun,IBM,HP三家自己生產(chǎn) 題外
在一些大型主機(jī)應(yīng)用市場,比如賣飛機(jī)票
德國的漢莎,中國的中航信,香港的國泰用的都是尤利(美國的公司,英文名我忘了)其它用的是IBM的機(jī)器,現(xiàn)在能做大型機(jī)的感覺似乎只有IBM可以
尤利已經(jīng)快倒了,技術(shù)太落后了,現(xiàn)在他們的系統(tǒng)還是fortran寫的,連c都不支持 要特別說明的是,一個(gè)超大型主機(jī)然后多個(gè)小終端/pc的結(jié)構(gòu)現(xiàn)在越來越?jīng)]市場了 將來的趨勢是用一整個(gè)包含多個(gè)服務(wù)器的分布式操作系統(tǒng)來取代這些大型主機(jī) 因?yàn)榇笮椭鳈C(jī)更新?lián)Q代極其困難,一旦數(shù)據(jù)量超過了主機(jī)的處理能力 那么就要換主機(jī),這個(gè)成本是極大的,但是如果用分布式操作系統(tǒng) 那就只需要增加小服務(wù)器就行了
硬件就大概說到這里,與大多數(shù)人沒什么關(guān)系
因?yàn)榇蠖鄶?shù)人壓根不可能進(jìn)入這些硬件領(lǐng)域,除非做銷售 說了這么多,只是為了給軟件部分打基礎(chǔ)而已 //做嵌入式的除外
給初學(xué)者之四:java企業(yè)級應(yīng)用之軟件篇 嗯,說過了硬件就該是軟件了 這篇是這個(gè)系列的重中之重
首先我們來說說什么是軟件,統(tǒng)一一下概念 所謂軟件通俗地說就是一套計(jì)算機(jī)程序 實(shí)現(xiàn)了某些功能的計(jì)算機(jī)程序
在很早很早以前,一臺計(jì)算機(jī)的軟件是不分層次結(jié)構(gòu)的
一臺計(jì)算機(jī)只有一個(gè)系統(tǒng),這個(gè)系統(tǒng)既是操作系統(tǒng)又是應(yīng)用軟件,與硬件緊密綁定 后來經(jīng)過許多年的發(fā)展發(fā)展發(fā)展 人們把一些與硬件緊密相連的又經(jīng)常用到必不可少的功能做到一套程序中去 這一套程序就被人們稱做操作系統(tǒng)
另外一些可有可無的,不同工作適應(yīng)不同環(huán)境的功能封裝到另外一套程序中去 而這一系列程序被人們稱作應(yīng)用軟件 如下圖:
------------|應(yīng)用軟件:falshgat/IE/realplayer/winamp..|------------|操作系統(tǒng):UNIX/Windows/Linux/Solaris...|------------前一篇我們知道,硬件分為服務(wù)器工作站與pc 其實(shí)無論哪種硬件的軟件,都有操作系統(tǒng)與應(yīng)用軟件 ok,那下面我們來談應(yīng)用軟件
在現(xiàn)在企業(yè)級應(yīng)用中,我們的應(yīng)用軟件一般分為三層 三層分別是表示層,業(yè)務(wù)邏輯層,數(shù)據(jù)持久層------------------------------|表示層|業(yè)務(wù)邏輯層|數(shù)據(jù)持久層|------------------------------我們來說說三層中的代表軟件 表示層
這一層一般在客戶端pc機(jī)上,最常見的是IE瀏覽器,這就是表示層的軟件 表示層是直接與使用者交互的軟件 業(yè)務(wù)邏輯層
這一層一般在服務(wù)器端,顧名思義,所有業(yè)務(wù)邏輯處理都在這一層完成
最典型的是appserver,比如IBM的websphere,BEA的weblogic還有tomcat/jboss等 這一層也是三層中的重點(diǎn),我們要說的大部分內(nèi)容都是關(guān)于這一層的,這個(gè)等會再說 這一層就叫做中間層 數(shù)據(jù)持久層
這一層典型的就是數(shù)據(jù)庫,一般也在服務(wù)器端 但該服務(wù)器一般與裝業(yè)務(wù)邏輯層軟件的服務(wù)器分開 當(dāng)然你也可以用IO輸入輸出流往硬盤上寫東西
但沒人會建議你這么做,因?yàn)檫@樣做你的數(shù)據(jù)缺乏管理,不管怎樣 這一層要做的就是保存數(shù)據(jù),業(yè)務(wù)邏輯層軟件一般不負(fù)責(zé)保留數(shù)據(jù)
或者說業(yè)務(wù)邏輯層只負(fù)責(zé)暫時(shí)儲存數(shù)據(jù),一關(guān)機(jī),業(yè)務(wù)邏輯層數(shù)據(jù)全部over了 那么數(shù)據(jù)的持久化(也就是儲存數(shù)據(jù))就必須要在這一層完成下面放著這些概念不談,我們來說說將來的趨勢 趨勢一:
瘦客戶端,很早很早以前,當(dāng)時(shí)C/S模式也就是client/server 客戶端軟件大行其道的年代,一個(gè)pc用戶,是采用一個(gè)傻終端連接到服務(wù)器上 然后進(jìn)行相應(yīng)的操作,最典型的就是我們上bbs經(jīng)常用的c-term 這就是那個(gè)時(shí)代的產(chǎn)物,同樣還有我國現(xiàn)行的機(jī)票定座用的e-term 后來呢,瀏覽器變得非常流行,人們發(fā)現(xiàn),瀏覽器也能傳遞一些數(shù)據(jù) 雖然這些數(shù)據(jù)并不像那些終端那樣準(zhǔn)確,但應(yīng)付大多數(shù)日常需求足夠了
于是人們就提出一個(gè)瘦客戶端概念,也就是說,將來表示層所有的其他軟件疾揮? 我們唯一需要的就是一個(gè)網(wǎng)頁瀏覽器,然后通過瀏覽器輸入ip地址連接到服務(wù)器 然后進(jìn)行相關(guān)的操作,由于網(wǎng)頁瀏覽器一般每個(gè)操作系統(tǒng)都有自帶一個(gè) 這樣做就達(dá)到了給我們客戶端瘦身的目的(不需要安裝額外軟件)這樣模式被稱作B/S模式,也就是browser/server模式
但需要指出的是,雖然瘦客戶端是趨勢,但并不代表胖客戶端沒有市場 尤其是一些復(fù)雜的業(yè)務(wù)操作,還是瀏覽器這種簡單軟件無法勝任的趨勢二:
傻數(shù)據(jù)庫,ok,首先,我承認(rèn),這個(gè)名詞是我發(fā)明的,但我實(shí)在無法找到一個(gè)更好的表達(dá) 什么是傻數(shù)據(jù)庫,如果誰對數(shù)據(jù)庫有所了解的話,就知道,以前的數(shù)據(jù)庫
有自己的一套管理體系,甚至有自己的客戶端,比如oracle,mysql,sqlserver都有 在某個(gè)管理工具上寫什么sql語句查詢數(shù)據(jù)庫是我們以前常做的事 那么將來我們提倡的是:將所有的業(yè)務(wù)邏輯封裝到業(yè)務(wù)邏輯層去 管理的事情由軟件來做,由業(yè)務(wù)邏輯層的軟件來做 所謂傻數(shù)據(jù)庫就是說,將來的數(shù)據(jù)庫什么事都不用做
只用把數(shù)據(jù)給我保存好就行了,那些復(fù)雜的業(yè)務(wù)邏輯什么外鍵什么關(guān)聯(lián) 都沒數(shù)據(jù)庫什么事了,都交給業(yè)務(wù)邏輯層軟件來做
這樣做的好處就是:我們就不需要這些該死難懂又復(fù)雜的數(shù)據(jù)庫系列管理工具了 而且這些工具每個(gè)數(shù)據(jù)庫都有自己的工具,完全不一樣,亂七八糟,沒有人喜歡面對他們 除了數(shù)據(jù)庫維護(hù)人員,也就是DBA,我們是軟件工程師,維護(hù)的事讓他們?nèi)プ?/p>
而且嚴(yán)禁數(shù)據(jù)庫維護(hù)人員改動(dòng)數(shù)據(jù)庫的數(shù)據(jù),他們只做備份,必要時(shí)候恢復(fù)一下就是了 了解了這兩個(gè)趨勢之后,是不是有種砍頭去尾保中間的感覺?
沒錯(cuò),未來的趨勢就是中間件時(shí)代,中間件工程師將是未來計(jì)算機(jī)應(yīng)用的主流 那再次統(tǒng)一一下概念,什么是中間件?
記得我上學(xué)的時(shí)候,看ibm的教材,看了半天中間件定義,就看懂記住一句話 中間件是做別人不愿意去做的事情,現(xiàn)在想想,狗屁定義,呵呵 什么是中間件,中間件是業(yè)務(wù)邏輯層的應(yīng)用軟件 是處理業(yè)務(wù)數(shù)據(jù)與客戶端之間業(yè)務(wù)邏輯的一種應(yīng)用軟件 一種提供網(wǎng)絡(luò)服務(wù)的服務(wù)器端應(yīng)用軟件
舉個(gè)非常簡單的例子,網(wǎng)上銀行,某個(gè)人想用IE進(jìn)入工行的賬戶,然后轉(zhuǎn)帳 在這個(gè)例子中,客戶端表示層顯然是IE,數(shù)據(jù)持久層顯然是銀行的核心數(shù)據(jù)庫 那么中間件是什么?中間件就是提供這種服務(wù)的系統(tǒng) 這三層的劃分如下
------------------------------|表示層 | 業(yè)務(wù)邏輯層 | 數(shù)據(jù)持久層 |------------------------------| IE | 網(wǎng)上銀行 | 數(shù)據(jù)庫 |------------------------------給初學(xué)者之五:企業(yè)級應(yīng)用之中間件 前面一篇簡單介紹了一下應(yīng)用軟件的分層
下面重點(diǎn)介紹一下中間件,也就是業(yè)務(wù)邏輯層的軟件結(jié)構(gòu) 從本系列第二篇我們知道,java程序是跑在虛擬機(jī)之上的 大致結(jié)構(gòu)如下:------------| grogram |------------| 虛擬機(jī) |------------| 操作系統(tǒng) |------------也就是說操作系統(tǒng)先運(yùn)行一個(gè)java虛擬機(jī),然后再在虛擬機(jī)之上運(yùn)行java程序 這樣做的好處前面也說過了,就是安全,一旦出現(xiàn)病毒或是其他什么東西 掛掉的是虛擬機(jī),操作系統(tǒng)并不會受多大影響
這時(shí)候有人可能會問,為什么非要虛擬機(jī)?把操作系統(tǒng)當(dāng)成虛擬機(jī)為什么不行? 可以,當(dāng)然可以,但是這樣做某一個(gè)應(yīng)用軟件的bug就可能造成整個(gè)操作系統(tǒng)的死亡 比如說我們在某個(gè)服務(wù)器上安裝了一個(gè)收發(fā)電子郵件的軟件和java虛擬機(jī) 那么一旦黑客通過收發(fā)電子郵件的軟件入侵系統(tǒng),那么操作系統(tǒng)就整個(gè)玩完 那么如果黑客通過java程序進(jìn)行攻擊的話,那么死的將會是虛擬機(jī)而不是操作系統(tǒng) 大不了虛擬機(jī)崩潰,而操作系統(tǒng)正常運(yùn)行不受任何影響
舉個(gè)簡單例子,比如說最常見的是將數(shù)據(jù)庫(DB)與中間件放在同一臺服務(wù)器上------------------------| program | |-----------| DB | | 虛擬機(jī) | |------------------------| 操作系統(tǒng) |------------------------那么此時(shí)如果沒有虛擬機(jī),黑客病毒攻擊中間件系統(tǒng),就有可能造成操作系統(tǒng)的死亡 那此時(shí)數(shù)據(jù)庫也有可能跟著一起玩完,那損失可就大咯
那如果此時(shí)有虛擬機(jī),那么一旦被攻擊,死的是虛擬機(jī),操作系統(tǒng)與數(shù)據(jù)庫不受任何影響 嗯,回顧完虛擬機(jī),再來介紹中間件
在很早很早以前,任何一家企業(yè),想要搭建一個(gè)局域網(wǎng)系統(tǒng),他需要請?jiān)S多個(gè)工程師 比如說我們想搭建一個(gè)網(wǎng)上銀行,客戶端用瀏覽器,后臺數(shù)據(jù)庫比如說用oracle 那么搭建這樣一個(gè)網(wǎng)上銀行,可能需要用到多少個(gè)工程師,我們來算一算
首先,由于客戶端用的是瀏覽器,我們需要一些了解網(wǎng)絡(luò)通訊協(xié)議以及一些瀏覽器標(biāo)準(zhǔn)的網(wǎng)絡(luò)工程師
其次,由于后臺數(shù)據(jù)庫用的是oracle,那我們還需要請oracle的工程師,因?yàn)閿?shù)據(jù)庫這一層每個(gè)數(shù)據(jù)庫公司的接口什么都不 一樣
然后,我們還需要一些操作系統(tǒng)的工程師,因?yàn)槲覀兊南到y(tǒng)需要跟操作系統(tǒng)直接交互 最后,我們需要一些設(shè)計(jì)網(wǎng)上銀行系統(tǒng)及其相關(guān)業(yè)務(wù)的工程師
太多了太多了,這樣一個(gè)中間件隊(duì)伍實(shí)在太龐大了,制作維護(hù)成本實(shí)在太高了 不僅如此,這樣一個(gè)中間件就算做出來,他們所寫的代碼也只能滿足這一家公司使用 其它公司統(tǒng)統(tǒng)不能再用,代碼重用率極低,近乎不可能重用 畢竟這個(gè)系統(tǒng)中改動(dòng)任何一個(gè)部分都有可能涉及到整個(gè)系統(tǒng)的改動(dòng) 那么如何降低成本? 我舉出了四組的工程師:
網(wǎng)絡(luò)工程師,數(shù)據(jù)庫工程師,操作系統(tǒng)工程師以及設(shè)計(jì)網(wǎng)上銀行系統(tǒng)的業(yè)務(wù)工程師 除了最后一組設(shè)計(jì)網(wǎng)上銀行的業(yè)務(wù)工程師之外,前面三組工程師是不是每一個(gè)項(xiàng)目都需要的?
就算不是每一個(gè)項(xiàng)目都需要,至少也是絕大多數(shù)項(xiàng)目需要的吧?
哪個(gè)項(xiàng)目能夠脫離網(wǎng)絡(luò),數(shù)據(jù)庫和操作系統(tǒng)?不可能,在這個(gè)時(shí)代已經(jīng)很少很少了 好,那既然每個(gè)項(xiàng)目都需要,我們是不是可以用一個(gè)產(chǎn)品來取代這三組的工程師呢? 我們的業(yè)務(wù)工程師只需要遵循這個(gè)產(chǎn)品所提供的接口,進(jìn)行相應(yīng)的開發(fā)就行了 人們提出了一種叫做appserver也就是應(yīng)用服務(wù)器的東西
應(yīng)用服務(wù)器是干什么的?按官方的說法,應(yīng)用服務(wù)器是包括有多個(gè)容器的軟件服務(wù)器 那容器是什么?容器(Container)到底是個(gè)什么東西我想多數(shù)人還是不清楚 在說這個(gè)之前,先介紹一下組件
什么是組件,組件是什么?組件其實(shí)就是一個(gè)應(yīng)用程序塊 但是它們不是完整的應(yīng)用程序,不能單獨(dú)運(yùn)行 就有如一輛汽車,車門是一個(gè)組件,車燈也是一個(gè)組件 但是光有車燈車門沒有用,它們不能跑上公路
在java中這些組件就叫做javabean,有點(diǎn)像微軟以前的com組件 要特別說明的是,由于任何一個(gè)java文件編譯以后都是以類的形式存在 所以javabean肯定也是一個(gè)類,這是毫無疑問的 好,那么容器里裝載的是什么呢?就是這些組件 而容器之外的程序需要和這些組件交互必須通過容器
舉個(gè)例子,IE發(fā)送了一個(gè)請求給容器,容器通過調(diào)用其中的一個(gè)組件進(jìn)行相關(guān)處理之后 將結(jié)果反饋給IE,這種與客戶端軟件交互的組件就叫做servlet 但是組件有很多種,那么如何區(qū)分這些組件呢?
有多種管理辦法,比如同是同樣是servlet,有些是通過jsp生成的
而有些是開發(fā)人員自己寫的,那么通過jsp生成的servlet集中放在一個(gè)地方 而開發(fā)人員自己寫的則需要在xml里面配置一些基本的參數(shù)
同時(shí),不同組件有可能還需要繼承一些特定的父類或者接口,這也是容器管理的需要 還有其他的一些組件,這里就不一一說明舉例了 那么容器有很多種,按照他們裝載的組件類型劃分
比如有裝ejb的ejb容器,有裝servlet與jsp還有靜態(tài)頁面的web容器等等 //這種只含有web容器的應(yīng)用服務(wù)器也被叫做web服務(wù)器 當(dāng)表示層的應(yīng)用軟件通過網(wǎng)絡(luò)向appserver發(fā)送一個(gè)請求的時(shí)候
appserver自動(dòng)找到相應(yīng)容器中的組件,執(zhí)行組件中的程序塊,把得到結(jié)果返還給客戶 而我們要做的事就是寫組件也就是javabean,然后放到appserver里面去就可以了 至于怎樣與IE通訊,怎樣截獲網(wǎng)絡(luò)上的請求,怎樣控制對象的數(shù)量等等
這些繁瑣而無味的工作我們都不管,都由appserver去做吧,把注意力集中在業(yè)務(wù)邏輯上 appserver與其他相關(guān)軟件的關(guān)系如下圖:
------------------------| 表示層 | 業(yè)務(wù)邏輯層 | 數(shù)據(jù)持久層 |------------------------| |-----------------| | | IE | | javabean | | | |->------------------> DB | | client <-appserver <-| | |-------------------------| | | | 虛擬機(jī) | | |--------------|-------------------------|------------| | Windows | Linux/Saloris |LinuxSaloris| |--------------|-------------------------|------------| 圖上可以看出:虛擬機(jī)負(fù)責(zé)處理中間件與操作系統(tǒng)之間的交互 appserver則負(fù)責(zé)組件的管理以及與其他兩層的業(yè)務(wù)交互
要說明的是上圖中還包含有應(yīng)用程序客戶端容器(Application client container)管理應(yīng)用程序客戶端組件的運(yùn)行,應(yīng)用程序客戶端和它的容器運(yùn)行在客戶機(jī) 這種情況比較復(fù)雜一般說的是兩個(gè)server之間的通訊
比如jsp/servlet容器在一個(gè)服務(wù)器上,而ejb容器在另外一個(gè)服務(wù)器上等等 這是分布式操作系統(tǒng)大面積應(yīng)用的基礎(chǔ),這個(gè)以后再說 嗯,那么話題再回到中間件上去,什么是中間件?
appserver就是所謂的中間件,但是中間件不僅有appserver,還有其他的東西 換句話說,appserver只是中間件的一種
而關(guān)于中間件有諸多規(guī)范以及遵循這些規(guī)范的模型 最流行的規(guī)范無非兩種,一個(gè)是j2ee還有一個(gè)是.net 但是.net幾乎只有微軟在用,所以很多人把.net這個(gè)規(guī)范就當(dāng)成是微軟的中間件產(chǎn)品 也不為過,畢竟沒幾個(gè)公司喜歡跟著微軟屁股后面跑的 給初學(xué)者之六:java企業(yè)級應(yīng)用之綜合篇 我們知道中間件有很多種規(guī)范以及相關(guān)的模型 最流行的一個(gè)是j2ee還有一個(gè)是.net 那么各大公司關(guān)于這兩套規(guī)范各有什么產(chǎn)品以及周邊呢? j2ee: 黃金組合
操作系統(tǒng):Solaris 應(yīng)用服務(wù)器:Weblogic 數(shù)據(jù)庫:Oracle 開發(fā)工具:JBuilider/IntelliJ IDEA 優(yōu)點(diǎn):性能一級棒,大企業(yè)大公司做系統(tǒng)的首選,世界五百強(qiáng)幾乎都是這套組合 缺點(diǎn):極貴 超級組合,也是最安全最酷的黃金組合,硬件采用SUN公司的機(jī)器 但是SUN的服務(wù)器很貴,同等價(jià)格不如去買IBM的機(jī)器
SUN的服務(wù)器支持Solaris的效果自然不用說,Solaris號稱是世界上最安全的操作系統(tǒng) Oracle也是世界上最安全,性能最優(yōu)的數(shù)據(jù)庫,Weblogic是當(dāng)今性能最優(yōu)的appserver JBuilder和IDEA各有所長,JBuilder是Borland公司的招牌之一
是當(dāng)今世界上最流行的java IDE,用delphi寫的,但網(wǎng)絡(luò)上評價(jià)似乎不是很好 IDEA擁有插件功能,界面在所有java IDE中最為漂亮,東歐人開發(fā)的產(chǎn)品 東歐人嚴(yán)謹(jǐn)?shù)淖黠L(fēng)在這個(gè)產(chǎn)品上體現(xiàn)得尤為突出,用java寫的
IDEA甚至號稱自己被業(yè)界公認(rèn)為是最好的IDE//個(gè)人保留意見,沒有最好只有更好 但我用JBuilder的時(shí)候發(fā)現(xiàn)了不少bug,而至今還沒有在IDEA上發(fā)現(xiàn)什么bug 個(gè)人推薦IDEA 價(jià)格方面,Solaris開源,但是SUN的服務(wù)器比較貴,Weblogic最高是34萬 oracle標(biāo)準(zhǔn)版要18.6萬,企業(yè)版要49萬,JBuilder要2.7萬左右 IDEA零售價(jià)大概是500美金,也就是5000多元
另外,雖然理論上這些產(chǎn)品的綜合性能要高于其他選擇,但是必須看到
由于產(chǎn)商之間的利益沖突,比如oracle也有自己的appserver,但是性能不怎樣 使得這幾種產(chǎn)品之間協(xié)作的性能要比預(yù)想中的要差一點(diǎn)點(diǎn)--開源系列 操作系統(tǒng):-應(yīng)用服務(wù)器:JBoss 數(shù)據(jù)庫:MySql 開發(fā)工具:Netbeans 優(yōu)點(diǎn):便宜,性能未必最佳,但是對付中小企業(yè)足夠了 缺點(diǎn):出了問題自己抗吧
嗯,這是java陣營最大的特色,免費(fèi)免費(fèi),還有在開發(fā)工具這一欄Eclipse也是免費(fèi)的 但后面要說,算了,換個(gè)有代表性的開源產(chǎn)品來
tomcat僅有web容器而沒有ejb容器,而jboss已經(jīng)集成了tomcat 也就是說下載了jboss之后,啟動(dòng)的同時(shí)也就啟動(dòng)了tomcat jboss在tomcat基礎(chǔ)之上多加了一個(gè)ejb容器,使得jboss+tomcat成為和weblogic websphere之外又一個(gè)得到廣泛應(yīng)用的appserver 現(xiàn)在大概是這樣,中小型企業(yè)多用jboss,如果應(yīng)用小一點(diǎn)就用tomcat 只有給那些大型企業(yè)做的項(xiàng)目,才會花錢去上一個(gè)weblogic或者websphere mysql也是開源的數(shù)據(jù)庫,做得非常不錯(cuò),如果系統(tǒng)對數(shù)據(jù)庫要求不高 或者安全要求不是非常嚴(yán)格,mysql是一個(gè)非常不錯(cuò)的選擇 開發(fā)工具方面,netbeans是sun公司極力推廣的一種IDE 聽說在北美市場使用量已經(jīng)超過eclipse了
操作系統(tǒng),軟件再不用錢,服務(wù)器也要錢,看這臺機(jī)器上跑什么操作系統(tǒng)就用什么了--IBM套餐 操作系統(tǒng):Linux 應(yīng)用服務(wù)器:Websphere 數(shù)據(jù)庫:DB2 開發(fā)工具:Eclipse/WebSphere Studio 優(yōu)點(diǎn):服務(wù)好,IBM可以提供全套服務(wù),也可以替客戶承擔(dān)風(fēng)險(xiǎn) 缺點(diǎn):把機(jī)器數(shù)據(jù)全部交給IBM,安全什么的都由不得你了 呵呵,IBM全套產(chǎn)品,甚至包括硬件設(shè)備IBM的服務(wù)器 由于是一個(gè)公司的產(chǎn)品,各產(chǎn)品之間的協(xié)作自然不錯(cuò)
價(jià)格方面,Linux,DB2,Eclipse都是開源產(chǎn)品,Websphere目前零售價(jià)是33.8萬人民幣 IBM服務(wù)器不錯(cuò),可以考慮--.net: 微軟陣營
操作系統(tǒng):Windows 應(yīng)用服務(wù)器:.net應(yīng)用服務(wù)器(好像叫IIS)數(shù)據(jù)庫:SqlServer 開發(fā)工具:MS Visual Studio 優(yōu)點(diǎn):客戶端的用戶體驗(yàn)良好,和客戶端諸多微軟產(chǎn)品的兼容性強(qiáng) 缺點(diǎn):離開了微軟,寸步難行,和其他任何一家公司的產(chǎn)品都不兼容 微軟的東西,怎么說呢,太專橫了 微軟所有的東西都是圍繞著windows來做的
.net其實(shí)已經(jīng)可以實(shí)現(xiàn)跨平臺了,但是微軟出于自身商業(yè)考慮 在其應(yīng)用服務(wù)器跨平臺的實(shí)現(xiàn)上設(shè)置了種種障礙 而且針對windows,微軟做了大量的優(yōu)化,可以這么看.net就是與windows捆綁的一套產(chǎn)品
所以有些人說,微軟的產(chǎn)品離開了windows,就是渣
而且.net開源選擇也少,安全性方面考慮,windows本身就有一堆補(bǔ)丁要打了 sqlserver也不安全,至于.net到底安全不安全我不清楚,畢竟我沒怎么用過 但整體考慮,感覺.net不是大企業(yè)的首選,鑒于其濃厚的商業(yè)背景 也不是中小企業(yè)的首選,但是必須看到
客戶端也就是微機(jī)pc市場已經(jīng)完全被windows所壟斷
所以在一些快速開發(fā),還有和微軟產(chǎn)品兼容性要求較高的領(lǐng)域,.net還是比較有市場的 最后一個(gè)visual studio對它之前的版本兼容,且支持c,c++,c#,vb等語言 在其傳統(tǒng)領(lǐng)域,比如寫一些桌面軟件等客戶端應(yīng)用上,.net還是第一選擇--最后要說明的是 這些組合不是固定不變的
由于J2EE得到了絕大多數(shù)IT企業(yè)的支持以及JAVA跨平臺的特性 我們可以自由地定制個(gè)性化的組合
比如我可以選擇windows+jboss+eclipse+oracle 也可以選擇solaris+websphere+IDEA+mysql 等等,這些自由組合都是可以的,但是有一點(diǎn)必須說明 微軟的東西,一般來說離開了windows就不能用
比如你選擇了.net應(yīng)用服務(wù)器,那操作系統(tǒng)就必須是windows 你選擇了sqlserver,那就必須在windows上用
還有就是遵循j2ee規(guī)范的所有的組件都可以在不同的應(yīng)用服務(wù)器上互相移植 比如你可以在測試的時(shí)候用jboss 而在正式投產(chǎn)上線的時(shí)候使用websphere,只需要在配置文件中作相應(yīng)改動(dòng)即可 給初學(xué)者之七:java企業(yè)級應(yīng)用之術(shù)語篇
在了解完J2ee的相關(guān)周邊產(chǎn)品之后需要深入J2ee規(guī)范內(nèi)部去了解一下到底這些規(guī)范 這里介紹幾個(gè)最常用的規(guī)范 再繼續(xù)說下去之前有必要說幾個(gè)常識
下面進(jìn)入正題 再談容器
前面介紹過容器,我覺得有必要再補(bǔ)充一點(diǎn)
容器從某種意義上說其實(shí)就是一個(gè)可運(yùn)行的java寫的應(yīng)用程序 猶如c++/c編譯后生成的.exe文件
不同的是java編譯后的文件需要用命令行或者腳本啟動(dòng)執(zhí)行 由于容器是由java寫的,所以容器都能夠跨平臺
雖說如此,似乎大部分容器都針對不同的操作系統(tǒng)提供了不同的版本 但可以肯定的一點(diǎn)是,相同容器間的移植組件不需要重新編譯 Servlet web容器組件
Servlet確切地說,就是web容器運(yùn)行的java組件
與普通javabean不同的是,Servlet定義了一系列方法//比如init()和destroy()供容器調(diào)用,調(diào)用的主要目的是為了管理
當(dāng)一個(gè)request請求被web容器截獲之后,容器分析該請求地址 然后通過一個(gè)配置文件中的映射表//web.xml 調(diào)用相應(yīng)的Servlet組件處理后將結(jié)果返還給客戶端 JSP//Java Server Page web容器組件
Servlet出現(xiàn)了之后,人們發(fā)現(xiàn)幾乎沒有辦法用一個(gè)非常直觀的方式去編寫頁面 畢竟頁面是html語言編寫的
而讓我們用一種流程式的處理方式去逐行教計(jì)算機(jī)如何寫html代碼太困難 在這種情況下JSP應(yīng)運(yùn)而生,JSP將java代碼嵌入html代碼內(nèi)部
然后存成.jsp文件,再由計(jì)算機(jī)編譯生成Servlet儲存起來//注意這個(gè)過程
所以JSP和Servlet對于web容器來說其實(shí)是一種東西,雖然它們編寫遵循的標(biāo)準(zhǔn)有所不同 極大地簡化了代碼同時(shí)增加了代碼的可讀性,生產(chǎn)維護(hù)成本下降 值得一提的是,在制定JSP規(guī)范的過程中,借鑒了ASP的很多規(guī)范 寫過ASP并熟悉Java語言的人應(yīng)該能很快掌握J(rèn)SP EJB//Enterprise JavaBean ejb容器組件
隨著時(shí)間的推移,人們發(fā)現(xiàn)普通的JavaBean似乎并不能滿足企業(yè)級應(yīng)用的需要 最典型的就是虛擬機(jī)提供的垃圾回收收集機(jī)制也就是GC不夠完善 可以優(yōu)化的余地極大,在這種情況下,EJB應(yīng)運(yùn)而生 EJB和其它組件一樣,不過遵循了某些規(guī)范而已
但是這些規(guī)范更多的是為充分利用機(jī)器并提高性能為主要目的的 舉個(gè)簡單例子
比如某個(gè)web服務(wù)器有100個(gè)用戶同時(shí)連接上
由于網(wǎng)絡(luò)連接是瞬時(shí)連接,所以很多時(shí)候并發(fā)數(shù)并沒有100那么大 前一秒有可能有30個(gè)請求被發(fā)送過來并被處理 后一秒可以只有10個(gè)請求被發(fā)送過來并被處理
只有在非常非常極端的情況下才有可能發(fā)生100個(gè)請求同時(shí)被發(fā)送過來并被處理的情況 那么我們是否需要保留100個(gè)那么多個(gè)對象在服務(wù)器的內(nèi)存里面去處理這些請求呢? 很顯然,不需要,大多數(shù)時(shí)候//甚至可以說是所有時(shí)候,我不相信有那么極端的情況 我們只需要保存其中的10-30%就夠了,那么什么時(shí)候需要20%,什么時(shí)候需要50% 甚至100%,這個(gè)過程就交給容器去管理,這就是ejb容器每天在干的事 管理內(nèi)存中活躍的對象
恩,必須強(qiáng)調(diào)的一點(diǎn)是,由于使用的不成熟 我們經(jīng)常把規(guī)范以及具體的應(yīng)用兩個(gè)名詞混用
舉個(gè)簡單例子,我們說Servlet,極有可能說的是Servlet規(guī)范 也有可能說的是一個(gè)具體的Servlet,這個(gè)就要看情況而定了 EJB,JSP也是如此
JDBC 和數(shù)據(jù)庫的連接
這個(gè)嚴(yán)格說來是數(shù)據(jù)庫產(chǎn)商需要關(guān)心的事 關(guān)于AppServer如何與數(shù)據(jù)庫的連接
但是也需要開發(fā)人員做一點(diǎn)事,因?yàn)锳ppServer不知道什么時(shí)候組件需要用到數(shù)據(jù)庫 同時(shí)也需要開發(fā)人員告訴AppServer他們使用的是什么數(shù)據(jù)庫,ip地址等等 JDBC就是關(guān)于這一套東東的規(guī)范 包括數(shù)據(jù)庫的產(chǎn)商應(yīng)提供什么樣的接口 AppServer應(yīng)用服務(wù)器應(yīng)該如何去連接 開發(fā)人員應(yīng)該如何去配置這些連接等等
還有一些數(shù)據(jù)源,連接池等概念參考相關(guān)數(shù)據(jù)在此就不再贅述 其它的規(guī)范比如JMX等確切地說與開發(fā)人員關(guān)聯(lián)并不大了 這類高級應(yīng)用只對AppServer應(yīng)用服務(wù)器產(chǎn)商重要 也不再羅嗦了---------記得聽說過這樣一種說法
大一時(shí)候不知道自己不知道 大二時(shí)候知道自己不知道 大三時(shí)候不知道自己知道 大四時(shí)候知道自己知道 為什么呢,因?yàn)榇?/p>
一時(shí)候剛進(jìn)大學(xué),什么都不懂,很正常,大家都一樣 大二或者大三時(shí)候開始接觸知識,雖然還是不懂,但慢慢地開始學(xué)習(xí),開始積累 過了一段時(shí)間,知道自己知道了//也就是前一種說法的大四,后一種說法的大三 開始屁癲,開始拽得不得了,覺得自己懷才不遇,千里馬難尋伯樂的那種感覺 有些人是大四畢業(yè)了以后開始拽,悟性高一點(diǎn)的,大三就開始拽,因人而異 這幾乎是每一個(gè)初學(xué)者經(jīng)過一段時(shí)間學(xué)習(xí)后的必然階段 不管如何,總之開始入門了,這也不是壞事
但最后每個(gè)人都會知道自己不知道的,也就是后一種說法的大四階段 //前一種說法里面的那些家伙估計(jì)要到工作以后才能明白 因?yàn)槿魏我婚T學(xué)科都博大精深,要是能在兩三年之內(nèi)就統(tǒng)統(tǒng)搞懂 那不是在吹牛就是坐井觀天,java如此,c如此,c++也是如此 那么到了本系列的第七集,可愛的讀者應(yīng)該處在什么階段呢? 恭喜,在看完這篇文章之后,你就基本處于知道自己不知道的那種階段 離拽起來還有那么一段距離,因?yàn)槟銈儺吘惯€沒有學(xué)習(xí)和積累一定的基礎(chǔ)知識 但是騙騙外行,蒙蒙國企那些吃閑飯的管理人員問題不大
給初學(xué)者之八:java高級應(yīng)用之框架篇 沒錯(cuò),我沒敲錯(cuò)
之所以不再聲稱是企業(yè)級應(yīng)用而稱之為高級應(yīng)用 是因?yàn)橄旅嬉v的東西屬于純民間性質(zhì) 是java具體應(yīng)用的上層建筑,可用可不用,沒有人強(qiáng)迫你用 首先給框架//framework 下一個(gè)定義
我想讀者你可能聽說過.net framework這個(gè)概念
沒錯(cuò),我們將要說的framework也和這個(gè)framework差不多 所不同的是.net framework的競爭對象是j2ee那一系列標(biāo)準(zhǔn) 而我們將要說到的幾個(gè)框架則應(yīng)用在j2ee的不同層面 單就單個(gè)框架而言,沒有.net framework管得那么多
但是卻要比它精專多了,而且總量加起來,也遠(yuǎn)比微軟那一套框架要廣泛得多 回到正題,框架是什么?
軟件工程之所以被叫做軟件工程就是因?yàn)橛心敲匆慌擞X得可以用工程學(xué)里面 那些管理Project的方法來管理軟件從開發(fā)到維護(hù)這一系列流程 那么在建筑工程里面框架是什么?
現(xiàn)在建筑多采用鋼筋混凝土結(jié)構(gòu),注意里面一個(gè)很重要的詞匯:鋼筋 托福閱讀中曾有一題聽力就是關(guān)于鋼筋結(jié)構(gòu)的誕生,在美國 恩,現(xiàn)代建筑中多在建筑起來之前,先用鋼筋搭建出一個(gè)框架出來 然后往鋼筋中間填入混凝土,從而形成一個(gè)完成的建筑 而今天要說到的框架就是這么一個(gè)東西在每一個(gè)軟件中間的實(shí)現(xiàn)
框架就是那么一個(gè)通過預(yù)先寫好代碼從而幫我們建立起一個(gè)軟件結(jié)構(gòu)的這么一個(gè)東西 這里提一下框架與規(guī)范//主要指J2ee規(guī)范也就是官方標(biāo)準(zhǔn)的區(qū)別 從某種意義上說,J2ee規(guī)范本身就是一個(gè)框架 無論是web容器也好,還是ejb容器也好,它們都開發(fā)了一部分通用的代碼 并且?guī)椭覀兇罱ㄆ饋砹艘粋€(gè)軟件結(jié)構(gòu),我們要做的就是往里面填入組件 比如ejb/servlet/jsp等等
沒錯(cuò),要這么理解也沒錯(cuò),但是為了避免混亂,我們還是嚴(yán)格區(qū)分開來 本文中將要提到的框架如無特別說明,就是指的是非官方標(biāo)準(zhǔn)的框架 規(guī)范是規(guī)范,而框架是建立在規(guī)范之上的一種東西
可以說是標(biāo)準(zhǔn)的延續(xù),或者說是民間的嘗試,總之是這么一個(gè)非官方的東西 說到這里順便提一下JCP組織也就是Java Community Process/Java社區(qū) 當(dāng)初Sun公司在java發(fā)布之初,為了提倡開源和共項(xiàng)
同時(shí)也出于一個(gè)提出合理的標(biāo)準(zhǔn)的目的,而讓廣大的開發(fā)者參與標(biāo)準(zhǔn)的制定 而成立了這樣一個(gè)社區(qū),現(xiàn)在還健在,網(wǎng)址是jcp.org 每一個(gè)新的規(guī)范發(fā)布之前都會在這個(gè)社區(qū)廣泛討論,最終對規(guī)范的制定產(chǎn)生巨大的影響 其中就包括企業(yè)級的參與者,相當(dāng)有名的JBoss以及我國的金碟公司都是其中的成員 下面介紹一下幾個(gè)相當(dāng)著名的框架,必須要指出的是,雖然框架大多開源 但并不代表所有的框架都開源,比如.net framework,但是java框架大多數(shù)開源 言歸正傳
Struts 表示層框架,名字來源于飛機(jī)的金屬框架 可能有讀者會提問了 表示層不是客戶端么?
沒錯(cuò),但是語言這東西,眾口爍金,別人都這么說你就不好不這么說了 最早表示層說的是客戶端,后來隨著時(shí)間的發(fā)展 人們也把服務(wù)器端直接與客戶端//比如IE 打交道的那部分也稱為表示層//JSP+Servlet 那么表示層框架是干什么的呢?
早先大規(guī)模應(yīng)用JSP的時(shí)候,人們發(fā)現(xiàn),JSP里面充斥著邏輯代碼與數(shù)據(jù) 可讀性極差,于是人們借用很早很早以前的MVC模式的思想 把表示層組件分為V-Viewer,也就是JSP M-Model模型,一般來說是一個(gè)JavaBean C-Controller控制器,一般來說是一個(gè)Servlet 所有人通過JSP和服務(wù)器打交道,發(fā)送請求,Viewer把這個(gè)請求轉(zhuǎn)發(fā)給Controller Controller通過調(diào)用一個(gè)Model來處理該請求,然后返回?cái)?shù)據(jù)到Viewer 這么一個(gè)過程,從而達(dá)到數(shù)據(jù)與邏輯的剝離,增強(qiáng)代碼可讀性,降低維護(hù)成本 而幫助人們實(shí)現(xiàn)這一系列東西的就是Struts框架,就是這么一個(gè)東西 Struts的競爭對手主要是產(chǎn)商們極力倡導(dǎo)的JSF也就是Java Server Faces 但是由于Struts出道時(shí)間早,所以應(yīng)用比較多 JSF則是產(chǎn)商們大力支持,前景看好
對于這一層來說,在JSP的html代碼中出現(xiàn)的java語句越少越好 因?yàn)閖ava代碼越少說明頁面處理的業(yè)務(wù)邏輯越少,也越合理 這也是Struts最初的目的,記住這話
Spring 大名鼎鼎的Spring框架
有人曾說2005年一片叫春之聲,指的就是該框架
Spring起源于Rod Johnson的《Expert One-on-One J2EE Design and Development》一書 Rod Johnson認(rèn)為,J2ee里面的那一套//尤其是ejb 太重了,對于單機(jī)的系統(tǒng)來說,沒有必要使用那么復(fù)雜的東西 于是就開始設(shè)計(jì)并引導(dǎo)Spring小組開發(fā)出這樣一個(gè)構(gòu)架
不能不說他是個(gè)天才,因?yàn)榈牡拇_確不是所有的系統(tǒng)都是跨多服務(wù)器的 沒有必要把一個(gè)簡單的系統(tǒng)設(shè)計(jì)得那么復(fù)雜//天才的那幾個(gè)共性又體現(xiàn)出來了 Spring從誕生之日起就是針對EJB的,力爭在不少應(yīng)用上取代EJB 而它也確實(shí)達(dá)到了這個(gè)目的
現(xiàn)在包括WebLogic等主流應(yīng)用服務(wù)器還有主流IDE都開始逐漸接受該框架 并提供相應(yīng)支持
提到Spring就不能不說控制反轉(zhuǎn)Ioc//Inversion of Control 和依賴注射DI//Dependency Injection 什么叫控制反轉(zhuǎn)呢?
套用好萊塢的一句名言就是:你呆著別動(dòng),到時(shí)我會找你。
Hibernate 名字取材自O(shè)RM最早的一句玩笑話//ORM就是OR-Mapping 說用了ORM之后,程序員就可以去冬眠了,而不需要操心那么多事
這里不得不說的是,該框架由于做得太好,以至于被J2ee招安,成為EJB3.0的一部分 替代原有EJB2.X里面關(guān)于Entity Bean而成為EJB ORM的工具 這里解釋一下ORM//OR-Mapping 中文名對象關(guān)系映射
什么意思呢?我們知道傳統(tǒng)的數(shù)據(jù)庫都是關(guān)系型的
一條條記錄以表格的形式儲存,而表與表之間充斥著是關(guān)系/關(guān)聯(lián)
比如說一個(gè)人,名字zhaoce,性別男,年齡23那么數(shù)據(jù)庫中是這么儲存的 姓名 性別 年齡 zhaoce m 23 某女 f 22 而實(shí)際應(yīng)用服務(wù)器中的實(shí)體都是以對象的形式存在,一個(gè)個(gè)對象 zhaoce是以這種形式存在的 Human human=new Human();human.setName(“zhaoce”)human.setSex(“m”);human.setAge(23);這樣的,那么我們知道,傳統(tǒng)的JDBC是通過一個(gè)二維字符串將數(shù)據(jù)取出 需要我們自己將其包裝成對象,在存入的時(shí)候,我們還需要將對象拆開 放入sql語句中//Insert into Huamn values('zhaoce','m',23)然后執(zhí)行該sql語句
太麻煩太麻煩,ORM理念的提出改變了這一切,ORM認(rèn)為,這些東西應(yīng)該由框架來做 而不是程序員,程序員做他該做的,不要為這種破事分心,還測試半天 于是就出現(xiàn)了Hibernate,JDO,TopLink等等,甚至.net里面也有ADO.net 過去一段時(shí)間是Hibernate和JDO爭風(fēng),現(xiàn)在看來Hibernate逐漸成為主流并被官方接納 成為規(guī)范標(biāo)準(zhǔn)之一,替代掉原來EJB2.X的ORM EntityBean TopLink則是Oracle公司推出和Oracle數(shù)據(jù)庫結(jié)合的一種ORM 商業(yè)用軟件,貴且復(fù)雜,不過正在逐漸開放
而象表示層一樣,這一種專門面對數(shù)據(jù)層的代碼也被稱為數(shù)據(jù)持久層 所以數(shù)據(jù)持久層這一概念有時(shí)不僅僅指代數(shù)據(jù)庫
關(guān)于ORM,最高的境界應(yīng)該是在java代碼中不出現(xiàn)任何一句的sql語句 注意,是不包括sql語句,Hibernate的hql以及ejb的ejb-ql不算在內(nèi)
至于出現(xiàn)不出現(xiàn)hql/ejb-ql等替代ql,這要視具體情況而定,不過最好也是不出現(xiàn) 當(dāng)然最后所說的過分理想的情況往往不現(xiàn)實(shí),總之一句話
以sql為代表的ql/*還有hql,ejbql等*/語句在代碼中出現(xiàn)得越少越好 記住這話,現(xiàn)在未必能夠理解,學(xué)了以后就懂了
這三個(gè)是目前最為常用的框架 而目前光已公布的框架就>500 還在不停增加中,不可能一一列舉,有興趣的可以去看相應(yīng)文檔 要指出的是框架不是應(yīng)用程序
只是一堆組件的有序復(fù)合,應(yīng)用時(shí)不能脫離于應(yīng)用服務(wù)器單獨(dú)存在給初學(xué)者之九:收尾 最后一篇介紹幾個(gè)常見的概念 設(shè)計(jì)模式
這可不僅是java獨(dú)有
我看的書就是c++和smalltalk例子的 先說說什么是設(shè)計(jì)模式
模式是什么?模式是經(jīng)驗(yàn)的總結(jié),潛規(guī)則的抽象
什么意思呢?比如說我們坐飛機(jī),上飛機(jī)前需要經(jīng)過幾個(gè)步驟 什么安檢領(lǐng)取登機(jī)牌之類的,這一套流程能不能改呢?
可以,但為什么幾乎全世界的航空公司登機(jī)前都是這一套流程呢? 因?yàn)楹娇展窘?jīng)過長期實(shí)踐之后得出了一堆結(jié)論和經(jīng)驗(yàn) 并認(rèn)為這樣做才是最安全,或說是最有效率的 這就是模式,模式是編程高手之間交流的橋梁 兩個(gè)編程高手通過統(tǒng)一命名的模式了解對方的思想
當(dāng)然不借助模式可不可以?當(dāng)然可以,只是模式無處不在,你不知道而已
又比如吃飯,每吃一口飯,我們要先端碗,拿筷子,張嘴,塞飯入口,咀嚼最后吞咽 這就是一套模式,我們給這套模式命名為吃飯 那么當(dāng)老爸叫吃飯的時(shí)候,我們就能明白什么意思
而不用老爸進(jìn)來囈囈啊啊并比畫上半天,啞語也不是這么用的 這就是模式,已知的模式有400多種//好象更多,不記得了 比如數(shù)據(jù)庫有數(shù)據(jù)庫的設(shè)計(jì)模式,編程有編程的模式等等
面向?qū)ο笥谐S玫?1種模式,需要掌握,主要分為創(chuàng)建,行為,結(jié)構(gòu)三類 J2ee有J2ee的模式,Sun公司出了一本書叫《J2EE核心模式》可以拿來看看 必需要指明的是,模式不是規(guī)范,比如吃飯模式
沒有人規(guī)定你吃飯非得要那么吃,你可以端碗,上拋,張嘴在下落后連碗一起吞咽 這也可以,只要你愿意,同樣,只要你愿意,你就可以不遵循模式
模式之外還有反模式,學(xué)模式不可定勢,不要學(xué)死,活學(xué)活用,無招勝有招才是最高境界 JavaDoc 文檔工具,極其好用
可以根據(jù)注釋自動(dòng)生成HTML文檔 Ant 98年,有一位程序員在從歐洲飛回美國的飛機(jī)上想到了這么一個(gè)東西 從而改變了整個(gè)世界,他的名字叫James Duncan Davidson 組織管理工具,可以這么描述它
比如你想在編譯之后自動(dòng)再次生成JavaDoc 那么你只需要編輯Ant腳本//對,就像Windows腳本那樣 然后批處理就可以了,不過現(xiàn)在Ant已經(jīng)廣泛集成到IDE中去 不需要自己手動(dòng)編寫,不過如果想要炫炫,據(jù)說此招百試不爽 JUnit 測試工具,Unit家族可不只有JUnit 還有其它版本的,這個(gè)不細(xì)說,具體實(shí)踐一下就明白了 POJO //Plain Old Java Object 就是傳統(tǒng)的Java對象,也就是一個(gè)JavaBean 由虛擬機(jī)來掌握其生死
常用的兩個(gè)管理構(gòu)架/規(guī)范是Spring和EJB容器 命名由來是某人//名字我忘了
覺得我們使用了太多的規(guī)范,以至于我們都忘記了純粹的java對象 以至于我們都忽略了它的存在,所以叫了這么一個(gè)名字 以喚醒人們的記憶,這個(gè)意義上來說EJB其實(shí)不能算是POJO 畢竟遵循了一堆的接口,但是不管怎樣,接口歸接口,還是沒有繼承類 沒有被強(qiáng)加什么//遵循可以寫空方法假遵循 所以說還是POJO也對 但是由于這種東西缺乏管理,不象Servlet有專門的容器管理并繼承了一定的類 而沒有管理的對象在虛擬機(jī)中是很危險(xiǎn)的,因?yàn)槔厥諜C(jī)制各個(gè)虛擬機(jī)不同 而且也不怎樣,極有可能長時(shí)間不回收,這樣在企業(yè)級的應(yīng)用中呢 就有可能造成內(nèi)存大量被占用從而死機(jī),毫無疑問,這種機(jī)制需要優(yōu)化 這種優(yōu)化就是通過EJB容器或者Spring構(gòu)架來實(shí)現(xiàn) 這么做還有一個(gè)好處就是迫使程序員對每一個(gè)類做封裝
強(qiáng)迫他做管理,以達(dá)到防止內(nèi)存泄露的目的,內(nèi)存泄露最經(jīng)常出現(xiàn)的錯(cuò)誤就是 引用未釋放,引用最典型體現(xiàn)在new這個(gè)關(guān)鍵字上,new得越多引用得越多 隨著時(shí)間地增長,有可能導(dǎo)致循環(huán),不停new new new new new.....其中哪怕只要有一個(gè)new處理不當(dāng),虛擬機(jī)無法回收內(nèi)存 那就極有可能完蛋,而且這種小bug越是在大的項(xiàng)目越是難以找到 有可能因?yàn)橐粋€(gè)人而影響整個(gè)項(xiàng)目組,所以不妨記住我的一條經(jīng)驗(yàn) 好的系統(tǒng)框架不應(yīng)該在業(yè)務(wù)邏輯流程中出現(xiàn)new關(guān)鍵字 現(xiàn)在不理解也無所謂,將來有一天會明白的 SOA 面向服務(wù)的構(gòu)架
不說太多,這個(gè)屬于上上層建筑
不過不妨記住我的一句話,可以幫助理解這個(gè)概念 面向什么就是對什么做封裝 面向?qū)ο缶褪菍ο笞龇庋b 面向服務(wù)類似,剩下的靠悟性 反射
1.4新增功能,非常強(qiáng)大
通過反射,程序可以解析出類本身的屬性也就是變量
/注意這里說的屬性不是.net里面的屬性,我不喜歡微軟造的新名詞,亂 還有行為也就是方法,然后通過invoke()方法調(diào)用該方法 甚至可以新增對象等,java首創(chuàng),本是其它語言所沒有的
后來被微軟抄了去,利用該功能,開源框架廣泛受益并大量采用,近乎瘋狂地使用 具體就不說了,最后要指出的是,有一種說法是利用反射會降低效率 在早期的時(shí)候,的確是,現(xiàn)在不會了,放心使用 容器
5.0以后的版本在J2SE中都出現(xiàn)了容器 各位甚至可以自己嘗試用標(biāo)準(zhǔn)庫去使用容器 書籍
《Thinking in Java》 //實(shí)話說,一般,尤其是翻譯后的版本,原版還行 《Java教程》 //電子工業(yè)出版社出版的那本,上下冊,很厚,但翻譯得不錯(cuò) 《21天學(xué)通Java》 //入門極好,但是《21天學(xué)通j2ee》極爛,不要買 《Mastering EJB》 //翻譯過的書質(zhì)量我不清楚,估計(jì)不怎樣,請看原版書籍 《精通Hibernate》 //看清楚作者,孫衛(wèi)琴,其它人的別買
其它的可以不用了,網(wǎng)絡(luò)上的遠(yuǎn)比書上來得多,來得好,雖然也來得雜 最后的建議 一,不要做一個(gè)浮躁的人 二,學(xué)好英語,很重要 三,閱讀源代碼和文檔
四,共享源代碼,不要做一個(gè)功利的人 五,熱愛Java 相信能看到這里的朋友都是真心想學(xué)習(xí)java,在編程的路上你已經(jīng)成功的走出了第一步,接下來就是努力的走下去。。加Java學(xué)習(xí)群四一八,三五五,五三一。
第五篇:預(yù)算員崗位職責(zé)(初學(xué)者必看)
預(yù)算員崗位職責(zé)
①負(fù)責(zé)編制公司及項(xiàng)目部預(yù)算; ②負(fù)責(zé)編制公司及項(xiàng)目部結(jié)算;
③負(fù)責(zé)起草合同草案及合同管理(包括合同的修訂、存檔和執(zhí)行情況的跟蹤管理); ④負(fù)責(zé)公司招投標(biāo)工作;
⑤協(xié)助及指導(dǎo)項(xiàng)目部解決在施工過程中所遇到與工程預(yù)決算相關(guān)的問題; ⑥提高自身業(yè)務(wù)素質(zhì)以提高公司風(fēng)險(xiǎn)防范能力等。
現(xiàn)就針對這以上幾個(gè)方面工作內(nèi)容制定我們的工作思路,并逐條做個(gè)簡述: 1.預(yù)算編制需從各個(gè)方面入手保證預(yù)算的精確度及公司利潤:
①廣泛收集及長期積累各種資料; ②深入現(xiàn)場熟悉施工過程; ③熟悉施工圖紙;
④熟悉和掌握定額規(guī)定準(zhǔn)確計(jì)算工程量、正確套用定額單價(jià)、合理編制補(bǔ)充定額;
⑤編制預(yù)算時(shí)必須要考慮到工程決算并為決算留下余地(包括:1.對能早期結(jié)帳收回工程款的項(xiàng)目(如土方、基礎(chǔ)等)的單價(jià)可報(bào)以較高價(jià),以利于資金周轉(zhuǎn),對后期項(xiàng)目(如裝飾、電氣設(shè)備安裝等)單價(jià)可適當(dāng)降低2.估計(jì)今后工程量可能增加的項(xiàng)目,其單價(jià)可提高,而工程量可能減少的項(xiàng)目,其單價(jià)可降低3.圖紙內(nèi)容不明確或有錯(cuò)誤,估計(jì)修改后工程量要增加的,其單價(jià)可提高,而工程內(nèi)容不明確的,其單價(jià)可降低4.對于暫定項(xiàng)目,其實(shí)施的可能性大的項(xiàng)目,價(jià)格可定高價(jià),估計(jì)該工程不一定實(shí)施的可定低價(jià));
⑥加強(qiáng)復(fù)核工作等。
2.工程決算是工程造價(jià)管理的重點(diǎn),工程決算的目的就是最大限度提高工程項(xiàng)目的利潤空間。目前建筑業(yè)競爭比較激烈,施工合同的條件對我們施工單位很是苛刻,如果公司想創(chuàng)造效益,必須保證決算的質(zhì)量。為了今后更好的開展決算工作,給公司帶來效益必須做好以下幾點(diǎn):
①平時(shí)做好資料及聯(lián)系單的收集工作;
②督促項(xiàng)目經(jīng)理施工過程中的變更必須及時(shí)簽證; ③甲方反饋的簽證必須仔細(xì)審核;
④工程施工過程及與甲方核對工程量過程中必須多和項(xiàng)目經(jīng)理溝通; ⑤仔細(xì)研究合同及聯(lián)系單,找出其中的漏洞;
⑥充分了解原預(yù)算書中的所留下的余地并將其發(fā)揮作用等。
3.合同簽訂的內(nèi)容因項(xiàng)目情況和合同性質(zhì)、原招標(biāo)文件規(guī)定、發(fā)包人的要求而異。但是作為施工方來說施工合同直接關(guān)系到公司的效益,所以合同的簽訂必須反復(fù)斟酌,盡量使施工合同能夠?yàn)楣緞?chuàng)造利潤。我們經(jīng)營預(yù)算科在合同起草、談判過程中必須注意以下幾個(gè)方面: ①認(rèn)真重新核實(shí)投標(biāo)報(bào)價(jià)的工程項(xiàng)目內(nèi)容和范圍,盡量把對我們有利的東西反應(yīng)到合同中去;
②對于在談判討論中經(jīng)雙方確認(rèn)的內(nèi)容及范圍方面的修改或調(diào)整,應(yīng)和其他所有在談判中雙方達(dá)成一致的內(nèi)容一樣,以文字方式確定下來,并以“合同補(bǔ)充”或“會議紀(jì)要”方式作為合同附件并說明構(gòu)成合同一部分;
③發(fā)包人提出增減的工程項(xiàng)目或要求調(diào)整的工程量和工程內(nèi)容時(shí),務(wù)必在技術(shù)和商務(wù)等方面重新核實(shí),確有把握方可應(yīng)允。同時(shí)以書面文件及工程量表或圖紙予以確認(rèn);
④對于原招標(biāo)文件中的“可供選擇的項(xiàng)目”和“臨時(shí)項(xiàng)目”應(yīng)力爭說服發(fā)包人在合同簽訂前予以確認(rèn),或商定一個(gè)確認(rèn)最后期限等。
4.招投標(biāo)工作的開展是公司運(yùn)營的核心部分,作為施工方為了中標(biāo)并獲得期望的效益,投標(biāo)程序全過程幾乎都要研究投標(biāo)報(bào)價(jià)技巧問題,在投標(biāo)工作中我們必須注意以下幾點(diǎn):
①投標(biāo)前應(yīng)仔細(xì)閱讀招標(biāo)文件的所有內(nèi)容,按招標(biāo)文件的要求提供投標(biāo)文件,并盡量了解招標(biāo)人的意圖; ②“第1點(diǎn)中提到的為工程決算留余地”;
③所有投標(biāo)文件都必須按招標(biāo)方在投標(biāo)邀請中規(guī)定的投標(biāo)截止時(shí)間之前送至招標(biāo)方;
④在投標(biāo)過程中,還可以考慮其他許多重要因素,如縮短工期,提高工程質(zhì)量,降低支付條件要求,提出新技術(shù)和新設(shè)計(jì)方案,以及提供補(bǔ)充物資和設(shè)備等,以此優(yōu)惠條件爭取得到招標(biāo)人的贊許等。
5.在工程施工過程中常與項(xiàng)目經(jīng)理進(jìn)行溝通,了解工地施工情況。
6.目前我們的預(yù)算水平還存在不足之處。因此,我們應(yīng)該抓緊學(xué)習(xí),跟上時(shí)代的步伐。除了對本專業(yè)的知識進(jìn)行更新提高外,還應(yīng)該結(jié)合工作廣泛了解和初步掌握有關(guān)的工程技術(shù)專業(yè)知識。只有對工程內(nèi)容有比較全面的掌握,才能做好工程預(yù)決算工作。試想,如果我們對編制預(yù)決算的工程都不甚了解,對其專業(yè)知識非常模糊,又怎么能夠進(jìn)行工作呢?工程預(yù)決算從業(yè)人員首先應(yīng)該是本專業(yè)的專家,同時(shí)也應(yīng)該是工程方面的行家。只有高水平的人才才能夠編制出高水平的工程預(yù)決算。專業(yè)的地位與專業(yè)所起的作用是成正比的。我們應(yīng)該從提高個(gè)人的水平入手,逐步提高自身工作水平,為公司發(fā)展發(fā)揮我們應(yīng)有的作用。