JavaRush /Java Blog /Random-TW /一位老人文主義者如何走向IT
PieIsLie
等級 35
Санкт-Петербург

一位老人文主義者如何走向IT

在 Random-TW 群組發布
焰火!事實上,我想了很長一段時間我到底要在這篇文章中寫什麼,以及我是否會寫它。碰巧的是,在過去兩年的不同時期,我以不同的方式評估了自己獲得 Java 開發人員職位的機會:從「遲早 - 肯定」到「我在 IT 領域沒有機會」。 一位老人文主義者如何走向IT - 1然而,距離我註冊 JavaRush 已經過了幾乎整整兩年。幾個月前,我收到了第一份工作邀請,不久之後,我收到了第二份工作邀請,然後我開始了一份新工作。成功案例在課程期間對我幫助很大,因此我決定發布自己的成功案例。由於該課程是在 18 年舉辦的​​,因此某些資訊可能不是最新的。我馬上就會說會有很多文字,因為… 我會盡力告訴您有關培訓和求職的資訊(要求、回應、技術規格、面試等)。我還將寫一些對我個人有幫助並且可能對其他人有幫助的一般提示。 簡單介紹一下我自己: 32歲,10年管理銷售經驗,文科教育,完全沒有技術背景。幾年前,我嘗試學習 C++,然後又學習 Python,結果除了頭痛之外一無所獲。因此,很難稱我為才華橫溢的開發人員:恰恰相反。

第一階段:培訓

我有意識地來到 JavaRush:充足的每月價格表、清晰的材料結構、大量的實踐以及我自己的社區的存在。第一點很清楚,但是學習沒有結構的語言是相當困難的,這樣的訓練肯定會讓一個人在 Java Core 方面有嚴重的差距。 面試和技術規範的經驗表明,有關「核心」的問題可以用於一切:從按位移位和泛型轉換到 IO 和序列化。實踐是必須的;如果我自己寫的話,我仍然只能理解和記住一半的東西。好吧,社區:你解決了問題 - 在評論中吹噓它;如果你還沒決定,歡迎你提出問題,但很可能沒有人會給你現成的解決方案。即使在完成課程後,我又回到了關於免費主題的自訂文章,那裡有很多好東西可供開始(尤其是使用逐步範例+面試問題的框架的第一次體驗)。總的來說,我很感謝這個專案為我提供的基礎,但我不會僅僅依賴 JavaRush - 同樣的 Shildt 最重要的是與正在研究的主題“重疊”,並且經常揭示一些觀點。評論中已經說了很多關於有時超越理論並迫使你去谷歌的任務。對我來說,這更多的是優點而不是缺點——而且現在的情況與我學習時的情況並不相同。 對那些像我一樣「從頭開始」進入 Java 的人的直接建議:在某些階段,您可能會變得無聊或困難:
  1. 從零開始對每個人來說都很困難;上帝保佑,只有 5% 的人能完成課程。你的任務就是成為他們中的一員。

  2. 一兩個月後,當任務變得更加困難和有趣時,我的興趣就出現了。要有耐心。

  3. 最重要的是每週的進步。休息了兩週,回來已經很困難了,而且不是每個人都能連續幾個月每天都寫的。給自己一週的工作時間設定一個限制- 例如15 小時。您可以每個工作日編碼1.5 小時,每個週末再編碼3-4 小時,或者您可以休息幾個晚上,但「週末限制」會限制您的工作時間。增加。這樣,日程安排就會靈活但有規律。當然,這樣就可以透過任務和項目來衡量工作,但在語法和內核級別,小時就足夠了。
總的來說,儘管我可以負擔假期和短暫的休息,但我花了大約 5 個月的時間完成了課程(在獲得實習機會之前) ;同樣,每週工作五天,只有週末和工作日晚上 22 點到 00 點有空。因此,透過寬鬆的日程安排或嚴格的訓練制度,您可以更早地應對。然後我就打算去實習,但最後沒有成行。

第二階段:自我教育

所以,我沒有得到實習機會:我只在技術要求上留了幾天時間,直到入組結束,沒有時間去弄清楚要求——生詞太多。因為 我不想再等三個月,我決定自己繼續前進。幸運的是,所有流行框架都有指南和影片教學。在接下來的幾個月裡,我接觸了 Spring MVC、Spring Boot + Data、Spring Security、Hibernate、jUnit、Maven、Git、RDBMS,掌握了 SQL 並嘗試將它們整合為整體。六個月後,我的專案現在看起來很可怕,但我獲得了使用「成人」框架和 GitHub 的實務經驗,可以應潛在雇主的要求展示這些經驗。 建議
  1. 越早了解 .gitignore 越好。;)

  2. 許多指南同時包含多個框架;使用這個並添加你自己的。我們使用 Maven + Spring Boot + Data 編寫了一個線上商店 - 新增授權、單元測試和日誌記錄。

  3. 對於 Web 項目,您可以從互聯網上獲取免費的前端模板 - 它們使用起來更愉快,並且作為 Git 上 README 中的螢幕截圖看起來更好。同時,您將能夠記住 HTML 和 CSS - 您可能需要修正樣式和佈局。

為自己制定這樣的開發計劃的最簡單方法是查看 HH for Junior\Middle Java Developer 職位空缺,看看哪些技術和框架最常被提及。把它們寫下來,為它們制定技術規範,為自己設定實施的最後期限。不過,也許如果我從當地實習開始,我就不必花幾個月的時間在家庭專案上。

