John Squirrels
等級 41
San Francisco

舊關卡 06

在 Toto sisi 群組發布
個成員

Java 開發者路線圖

我的一個朋友想知道為什麼開發人員總是那麼高興。她給出的答案簡單而令人驚訝:他們做自己喜歡的事並賺大錢。 歡迎來到軟件開發者的世界。 舊級別 06 - 1

軟件開發人員的工資

我想告訴你開發人員的薪水。土地如何取決於工資,你應該去哪里工作,你不應該去哪裡。如果你不是開發者,自己去摸索,可能會得到一個頗具爭議的數據。重點是,影響開發人員薪水的主要因素不是資質,而是就業地點。有時,在同等資格水平的情況下,好工作地點和壞工作地點之間的差異可能是 2 到 10 倍(!)每個給定的時刻,您的資格是不變的。你不可能在一個月內獲得兩倍的資格並獲得兩倍的報酬。但是你可以在一個月內換一個工作地點並獲得兩倍的薪水。在兩個月的流動中,我的工資翻了三倍(!)——難忘的經歷。那麼,讓我們找出哪個地方最好。
  1. 公司主營業務是否為軟件開發
  2. 公司是面向全球市場還是本地市場
  3. 主要辦公地點在哪裡:發達國家還是發展中國家
請注意,您工作的城市無關緊要。意思是,如果你在巴塞羅那的收入比你在紐約的朋友少五倍,我提到的因素可能會影響。 

具體數字

由於世界不同地區的薪水不同,我建議以擁有 5 年經驗的 Senior Java Developer 的薪水為起點,並將其稱為“5 year maximum”。下面的所有數字將作為此金額的百分比給出。以下是世界不同城市“5 年最高”薪水的一些示例: 舊級別 06 - 2下面顯示了具有 5 年經驗的 Java 高級開發人員根據他所工作的公司可能賺取的薪水: 舊級別 06 - 3舊級別 06 - 4當前情況最奇怪的是什麼? 一半的程序員在 1 級和 2 級公司工作。 你想知道有什麼收穫嗎? 3級和4級公司有數百個職位空缺。這些公司願意為您提供更高的薪水,通常還有更好的工作條件。我認識兩個 Java Junior,其中一個找到了一份工作,薪水是“5 年最高”工資的 3%(一級公司),另一個找到了一份工作,薪水是“5 年最高”工資的 30%(4 級)。那麼為什麼要少呢? 對程序員的供不應求——不要去工資低的地方工作! 結論 1: Java 開發人員(有任何經驗)的平均工資是“5 年最高”工資的 40%-50%。 結論2:如果你不在1級和2級公司工作,而在3級和4級公司工作,你5年的平均工資大約是“5年最高”工資的90%-110%。

除非你做傻事,否則你能取得什麼

如果你現在開始在編程方面進行自學,你的薪水可能是這樣的: 舊級別 06 - 5

計劃

0-3個月(學生)

你對編程知之甚少。您可能已經在學校或大學基礎水平上學習過它。 您需要做的是學習如何編程和學習 Java。 您的目標是在 3 級或更高級別的公司中獲得 Java 初級開發人員的工作。在計劃的前三個月,您將一無所獲,因為您只是在學習如何編程。但是越早開始越好。最好的時機就是現在。將來,當你有家庭和大量貸款時,重新獲得資格將變得更加困難。為了糾正你的錯誤,你將不得不存錢以支付至少一年的正常生活。不要犯愚蠢的錯誤。

3-15 個月(Java 初級開發人員)

您已經是一名軟件開發人員,並且您的經驗每天都在增長。不要放鬆。在擱置槳之前,您有很多事情要做。 您需要做的是– 學習作為中級開發人員需要的技術。這些是什麼?世界在不斷變化。我會給你很多建議,生活會改變這一切。在網上查找一些職位空缺,看看您需要申請什麼。請務必閱讀 Bruce Eckel 的一本書“Thinking in Java”。 作為 Java Junior Developer 第一年的目標是達到 Java Middle Developer 的水平。沒有人說這很容易,但對於一個以目標為導向的人來說,這是可能的。它會立即將你的工資增加到“5 年最高限額”的 40%(舊金山和倫敦為 5 萬美元,班加羅爾為 6 千美元)。

2 年編程(Java 中級開發人員,一級)

去年你做得很好,現在你是一名 Java 中級開發人員。賺取 Senior Java Developer 薪水的 50%,你可以過得很好。您在工作中被賦予了一些嚴肅的任務,並且您的經驗顯著增加。你將在兩三年內達到 Java 高級開發人員的水平。不用著急。無論如何,您的薪水不會很高。 您需要做的是學習設計模式,閱讀 – McConnell 的代碼大全。完善您的代碼質量和團隊技能。制定每月閱讀 1 本計算機編程書籍的規則。然後,在 4 年內,你將比其他人聰明 50 本書。不要推遲它:你不會得到更多的空閒時間,此外,你很可能會組建一個家庭,或者如果你有一個家庭,它會變得更大。 你的目標就是選擇幾項技術作為Senior Java Developer專攻。你不可能把它們都學完,你知道的。成為單一專業領域的專家總是一個不錯的決定。 舊級別 06 - 6

3 年編程(Java 中級開發人員,二級)

您現在是一名經驗豐富的中級開發人員,並且正在考慮成為一名高級開發人員。它既令人愉快又享有盛譽。你的工資超過“5 年最高工資”的 60%(班加羅爾 1 萬美元,基輔 2.5 萬美元,柏林 4 萬美元,紐約 8 萬美元)。從這一刻起,對像您這樣的專業人士的需求增加了報價。你總能在幾天內找到工作,而且你的收入幾乎不會比現在少。當然,如果你不做任何愚蠢的事情。 你需要做的是繼續研究你選擇的技術。工作得更好。不是為了你的雇主,是為了你自己。申請參與涉及有前途技術的項目(例如 BigData,目前正在撰寫本文)。不管怎麼說,你每天都會在辦公室呆 8 個小時,所以為什麼不多賺點錢呢,更重要的是,你將來需要的是最寶貴的經驗。 你的目標是找到一份新工作。總是可以找到一個好的團隊。您將面臨新的項目和技術。你不需要紮根到你的椅子上。如果您仍在三級公司工作,請考慮進入四級公司。

