第一階段:培訓
我有意識地來到 JavaRush:充足的每月價格表、清晰的材料結構、大量的實踐以及我自己的社區的存在。第一點很清楚,但是學習沒有結構的語言是相當困難的,這樣的訓練肯定會讓一個人在 Java Core 方面有嚴重的差距。 面試和技術規範的經驗表明,有關「核心」的問題可以用於一切:從按位移位和泛型轉換到 IO 和序列化。實踐是必須的;如果我自己寫的話,我仍然只能理解和記住一半的東西。好吧,社區:你解決了問題 - 在評論中吹噓它;如果你還沒決定,歡迎你提出問題,但很可能沒有人會給你現成的解決方案。即使在完成課程後,我又回到了關於免費主題的自訂文章,那裡有很多好東西可供開始(尤其是使用逐步範例+面試問題的框架的第一次體驗)。總的來說,我很感謝這個專案為我提供的基礎,但我不會僅僅依賴 JavaRush - 同樣的 Shildt 最重要的是與正在研究的主題“重疊”,並且經常揭示一些觀點。評論中已經說了很多關於有時超越理論並迫使你去谷歌的任務。對我來說,這更多的是優點而不是缺點——而且現在的情況與我學習時的情況並不相同。 對那些像我一樣「從頭開始」進入 Java 的人的直接建議:在某些階段,您可能會變得無聊或困難:-
從零開始對每個人來說都很困難;上帝保佑,只有 5% 的人能完成課程。你的任務就是成為他們中的一員。
-
一兩個月後,當任務變得更加困難和有趣時,我的興趣就出現了。要有耐心。
- 最重要的是每週的進步。休息了兩週,回來已經很困難了,而且不是每個人都能連續幾個月每天都寫的。給自己一週的工作時間設定一個限制- 例如15 小時。您可以每個工作日編碼1.5 小時,每個週末再編碼3-4 小時,或者您可以休息幾個晚上,但「週末限制」會限制您的工作時間。增加。這樣,日程安排就會靈活但有規律。當然,這樣就可以透過任務和項目來衡量工作,但在語法和內核級別,小時就足夠了。
第二階段:自我教育
所以,我沒有得到實習機會:我只在技術要求上留了幾天時間,直到入組結束,沒有時間去弄清楚要求——生詞太多。因為 我不想再等三個月,我決定自己繼續前進。幸運的是,所有流行框架都有指南和影片教學。在接下來的幾個月裡,我接觸了 Spring MVC、Spring Boot + Data、Spring Security、Hibernate、jUnit、Maven、Git、RDBMS,掌握了 SQL 並嘗試將它們整合為整體。六個月後,我的專案現在看起來很可怕,但我獲得了使用「成人」框架和 GitHub 的實務經驗,可以應潛在雇主的要求展示這些經驗。 建議:-
越早了解 .gitignore 越好。;)
-
許多指南同時包含多個框架;使用這個並添加你自己的。我們使用 Maven + Spring Boot + Data 編寫了一個線上商店 - 新增授權、單元測試和日誌記錄。
-
對於 Web 項目,您可以從互聯網上獲取免費的前端模板 - 它們使用起來更愉快,並且作為 Git 上 README 中的螢幕截圖看起來更好。同時,您將能夠記住 HTML 和 CSS - 您可能需要修正樣式和佈局。
我錯過了什麼(後來面試時被燒傷了)
-
演算法. 為了避免我的錯誤,我立即推薦一本俄語短書《Grocking Algorithms》。演算法的複雜性是什麼,它由什麼組成,為什麼快速排序還不夠,圖論簡介 - 一切都在那裡,並且以最容易理解的語言。
-
「幕後」收藏。我不記得這是否是在 JavaRush 中,但了解 HashMap.get() 的工作原理或為什麼 HashSet 不能保證保留元素順序很有用。再說一次 - 哪些集合是線程安全的以及為什麼。
-
SQL。您至少需要 JOIN - 它們是什麼、它們如何工作、在紙上的兩個表上即時編寫 SELECT 的能力。我推薦 www.sql-ex.ru:它將在一兩天內帶您達到所需的水平。
-
Spring Core:有哪些註解,什麼是上下文,bean是如何創建的,哪些Bean Scope是線程安全的,如何解決相互注入——都是面試題。如何返回頁面,如何返回JSON等。我目前正在閱讀俄文版的《Spring 5 for Professionals》,但總的來說,他們推薦《Spring in Action》。
第三階段:找工作
事實上,在完成家庭專案後的頭幾個月裡,我(透過 HH、LinkedIn、招聘機構)向各種初級/實習生職位空缺發送了大約 30 份回复,但結果幾乎為零。我只專注於沒有經驗的職缺,誠實地指出了我熟悉的堆棧,並在求職信中寫下了我的高學習能力。結果是兩次電話(其中一次直接以我中級前的英語結束),另外兩家公司發來技術規範,只有一次“會議”,然後我一個人在一張紙上解決算法問題,然後HR就把文件拿走了,然後「我們會打電話給你」。我嘗試過幾次實習(無薪和有條件付費):我做了技術規範,但沒有超出最終的社會保障;但現在我可以說,實習生肯定是T-Systems、CFT、Andersen和EPAM招募的(他們的評價褒貶不一,你自己決定吧)。對我來說,如果你有機會在沒有收入的情況下坐幾個月而不死,這是進入這個領域的好方法=)總的來說,在這次經歷之後我變得有些沮喪,並暫停了整個故事的搜索將近六個月 - 我繼續研究之前的配置文件,只是為了好玩編寫了一些應用程序,但甚至沒有將它們發佈到 Git 上。直到我遇到一個熟人,我隨口向他講述了職位空缺的失敗:當時他已經是一名中級開發人員,但他以同樣的方式開始——自學。 一位熟人給了我一些推薦,他自己也用了這些,這對我以後找工作有很大幫助。你是否跟隨他們取決於你,因為...... 從某種程度上來說,他們並不完全誠實。因此,進一步引用:-
無論如何,在履歷中為自己提供 6 個月以上的商業經驗:實習、畢業專案、自由職業、遠距工作 - 等等。這對於HR初審履歷階段有很大幫助;
-
從履歷中刪除「Junior」和「期望薪資」一詞;就將其保留為 Java 開發人員,並與每家公司單獨討論資金;
-
在你說出你的期望之前,試著讓人力資源部門說出提議薪資的「叉子」。如果一家公司提供80-120k,而你正在尋找40k或更多,有些選擇者會鄙視你;
-
適用於適合您堆疊的所有職缺,即使它們需要 1-3 年的商業經驗。
-
在你的履歷中包含你使用過的整個語言、技術和框架。
-
在 LinkedIn 上註冊——那裡確實有很多來自不同公司的人力資源人員。仔細填寫您的個人資料 - 事實上,這也是您的簡歷。要發展您的聯絡人網絡,請新增與您的個人資料相關的 LION;他們接受所有使用者的請求。
-
嘗試免費的 Java 測試 - 這些測試通常在初級面試之前以紙本形式進行。最好提前做好準備。
-
他們總是詢問有關藏品的資訊:有哪些藏品、它們有何不同、何時是使用它們的最佳時機。
-
總是在抽象類別和介面上——它們可以有方法、欄位嗎?哪些是可以繼承的,等等。
-
幾乎總是在多線程上——你在工作中使用了什麼,關鍵字,方法,你是否熟悉util.concurrent。
-
通常在使用記憶體時 - 堆、堆疊,以及這些字串是否相等,以及這些對象,為什麼。
-
有時關於演算法 - 你知道哪些,複雜程度如何,為什麼,你現在可以寫一個演算法嗎?
-
有時基於模式 - 您知道哪些模式,您使用哪些模式,編寫單例或工廠。
-
有時在 SQL 中 - JOIN 類型、交易是什麼、如何在 JDBC 中進行事務、編寫一個簡短的查詢。
-
Salesforce 個人資料業務聯絡人頁面,可編輯並新增記錄;
-
使用具有控制台控制的 Spring 狀態機模擬多層建築中的電梯;
-
基於 LibGDX 庫的 Android 應用程序,按下按鈕時可逐字元輸出文字;
-
REST模仿汽車共享,透過HTTP請求新增客戶端並返回JSON;
-
透過自由單元對無向圖進行排序的問題;
-
使用文件中的座標搜尋等腰三角形;
-
使用 Stream API 重構已完成的程式碼;
-
支援三元表達式的 UI 計算器;
-
將結果寫入文件的執行緒競爭。
-
不僅要盡力完成任務,還要確保程式碼符合OOP原則。
-
檢查你的程式碼的效率 - 我曾經被拒絕,因為除其他外,我使用 PrintStream 而不是 BufferedWriter。
-
以 50% 的餘裕來規劃你的執行時間——早點開始和結束比在截止日期的早上八點進行 git Push 更好。
GO TO FULL VERSION