專家的乾貨:從零開始學 Java 如何速成!

編程語言 Java Memcached 程序員 廣州中星 2017-04-10

剛剛走到門口的兄弟們,我們不妨想一想,我們學Java是為了什麼?是為了做Java程序員,還是以Java程序員為入口,進入互聯網行業。眼界的不同,會決定我們思考問題的方式和努力的程度。所以作為站在Java門口的兄弟們,首先要考慮的是自己職業規劃的問題。不是要不要做Java程序員,而是要不要進入互聯網行業,只有明確了這一點我們才不會在潛意識中束縛自己,才不會在將來與很多機會擦肩而過時還沒有建立起敏銳的嗅覺。當然,這個問題只能由我們自己來回答,因為任何一個行業都沒有好與不好,而只有適合與不適合。但可以肯定的一點是,作為我們這些沒有任何背景的普通人,想通過職業生涯的發展逐步改善自己的生活,基本上都需要在一個相對固定的行業中慢慢積累,包括技能、人脈、資歷等各個方面,不管是打工還是創業。也就是說,大跨度的轉行會導致你在之前行業中的積累煙消雲散,跨行之前你一定要想清楚自己是否真的要從零開始。

專家的乾貨:從零開始學 Java 如何速成!但是對個人而言,隨著技術的不斷髮展,Java程序員入門的門檻也是越來越高,現在和十年前相比已不可同日而語了,將來也只會更加嚴格。也就是說,更大的發展空間其實是來自於對從業者更高的要求。當到達一定程度,工作內容與使用什麼語言關係不大的時候,Java背景的開發者能表現出更優秀的專業素質和更強大的思維能力。行業的發展為我們提供了展翅飛翔的廣闊天地,而達到什麼高度就完全靠我們自己了。下面簡單聊一下關於Java那些事兒!

設計理念

主要理念用一句話概括就是:提供一套“小而美”的API。API需要對程序員友好,增加新功能時能讓程序員們快速上手。

為了保證核心接口足夠小,最頂層的接口(也就是Collection與Map接口)並不會區分該集合是否可變(mutability),是否可更改 (modifiability),是否可改變大小(resizability)這些細微的差別。相反,一些操作是可選的,在實現時拋出UnsupportedOperationException即可表示集合不支持該操作。集合的實現者必須在文檔中聲明那些操作是不支持的。

為了保證最頂層的核心接口足夠小,它們只能包含下面情況下的方法:

00001.

基本操作,像之前說的“增刪改查”

00002.

00003.

There is a compelling performance reason why an important implementation would want to override it.

00004.

此外,所有的集合類都必須能提供友好的交互操作,這包括沒有繼承Collection類的數組對象。因此,框架提供一套方法,讓集合類與數組可以相互轉化,並且可以把Map看作成集合。

兩大基類Collection與Map

在集合框架的類繼承體系中,最頂層有兩個接口:

·

Collection表示一組純數據

·

·

Map表示一組key-value對

·

一般繼承自Collection或Map的集合類,會提供兩個“標準”的構造函數:

·

沒有參數的構造函數,創建一個空的集合類

·

· 專家的乾貨:從零開始學 Java 如何速成!

有一個類型與基類(Collection或Map)相同的構造函數,創建一個與給定參數具有相同元素的新集合類

·

因為接口中不能包含構造函數,所以上面這兩個構造函數的約定並不是強制性的,但是在目前的集合框架中,所有繼承自Collection或Map的子類都遵循這一約定。

開試寫代碼吧

一、在src目錄下建立memcached.properties配置文件

這個文件是用來存 memcached 服務器的地址、端口和權重的信息的。

memcached.connectionPoolSize=10

memcached.failureMode=true

#server1

server1.memcached.host=127.0.0.1

server1.memcached.port=11211

server1.memcached.weight=4

#server2

server2.memcached.host=127.0.0.1

server2.memcached.port=11212

server2.memcached.weight=6

我這裡是配置兩臺服務器用以測試,不同的權重。具體文件請訪問 https://github.com/mafly/SpringDemo/blob/memcached/src/memcached.properties 查看

所有這些寫法都是二維數組!

class Test {

int[][] a() { return new int[0][]; }

int[] b() [] { return new int[0][]; }

int c() [][] { return new int[0][]; }

}

是的,這是真的。儘管你的人肉解析器不能馬上理解上面這些方法的返回類型,但都是一樣的!下面的代碼也類似:

class Test {

int[][] a = {{}};

int[] b[] = {{}};

int c[][] = {{}};

}

是不是覺得這個很2B?想象一下在上面的代碼中使用JSR-308/Java 8的類型註解。 語法糖的數目要爆炸了吧!

@Target(ElementType.TYPE_USE)

@interface Crazy {}

class Test {

@Crazy int[][] a1 = {{}};

int @Crazy [][] a2 = {{}};

int[] @Crazy [] a3 = {{}};

@Crazy int[] b1[] = {{}};

int @Crazy [] b2[] = {{}};

int[] b3 @Crazy [] = {{}};

@Crazy int c1[][] = {{}};

int c2 @Crazy [][] = {{}};

int c3[] @Crazy [] = {{}};

}

類型註解。這個設計引入的詭異在程度上僅僅被它解決問題的能力超過。

為了更詳細地闡述為現代軟件工程師廣泛使用的現有Java框架,我們決定引用Apache的Struts 1(Struts 2)的後續版本。這個Java框架對於那些構建當代Java EE Webapp的工程師來說真是一個不錯的發現。Apache Software Foundation為開發人員提供了一個廣泛的工具,用於創建面向企業的web應用程序,優化了從開始到最終點的開發過程以及後期維護。如果你正在對高負載系統(如廣播門戶)愁眉不展,那麼這是一個正確的選擇。

由於Struts 2實現好了的Action類(普通POJO對象),測試編寫代碼所需的工作量減輕了。使用框架的API,耦合變得更容易,這也有助於調整攔截器。

在2017年各種流行的Java框架中選擇合適的概念可能是一個麻煩的任務,因為每個公司在選擇獲勝方法時都會堅持他們自己基於web和移動app創建的思想。無論你使用的是什麼確切的框架,謹記許可證,易於安裝,網絡的活躍程度,以及手邊的文檔等。根據項目類型,有時,明智的做法是將所有工具放在一起挑選,但很多時候,“減肥”和轉向一個輕量級的概念更有意義。

另一個問題是,你忙碌的小夥伴們是否準備好學習,是否有空餘時間分配給知識汲取。通常,將開發交給遠程團隊並獲得可盈利產品是非常值得的。快樂開發!

相關推薦

推薦中...