大家好,我是帥氣小伙。非常抱歉,在實習了45天之后才跟大家分享。在這45天的實習生活中,記錄了我如何從一個android開發者轉型成為java后臺開發者。記錄了我如何從一名在校大學生轉變為一名技術工作者的歷程。在此獻上此文,與君共勉。本文的寫作目的并不是想表達我有多么厲害,而是旨在分享我的感悟。
我調整了我的技術心態,抱著欣賞的眼光去接受新的知識
入職公司的第一天,我看到了我的座位表,我被安排到了Java后臺開發的位置上。顯然這是一個前所未有的挑戰,因為在此之前我沒有任何開發服務端的基礎。JS,Html,Jsp,Spring等等這些web技術我全部是零。我靜靜的回到了座位,迫不及待地問了旁邊的android組,要來了他們的APP,然后用jadx反編譯了一遍,看了一下他們的技術框架。MVP,retrofit2.0,Rxjava等等。我多么希望能夠參與到他們的項目,畢竟這些都是我熟悉的東西。可是我現在的工作崗位是Java后臺。而經理似乎也不知道我之前的技術棧。上來就給了我一個基于SSM的后臺項目SVN權限。吩咐我先熟悉一下公司的代碼,等入職培訓完之后再給我們分配任務。
我試圖多次地給經理暗示,我是學android的,可是經理總是說,技術都差不多的吧,沒關系,慢慢來。看來是沒辦法了轉崗位是轉不成了,那就去慢慢地接受了。我給自己的理由是:實習6個月,學一門新的技術,不虧啊!于是我下了一個(IntelliJ IDEA )開始了我的java后臺開發之路。
我用做android的思維去學習java后臺
我的一篇文章《安卓教你如何山寨APP》這是我學習Android入門的思維。
我的思想是先從導入項目開始,而不是從建項目開始。于是我寫了一篇入門Java后臺的文章,記錄的是我熟悉SSM框架的過程。《零基礎入門Java后臺SSM框架》
很多人都會質疑這種學習方式,認為這只是在搬磚,實際學到的沒多少,學習必須循序漸進,沒學會走路就想去跑步,急于求成。這個問題,我一直跟我的舍友在爭論。但是后來我不再與他爭這個話題了。原因是,我很快就能做項目了,在項目實踐中認識底層,而他卻在Jsp Servlet Spring 這些枯燥的知識點徘徊。我否認學編程從基層學起的觀點。可是在正式走上了工作崗位之后,你又有多少時間循序漸進呢?是的,公司并不會在乎你懂不懂,只在乎你能夠在什么時候實現這個功能,如果你實現不了,那就不好意思了,要換人了。天下編程,為快不破。就這樣我開始接觸公司的項目,并在公司的框架中,實現一個模塊的功能。
我的第一個任務
結束了一周的入職培訓,我接受到了一個任務,就是在原有的系統中加入一個系統日志模塊,記錄下用戶的操作記錄(創建,刪除,修改),在組長的提示下,他告訴我,這個系統是從一個開源項目做的二次開發
我的任務就是:將里面的日志模塊,獨立出來,集成到現有的系統。
這個開源項目的框架是
spring+springmvc+hibernate+shiro+quartz+maven+easyui
而公司的項目框架是
spring+springmvc+mybatis+shiro+maven+easyui
顯然在這個搬運的工程中,我會了解到
shiro的權限管理機制
hibernate和mybatis這兩個數據持久層框架。
而且需要做一個攔截器,攔截用戶的(創建,修改,刪除)的Action。
easyui的datagrid
很不幸,我在github下載回來的代碼,不能運行,我只能通過項目的文件結構猜測。
要搬運的東西有如下
1.攔截器
2.日志模塊的Controller
3.日志模塊的jsp文件
4.日志模塊的數據表
這個任務,我大概用了4天的時間,如果你敢興趣,不妨去將這個框架轉變為ssm。我相信你會有很大的收獲。
我和高級Java工程師的故事
坐在我旁邊的是一名有10年Java開發經驗的工程師,第一天,回來上班,我就問了他一句:“你也是實習生嗎?”,爆炸!之后的一個星期,我們似乎沒有說過一句話。。。
在一次的項目討論中,我非常有幸能跟他合作開發項目。
事情的起因是:
公司有個項目,原本是要在Web應用中運行一個Java做的桌面版程序(Swing做的),但是由于這種技術在瀏覽器支持不太好,而且不能有效地控制用戶對數據的操作權限。于是總監決定,把這個應用程序作為一個桌面版的工具(通過拖拽的方式動態生成一個表單,而這張表單就擁有了自己的數據庫表,用戶可以修改,增加里面的內容),恕我不能上圖(保密協議的)。而我負責做一個后臺界面用于展示這個頁面給用戶。當然這個頁面是動態的。你只需要通過桌面程序導入一個ZIP包(HTML,js,css),然后就能生成一個jsp頁面。還有提供手機訪問的restful接口。
我是如何獲得了這個任務?
這一次休息的時間,他問我能不能幫他一個忙,你測試一下這個地址,能不能在你電腦中打開(就是在瀏覽器中打開java桌面程序),后來我利用休息的時間幫他完成了測試,并找到了原先不能運行的原因(瀏覽器要運行Java桌面程序,必須安裝下面兩個插件,而谷歌是不支持的)
從此,我獲得了公司大部分源代碼的訪問權限。說這個我想表達的是,做為一個新人,你不能害怕去接受任務,你要樂于助人,主動學習,別人才會高看你一眼。
員和猿的區別是什么?
員和猿的區別是:可以快速使用工具,而且會制造工具;
這個是高級java手把手教學我領悟到的,越來越多的IDE,讓編程越來越方便。但是很多時候,我們對IDE的理解僅僅是一個會智能提示的編輯器和一個能夠讓程序運行起來的工具。當然你確實學會IDE的主要功能。但是沒有把這款工具運用到極致。就拿IntelliJ IDEA 這個工具來說吧。
idea自帶maven工具,idea自帶數據庫瀏覽,idea自帶版本控制插件
說這些,我并不是推薦大家使用idea,而是希望大家在使用一款工具的時候,能夠用得溜一點,別用得那么業余。。。就是因為這個工具用得不溜,被高級java罵死了。
說到制造工具,試問現如今的你是否寫過許多重復的代碼,而你是否rebuild過,是否將他封裝成通用的代碼,而我在和高級java接觸的這段時間,我發現他有許多拿來就用的工具代碼。如果沒有,請你現在開始積累,多年以后這就是你的資本。
如何分析分布式是否合理?
回到這個任務,當我把后臺管理的頁面做完后,我準備做手機的restful接口,但是又引發了一場關于分布式的思考。
管理后臺是不提供Restful接口的
云平臺是專門為手機提供服務的,當然他本身也有后臺管理系統。
表單服務是專門保存表單數據的,他只是一個dubbo服務,沒有界面。
現在問題關鍵在于,如果手機App需要拿某一份表單的數據,必須通過管理后臺調用RPC接口這一條鏈,而這個過程中完全不需要操作管理后臺的業務數據,也就是說管理后臺只是轉發。如果管理后臺的服務器宕機了,結果導致表單服務也宕機。這顯然不合理啊。
經過了一番討論,最終的結果變成了這樣
這樣就縮短了回調鏈了,管理后臺只相當于云平臺的客戶端,只是云平的后臺管理界面,而管理后臺宕機并不會影響手機App的服務。
就這樣,我學會了dubbo服務,restful接口是如何去做的,代碼如何去實現。在這個任務里面,我逐漸認識到了其實代碼并不是很重要,關鍵的是有合理的設計,一開始就是沒有設計好,所以導致寫了很多冤枉的代碼。。。
我開始獨立的去搭建框架負責一個新的項目
在此之前,我都是在公司原有代碼的基礎上,去新增一些模塊,但是現在要從零開始搭建(也是從公司代碼演變吧),把原來spring轉變為spring-boot。
于是我將上述的開源項目獨立得分離出來,基于spring-boot,mybatis,shiro。開始逐漸深入理解這個腳手架了。后來發現這個腳手架并不是那么地完美,代碼要寫非常多重復的東西。但是做多了就逐漸理解了MVC這個機制了。
很慶幸,我能夠和總監一起完成這個項目,我必將在這個項目中學會很多新的知識,這個系統主要是用于esb接口的管理的。設計聽起來非常棒,我很期待!!
</2016><2017>未來</2017>
2016年我也不知道做了什么,想不起來了!!
2017年,我希望做的事情:
1.順利畢業
2.順利轉正
3.成為一名偽全棧工程師(安卓+web前后臺)
4.搭建自己的技術博客
總結
這大概是這45天我的學習經歷吧,對這家公司還是挺滿意的(我也不知道別人對我滿不滿意)。算是從Android轉了Java后臺吧。如果大家有對我更好的建議,歡迎批評和指正。每天都是對著電腦,我都發現我自己寫作水平下降了,就寫到這里吧。