5 年編程(Java 高級開發人員,1 級

您現在是一名高級開發人員。也許,你不值得,你感覺到了。不過,我還是要祝賀你。你現在是否配得上你的位置並不重要,重要的是你將來配得上這個位置。我想你會同意找到一份好工作更好,在成長到所需的水平之後反之亦然。我希望你沒有忘記我每月讀一本書的建議?現在任何學生都會羨慕你的知識和技能。更具體地說,他會為他們祈禱。試想一下:您的收入可觀,接近“5 年最高”工資的 90%。你可能還很年輕。世界就在你的腳下。 你需要做的是重新評估您選擇的技術。也許,你需要改變專業化。世界變了,技術變了,你在過去兩年裡獲得了相當多的知識。您現在選擇的內容將成為您未來幾年的頭條新聞。是時候選擇您最喜歡的技術了。 你的目標是選擇你的成長方向。他們很多,沒有人能說出所有的名字,但你必須現在就做出選擇。如果您今天做出一點改變,您將在未來得到很大的改變。

6 年編程(Java 高級開發人員,二級)

你已經決定了你的未來,你正在努力實現你的夢想。一個正確選擇的方向以及前進的願望——結果不會長久。恭喜。我很高興看到又有一個人實現了他的夢想。有一個深刻的道理。人們常常高估自己一年能取得的成就,而低估自己五年能取得的成就。回顧五年前。是這樣的。 你需要做的是避免做出不明智的決定,不要偷懶。 您的目標是選擇方向並繼續前進。還是你以為到這裡就結束了?記住你的畢業典禮。這不是結束,只是開始。

你未來專精

舊級別 06 - 7您可以成長為技術專家(上層分支)、管理人員(下層分支)或受聘專業/獨立顧問(中層分支)。這一切都取決於你喜歡什麼。

Java 開發者的職業生涯

開發人員的職業不同於任何其他職業。你不需要成為經理就可以賺到很多錢。高級開發人員的收入經常超過他的經理老闆。你獲得的經驗越多,你與老闆的工作關係就會從“老闆-下屬”轉變為“明星和經理”。被寵壞了知道他們的價值開發商挑選項目和職位空缺。讓我們為自己的人感到高興。那麼,要成為如此高顏值、世界級的熱門開發者,你需要具備什麼條件呢?您必須在最需要的新技術方面擁有豐富的經驗。 如何做到這一點?見下文。 舊級別 06 - 8一旦您找到開發人員的工作,您就會開始發生兩件事;儘管如此,它們並不總是可見的。 1、你在真實項目中積累經驗,快速成長。這份工作一年給你的經驗比大學 5 年還多。經驗是一個如此重要的問題,以至於他們在發布的職位空缺中寫著“需要 3 年經驗的 Java 開發人員”。 2. 你每天學習新技術 8 小時,並因此獲得豐厚的報酬。你真的不能高估這個事實。在某些情況下,你獲得的技能非常寶貴,你本可以免費工作來獲得這些技能,甚至付錢。如果您明智地選擇自己從事的項目,那麼您將擁有令人頭暈目眩的軟件開發人員職業。 那麼……選擇什麼? 經常發生的情況是,您不知道哪種技術會有用,所以您開始在“喜歡和不喜歡”和“流行趨勢”上進行選擇。你可能會走運,也可能不會。所以你最好事先知道你的目的地。程序員的發展方式有很多種,因此,為簡單起見,我將選擇其中的幾種,並寫下我對未來情況的看法。不要認為這種模式是強硬路線;它只是對所呈現事物的簡化視圖,以使其清晰明了。

兩百歲的開發者

如果您最喜歡編程,那麼這就是您的方式:高級開發人員,然後是技術主管開發人員和架構師。這樣您就可以作為開發人員工作 50 年或更長時間。在大多數情況下,高級開發人員和技術主管開發人員的薪水超過他們的經理。所以讓你的錢物有所值。

經理。你很幸運你不像其他人

你跑到敵人那邊去了。只是在開玩笑。如果你發現了出色的組織能力,那麼你的方式是:團隊領導,然後是項目經理。它會讓你有機會成為部門主管並開辦自己的公司。那就是你想要的,不是嗎?

家是心之所在

舊級別 06 - 9如果你已經組建家庭,那麼,也許你希望在一個經濟強大的國家過上美好而安靜的生活。也許您考慮搬到加拿大、美國、瑞士甚至澳大利亞。你有出色的技能和需求的職業。您不必從洗碗開始。您將從一名 Java 高級開發人員開始。應該是,賺大了。不錯,哈?

見那不勒斯而不死。

你還沒有家庭,但你喜歡旅行。oDesk 就是您的全部。找一個客戶,同意每小時 20-50 美元的費率,帶上筆記本電腦就可以走了!你的薪水足以在世界任何地方生活。為什麼不立即開始讓您的夢想成真呢?

我不想編程,我是個女孩..

如果你是女孩,你可能需要休產假。這聽起來像是一個性別歧視的笑話,確實如此。儘管如此,其中還是有很多常識。最有可能的是,休產假後您將能夠獲得大量產假津貼(在社會保障較高的國家)。有些公司不支付任何費用,有些公司支付高額費用。我的一個學生在休產假期間拿到了年薪的三分之一。這發生在 2009 年春季,在裁員期間。一年半後你可能會回來,至少是中級開發人員。

6級

舊級別 06 - 10

1 艾麗。對象可見性。無效的

- 嘿,阿米戈! - 嗨,艾莉!你今天能告訴我一些有趣的事嗎? - 今天給大家講講對象的生命週期一個對象創建後,它會一直存在(存在),直到至少有一個變量存儲了它的地址(至少有一個對象引用)。如果不再有引用,那麼該對象就消亡了。示例: 舊級別 06 - 11- 對象 «cat Tommy» 自創建以來僅存在一行。在下一行中,僅存儲其引用的變量被設置為 null,並且 Java 虛擬機銷毀該對象。 - 對象 «cat Sammy» 創建後存儲在變量 cat1 中。或者,更確切地說,cat1 存儲對該對象的引用。然後將此引用下方的幾行複製到變量 cat2。之後,對另一個對象的引用存儲在 cat1 中,而對 «cat Sammy» 的引用僅保留在 cat2 中。最後,在方法 main 的最後一行,將對象的最後一個引用設置為 null。 - 對象 «cat Maisy» 自創建之日起就存在於唯一一行中。在下一行中,變量 cat2 被分配了另一個值,並且對 «cat Maisy» 的引用丟失了。該對像變得不可訪問並被認為是垃圾(已死)。 - 對象 «cat Ginger» 從創建到方法結束的那一刻就存在。在方法退出的運行時,變量 cat1 將被銷毀,之後對象 «cat Ginger» 也將被銷毀。 - 天氣晴朗。 - 但是,如果您在某種方法中創建對象 Cat 並將其引用存儲在類變量中,那麼只要存在另一個現有對像對它的引用,Cat 就會存在。- 通常,對像不會立即被銷毀。Java 虛擬機偶爾會激活垃圾收集以刪除未使用的對象。我稍後會告訴你。- 如果您希望某個變量停止存儲對象引用,您可以為其分配或對另一個對象的引用。

2 教授,垃圾收集

舊級別 06 - 12- 嘿,阿米戈!這是有關 Java 中的垃圾回收的有用鏈接。這當然不是我的優秀講座,但這已經足夠了: Java 垃圾收集基礎知識

3 艾莉,敲定

- 再一次問好!現在我將向您簡要介紹方法finalize()。該方法在對像被銷毀之前由 Java 虛擬機在對像上調用。其實這個方法和構造函數是相反的。在此方法中,可以釋放對象使用的資源。- Object 類有這個方法,因此,每個類都有它(Java 中的所有類都被認為是從 Object 類繼承的,並且包含它的方法的副本)。如果您在類中編寫 finalize() 方法,它將在此類對像被銷毀之前調用。示例: 舊級別 06 - 13- 知道了。 - 但有一件事。Java 虛擬機自行決定是否調用此方法。大多數情況下,在方法中創建並在退出後聲明為垃圾的對象會立即​​銷毀,而無需調用任何 finalize() 方法。此方法是控制外部(JVM 之外的)資源分配的另一種工具。當您希望對像被銷毀時,您最好釋放所有使用的外部資源並重置存儲的引用。我將分 10 個或 20 個級別向您介紹此方法的優點及其工作細節。同時,您應該知道兩件事:存在這樣的方法,並且(令人驚訝!)它並不總是被調用。

4 Elly,對像生命週期

- 我還想告訴你一些關於對像生命週期的有趣事情。在 Java 中,意外丟失對像是非常困難的;如果你有一個對象引用,就意味著這個對象肯定是活的。 - 在對象引用中存儲一個數字——該對像在內存中的地址。您無法更改、增加或減少該數字。當內存中只有地址時,您無法創建引用。您只能創建一個新對象並將其引用分配給一個變量。這是獲得新參考的唯一方法。 - 我懂了。也就是說,如果我將所有對象引用設置為 null(擦除),我將永遠無法獲取對象引用並訪問它? - 是的。但通常情況恰恰相反——有太多未使用的活動對象。大多數程序在運行時創建許多對象並將它們存儲在不同的列表中,但從不清理這些列表。 -大多數情況下,程序員將不需要的對象標記為“已刪除”,僅此而已。沒有人關心將他們從名單中刪除。因此,大型 Java 程序往往會膨脹 - 越來越多未使用的對象仍然存在於內存中。- 就這樣。以後我會一直提請您注意未使用的物品並妥善處理它們。 - ОK,謝謝。您已經清除了一些關於參考文獻的事情。

5 Diego,對像生命週期任務

- 嘿,阿米戈!這裡有幾個任務給你:
任務
1個 1、Cat類的finalize()方法在Cat類中
寫一個方法protected void finalize() throws Throwable
3個 2. Cat 和 Dog 類以及每個類的 finalize() 方法
在每個 Cat 和 Dog 類中編寫一個finalize()方法,它向屏幕顯示一條消息,表明對像已被銷毀。
3個 3. 5萬個貓類對象和5萬個狗類對象
循環創建5萬個貓類對象和5萬個狗類對象。(Java虛擬機會銷毀不用的對象,所以finalize()方法至少會被調用一次)。
4個 4. 貓計數器
在Cat類構造函數[public Cat()]中,將貓計數器(同類靜態變量catCount)加1,在finalize()方法中減1。

6 Elly,靜態類和方法

- 這是一個有趣的新話題。我想告訴你靜態變量和方法。 - 哦,我已經聽說過靜態變量。我想,關於靜態方法也是如此。但我想知道更多細節。 -在類中聲明變量時,我們指定這些變量是否在單個共享實例中創建,或者是否有必要為每個對象創建它們的副本。默認情況下,為這個類的每個對象創建一個類變量的新副本。它看起來是這樣的: 舊級別 06 - 14- 雖然變量cat1.namecat2.name在同一個類中聲明 - Cat,但它們存儲不同的值,因為它們綁定到不同的對象。 - 天氣晴朗。 - 靜態變量存在於單個實例中;您需要使用類名來訪問它: 舊級別 06 - 15- 這也很清楚。 - 類方法也分為兩類。普通方法在對像上被調用並且可以訪問該對象的數據。 靜態方法沒有這樣的訪問權限,因為它們只是沒有對象引用。靜態方法能夠訪問此類的靜態變量或其他靜態方法。 - 靜態方法不能訪問非靜態方法或非靜態變量! - 為什麼這樣? - 每個普通的類變量都放在一個對像中。任何方法只有在引用該對象時才能訪問此類變量。這樣的引用不會傳遞給靜態方法。 - 普通方法呢? -向普通方法傳遞對調用此方法的對象的隱藏引用。存儲此引用的變量稱為this。因此,該方法總是可以獲取其自身對象的數據或調用同一對象的另一個非靜態方法。-將null傳遞給靜態方法而不是對象引用。因此,靜態方法無法訪問非靜態變量和方法——它只是沒有指向它們綁定到的對象的引用。 - 我懂了。 - 這就是普通非靜態方法的工作方式: 舊級別 06 - 16- 這就是靜態方法的工作方式: 舊級別 06 - 17- 如果使用關鍵字 static 聲明變量或方法,則它們是靜態的。 - 如果這些方法如此有限,那麼這些方法有什麼好處呢? - 這種方法也有其優點。- 首先,您不需要傳遞任何對象引用來訪問靜態方法和變量。- 其次,有時變量必須是獨一無二的。例如,變量 System.out(來自類 System 的靜態變量)。- 第三,有時需要先調用方法才能創建任何對象- 在什麼場合? - 為什麼您認為方法main被聲明為靜態的?在類加載到內存後立即調用它,然後才能創建任何對象。

7 Risha,靜態類和方法

-除了靜態方法還有靜態類。稍後我們會考慮這種情況,我將向您展示一個示例: 舊級別 06 - 18- 您可以根據需要創建任意數量的 Cat 類對象。與存在於單個實例中的靜態變量不同。- 在類聲明之前修飾符static的主要目的是保持類Cat和類StaticClassExample之間的關係。一般來說,類 Cat 未綁定(沒有隱藏引用)到StaticClassExample 對象,並且無法訪問普通(非靜態)StaticClassExample 變量。 - 所以我可以在其他類中創建類? - 是的。Java 使這成為可能。現在,不要想太多。稍後我會解釋一些其他的事情,一切都會變得容易一些。 - 但願如此。

8 Diego,靜態方法任務

- 嘿,阿米戈!以下是關於靜態方法的一些有趣任務:
任務
1個 1.Cat類和靜態變量catCount在Cat類中
寫一個靜態變量int catCount 。創建一個構造函數 [ public Cat() ],其中給定變量應增加 1。
2個 2. 靜態方法:int getCatCount() 和 setCatCount(int)
向 Cat 類添加兩個靜態方法:int getCatCount( ) 和setCatCount(int),使用它們可以獲取/更改貓的數量(變量 catCount)
3個 3. 類 Util
實現一個靜態方法double getDistance(x1, y1, x2, y2)。它應該計算點之間的距離。使用方法double Math.sqrt(double a)計算傳入參數的平方根
4個 4. ConsoleReader 類
編寫一個 ConsoleReader 類,它有 4 個靜態方法:
- String readString()從鍵盤讀取字符串
- int readInt()從鍵盤讀取數字
- double readDouble()從鍵盤讀取小數
- void readLn ()等待按下回車 [使用 readString()]
5個 5. StringHelper 類
編寫一個StringHelper 類,它將有2 個靜態方法:
- String multiply(String s, int count)應該返回字符串s 重複的次數。
- String multiply(String s)應該返回重複 5 次的字符串 s。

示例:
Amigo → AmigoAmigoAmigoAmigoAmigo

9 教授,對象靜態作用域和生命週期

舊級別 06 - 19- 又是我。不幸的是,我今天不能給你任何鏈接。那些偉大的演講在某個地方丟失了。恐怕今天你得自己做。但你最好多聽聽 Elly 和 Risha 的話,他們總能教給你一些東西。然而試試這個:對像生命週期

10 胡里奧

- 嘿,阿米戈!你今天做得很好。這就是為什麼我不能給你更多。來,坐下,表演開始:

11 松鼠船長

- 你好,士兵! - 早上好先生! - 我有一些好消息要告訴你。這是一個快速檢查以加強您的技能。每天都這樣做,你的技能會很快提高。任務是專門為在 Intellij IDEA 中執行而設計的。
在 Intellij Idea 中完成的其他任務
1個 Cat類和靜態變量catCount在Cat類中
寫一個靜態變量public int catCount 。創建構造函數 [public Cat()]。每創建一隻貓(一個新對象Cat)就讓靜態變量catCount加1。創建 10 個對象 Cat 並顯示變量catCount的值。
2個 2.靜態貓
  1. 在 Cat 類中添加一個公共靜態變量cats (ArrayList<Cat>) 。
  2. 每次創建一隻貓(一個新對象 Cat)時,讓這只新貓被添加到變量cats中。創建 10 個對象貓。
  3. printCats()方法應該顯示所有的貓。您需要在方法中使用變量 cat。
提示:
要創建cats變量,請使用代碼行:
public static ArrayList<Cat> cats = new ArrayList<Cat>();
3個 3. 移動一個靜態修飾符
移動一個靜態修飾符以便代碼編譯。
4個 4. 最少數量的靜態關鍵字
添加最少數量的靜態關鍵字以使代碼編譯並使程序成功完成。
5個 5.有什麼新想法嗎?讓我們想想...
  1. 在類Solution中寫一個public static class Idea
  2. 在類Idea中寫一個方法public String getDescription()來返回任何非空消息
  3. 在 Solution 類中創建一個靜態方法public void printIdea(Idea idea)來顯示對想法的描述——這就是方法getDescription()返回的內容
6個 6. KissMyShinyMetalAss
編寫一個名為 KissMyShinyMetalAss 的類。創建此類的一個對象,然後將其顯示到屏幕上。
7 7.三個靜態變量名
寫3個公共靜態變量:String Solution.name , String Cat.name , String Dog.name
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言