我錯過了什麼(後來面試時被燒傷了)

  1. 演算法. 為了避免我的錯誤,我立即推薦一本俄語短書《Grocking Algorithms》。演算法的複雜性是什麼,它由什麼組成,為什麼快速排序還不夠,圖論簡介 - 一切都在那裡,並且以最容易理解的語言。

  2. 「幕後」收藏。我不記得這是否是在 JavaRush 中,但了解 HashMap.get() 的工作原理或為什麼 HashSet 不能保證保留元素順序很有用。再說一次 - 哪些集合是線程安全的以及為什麼。

  3. SQL。您至少需要 JOIN - 它們是什麼、它們如何工作、在紙上的兩個表上即時編寫 SELECT 的能力。我推薦 www.sql-ex.ru:它將在一兩天內帶您達到所需的水平。

  4. 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 年的商業經驗。

在我遵循所有這些建議後,搜尋情況顯著改善。首先,在大約 12 個新回覆中,有一半幾乎立即以會議、Skype 或 TK 結束(這與前幾個月被忽視的情況已經有很大不同)。其次,人力資源人員開始給我寫信,但我沒有回覆——透過即時訊息、郵件、LinkedIn。第三,商業經驗的要求其實不太嚴格──很多公司願意與不符合1-3年企業實務範圍的候選人進行交流。 結果是──一份給初級員工的offer,一份給有試用期的中級員工的offer。整個搜尋過程花了兩個月的時間。 建議
  1. 在你的履歷中包含你使用過的整個語言、技術和框架。

  2. 在 LinkedIn 上註冊——那裡確實有很多來自不同公司的人力資源人員。仔細填寫您的個人資料 - 事實上,這也是您的簡歷。要發展您的聯絡人網絡,請新增與您的個人資料相關的 LION;他們接受所有使用者的請求。

  3. 嘗試免費的 Java 測試 - 這些測試通常在初級面試之前以紙本形式進行。最好提前做好準備。

關於面試的幾句話
  1. 他們總是詢問有關藏品的資訊:有哪些藏品、它們有何不同、何時是使用它們的最佳時機。

  2. 總是在抽象類別和介面上——它們可以有方法、欄位嗎?哪些是可以繼承的,等等。

  3. 幾乎總是在多線程上——你在工作中使用了什麼,關鍵字,方法,你是否熟悉util.concurrent。

  4. 通常在使用記憶體時 - 堆、堆疊,以及這些字串是否相等,以及這些對象,為什麼。

  5. 有時關於演算法 - 你知道哪些,複雜程度如何,為什麼,你現在可以寫一個演算法嗎?

  6. 有時基於模式 - 您知道哪些模式,您使用哪些模式,編寫單例或工廠。

  7. 有時在 SQL 中 - JOIN 類型、交易是什麼、如何在 JDBC 中進行事務、編寫一個簡短的查詢。

事實上,一切都很大程度取決於公司:有人不會問任何關於 Java Core 的問題,但會花 40 分鐘談論框架和 SQL;有些人根本不使用流行的框架,只詢問演算法、類型、集合和記憶體。大約一半的會議以測試開始——有時用俄語,有時用英語(20-30 個問題,持續 20-30 分鐘);通常問題的等級是「這是程式碼,它是否會運行,如果不運行,那麼在哪一行」或「這裡有幾個對象,經過 N 次操作後它們是否相等」。 關於技術規範的幾句話:70%開始溝通的公司在會議之前或之後向我發送了技術規範。通常,完成時間從幾天到一周不等,但大多數情況下,最後期限可以稍微移動一些。任何東西都可以用作技術規範。以下是我做的例子:
  • Salesforce 個人資料業務聯絡人頁面,可編輯並新增記錄;

  • 使用具有控制台控制的 Spring 狀態機模擬多層建築中的電梯;

  • 基於 LibGDX 庫的 Android 應用程序,按下按鈕時可逐字元輸出文字;

  • REST模仿汽車共享,透過HTTP請求新增客戶端並返回JSON;

  • 透過自由單元對無向圖進行排序的問題;

  • 使用文件中的座標搜尋等腰三角形;

  • 使用 Stream API 重構已完成的程式碼;

  • 支援三元表達式的 UI 計算器;

  • 將結果寫入文件的執行緒競爭。

有時要求計算方法被單元測試覆蓋,查詢方法被要求被整合測試覆蓋。 建議
  1. 不僅要盡力完成任務,還要確保程式碼符合OOP原則。

  2. 檢查你的程式碼的效率 - 我曾經被拒絕,因為除其他外,我使用 PrintStream 而不是 BufferedWriter。

  3. 以 50% 的餘裕來規劃你的執行時間——早點開始和結束比在截止日期的早上八點進行 git Push 更好。

好吧,我想我寫的都是我想要的。最重要的是,水能磨石。你不可能用Java寫了很多很多,然後找了很久很久的工作,最後卻一無所獲。如果一個 30 歲的人文學科專家能做到這一點,你甚至可以做得更好。最重要的是不要害怕第一次電話、技術任務和麵試:在每次失敗之後,我都保證可以為自己學到一些東西並改進它 - 時間越長,你就越有信心。如果某個地方變得混亂或有錯誤 - 我提前道歉,寫信,我會糾正它。我希望我的經驗至少能幫助某人=)
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION