A. Java中為什麼老是說重構,重構到底是什麼意思
java重構:指程序員對已有程序在盡量不改變介面的前提下,進行重新編寫代碼的工作,一般有以下幾方面:
1、去除已知bug。
2、提高程序運行效率。
3、增加新的功能。
重構舉例:(簡化代碼、提升效率)
重構前:
if(list != null && list.size() > 0){
for(int i = 0; i < list.size(); i++){
//skip... }}
重構後
if(list != null){
for(int i = 0, len = list.size(); i < len; i++){
//skip... }}
B. 軟體工程對自己未來專業的職業規劃及如何逐步實現
引言:職業生涯規劃(careerplanning)簡稱生涯規劃,又叫職業生涯設計,是指個人與組織相結合,在對一個人職業生涯的主客觀條件進行測定、分析、總結的基礎上,對自己的興趣、愛好、能力、特點進行綜合分析與權衡,結合時代特點,根據自己的職業傾向,確定其最佳的職業奮斗目標,並為實現這一目標做出行之有效的安排。生涯設計的目的絕不僅是幫助個人按照自己的資歷條件找到一份合適的工作,達到與實現個人目標,更重要的是幫助個人真正了解自己,為自己定下事業大計,籌劃未來,擬定一生的發展方向,根據主客觀條件設計出合理且可行的職業生涯發展方向。
大學生首先要認識到生涯規劃的重要意義,職業生涯活動將伴隨我們的大半生,擁有成功的職業生涯才能實現完美人生。因此,職業生涯規劃具有特別重要的意義。
第一章 認識自我
1.個人基本情況
別人說我性格偏於內向,但我認為我性格具有兩面性,我喜歡安靜的環境,喜歡一個人學習、看書。但有時卻喜歡熱鬧,和朋友在一起談天,給彼此帶來快樂,我會感覺很開心。喜歡畫畫,喜歡運動,尤其是打乒乓球。也喜歡路游,開闊眼界,陶冶情操。我平常的生活中較少主動與陌生人交往,喜歡默默地做自己的工作,但是在熟悉的人面前也能放寬心態、活潑的姿態與別人交流。在與人相處時,待人坦誠,往往能得到他人的認可。對自己從事的工作往往能盡心投入,盡自己最大努力工作。
2.職業興趣:
我不喜歡過太悠閑地生活,所以比較期待軟體開發這一方面的工作,努力的先學好專業知識。
3.個人性格:
我有著雙重性格,生活中,常常能讓人見到我的笑臉,與人溝通時不僅能很好的闡述自己的觀點,也能靜心傾聽別人的意見。我處理事比較細致,待人比較和善,很容易博得別人的好感與信任。
4.職業價值觀:
我並不過於的最求物質方面的待遇,更注重自身的精神感受,所以,我若是喜歡自己的工作,就會盡心盡職的去做,而不會因為物質財富的影響以致不能盡力工作。
5.優勢分析:我具有團隊精神和協作能力,我是一個認真而嚴謹的人,勤奮而負有責任感,對待問題善於和別人交流,認準的事情很少會改變或氣餒,做事深思熟慮,信守承諾並值得信賴。我依靠理智的思考來做決定,總是採取客觀、合乎邏輯的步驟,不會感情用事,甚至在遇到危機時都能夠表現得平靜。 我謹慎而傳統,重視穩定性、合理性;我善於聆聽並喜歡將事情清晰而條理的安排好。我喜歡先充分收集各種信息,然後根據信息去綜合考慮實際的解決方法,而不是運用理論去解決。我對細節非常敏感,有很實際的判斷力,決定時能夠運用精確的證據和過去的經驗來支持自己的觀點,並且非常系統有條不紊,對那些不這樣做的人沒有耐心。
6.劣勢分析:我非常固執,經常沉浸於具體的細節和日常的操作中,我看問題有很強的批判性,通常持懷疑態度,我需要時常的換位思考,更廣泛的收集信息,並理智的評估自己的行為帶來的可能後果。我過於認真,對某些事物過於嚴謹和挑剔;我非常有主見,時常會將自己的觀點和標准強加給別人,而且無視那些不自信的人的建議。自我感覺若能在以後多嘗試和接受新穎的、有創造性的方法,就能做出更有效的決策。
自我分析小結:
每個人都有自己的長處和短處,總有一份合適自己的工作,通過充分了解自己,了解自己的興趣和能力,對自己未來正確的進行從事行業的選擇有很大的幫助,我雖然不是最優秀的,但是通過努力,一定能勝任選擇的工作。
第二章 職業生涯條件分析
1.家庭環境分析:
我的家庭很一般,家裡收入一般,我之前我並沒有接觸過與現在所學專業有關的東西,也沒有特殊的家庭背景。由於家庭氣氛比較和諧,讓我無形中更懂得如何與人相處,這樣潛移默化的讓我也能更認真的對待生活、工作中的事情。我希望能踏踏實實的工作,去探索人生中的另一個領域。
2.學校環境分析:
學校是一個小社會,在這里,我們要處理很多人際關系,與周圍同學相處的能力就很能體現一個人自身與他人的溝通交流能力。學校的學生來至於全國四面八方,我們能夠通過對不同生活背景、不同生活習慣的人的交往來鍛煉自己的與人同能力。
4.職業環境分析:
人才行情:需求大,對專業功底要求比較深,但也適合一般本科生從事。最重要的是,職業發展空間足夠大
職業生涯條件分析小結:
包括各種上游設備以及通訊器材的銷售。對於上游設備的銷售,企業在招聘時非常看重專業背景,因此,對通信的一些基礎專業課程得有比較全面的了解。對於那些想做銷售的同學們,在畢業前實習爭取去企業的研發部門,與市場營銷的學生在銷售專業知識上去競爭是不明智的,我們應該加強專業背景這一核心優勢。
第三章 職業目標定位及其分解組合
1.職業目標的確定:
銷售助理—銷售工程師—銷售經理
2.職業目標的分解與組合:
通過扎實的工作能力和努力的進取逐步提升自己。
第四章 具體執行計劃
學習不僅是為了以後的工作,最重要的是它能讓你終身收益。我一直堅信「活到老,學到老」的格言。無論怎樣,學生最首要的任務就是學習。如果拋開學習,那麼一切都無從談起。在數字化、信息化的時代對計算機知識的掌握尤為必要。所以我對自己的大學生涯作出以下簡短設計。
大學二年級:
在這一年裡,既要穩抓基礎,又要做好由基礎課向專業課過渡的准備,並要把一些重要的高年級課程逐一瀏覽,以便向大三平穩過渡。大二里有兩次重要的考試:英語四級和計算機等級考試。在這段時期,我們要做的就是通過獲取這兩張科目認證證明來充實和豐富自己的生活。
在這個時期,我們也應考慮清楚未來是否深造或就業,了解相關的應有活動,並以提高自身的基本素質為主,通過參加學生會或社團等組織,鍛煉自己的各種能力,同時檢驗自己的知識技能;可以開始嘗試兼職、社會實踐活動,並要具有堅持性,最好能在課余時間後長時間從事與自己未來職業或本專業有關的工作,提高自己的責任感、主動性和受挫能力。
大二是充足的(如果我們能安排妥當),然而,有一點是很值得注意的,那就是在適當的時刻學會放棄一些次要的東西。「如果你企圖無所不知,那你將一無所知。」一位哲人如是說。是的,生命的小舟載不動太多虛無的希冀和渺茫的幻想。
在大二這段時間里,我們基本上為我們日後的發展定了方向,所以大二是非常重要的。
1.認真學好專業知識和其他基礎學科,堅信基礎的東西一定是最重要的。注意提高自身的基本素質,通過參加各種社團等組織,鍛煉自己的各科能力,同時檢驗自己的知識技能。
2.做一些兼職,社會實踐活動,同時在課余時間從事一些與自己未來職業有關的專業類的工作,進一步提高自己的責任感、主動性。
大學三年級:
開始嘗試並學習寫簡歷、求職信,了解社會需求。搜集與本人目標工作有關的信息,並通過信息渠道嘗試和已畢業的校友交流思想 。開始畢業前的申請,積極參加招聘,在實踐中校驗自己的知識積累。
預習或模擬面試,積極利用學校提供的條件,了解就業指導中心體統的用人公司資料信息,強化求職技巧,進行模擬面試等訓練,盡可能作出較為充分准備的情況下進行演練,為自己以後找到理想的工作而努力。
揚帆中的大四:
目標:工作申請,成功就業/專心考研
終於,到了大四了,大學生活似乎已經到了尾聲,這段奏鳴也迎了最後的高潮。此時的我在前三年生活的積淀中已掌握了許多,也許未必首屈一指,但也應當有所作為吧,是找工作還是考研?困惑一直纏繞著我,就目前招聘形勢,就在知識成為社會主宰的那一刻,我明白:考研成為熱點,研究生成為真正的人才,本科生競爭力實在不強(除非出類拔萃,當然這樣的人往往會去考研),所以考研這件事必須從大一便一直記在心中,我想用我三年積累的知識、十幾年不懈的努力、親人給予的激勵,優雅高昂的成為研究生(當然世事難料,也許有時不考研也是另樣的機遇)。
接著,我得對前三年的准備做一個總結:首先檢驗自己已確立的職業目標是否明確,前三年的准備是否已充分;然後,開始畢業後工作的申請,積極參加招聘活動,在實踐中校驗自己的積累和准備;最後,預習或模擬面試。積極利用學校提供的條件,了解就業指導中心提供的用人公司資料信息、強化求職技巧、進行模擬面試。
大四了,也沒什麼可猶豫的了,我想這時候一切都應當在我們的計劃中運行了
結束語:
大學生首先要認識到生涯規劃的重要意義,職業生涯活動將伴隨我們的大半生,擁有成功的職業生涯才能實現完美人生。因此,職業生涯規劃具有特別重要的意義。
一:職業生涯規劃可以發掘自我潛能,增強個人實力:
一份行之有效的職業生涯規劃將會:引導你正確認識自身的個性特質、現有與潛在的資源優勢,幫助你重新對自己的價值進行定位並使其持續增值;引導你對自己的綜合優勢與劣勢進行對比分析。
二:職業生涯規劃可以增強發展的目的性與計劃性,提升成功的機會:
生涯發展要有計劃、有目的,不可盲目地"撞大運",很多時候我們的職業生涯受挫就是由於生涯規劃沒有做好。好的計劃是成功的開始,古語講,凡事"預則立,不預則廢"就是這個道理。
三:職業生涯規劃可以提升應對競爭的能力:
做好職業生涯規劃,磨刀不誤砍柴工,有了清晰的認識與明確的目標之後再把求職活動付諸實踐,這樣的效果要好得多,也更經濟、更科學。
C. 重構是什麼意思,重構和重塑的區別,重塑重構院校
首先,重構這個概念,不是JAVA所特有的,而是軟體工程的一個概念。
主要是指改善現有的程序代碼,使其更方便、簡單的使用,提高可重用性、可維護性。
在面向對象C++\C#\JAVA等語言中,重構的概念一般是指對類進行重構,一般在現有類的某些功能方法不能滿足擴展需要,或者修復BUG時,就需要重構
重構是一個可迭代的過程,可以對一個功能重復重構,直到其滿足軟體的需求、維護和可擴展性
重構的方法比較多,一本書也說不完,一些概念性的內容見網路
D. 重構的概念是什麼
指對軟體代碼做任何更動以增加可讀性或者簡化結構而不影響輸出結果。
軟體重構需要藉助工具完成,重構工具能夠修改代碼同時修改所有引用該代碼的地方。在極限編程的方法學中,重構需要單元測試來支持。
在軟體工程學里,重構代碼一詞通常是指在不改變代碼的外部行為情況下而修改源代碼,有時非正式地稱為「清理干凈」。
在極限編程或其他敏捷方法學中,重構常常是軟體開發循環的一部分:開發者輪流增加新的測試和功能,並重構代碼來增進內部的清晰性和一致性。自動化的單元測試保證了重構不至於讓代碼停止工作。
(4)軟體工程重構擴展閱讀:
重構面對業界調適接受方面的挑戰。首先,對重構長遠的影響需要更深入研究追蹤。又,重構存於資料庫輪廓(database schema)的商業邏輯層幾乎是不可能或者非常困難的。最後,對介面造成影響的重構可能造成程序開發上的困境,除非程序員有對所有用戶界面的訪問權。
例如,程序員若改變某實體中的方法名稱,他要麼必須對整個專案里頭所有鏈接到舊名的參考都加以編輯,要麼屈服於繼續維護使用舊名的殘株殘瓦介面。而該舊名的介面於內部調用該方法的新名。
E. 什麼是代碼重構
代碼重構(英語:Code refactoring)重構就是在不改變軟體系統外部行為的前提下,改善它的內部結構。
軟體重構需要藉助工具完成,重構工具能夠修改代碼同時修改所有引用該代碼的地方。在極限編程的方法學中,重構需要單元測試來支持。
java重構:指程序員對已有程序在盡量不改變介面的前提下,進行重新編寫代碼的工作,一般有以下幾方面:
1、去除已知bug。
2、提高程序運行效率。
3、增加新的功能。
重構舉例:(簡化代碼、提升效率)
重構前:
if(list!=null&&list.size()>0){
for(inti=0;i<list.size();i++){
//skip...
}
}
重構後
if(list!=null){
for(inti=0,len=list.size();i<len;i++){
//skip...
}
}
何時著手重構(Refactoring)
新官上任三把火,開始一個全新??、腳不停蹄、加班加點,一支聲勢浩大的千軍萬"碼"夾裹著程序員激情和扣擊鍵盤的鳴金奮力前行,勢如破竹,攻城掠地,直指"黃龍府"。
開發經理是這支浩浩湯湯代碼隊伍的統帥,他負責這支隊伍的命運,當齊桓公站在山頂上看到管仲訓練的隊伍整齊劃一地前進時,他感嘆說"我有這樣一支軍隊哪裡還怕沒有勝利呢?"。但很遺憾,你手中的這支隊伍原本只是散兵游勇,在前進中招兵買馬,不斷壯大,所以隊伍變形在所難免。當開發經理發覺隊伍變形時,也許就是克制住攻克前方山頭的誘惑,停下腳步整頓隊伍的時候了。
Kent Beck提出了"代碼壞味道"的說法,和我們所提出的"隊伍變形"是同樣的意思,隊伍變形的信號是什麼呢?以下列述的代碼症狀就是"隊伍變形"的強烈信號:
·代碼中存在重復的代碼
中國有118 家整車生產企業,數量幾乎等於美、日、歐所有汽車廠家數之和,但是全國的年產量卻不及一個外國大汽車公司的產量。重復建設只會導致效率的低效和資源的浪費。
程序代碼更是不能搞重復建設,如果同一個類中有相同的代碼塊,請把它提煉成類的一個獨立方法,如果不同類中具有相同的代碼,請把它提煉成一個新類,永遠不要重復代碼。
·過大的類和過長的方法
過大的類往往是類抽象不合理的結果,類抽象不合理將降低了代碼的復用率。方法是類王國中的諸侯國,諸侯國太大勢必動搖中央集權。過長的方法由於包含的邏輯過於復雜,錯誤機率將直線上升,而可讀性則直線下降,類的健壯性很容易被打破。當看到一個過長的方法時,需要想辦法將其劃分為多個小方法,以便於分而治之。
·牽一毛而需要動全身的修改
當你發現修改一個小功能,或增加一個小功能時,就引發一次代碼地震,也許是你的設計抽象度不夠理想,功能代碼太過分散所引起的。
·類之間需要過多的通訊
A類需要調用B類的過多方法訪問B的內部數據,在關繫上這兩個類顯得有點狎昵,可能這兩個類本應該在一起,而不應該分家。
·過度耦合的信息鏈
"計算機是這樣一門科學,它相信可以通過添加一個中間層解決任何問題",所以往往中間層會被過多地追加到程序中。如果你在代碼中看到需要獲取一個信息,需要一個類的方法調用另一個類的方法,層層掛接,就象輸油管一樣節節相連。這往往是因為銜接層太多造成的,需要查看就否有可移除的中間層,或是否可以提供更直接的調用方法。
·各立山頭幹革命
如果你發現有兩個類或兩個方法雖然命名不同但卻擁有相似或相同的功能,你會發現往往是因為開發團隊協調不夠造成的。筆者曾經寫了一個頗好用的字元串處理類,但因為沒有及時通告團隊其他人員,後來發現項目中居然有三個字元串處理類。革命資源是珍貴的,我們不應各立山頭幹革命。
·不完美的設計
在筆者剛完成的一個比對報警項目中,曾安排阿朱開發報警模塊,即通過Socket向指定的簡訊平台、語音平台及客戶端報警器插件發送報警報文信息,阿朱出色地完成了這項任務。後來用戶又提出了實時比對的需求,即要求第三方系統以報文形式向比對報警系統發送請求,比對報警系統接收並響應這個請求。這又需要用到Socket報文通訊,由於原來的設計沒有將報文通訊模塊獨立出來,所以無法復用阿朱開發的代碼。後來我及時調整了這個設計,新增了一個報文收發模塊,使系統所有的對外通訊都復用這個模塊,系統的整體設計也顯得更加合理。
每個系統都或多或少存在不完美的設計,剛開始可能注意不到,到後來才會慢慢凸顯出來,此時唯有勇於更改才是最好的出路。
·缺少必要的注釋
雖然許多軟體工程的書籍常提醒程序員需要防止過多注釋,但這個擔心好象並沒有什麼必要。往往程序員更感興趣的是功能實現而非代碼注釋,因為前者更能帶來成就感,所以代碼注釋往往不是過多而是過少,過於簡單。人的記憶曲線下降的坡度是陡得嚇人的,當過了一段時間後再回頭補注釋時,很容易發生"提筆忘字,愈言且止"的情形。
曾在網上看到過微軟的代碼注釋,其詳盡程度讓人嘆為觀止,也從中體悟到了微軟成功的一個經驗。
F. 軟體工程中軟體重用的效益
可重用的軟部件有的可以不加修改直接使用,有的需要修改後再用。可重用軟部件應具有清晰的結構和註解,應具有正確的編碼和較低的時/空開銷。各種可重用軟部件還可以按照某種規則存放在軟部件庫中,供軟體工程師選用。可重用性有助於提高軟體產品的質量和開發效率、有助於降低軟體的開發和維護費用。從更廣泛的意義上理解,軟體工程的可重用性還應該包括:應用項目的重用,規格說明(也稱為規約)的重用,設計的重用,概念和方法的重用,等等。一般來說,重用的層次越高,帶來的效益也就越大。
G. 軟體工程的三大要素
軟體工程包括三個要素:方法、工具和過程。
軟體工程方法為軟體開發提供了「如何做」的技術。它包括了多方面的任務,如項目計劃與估算、軟體系統需求分析、數據結構、系統總體結構的設計、演算法過程的設計、編碼、測試以及維護等。
軟體工具為軟體工程方法提供了自動的或半自動的軟體支撐環境。目前,已經推出了許多軟體工具,這些軟體工具集成起來,建立起稱之為計算機輔助軟體工程(CASE)的軟體開發支撐系統。CASE將各種軟體工具、開發機器和一個存放開發過程信息的工程資料庫組合起來形成一個軟體工程環境。
軟體工程的過程則是將軟體工程的方法和工具綜合起來以達到合理、及時地進行計算機軟體開發的目的。過程定義了方法使用的順序、要求交付的文檔資料、為保證質量和協調變化所需要的管理、及軟體開發各個階段完成的里程碑。
軟體工程是一種層次化的技術。任何工程方法(包括軟體工程)必須以有組織的質量保證為基礎。全面的質量管理和類似的理念刺激了不斷的過程改進,正是這種改進導致了更加成熟的軟體工程方法的不斷出現。支持軟體工程的根基就在於對質量的關注。 ...
H. 軟體工程的結構化方法是什麼
結構化分析方法(Structured Method)是強調開發方法的結構合理性以及所開發軟體的結構合理性的軟體開發方法。結構是指系統內各個組成要素之間的相互聯系、相互作用的框架。結構化開發方法提出了一組提高軟體結構合理性的准則,如分解與抽象、模塊獨立性、信息隱蔽等。針對軟體生存周期各個不同的階段,它有結構化分析(SA)、結構化設計(SD)和結構化程序設計(SP)等方法。
結構化分析方法給出一組幫助系統分析人員產生功能規約的原理與技術。它一般利用圖形表達用戶需求,使用的手段主要有數據流圖、數據字典、結構化語言、判定表以及判定樹等。
結構化分析的步驟如下:①分析當前的情況,做出反映當前物理模型的DFD;②推導出等價的邏輯模型的DFD;③設計新的邏輯系統,生成數據字典和基元描述;④建立人機介面,提出可供選擇的目標系統物理模型的DFD;⑤確定各種方案的成本和風險等級,據此對各種方案進行分析;⑥選擇一種方案;⑦建立完整的需求規約。
結構化設計方法給出一組幫助設計人員在模塊層次上區分設計質量的原理與技術。它通常與結構化分析方法銜接起來使用,以數據流圖為基礎得到軟體的模塊結構。SD方法尤其適用於變換型結構和事務型結構的目標系統。在設計過程中,它從整個程序的結構出發,利用模塊結構圖表述程序模塊之間的關系。結構化設計的步驟如下:①評審和細化數據流圖;②確定數據流圖的類型;③把數據流圖映射到軟體模塊結構,設計出模塊結構的上層;④基於數據流圖逐步分解高層模塊,設計中下層模塊;⑤對模塊結構進行優化,得到更為合理的軟體結構;⑥描述模塊介面。