Re: [請益] Java後端薪水更高的方向

看板Soft_Job作者 (常寂光)時間1年前 (2022/07/16 18:14), 1年前編輯推噓21(21053)
留言74則, 23人參與, 1年前最新討論串2/4 (看更多)
※ 引述《empireisme (empireisme)》之銘言: : 文章可能很長,先說一下 : 一 個人背景和工作內容 : 我個人的背景是年資一年的Java後端工程師,目前在電信業服務(非中華電信),學歷為清 : 交商管碩士(非資管) : 年薪大概65-75萬(因為是年終占比太高所以不確定,月薪不到45K) : 我的工作內容主要是Spring Boot開發,使用的技術框架主要是 : swagger,hibernate,jdbc template,spring security等等 : 部署方面就是打包成war檔案,然後丟到linux主機的tomcat資料夾裡面而已.... : 後來公司導入jenkins之後,大概也不需要管部署 : 我的工作內容真的主要就是CRUD,而且還是給內部業務的的CRUD : 我自己有感受到,我是那種要工作中有用到,才會體會比較深的類型 : 比如說我學生時代一直不太會用left join 現在終於比較熟 : 不知道sql指令要命中index,要下explain去檢查 : 以前不知道學生時代那些繼承的動物例子有甚麼用,後來工作後看到前輩去用basedao : 裡面包了很多常見的功能像是paging之類的,才發現繼承的好用 : 我清楚意識到,因為我做的只有CRUD而且還不是給很多使用者的CRUD所以 : 非常害怕落入所謂的工作十年可是可能技能跟工作兩年的人一樣的狀況 : 版上的大大才多次提到類似的概念 : 原文問錯問題了,不管你學什麼,學多少技術種類,都不會影響你的薪水。學到什麼程度 : ,找什麼工作,才會影響薪水。 : 之前看了Drtech大的文章 : https://reurl.cc/Yvx344 : 所以我的問題如下: : 1. Java Backend要學多深 ? : 之前看了本版的系列文章, : https://www.ptt.cc/bbs/Soft_Job/M.1527864627.A.626.html : 還有幾篇 java 後端的面試心得 : 都會問到 jvm 調優,或是redis kafka相關的問題 : 但是我目前的公司應該是不會用到 : 2. 要找甚麼產業,哪些公司 ? : 為了避免這篇文章太像伸手牌,所以下面會放入我覺得可能可以的產業和我自己的網路上 : 發現的觀察 : # 二 做過的努力 : 1. : 想說即使公司沒有大流量場景來訓練,然後大流量場景可能又和多執行緒有關 : 所以就想說去udemy上買相關課程 : ![](https://i.imgur.com/YaBiwGy.png) : 目前大概看了三分之一,但還是有點霧煞煞@@ : 做過的事情是找了幾個網路上的範例,比較有開多執行緒跟沒開多執行緒 : 統計資料夾大小的速度差別 : 2. 基本的資料結構 : 去geekforgeek還有買書練習java資料結構,主要以leetcode explore為主 : 書我目前是看 數據結構與算法之美 是簡體書,好處是書中的code都是用java還不錯 : 目前大概是排序算法 練過快速排序,合併排序 : linkedlist知道基本的時間複雜度,還有刪改操作 : 還有一些經典題目,例如反轉Linkedlist 合併兩個linkedlist,環的檢測等等 : 目前是感覺對於code的掌握度有變高,腦袋也有變靈活點,但可能因為我的工作性質,所 : 以還沒感受到資料結構的威力,我目前的工作性質大概只會用到兩種資料結構ArrayList : 還有HashMap : 3. 看對岸的面試題 : 對岸有很多JAVA面試題的影片,就是諸葛老師他們,睡前會看個一兩集, : 蠻喜歡看一些像是mysql優化的 : ![](https://i.imgur.com/Cf0uon0.png) : 或是對岸的圖零學院,他有一系列的刷題套路可以看 : # 三 覺得還不錯的產業 電商產業和租車產業 : 看了電商產業的職位,有的會和金流有關 : 有的和物流有關 : 有的則是訂單相關 : 訂單部分好像又可以很複雜 : 之前看到有版友提過 : - 訂單快照功能,保留當時的商品資訊 e.g. 價錢,規格等 : - 是否需要跨商店結帳? : - 出貨時需不需要做到分批出貨? : - 退款時需不需要做到只退款部分商品? : - 出報表支援商業決策,譬如說過去一個月,哪間商店營業額最高? 哪些商品最熱賣? : 像我就對這些問題的資料庫設計沒甚麼想法,我可能就停留在有一對多,多對多,然後要 : 做正規化而已 : ,比如說要知道過去一個月哪間商店營業額最高,應該就是直接下sql指令就好了吧? : 當然這是我最初淺的想法 : 然後電商產業好像會有一些雙十一的的高流量場景? : 國內JAVA為主的電商,我知道的有 : momo 跟遠傳friday,但後者好像有大裁員,而且cakeresume上面顯示的薪水,好像也是 : 45K到70K的樣子,另外momo雖然非常賺錢,但是網路上查到的java工程師薪水好像也普普 : 另外我最近看到格上租車的職缺描述,裡面提到會設計高流量後端服務,還有微服務設計 : ![](https://i.imgur.com/bwjDkfo.png) : 但是其實我沒有接觸過租車產業,不確定是不是如同cakeresume上面說的那樣 : # 四 台灣系統廠 : 之前看台灣系統廠的中位數薪資,其實也不低,當然是比半導體低,但是也有一定水準 : 但是我實際去找 asus 或是 acer的JAVA工程師薪水,好像也是普普 : ![](https://i.imgur.com/VW1hS1o.png) : # 五 外商 : ![](https://i.imgur.com/Up3x6gP.png) : 之前看到太陽鳥在徵才,也不太確定是要學到甚麼程度才能拿到比較高的薪水 : # 六 我的學習困境 : 透過專案的訓練,開始學會用swag方便測試API,開始學會Spring Security懂得如何基於 : 腳色給予適當的URL保護,原本沒學過jdbc template,也慢慢學會了 : 但是外界常用的redis kafka 或是多執行緒技術我們公司目前應該是不會用到 : # 七 結論 : 上面好像寫得有點太發散,所以我應該找甚麼產業的甚麼部門? : 電商嗎,還是一些乙方,因為乙方我看過有些公司好像也有月薪七八萬 : Java 後端應該要能學到甚麼程度,能解決甚麼樣的問題? 才能有一百萬左右的薪水? : 我自己的想法可能是leetcode要能夠解掉easy : mysql 優化要能夠說出除了index命中以外 : 然後是不是要自己想辦法學會Spring cloud 這種微服務框架? : 甚至還要會負載均衡 ? springboot自帶tomcat, build成jar自己可以直接啟動成一個微服務, 打包成war再放進tomcat裡這是以前jsp servlet那個石器時代的作法, 你們用springboot卻這樣部署, 很大機率你們可能沒有真正了解springboot究竟要解決怎樣的問題 你現在看了前輩的code覺得繼承好用 但是你不明白繼承不是一個好的pattern 很容易讓專案過度複雜 用compose的方式往往會更好 golang就沒有Class沒有繼承只保留interface 你有探討過這中間的原因嗎 jdbc template只是spring提供的一種template jpaRepository也可以做一樣的事 假設只學會使用這些而沒有真正明白和資料庫溝通時需要注意的細節 (比如在迴圈中去query或insert/update是一種糟糕的作法) 那麼你的實力並沒有變強 碰到資料庫瓶頸你很可能也找不到問題點 你沒有multithreading的實戰經驗 很多高薪的公司的業務場景你無法handle 你也無法理解golang為何能夠更好的解決高並發問題 我相信你也不了解jvm的細節 或是spring底層的實作 這些都是成為厲害java工程師必經的路 高薪要看產業看公司沒錯 但那不代表你在高薪產業就不需要紮實的能力 我的觀察是 你的能力還很淺 眼睛卻一直盯著錢 這樣你永遠無法成為真正厲害的工程師 我共事過的一些很強的工程師 光看multithreading code就可以看出可能的問題 碰到沒有清楚的error message的瓶頸時 也能夠短時間找到問題點 pm給出大的需求 能夠清楚拆分成小的ticket分給下面工程師去做 時程估計合理 架構設計可靠 程式碼優雅高效 你需要做的是看看好公司都開出怎樣的需求 自學後去面試 被打槍再學再面試 想辦法進到這些公司去實戰這些技術 是金子到哪都會發光 你是大神別人只會捧著鈔票來求你 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 58.182.198.67 (新加坡) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1657966457.A.9AD.html

