天天看點

您需要學習多少Java才能找到第一份工作?

Java國中生可能需要知道什麼才能獲得第一份工作,甚至有資格在一家好的公司中擔任實習生的職位?哪些工具可以幫助Java程式員達到新的水準?您應該學習哪些技術,哪些技術最好堅持下去?

這些問題沒有标準答案,就像沒有一個适合所有人的行動計劃一樣。一些公司正在努力發展,不斷引進新技術并測試該語言新版本的功能,而另一些公司則頑固地堅持舊版本。也有中間選項,也許是大多數。

我經常被問到這個問題,以至于我決定寫一篇文章,然後引用它來回答它。另外,它不僅對那些親自問我的人有用,而且對已經決定(或未決定)将其生活與Java程式設計聯系在一起的每個人都将是有用的。

我使用什麼來源回答本文的主要問題?

為了盡可能完整地回答本文的主要問題,我依靠:

  • 我作為進階Java開發人員的經驗,曾采訪過許多潛在的Java初級人員
  • 我作為導師的經曆(或更确切地說,是我學生的經曆)
  • CodeGym

    Portal對校友進行的一項調查的結果

    網際網路論壇的一些答案

首先:必不可少的Java核心

核心Java通常意味着程式設計語言的基本基礎。它包含以下元件。

Java文法

  • 類,變量和方法
  • 原始資料類型
  • 弦樂 基本運算符
  • 基本結構:循環,分支

Java文法是該語言的一種ABC。學生通過邊做邊學,就像小孩子學習閱讀和寫作一樣。這裡最困難的概念是程式設計原理,例如循環和分支。對于絕對的初學者來說,它們可能很難,但是通常在編寫了一些任務之後,未來的程式員開始對它們有所了解。

92.4%的程式員在獲得Java開發人員或Java實習生的第一份工作之前就已經了解Java文法的優劣。其他的7.6%呢?他們在中級水準上就知道了,很幸運得到了實習生的錄取通知書。但是,這純屬幸運。每個申請人都必須精通Java文法,而且謝天謝地,它既快速又易于掌握。

面向對象程式設計(OOP)

Java和OOP幾乎是同義詞,因為此程式設計語言中的所有内容都是對象。

如果您習慣了過程程式設計,那麼剛開始重新排列和思考對象樣式可能會很棘手。但是,實際上,OOP并不是那麼困難。而且,這是一個非常美麗的概念。編寫大量代碼并同時考慮如何建構對象層次結構很重要。

OOP的主要子主題是類繼承,接口實作,資料和行為的抽象,資料和類實作的封裝,多态和虛拟方法。

從事Java的第一份工作的大多數人(80.3%)熟悉OOP原則并一直使用它們。

但是,“豐富的知識”有時會根據您的經驗而有不同的定義。“我讀了有關OOP的文章,并使用了繼承和封裝。我以為我很了解,但是我意識到我以前似乎知道一些東西,但是不了解細微差别。對抽象水準及其使用方法的真正深刻了解隻有在作為一個大型項目的Java教育訓練生時才出現在我身上。”安迪說,他現在是一家國際外包公司的Java大三。

根據CodeGym Portal的調查,有78.8%的Java初級和受訓人員在工作中經常使用OOP,不時有12.1%的工作,而7.6%的受訓人員很少使用OOP(通常他們會進行單元測試和不同的小任務)。

館藏架構

表示為單個單元的一組單個對象是一個集合。Java為不同的集合提供了一個集合架構。集合基于流行的資料結構:清單,正常和連接配接的,集合,哈希圖等。是以,在研究館藏時,最好也對資料結構再熟悉一點。

主要副題:

  • List
  • Set
  • Map
  • ArrayList
  • LinkedList
  • Queue
  • Deque
  • HashSet,HashMap,HashTable
  • TreeSet,TreeMap學習館藏的主要困難是弄清楚館藏如何運作以及何時使用哪種結構。它來自實踐。另外,在實際工作中的所有衆多結構中,隻有少數幾個被不斷使用。作為教程,重新建立您自己的集合版本可能很有用。幾乎所有(96.9%)的Java國中和受訓人員在第一份工作上都使用收集架構,并且80.3%的受訪者在獲得第一份工作之前就已經知道其收集的情況良好或出色。
    您需要學習多少Java才能找到第一份工作?

異常處理

異常是在執行程式時可能會發生的異常情況。所有異常類都是java.lang.Exception該類的子類型。異常處理機制大大簡化了程式中的錯誤捕獲過程。通常,學生很早就開始使用異常,這個話題絕對值得您關注。

主要副題:

  • 異常處理機制
  • 最終嘗試捕獲
  • 投擲
  • Java中的異常層次結構
  • 已檢查/未檢查的異常
  • 錯誤和異常之間的差別
  • 無法到達的捕獲塊錯誤
  • 手動抛出異常

每個Java教育訓練生和Java初級人員都在工作中使用異常,并且通路員經常問有關此機制的問題。

Java輸入/輸出流

Java使用流執行輸入和輸出操作。流是一種連續的資料流。在Java程式中,您需要經常讀取或寫入資料。對于初學者來說,這不是最簡單的主題,有時它在新手的工作中并不經常使用(它實際上取決于他們從事的項目)。好吧,有22.7%的人從事過Java初級/學員的第一份工作,他們說他們經常使用I / O流,不時使用31.8%,很少使用25.8%。是以,隻有不到20%的人在Java開發人員的第一年完全沒有使用過它們。

主要副題:

  • 位元組流(FileInputStream,FileOutputStream)
  • 字元流(FileReader,FileWriter)
  • 标準流(System.in,System.out)

Java多線程/并發

在這裡,我們擁有了最進階的Java核心主題。幾乎所有學生都在了解和使用多線程方面遇到困難,但是後來,當他們掌握了使用不同線程的技巧時,禅宗開始了,程式員開始了解這種技術在Java中的實作水準以及其有效性。

但是,如果您覺得很困難,那麼多線程是您一開始無需研究的主題。是以,隻有12.1%的受訪者指出,他們在首次提出要約之前就已經很好地了解了該主題,而31.8%的受訪者承認他們根本不了解該主題。接受調查的大多數人(56.2%)表示,他們在開始時就對多線程“有所了解”。是以,在Java初級面試中,多線程可以成為您的競争優勢。由您決定深入研究或獲得初步想法。解決一些編碼問題,并專注于其他主題。

主要副題:

  • 線程的生命周期(新的,可運作的,等待的,定時的等待,終止的)
  • 守護程序
  • 線程同步
  • 處理線程死鎖
  • 線程操作
  • Wait,notify,notifyAll
  • 中斷線程
  • Sleep,yield,join

在擔任Java教育訓練生或初級開發人員的第一年中,有9.1%的人經常使用多線程,不時有36.4%的人使用過,而39.4%的人很少使用它。

Lambda表達式

Java lambda表達式出現在Java 8中,但是初學者經常忽略此便捷工具。Lambdas擴充了Java,進而使函數式程式設計概念可用于該語言。Lambda表達式是一個可以建立的函數,不屬于任何類,您可以将其作為對象傳遞或按需執行。隻有22.7%的受訪者在首次求職前很早就知道過lambda,而48.5%的受訪者估計他們對該主題的了解為“接近零”。同時,超過85%的新程式員表示,他們在第一年就使用了lambda表達式。

主要副題:

  • Lambda,單方法界面
  • 匿名接口實作
  • Lambda類型推斷
  • Lambda參數
  • Lambda功能主體
  • 從Lambda表達式傳回值
  • Lambda作為對象
  • 可變捕獲
  • 方法引用為lambdas

是以,我們可以說,對于任何潛在的Java初級甚至學員來說,都必須具備核心Java知識。當然,如果您完全了解所有主題,而多線程和lambda表達式則要少一些,那麼您可以得到報價。但是,這些主題可以在您尋找工作時成為您的競争優勢。一樣,您很可能需要同時使用兩者。

在我的實踐中,我遇到了一些隻了解基本概念(Java文法和OOP)的人。大多數情況下,他們成為Java教育訓練生,但有時我遇到的人是Java初級技能幾乎為零的人。一方面,他們很幸運:他們實作了成為一名程式員的夢想,可以直接從工作中學習。另一方面,雇主很快意識到他們的技能水準很弱,并且很長一段時間以來,他們接受了相同類型的單調任務,這常常令人沮喪。我對這樣的程式員的建議是要更快地成長,直到您對所有這些都感到厭倦為止。解決實際問題,請閱讀-并進入下一個階段。

算法和資料結構:可疑

學習任何程式設計語言中最有争議的問題之一是學生是否應該學習标準的排序和搜尋算法。一方堅持認為,所有有效的算法早已被編寫并包含在庫中。是以,任何人都可以使用它們。

他們的反對者确信,自己編寫算法是程式員思考方面的​​絕佳練習,此外,這也是對學生中算法存在的一種考驗。我更可能屬于後者,尤其是考慮到在Java初級通路中他們經常被要求編寫一個或另一個算法,有時甚至是寫在一張紙上的事實。盡管算法知識與Java知識本身無關,但我建議所有未來的程式員都緻力于該主題。它不會是多餘的。

另一件事是,在程式員的實際工作中,您很可能不需要冒泡排序算法等。知道可以在哪個庫中找到标準算法将變得更加重要。在調查中,有69.6%的學生聲稱在獲得第一份工作機會之前,他們對分類和搜尋算法的了解和編碼水準良好且平均。

當我們談論Java集合時,我們已經解決了資料結構的問題。同樣,我認為有必要了解他們的體系結構,以便知道在哪裡使用什麼以及為什麼使用。是以,我經常要求我的學生為這種資料結構編寫自己的課程。

同樣,在工作時,每個人通常都使用标準資料結構,而不是全部使用。

單元測試

每個優秀的程式員不僅可以測試自己的代碼,還可以測試代碼,是以,請學習如何為您的代碼編寫單元測試。有時,新手忽略了傾向于System.out.println驗證類型的單元測試(如果您已經嘗試編寫代碼,那麼您知道我的意思)。請記住,單元測試比使用控制台輸出進行檢查要有用得多。單元測試也是公司通常信任新開發人員編寫的第一件事。根據調查,有57.5%的受訪者在首次成功進行Java相關面試之前使用了JUnit,并且超過83%的受訪者在他們的第一個工作年度就已經使用了單元測試。

實用程式庫和有用的元件

一些雇主期望未來的程式員了解許多有助于他們工作的工具和庫。

  • Servlet是擴充伺服器功能的Java軟體元件。
  • JDBC是Java應用程式與資料庫之間互動的獨立于平台的标準。JDBC被實作為JavaSE(标準版)附帶的java.sql軟體包。
  • log4j是最著名的用于記錄消息的庫。它使您可以用Java代碼編寫庫調用,然後在不更改已編寫代碼的情況下靈活地對其進行自定義。
  • 傑克遜/JSON。JSON(JavaScript對象表示法)是一種非常流行的開放标準檔案格式和資料交換格式,而Jackson是Java的高性能JSON處理器。

一半以上的受訪者在獲得第一份與Java相關的工作之前就已經知道這些技術。所有新人在工作中都使用JSON / Jackson,其中大多數人使用JDBC(84.8%)或log4j2(83.3%)。三分之二的受訪者在第一年以Java初級和教育訓練生的身份使用servlet。

  • Guava是Java通用庫的開源集,主要由Google工程師開發。
  • ApacheCommons是一個龐大的Apache項目,專注于可重用Java元件的各個方面。

在學習時,我建議您花時間在log4j,JSON,JDBC(以及SQL和資料庫工具)上。但是,清單和庫中的其他技術也可能有用。

設計和建築模式以及程式設計原理

設計模式是經過驗證的解決方案,可以解決某些特定問題。如果您不認識他們,那麼您會令您的未來雇主感到頭疼。花時間閱讀有關模式并将其應用于實踐。對于建築模式,例如MVC,情況也是一樣。我總是要求我的學生使用MVC建立一些程式。它變得更加困難,但是在那之後,他們知道如何使用它。

同樣,根據KISS,DRY和SOLID原理,閱讀簡單易讀的代碼也将是有益的。老實說,它們很容易了解,但是在實踐中使用它們會花費一些時間。這就是為什麼,當我面試初級職位的申請人時,我從來沒有要求申請人對這些原則有紮實的知識,意識到他們是與實踐相伴而生的。

建構自動化工具,應用伺服器和非Java

大多數IT專業人員都應該掌握其技術和技能。它們與Java沒有直接關系,但我仍會提及它們-在初始級别學習它們并不困難。此外,最好在開始工作之前執行此操作,因為這時您将沒有時間為他們服務。

結論

嗯……看起來有點吓人,不是嗎?另一方面,如果您喜歡程式設計,對技術感興趣并且決心成為一名程式員,那麼就不必擔心。一步一步地工作,練習,學習,并可能與您同在。這條路将由步行者掌控。

個人Java學習園地,