1. 程式人生 > >黑馬程式設計師—馬上快畢業了,給你們點建議吧

黑馬程式設計師—馬上快畢業了,給你們點建議吧

首先就是基礎重要不重要,這個不好做定論,因為看你需要掌握的程度,黑馬這邊的課程需要基礎在視訊裡都有,老畢的25天和張老師的高新技術,這些全部會用到,把這些全看熟了,並掌握原理才是關鍵,你去看什麼字串有操作建立幾個物件這種的,自己提高可以,但對聽課無幫助,除非你已經進入記憶體管理或者告訴快取等方面的應用才會逐漸考慮物件的多少,佔用記憶體,以及字串常量池引起的淺溢位等等。

關於基礎,比較典型的例子是,就拿動態代理來說,你可以研究下他的實現原理,這種模式在很多程式設計方面將會用到,並非僅是工具的使用,使用工具的僅僅是碼農而已,掌握原理並應用在自己的程式碼中才最終是你的知識。

其次,關於其他視訊應該掌握多少,有些人把jdbc,web, ssh等等全看了,以為當是預習,我想說的是,這本來沒有錯,但是你真正應該去看的是資料庫,jdbc,mysql,web基礎這些,ssh在web基礎課裡應用不多,並且都會有老師專門進行精講,2天你就會用了,而在web基礎課這裡,你要下功夫,因為ssh實現原理老師都會以小框架的模式給你們將的很透徹,如果你基礎太爛,聽不懂,最後可能整個web這一塊你都會學不懂,畢竟裡邊還有jsp,js等等很多知識,js你也需要重點去看,後面會有jquery等經典非同步框架之類的技術。


像我們經常用的多執行緒,io之類的這些非常基本的,你每天都會用,多執行緒的同步很重要,無論web還是android,或者說是java相關的都會頻繁應用,io這一塊,你要著重研究位元組流和字元流的區別,這是解決亂碼的重中之重。

範型在這裡你可以看或者不看,會用是最基本的,老師會講很多框架的實現原理,如果你想自己寫框架,那麼範型、反射你都需要掌握到一定程度,這不是用的問題,而是理解,還有一些實際應用的經驗。

反射這個是必須要重點去掌握的,web方面,經常會用反射來處理一些東西,比如說javabean方面的應用等等,至於android,在很多自定義元件中,你經常會需要用反射去訪問那些你無法訪問的欄位來達到你的目的。


至於有些人說他僅是想學android,所以不去學web,這本身就是個錯誤,和興趣無關,因為android裡邊,基本上凡是公司開發的,80%的應用都需要聯網的伺服器,所以你自己最後做專案的時候肯定需要寫個伺服器去做測試等等一系列事情,這時候你web不行,你程式碼就沒法寫了。在一個就是,有一些應用本身就是一個類似瀏覽器的實現,你不懂web真心寫不了。

關於android,我想很多人都會去看視訊,做預習,但我覺得大部分人應該去重點掌握awt/swing,以及java2圖形操作,這對於android學習的幫助是很大的,如果你還有flex基礎,那真心更有幫助。

另外就是,說實話,黑馬4個月所講的東西涵蓋了基本上行業內的絕大分通用技術,還有一些是老師自己的東西,你每天所需要的時間很緊迫,如果基礎太爛,我保證你每天后半夜睡覺都搞不定當天的內容,然後1個月下來,你堆積的東西越來越多,可能最後2個月自己就放棄學習了。。。


最後就是,千萬別讓基礎拖你後腿

說了半天給大家講個實際點例子,就說動態代理,掌握原理之後能做什麼,我之前研究過一個東西,在以前我們定義一個物件,這個物件的行為就固定了,如果需要進行限制這個物件的某些行為,我們可能需要定義一堆的欄位或者其他手段來控制,這是很不方便的,程式碼也顯得更復雜,至少我自己寫了之後發現很混亂,並且如果是執行時需要動態給某些物件刪除或者增加功能(函式/方法)的話,寫死的程式碼是實現不了的。

假設一個物件person,他有吃飯,有睡覺,有上廁所的功能,但是植物人不會吃飯吧?加班的可能幾天不睡覺吧?便祕的可能不上廁所吧?就還僅是3個功能,如果多了呢?幾十個,如果這些功能都可以隨便組合,都不是必須具備的功能,那麼你的邏輯程式碼需要多少,具體的功能組合形成的子類需要多少?我估計很多人到這就崩潰了。。。

如果拿代理來做,我們需要的是什麼?介面,每個功能一個介面,這些介面被人的代理類實現(或者是介面卡產生的具體實現類組合形成的策略模式),並會返回一個具備這些功能的person物件,我們僅需檢查他具備不具備這些功能就可以,而不是還要檢查一些額外的條件,而在某些功能失效,或者某些功能被加入的情況下,我們僅需要更換一下代理就行。這個可能不太好理解點,通俗來說就是,一個人沒有胳膊,和有胳膊癱瘓的區別是不一樣的。

這裡頻繁生成的各種功能組合的代理類的位元組碼是會存在於記憶體中,可能所有組合你都試過之後,一些不常用的組合會有記憶體溢位的風險,這時候就需要用到類載入機制和位元組碼技術,來把這些類的位元組碼檔案像物件重用一樣的進行重複利用,以避免大量的代理類造成記憶體溢位。

這個例子本身有一些侷限性,適用性不是太廣,其實技術方面沒啥新東西,主要還是你想怎麼做,以及在什麼場景下用什麼模式或者技術。