07/16 18:23, 1年前 , 1F
正想建議可以先理解java是怎麼跑起來就看到這篇,中肯
07/16 18:23, 1F

07/16 18:56, 1年前 , 2F
jpa reposiotory這個我是知道的,但是多執行緒目前就
07/16 18:56, 2F

07/16 18:56, 1年前 , 3F
只有看線上課程
07/16 18:56, 3F

07/16 18:57, 1年前 , 4F
不太有機會在工作中用到,看了一些高薪的工作要的技
07/16 18:57, 4F

07/16 18:57, 1年前 , 5F
能,很多就是說希望會多執行緒,或是高流量,但又希
07/16 18:57, 5F

07/16 18:57, 1年前 , 6F
望有實戰經驗
07/16 18:57, 6F

07/16 18:58, 1年前 , 7F
對,我們公司包成war這還真的是,我第一份工作也是jar
07/16 18:58, 7F

07/16 18:58, 1年前 , 8F
去部署的沒錯
07/16 18:58, 8F

07/16 18:59, 1年前 , 9F
請問有推薦的自學多執行緒的方式嗎?
07/16 18:59, 9F

07/16 19:01, 1年前 , 10F
jvm調優的話,我目前是看到對岸有一個相關課程
07/16 19:01, 10F

07/16 19:01, 1年前 , 11F

