1、問題的解決css
2013年下半年,我積累的一堆的問題來到JY軟件繼續個人程序員之路。問題來自於我以前經歷的項目。通過下半年的工做與學習,差很少把上半年在腦子裏積累的一些大問題解決的七七八八了。下面做一個簡單的總結:前端
1、迭代式開發程序員
以前的公司作項目,因爲公司性質,項目基本都是以瀑布+原型的方式進行,也就是說,幾乎只有一輪。從軟件工程的相關書中瞭解到的迭代式開發一直沒有什麼機會去實際的瞭解。來到JY軟件最大的收穫之一即是對迭式代的開發體驗。這包括對SVN中使用項目分支的理解。數據庫
二、貧血模型的問題編程
這個問題由來已久,三層架構的代碼寫多了就開始迷茫。雖然分了層,但方法套方法,本質仍是面向過程。雖然有PO、VO,但實際上與值對象沒多大區別,根本不面向對象。不少狀況下,新需求一到,代碼的變更常常牽連三層。那麼多設計模式,面向對象的思想,項目中彷佛很難用到。跨表的複雜查詢到底該放在哪個Service中,等等。這些問題在腦中轉了好久,書上的概念也對不上,但想不通的太多。直到下半年逐步的瞭解到領域驅動設計(DDD)的一些思想。原來這一切都是貧血模型帶來的。咱們須要充血,須要把數據和行爲融合到一塊兒,造成真正的面向對象。咱們的項目不該該是數據庫驅動,更不該該是頁面驅動。應該以業務邏輯爲核心而構建代碼。以前的積累一系列問題都迎刃而解。canvas
能夠說對DDD學習是我我的在2013年最大的提高,沒有之一。DDD還有不少概念須要去挖掘。設計模式
3、圖表問題瀏覽器
以前經歷過兩個項目,都有圖表顯示的需求。Java使用JFreeChart,.Net使用微軟提供的Chart控件。但都須要服務器生成圖片,響應緩慢,我的以爲又醜又難用。若使用HTML5的canvas,在IE中又不能兼容。原本想要學習Flash的圖表,但絕大部分的Flash圖表是收費的,並且學習Flash也須要時間成本。年中的時候,瞭解了一點ExtJs,其漂亮的圖表是基於Raphaël.js庫實現的。Raphaël.js是一個開源且免費的矢量繪圖庫,在支持HTML5的瀏覽器中使用SVG繪圖,在不支持HTML5的IE中使用VML繪圖,因此保障了瀏覽器兼容,並且能實現很是漂亮複雜的圖形與動畫。簡直是神器。因而花了大概一個禮拜時間學習,總結,寫了些Demo。因此若之後的項目中如有圖表顯示的需求,Raphaël.js便能發揮威力了。緩存
4、項目中的JavaScript服務器
以前在某個項目中,看見一個頁面中寫了一千多行Js代碼,沒有任何的封裝。那樣的代碼醜陋不堪,簡直無法維護。而JY軟件的Js都是使用到了簡單的模塊化方法。以後順着這個的方向,對Js面向對象和模塊化作更深刻的學習。
5、Bug修改的問題
以前公司Bug是程序員自測的。沒有比較靠譜的對Bug處理的流程。因此改起Bug來很是亂。JY軟件的Bug處理流程與使用Mantis對Bug進行管理,雖然比較普通,但對於我自身倒是成長。
2、其餘技術的學習
如下對下半年所學的其餘重要技術作一個簡單的總結:
一、Java基礎的更深刻的學習
泛型:以前對Java中的泛型太忽視了,其實泛型有不少難點。
NIO:2012年年末的時候,接觸過網絡通訊方面的編程工做。那時因爲對網絡通訊沒什麼概念,因此那個項目是使用的BIO的編程模型,那時知道這種編程模型,效率上頗有問題。因而下定決心必定要把NIO搞定。
多線程框架:對Concurrent框架作了一個學習總結。項目中不多遇到多線程,但多線程編程確實很是難。
JavaFx 2.x:JavaFx很是漂亮。能夠以相似HTML/CSS的方式構建界面。比起Swing,JavaFx靠譜太多了。最有趣的是JavaFx2中內置了一個Webkit組件。惟一不足的是沒法實現彈出窗。因此實際工程中須要結合Swing,但願在Java8中,JavaFx能夠更給力。
2、通訊服務器:OpenFire與Apache Mina2
對OpenFire的學習更可能是在XMPP協議,包括使用Smack框架讓客戶端與Openfire服務器交互。
Mina2的學習是對Java NIO學習的延續。因爲NIO編程比較繁雜,Mina2經過封裝NIO,提供事件機制,使異步非阻塞的通訊變得容易。OpenFire的底層就是使用Mina2寫的。幸運的是JY加密系統中,能夠對Mina加以實踐。
三、Web推送技術:Comet與BOSH
Comet是學習Servlet3、多線程的源動力。在瞭解這種機制後,異常興奮,簡直太神奇了。經過必定時間的學習瞭解到長鏈接的形式進行服務器推送存在不少問題。以後瞭解到長輪詢即BOSH,最初編寫Demo是使用Servlet3實現服務器端的,在學習OpenFire對這種長輪詢的方式增長了信心。
4、構建工具的學習:Ant與Maven
JY的項目中使用了Ant,因此學習了下,很簡單。收穫是,認識到之前作項目確實過於依賴IDE了。
學Maven是爲了接觸更多的開源項目。不少開源項目下載下來後,基本都看不懂,由於大多數開源項目都是用Maven構建的。Maven構建項目確實是有優點的。最明顯的就是Maven存在有模塊化的思想。目前只是知道怎麼用Maven,如何搭建私服,還須要繼續學習。
5、Web標準
table佈局或者div+css的佈局,都是對HTML,CSS的誤解。下半年看了《編寫高質量代碼:Web前端開發修煉之道》本來繁雜的Web有了小清新的感受。包括HTML語義化,CSS框架,Js/HTML/CSS解耦合。這些不能說是技術,但很重要,這是寫出優秀前端代碼的必要條件。
6、JVM的學習
參照《深刻理解Java虛擬機》進行學習的。主要是針對JVM優化去看的。因爲缺少測試與實踐,體會不是很深,學的不理想。須要有時間繼續深刻學習。
7、Linux運維與系統架構
從51CTO瞭解到的Linux培訓。以網絡視頻的形式進行學習。報名費交的有點心疼,但課程豐富。對學習如何構建一個高性能網站和計算機原理很是有幫助。課程很長,目前還在學習中。
8、工做流引擎與搜索引擎的學習
l 工做流上半年初步學習了一下jbpm,但考慮到jbpm3,4已經沒人維護了,因此下半年稍微折騰了一下Activity。大概瞭解是個什麼東西,怎樣簡單的使用,但如何在項目中用好,就不知道了。
l 一個成熟的搜索引擎網站是極端複雜的,Google、Baidu的技術更是不可想象。網絡爬蟲尚未仔細學習。對Lucene也只有初步的認識,距離實際的應用還差的很遠。
這兩樣東西的學習,在2013年進行的很失敗。但這兩個方向每個拓展開來都是極其複雜的,並且不在實際項目中去使用這些東西也很難真正去理解這些技術。
9、其餘
l 動態代理:簡單的學習了Cglib。
l JQuery:本身寫了幾個簡單的UI插件。初步閱讀了一下JQuery源碼。
l Git:分佈式的版本管理。有了一些瞭解與使用。
3、對目前JY軟件項目的一些建議
如下建議可能有點站着說話不腰疼,但這確實我真實的想法,若有不妥的,還望寬容並給出糾正。
一、但願能夠增強文檔的建設
來到公司,不少東西都是看代碼和數據庫連蒙帶猜的去理解。對於一個新人,這太痛苦了。我以爲須要增強的主要是如下兩點:
(1)需求文檔,一些概念性的東西,但願能夠有一個標準的定義。而目前接觸到的文檔,更多的只是頁面設計。
(2)項目裏的註釋,特別是公用代碼的註釋,實在太少,不少狀況下,我須要看實現代碼才能知道某個方法是幹什麼用的。
二、若是有新的項目,但願可使用市場較爲流行優秀技術。
好比我一直以爲Struts2實在及不上Spring MVC優秀。好比JavaEE的版本。又好比jQuery的版本,MySQL版本等等。
三、團隊的工做氛圍,但願能夠活躍一點。
JY軟件的工做比我以前公司的工做要輕鬆不少,但工做卻沒有快樂多少,有時甚至會有點尷尬。半年時間不知道多少次,一天沒說一句話。這阻礙了同事間的交流,也間接的下降了我工做的熱情。我不知道這種氣氛能夠用什麼方法解決,我只是提出各類問題,但願能夠獲得領導的重視。
四、Hibernate的使用
目前項目中的Hibernate是最讓人受不了的地方。項目中大部分實體類都是一張表一個類,字段映射到字段,沒有創建one-to-many之類的靜態關係。對象與對象的關係僅僅是靠所謂的數據庫文檔維護着。這樣使用Hibernate頂多算是表模塊,並無作到ORM。HQL,Criteria也發揮不出威力,而封裝的SearchBean也遠遠不如Hibernate離線查詢靈活。在涉及一些多表查詢的狀況下,仍是須要藉助SQL完成,可是SQL就失去了Hibernate跨數據庫的特性。
我以爲對於企業級應用,速度的要求不是特別嚴苛,使用OpenSessionInView是很是不錯的選擇。另外延遲查詢是Hibernate很是好的特性,我以爲徹底可使用。最後不明白爲什麼項目中沒有使用二級緩存。
Hibernate確實比較難用,因爲Hibernate的使用方式是框架搭建初期就決定了的,因此有些可能已經沒法改變了。但我堅持個人觀點,速度不是Hibernate的優點,優雅的架構,易維護的代碼纔是Hibernate最犀利的特性。
4、我在工做中的問題
1、牙齒的問題
因爲年末牙疼,因此請了好幾回假去醫院補牙,很是麻煩。佔用了工做時間。
2、遲到的問題
因爲天氣愈來愈冷。電瓶車越開越慢。總會比預約的時間差點。但說到底仍是在睡覺與起牀的問題上不夠堅定。這個問題在2014年必定最優先的改正掉。
5、2014上半年的初步計劃
1、認真的完成JY加密系統服務器端的開發。
2、2013年下半年的學習到的技術多而雜,部分掌握的還很是膚淺,距離「熟悉」還有很是遠的距離。因此不斷的複習與實踐是必須的。
3、加深JavaScript等前端只是的學習。包括學習一些新技術如Node.js,Bootstrap等。
4、Linux運維方面的知識繼續學習。其中包括加深MySQL的學習。
5、學習MangoDB。
6、複習Python,Python有些東西確實是忘的差很少了。
總的來講,在2013下半年在JY軟件的工做與學習收穫很是大,2014年繼續前行。
------------------------------------------------------------------------------------------------------------------------------------------------------------
以上總結是公司要求寫的,須要上交的。基本反應出了個人學習情況和我對現公司的一些見解。下面補償一些:
工做流引擎與搜索引擎能夠先放一下,畢竟比較難。
Linux那塊必須加快速度了。
JVM必須繼續增強。