07/16 19:02, 1年前 , 12F
繼承也不是全然不好吧
07/16 19:02, 12F

07/16 19:05, 1年前 , 13F
當然不是全然不好 只是有更好的方式
07/16 19:05, 13F

07/16 19:06, 1年前 , 14F
@empireisme 可以先看看"深入理解Java虚拟机"這類的書
07/16 19:06, 14F

07/16 19:06, 1年前 , 15F
不一定要直接買課程
07/16 19:06, 15F

07/16 19:08, 1年前 , 16F

07/16 19:09, 1年前 , 17F
像是這種工作,我看他的敘述也只有提到要會Spring clo
07/16 19:09, 17F

07/16 19:09, 1年前 , 18F
ud而已
07/16 19:09, 18F

07/16 19:10, 1年前 , 19F
uzak 這些課不用錢拉,都是直接看而已,但不知道我的
07/16 19:10, 19F

07/16 19:10, 1年前 , 20F
順序應該是啥?
07/16 19:10, 20F

07/16 19:10, 1年前 , 21F
事先去學多執行緒嗎?還是jvm?公司沒有場景的話,怎
07/16 19:10, 21F

07/16 19:10, 1年前 , 22F
麼驗證自己學的多執行緒
07/16 19:10, 22F

07/16 19:11, 1年前 , 23F
多執行緒我自己也就做一個簡單的去統計資料夾大小,
07/16 19:11, 23F

07/16 19:11, 1年前 , 24F
網路上還有一些下載開多執行緒的範例,網路上則是有一
07/16 19:11, 24F

07/16 19:11, 1年前 , 25F
些死鎖相關的面試
07/16 19:11, 25F

07/16 19:12, 1年前 , 26F
不太知道怎麼學多執行緒,還是說先補資料結構比較重要
07/16 19:12, 26F
你要先大致上了解jvm的架構,你才會知道你的code在那些地方 是threadsafe那些地方不是 學習路徑大概會是這樣: 從原始方法new一個Thread開始 -> 發現沒有效率 -> 學習thread pool -> 發現java提供你很多工具例如Executor大家族 -> 學threadsafe相關的Collection例如ConcurrentHashMap -> 學到CPU從記憶體讀資料的知識 -> 明白Volatile關鍵字 -> atomic相關類別 -> 等等等 沒有先後順序,反正都要學 想學啥就學啥 你沒事就google thread 相關的東西 就會發現很多東西學 threading的重點除了速度,另一個就是計算的正確性 所以才需要鎖 怎樣鎖 哪時鎖 用甚麼東西鎖 怎樣會死鎖 怎樣避免死鎖 怎樣可以不要使用鎖又可以正確 這裡又一堆知識 你可以自己研究 驗證就是自己寫點簡單東西跑看看結果 畢竟自己一個人寫不出大東西 還是要工作中實戰 面試需要經驗 你就拿你自己實驗的東西出來講 你的知識夠 對方沒理由打你槍

07/16 19:12, 1年前 , 27F
07/16 19:12, 27F

07/16 19:33, 1年前 , 28F
要對 JVM 熟悉了你才能把 Java 裡的多執行緒弄明白
07/16 19:33, 28F

07/16 19:34, 1年前 , 29F
請教一下那現在sprimgboot的部署應該是什麼方式?我
07/16 19:34, 29F

07/16 19:34, 1年前 , 30F
公司現在的做法也是包成war檔丟到UAT的tomcat資料夾
07/16 19:34, 30F

07/16 19:34, 1年前 , 31F
07/16 19:34, 31F
springboot的dependency就有timcat springboot本身就有一隻Class有一個annotation 叫做@SpringBootApplication 直接啟動這支程式 整個springboot就跑起來了 如果不明白為何spring要推出springboot 為何要改成這樣 google一下springboot設計的初衷和時空背景 就會明白了

07/16 19:36, 1年前 , 32F
你會有這些問題,應該先回去補 OS 基礎。我想這是為什麼 U
07/16 19:36, 32F

07/16 19:36, 1年前 , 33F
大說眼睛只盯著錢,看起來因為非本科的關係,所以 DSA、OS
07/16 19:36, 33F

07/16 19:36, 1年前 , 34F
、CA、CO 都還不明白,就急著追框架追應用
07/16 19:36, 34F
※ 編輯: Uzak (58.182.198.67 新加坡), 07/16/2022 19:39:49

07/16 19:41, 1年前 , 35F
CA CO是什麼的縮寫阿,請問
07/16 19:41, 35F

07/16 19:42, 1年前 , 36F
謝謝u大回答,那看起來我那個thread的課程應該都有提
07/16 19:42, 36F

07/16 19:42, 1年前 , 37F
07/16 19:42, 37F
※ 編輯: Uzak (58.182.198.67 新加坡), 07/16/2022 19:45:12

07/16 19:45, 1年前 , 38F

07/16 19:45, 1年前 , 39F

07/16 19:46, 1年前 , 40F
@Hsin所以可能要找大學os的課程搭配實作的線上課程看
07/16 19:46, 40F

07/16 19:46, 1年前 , 41F
這樣嗎?
07/16 19:46, 41F

07/16 19:48, 1年前 , 42F
計算機結構和計算機組織,但其實把作業系統跟計算機網路掌
07/16 19:48, 42F

07/16 19:48, 1年前 , 43F
握好,對你的幫助就會很大了
07/16 19:48, 43F

07/16 19:51, 1年前 , 44F
作業系統我應該會去看陳世杰老師的課,計算機網路的
07/16 19:51, 44F

07/16 19:51, 1年前 , 45F
話就真的沒概念了,只知道什麼三次握手,還有七層網
07/16 19:51, 45F

07/16 19:51, 1年前 , 46F
07/16 19:51, 46F

07/16 19:55, 1年前 , 47F
繼承好,只是也更好寫爛,太多不該繼承的用繼承
07/16 19:55, 47F

07/16 19:55, 1年前 , 48F
那你應該還要在看細一點 最好可以把http協議如何透過硬體
07/16 19:55, 48F

07/16 19:55, 1年前 , 49F
到軟體的流程搞懂 封包的過程之類的 為什麼會丟包 編碼的
07/16 19:55, 49F

07/16 19:55, 1年前 , 50F
格式有其意義要了解一下 我也一年半而已一起努力
07/16 19:55, 50F

07/16 20:01, 1年前 , 51F
可以去了解一下滑動窗口之類的
07/16 20:01, 51F

07/16 20:55, 1年前 , 52F
大大關於 compose 有相關關鍵字或推薦 YT/udemy 的課
07/16 20:55, 52F

07/16 20:55, 1年前 , 53F
程嗎
07/16 20:55, 53F

07/16 21:23, 1年前 , 54F
推, 80% 是我想講的, 能力感覺還不到扎實本科畢業生
07/16 21:23, 54F

07/16 21:23, 1年前 , 55F
然後建議到 104 看板上大家推的公司開的缺的要求去練
07/16 21:23, 55F

07/16 21:52, 1年前 , 56F
Composition over inheritance
07/16 21:52, 56F

07/16 22:18, 1年前 , 57F
用springboot開發其實不等於系統有改成微服務 所以
07/16 22:18, 57F

07/16 22:18, 1年前 , 58F
包成war也不是什麼太奇怪的事
07/16 22:18, 58F

07/16 23:34, 1年前 , 59F
這篇寫的不錯
07/16 23:34, 59F

07/17 00:28, 1年前 , 60F
Tomcat部分,我猜原來的project 可能把他exclude 了
07/17 00:28, 60F

07/17 00:28, 1年前 , 61F
,不然照理說會有衝突才對
07/17 00:28, 61F

07/17 00:52, 1年前 , 62F
推這篇的討論,其實有時對很多人,大概真的是連關鍵字
07/17 00:52, 62F

07/17 00:52, 1年前 , 63F
都缺乏有效的方式發現,需要其他人的力量把霧撥開,剩
07/17 00:52, 63F

07/17 00:52, 1年前 , 64F
下的就可以自己步入正規了
07/17 00:52, 64F

07/17 01:11, 1年前 , 65F
spring boot目前建議是改用undertow, 再來對於微服務來說
07/17 01:11, 65F

07/17 01:11, 1年前 , 66F
,spring boot 還太肥,應該要去看看quarkus或是micronau
07/17 01:11, 66F

07/17 01:11, 1年前 , 67F
t. 要不然就是上spring-native
07/17 01:11, 67F

07/17 03:09, 1年前 , 68F
多執行緒你要快速入門直接看B站juc併發相關影片,免費
07/17 03:09, 68F

07/17 17:44, 1年前 , 69F
之前整理的多執行緒 https://bit.ly/3cl6Ajz
07/17 17:44, 69F

07/18 00:09, 1年前 , 70F
07/18 00:09, 70F

07/18 00:30, 1年前 , 71F
!!樓樓上本人?
07/18 00:30, 71F

07/18 08:58, 1年前 , 72F
推良葛葛
07/18 08:58, 72F

07/18 16:01, 1年前 , 73F
大推這篇的態度
07/18 16:01, 73F

07/19 21:45, 1年前 , 74F
不覺得繼承全部不好吧 一直說golang很好也很怪
07/19 21:45, 74F
文章代碼(AID): #1Yqezvcj (Soft_Job)
文章代碼(AID): #1Yqezvcj (Soft_Job)