diff --git a/.vscode/settings.json b/.vscode/settings.json index 6a06b63..5b38abf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,4 @@ { "editor.wordWrap": "on", - "cSpell.words": ["tsmc"] + "cSpell.words": ["Bootcamp", "tsmc"] } diff --git a/content/zh/notes/2022-11-02-deep-copy/index.md b/content/zh/notes/2022-11-02-deep-copy/index.md index 412b79b..a3de460 100644 --- a/content/zh/notes/2022-11-02-deep-copy/index.md +++ b/content/zh/notes/2022-11-02-deep-copy/index.md @@ -2,7 +2,7 @@ title: "Deep Copy in JavaScript" summary: Some methods to deep copy an object in JavaScript categories: ["note"] -tags: ["JavaScript", "DeepCopy"] +tags: ["JavaScript", "DeepCopy", "深拷貝", "深層複製"] #externalUrl: "" # showSummary: true date: 2022-11-02 diff --git a/content/zh/notes/2022-11-02-web-workers/index.md b/content/zh/notes/2022-11-02-web-workers/index.md index 0320ebb..213a4f4 100644 --- a/content/zh/notes/2022-11-02-web-workers/index.md +++ b/content/zh/notes/2022-11-02-web-workers/index.md @@ -1,8 +1,8 @@ --- -title: 'Web Workers' +title: "Web Workers" summary: "Web Workers 是 JavaScript 的多執行緒解決方案" categories: ["note"] -tags: ["JavaScript", "Web Workers", "Multi-Threads"] +tags: ["JavaScript", "Web Workers", "Multi-Threads", "多執行緒"] #externalUrl: "" # showSummary: true date: 2022-11-02 @@ -17,8 +17,9 @@ src="https://darkthread.github.io/js-worker/js-benchmark.gif" /> 最後再補充另一個實驗,瀏覽器本身是多執行緒環境,受單一執行緒限制的是網頁的 JavaScript 程式,其他如 Render、CSS 等運算等作業,瀏覽器會安排不同執行緒處理。因此,如果今天是用純 CSS 製作的動晝(我找到一個雪花飄效果當範例),用 setTimeout 或 Web Worker 的差異不大。(註:測量結果未包含一秒延遲,故比之前少一秒) ### Reference + [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) [阮一峰的网络日志 Web Worker 使用教程](https://www.ruanyifeng.com/blog/2018/07/web-worker.html) -[發揮 JavaScript 多執行緒威力 - Web Worker](https://blog.darkthread.net/blog/web-worker/) \ No newline at end of file +[發揮 JavaScript 多執行緒威力 - Web Worker](https://blog.darkthread.net/blog/web-worker/) diff --git a/content/zh/notes/2023-04-06-git-snippet/index.md b/content/zh/notes/2023-04-06-git-snippet/index.md index e9e1387..e2ed6c6 100644 --- a/content/zh/notes/2023-04-06-git-snippet/index.md +++ b/content/zh/notes/2023-04-06-git-snippet/index.md @@ -1,8 +1,8 @@ --- -title: 'Git Snippet' -summary: 'Git config and commands that I use frequently' +title: "Git Snippet" +summary: "Git config and commands that I use frequently" categories: ["note"] -tags: ["Git"] +tags: ["Git", "Snippet", "Command"] #externalUrl: "" # showSummary: true date: 2023-04-06 @@ -10,7 +10,9 @@ draft: false --- ## Config + ### Get repository or global options + ```sh copy git config --list ``` @@ -20,56 +22,71 @@ git config -l ``` ### Identity setup + ```sh copy git config --global user.name "John Doe" git config --global user.email johndoe@example.com ``` + you can also use `--local` to use this identity only in the directory + ```sh copy git config --local user.name "John Doe" git config --local user.email johndoe@example.com ``` ## Remote + ### + ```sh copy git remote set-url origin ``` ## Tag + Push branch and tag + ```sh copy git push --follow-tags ``` Delete origin tag + ```sh copy git push --delete origin v0.1.3 ``` Delete local tag + ```sh copy git tag -d v0.1.3 ``` ## Commit + ### Remove latest commit + ```sh copy git reset HEAD^ --hard ``` ## Branch + ### Reomve local branch + ```sh copy git branch -D ``` ### Reomve remote branch + ```sh copy git push --delete ``` ## Git Aliases + ```sh copy git config --global alias.br branch git config --global alias.co checkout @@ -80,8 +97,8 @@ git config --global alias.pl pull git config --global alias.ps push ``` - ## Reset author information for all commits + for all branch ```sh copy @@ -94,6 +111,7 @@ git filter-branch -f --env-filter ' ``` you could also use `HEAD` + ```sh copy git filter-branch -f --env-filter ' GIT_AUTHOR_NAME='ShihTingJustin' @@ -102,6 +120,7 @@ git filter-branch -f --env-filter ' GIT_COMMITTER_EMAIL='justinhuang777@gmail.com' ' HEAD ``` + src: https://git-scm.com/docs/git-filter-branch --- diff --git a/content/zh/notes/2023-04-19-js-v8-engine/index.md b/content/zh/notes/2023-04-19-js-v8-engine/index.md index 584c50c..54e4f28 100644 --- a/content/zh/notes/2023-04-19-js-v8-engine/index.md +++ b/content/zh/notes/2023-04-19-js-v8-engine/index.md @@ -1,7 +1,7 @@ --- -title: 'JavaScript V8 Engine' +title: "JavaScript V8 Engine" categories: ["note"] -tags: [JavaScript] +tags: ["JavaScript", "V8", "Engine"] #externalUrl: "" # showSummary: true date: 2023-04-19 @@ -11,6 +11,7 @@ draft: false V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows 7 or later, macOS 10.12+, and Linux systems that use x64, IA-32, ARM, or MIPS processors. V8 can run standalone, or can be embedded into any C++ application. ### Reference + - https://github.com/v8 - https://v8.dev/ - https://chromium.googlesource.com/v8/v8.git diff --git a/content/zh/notes/2023-06-08-react-note-meetup-useeffect-from-zet/index.md b/content/zh/notes/2023-06-08-react-note-meetup-useeffect-from-zet/index.md index 9b43bc5..f71d9e2 100644 --- a/content/zh/notes/2023-06-08-react-note-meetup-useeffect-from-zet/index.md +++ b/content/zh/notes/2023-06-08-react-note-meetup-useeffect-from-zet/index.md @@ -1,8 +1,8 @@ --- -title: 'Reactjs.tw Meetup #14 | 都 2022 年了你可能還是不懂 useEffect | Zet' +title: "Reactjs.tw Meetup #14 | 都 2022 年了你可能還是不懂 useEffect | Zet" summary: "Reactjs.tw Meetup #14 筆記" categories: ["note"] -tags: ["React"] +tags: ["React", "useEffect", "React Hooks"] #externalUrl: "" # showSummary: true date: 2023-06-08 @@ -15,52 +15,53 @@ https://slides.com/tz5514/useeffect-guide ## useState > 在 React,畫面是資料延伸的結果 -eg. event handler +> eg. event handler 每一次 render 都有自己的 event handlers -* 在每一次 render 之間的 props & state 都是獨立、不互相影響的 -* 在每一次 render 中的 props & state 永遠都會保持不變,例如該次函式執行的常數 -* event handlers 是以原始資料 (props & state) 延伸出來的另一種資料結果 - * 因此,每一次 render 都有自己的 event handlers +- 在每一次 render 之間的 props & state 都是獨立、不互相影響的 +- 在每一次 render 中的 props & state 永遠都會保持不變,例如該次函式執行的常數 +- event handlers 是以原始資料 (props & state) 延伸出來的另一種資料結果 + - 因此,每一次 render 都有自己的 event handlers ## useEffect + ### 重要觀念 + > 每一次 render 都有自己的 effects > effect 是 render 結果的副產物,每個 effect 都只屬於特定一次的 render -> -當依賴的值從外部發生 mutate 時,closure 是不直覺,難以預測結果的。 -當依賴的值,永遠不變時,closures 是直覺易懂的,因為他依賴的都是常數,執行的行為效果永遠固定 - +> +> 當依賴的值從外部發生 mutate 時,closure 是不直覺,難以預測結果的。 +> 當依賴的值,永遠不變時,closures 是直覺易懂的,因為他依賴的都是常數,執行的行為效果永遠固定 ### Cleanup function + A cleanup function 會在 B 之前先執行,在執行 B > 單向資料流,資料改變時,結果才會跟著改變 - ### 宣告式的同步化,而非生命週期 + 不關心過程跟方法,只關心目標與結果 中間跑了一百次也無所謂,只要 input 固定,output 是對應結果就好 - FC 中是 mount 還是 update 其實不重要,對 FC 來說是同一件事 (CC 中 didMount 跟 didUpdate 不同) - ### 用途 -* 根據目前的 props & state 來同步 React elements 以外的東西,並且避免阻塞 UI 畫面的渲染 -* 理想上 effect 無論跟著 render 執行了幾次,程式都應該保持同步且正常運作 -是為了同步資料到畫面以外的地方 +- 根據目前的 props & state 來同步 React elements 以外的東西,並且避免阻塞 UI 畫面的渲染 +- 理想上 effect 無論跟著 render 執行了幾次,程式都應該保持同步且正常運作 +是為了同步資料到畫面以外的地方 ### 為什麼 effect & cleanup 要在每次 render 後都執行 + 避免受到上一次 render 的結果影響 不管執行幾次 都完美運行 - ### dependencies 是一種效能最佳化 + 為避免重複執行 effect CC 要在 didUpdate 判斷 dependencies 是否相同 FC 不需要 @@ -70,52 +71,52 @@ FC 不需要 > dependencies 是「同步動作的資料依賴清單」,如果這個清單中記載的所有依賴,都跟上一次 render 時沒有差異,就代表沒有再次進行同步的需要,可以略過本次 effect 來節省效能。 ### useEffect 的核心思考模型整理 -* FC 沒有生命週期 API,只有 useEffect 用於「同步資料到 effect 行為」 -* useEffect 讓你根據目前的資料來同步 React elements (畫面) 以外的任何事物 -* 一般情況下,useEffect 會在每次 component render 然後瀏覽器完成 DOM 的更新 & 繪製畫面後才執行,以避免阻塞 component render 的過程 & 瀏覽器繪製畫面的過程 -* useEffect 概念上不區分 mount 與 update 的情況,他們被視為是同一種情境 -* 預設情況下,每一次 render 後都應該執行屬於該 render 的 useEffect,來確保同步的正確性與完整性 -* 理想上這個 useEffect 無論隨著 render 重複執行了幾次,你的程式都應該保持同步且正常運作 -* useEffect 的 dependencies 是一種「忽略某些非必要的執行」的效能最佳化,而不是控制 effect 發生在特定的 component 生命週期,或特定的商業邏輯時機 +- FC 沒有生命週期 API,只有 useEffect 用於「同步資料到 effect 行為」 +- useEffect 讓你根據目前的資料來同步 React elements (畫面) 以外的任何事物 +- 一般情況下,useEffect 會在每次 component render 然後瀏覽器完成 DOM 的更新 & 繪製畫面後才執行,以避免阻塞 component render 的過程 & 瀏覽器繪製畫面的過程 +- useEffect 概念上不區分 mount 與 update 的情況,他們被視為是同一種情境 +- 預設情況下,每一次 render 後都應該執行屬於該 render 的 useEffect,來確保同步的正確性與完整性 +- 理想上這個 useEffect 無論隨著 render 重複執行了幾次,你的程式都應該保持同步且正常運作 +- useEffect 的 dependencies 是一種「忽略某些非必要的執行」的效能最佳化,而不是控制 effect 發生在特定的 component 生命週期,或特定的商業邏輯時機 ### 不要欺騙 hooks 的 dependencies chain -* 把 function 定義到 useEffect 中 (只有該 effect 用到,沒有共用需求) -* 跟資料流無關的流程抽到 component 外部 -* 用 useCallback +- 把 function 定義到 useEffect 中 (只有該 effect 用到,沒有共用需求) +- 跟資料流無關的流程抽到 component 外部 +- 用 useCallback > 函式在 FC 與 hooks 中是屬於資料流的一部分 +### Dependencies chain -### Dependencies chain useCallback useMemo 讓由原始資料產生出來的延伸資料能夠完全的參與資料流,並以 dependencies chain 維持 useEffect 的同步可靠性 ### useReducer 是 dependencies chain 的合法作弊手段 -從動作分離更新... +從動作分離更新... ### 以 dependencies 來控制 useEffect 執行邏輯的誤區 -* useEffect 的用途是同步資料到 effect,不是生命週期 -* FC & hooks 也沒有提供任生命週期的 API -* useEffect 的 dependencies 是一種「忽略某些非必要的執行」的效能最佳化,而不是控制 effect 發生在特定的 component 生命週期,或特定的商業邏輯時機 +- useEffect 的用途是同步資料到 effect,不是生命週期 +- FC & hooks 也沒有提供任生命週期的 API +- useEffect 的 dependencies 是一種「忽略某些非必要的執行」的效能最佳化,而不是控制 effect 發生在特定的 component 生命週期,或特定的商業邏輯時機 ### Reusable state — React 18 的 useEffect 在 mount 時為何會執行兩次? -* component 必須設計得有足夠的彈性,多次 mount & unmount 也不會壞掉 -* Offscreen API - * 讓 React 可以在 UI 切換時保留 component 的 local state 及對應的真實 DOM elements,像是把他們暫時隱藏,而不是真的移除 - * 當這個 component 有再次顯示的需求時,就能以之前留下來的 state 再次 mount -* 為了確保 component 能支援上述特性,effect 必須要是可重複執行也不會壞掉的 - -![](https://i.imgur.com/edtn0uj.png) +- component 必須設計得有足夠的彈性,多次 mount & unmount 也不會壞掉 +- Offscreen API + - 讓 React 可以在 UI 切換時保留 component 的 local state 及對應的真實 DOM elements,像是把他們暫時隱藏,而不是真的移除 + - 當這個 component 有再次顯示的需求時,就能以之前留下來的 state 再次 mount +- 為了確保 component 能支援上述特性,effect 必須要是可重複執行也不會壞掉的 +![](https://i.imgur.com/edtn0uj.png) ### React 哲學 + > 有依賴資料的延伸的任何東西都要成為資料流的一部分 過去在 CC 中寫了 class 的 method 使用了 this.props blablabla,實際上這個 function 不會因為 props 改變而改變,所以無法透過這個 function 辨識到資料流發生變化,因此後續的同步就很容易漏掉。 -FC想做的是只要 input props 固定,output 就固定。為了完美做到這件事,必須讓所有用到原始資料的東西都參與資料流,包含 effect 用到的 function +FC 想做的是只要 input props 固定,output 就固定。為了完美做到這件事,必須讓所有用到原始資料的東西都參與資料流,包含 effect 用到的 function 、function 用到的資料、function 要寫在 component 內就要用 useCallback 來保證整個資料流 chain 不會斷掉。 diff --git a/content/zh/notes/2023-08-17-useful-resources/index.md b/content/zh/notes/2023-08-17-useful-resources/index.md index dcb0933..c81fa08 100644 --- a/content/zh/notes/2023-08-17-useful-resources/index.md +++ b/content/zh/notes/2023-08-17-useful-resources/index.md @@ -1,7 +1,24 @@ --- title: "Useful Resources" categories: ["note"] -tags: ["Resource"] +tags: + [ + "Resource", + "WebDevelopment", + "JavaScript", + "Frontend", + "Backend", + "Career", + "Books", + "Youtube", + "Blog", + "Forum", + "SkillTree", + "Community", + "Package", + "Syntax", + "Interview", + ] #externalUrl: "" # showSummary: true date: 2023-08-17 diff --git a/content/zh/posts/2020-08-30-leetcode-popular-approach/index.md b/content/zh/posts/2020-08-30-leetcode-popular-approach/index.md index c66f9cf..5044e33 100644 --- a/content/zh/posts/2020-08-30-leetcode-popular-approach/index.md +++ b/content/zh/posts/2020-08-30-leetcode-popular-approach/index.md @@ -7,12 +7,14 @@ tags: [ "ALPHA Camp", "Bootcamp", - "Career", "SoftwareEngineer", "LeetCode", "TwoPointers", "HashMap", "BruteForce", + "JavaScript", + "軟體工程師", + "刷題", ] #externalUrl: "" # showSummary: true diff --git a/content/zh/posts/2020-09-06-leecode-287-floyd-cycle/index.md b/content/zh/posts/2020-09-06-leecode-287-floyd-cycle/index.md index ba0bbc8..925ff87 100644 --- a/content/zh/posts/2020-09-06-leecode-287-floyd-cycle/index.md +++ b/content/zh/posts/2020-09-06-leecode-287-floyd-cycle/index.md @@ -7,12 +7,14 @@ tags: [ "ALPHA Camp", "Bootcamp", - "Career", "SoftwareEngineer", "LeetCode", "TwoPointers", "HashMap", "BruteForce", + "JavaScript", + "軟體工程師", + "刷題", ] #externalUrl: "" # showSummary: true diff --git a/content/zh/posts/2020-09-10-leetcode-442-cyclic-sort/index.md b/content/zh/posts/2020-09-10-leetcode-442-cyclic-sort/index.md index 1b400c7..650c24f 100644 --- a/content/zh/posts/2020-09-10-leetcode-442-cyclic-sort/index.md +++ b/content/zh/posts/2020-09-10-leetcode-442-cyclic-sort/index.md @@ -7,10 +7,13 @@ tags: [ "ALPHA Camp", "Bootcamp", - "Career", "SoftwareEngineer", "LeetCode", "CyclicSort", + "JavaScript", + "排序", + "軟體工程師", + "刷題", ] #externalUrl: "" # showSummary: true diff --git a/content/zh/posts/2020-09-27-interview-my-mentor-wells/index.md b/content/zh/posts/2020-09-27-interview-my-mentor-wells/index.md index 05a7ab6..1a941ba 100644 --- a/content/zh/posts/2020-09-27-interview-my-mentor-wells/index.md +++ b/content/zh/posts/2020-09-27-interview-my-mentor-wells/index.md @@ -2,7 +2,17 @@ title: 資深後端工程師訪談  —  Wells summary: Wells 助教是我在 ALPHA Camp A+計畫的 mentor。訪談內容包含了 Wells 助教現職、轉職的經驗以及給轉職者的求職建議,以下訪談內容是用第一人稱及一問一答的方式呈現,盡量保留原話的意思。 categories: ["blog"] -tags: ["ALPHA Camp", "Bootcamp", "Career", "SoftwareEngineer", "RoleModel"] +tags: + [ + "ALPHA Camp", + "Bootcamp", + "Career", + "SoftwareEngineer", + "RoleModel", + "職涯", + "軟體工程師", + "模範", + ] #externalUrl: "" # showSummary: true date: 2020-09-27 diff --git a/content/zh/posts/2020-10-11-jacky-wang-at-instagram/index.md b/content/zh/posts/2020-10-11-jacky-wang-at-instagram/index.md index eab4cf7..3d43494 100644 --- a/content/zh/posts/2020-10-11-jacky-wang-at-instagram/index.md +++ b/content/zh/posts/2020-10-11-jacky-wang-at-instagram/index.md @@ -2,7 +2,20 @@ title: 轉職工程師經驗分享 — Jacky Wang @ Instagram summary: 講者 Jacky 大學主攻電機工程 ,靠著 3 個月的自學和積極態度,在毫無相關工作經驗的情況下取得了第一份軟體工程師的 offer ,成功進入 KKBOX;之後一路過關斬將進入國際級軟體企業 9GAG、Facebook、Instagram。 categories: ["blog"] -tags: ["Career", "SoftwareEngineer", "RoleModel"] +tags: + [ + "Career", + "SoftwareEngineer", + "RoleModel", + "職涯", + "軟體工程師", + "模範", + "Instagram", + "Facebook", + "KKBOX", + "9GAG", + "iOS", + ] #externalUrl: "" # showSummary: true date: 2020-10-11 @@ -188,26 +201,32 @@ Jacky 也舉了兩個簡單的例子:做簡單的決定,會讓之後的人 1. Q:有沒有遇過新的 feature 在 planning 或執行過程中,覺得不該被執行,可能是自己覺得可以別人覺得不行(或相反)的經驗嗎?你是怎麼去面對的? A:這其實常常發生,首先要知道,這些想法其實都是主觀的,所以可能討論半天無法說服彼此,最好的方法是看數據,資源足夠的話,就把兩個人的想法都做出來測試,數字會說話。如果資源不夠,那就需要往上層找 PM 或是再往上找 VP 一起溝通。我曾經偷做 public save list 的功能,但 VP 並不覺得好,所以沒有成案,這證明了溝通很重要,除了 feature 本身好,還要能說服 VP。對我來說,至少自己 try 過了,那種經驗還是很棒的。基本上一個成熟的工程師就會知道自己的想法不一定都是正確的。 + 2. Q:剛進 Facebook 有 bootcamp 可以玩不同領域,請問 Jacky 跨領域時該如何做選擇? - + A:如果我能回到過去,會想多學 server,因為這跟我目前做的相比是完全不同的世界,像現在因為不會 server ,所以遇到 server 相關的問題就要等 server engineer,那自己的工作會被 block 掉,這時候就希望自己會 server。 + 3. Q:做 feature 產生的過程是什麼? - + A:以搜尋功能為例,先定義出目標:怎麼樣是好的搜尋?然後有了目標要怎麼測量?再來可能會思考 UI 可以怎麼設計,讓 user 更容易去點擊,例如加入 story 的搜尋結果...。當然也會有多個方案需要抉擇的時候,這時會找 Data scientist 去計算和預估每個方案做下去的代價,通常是選擇最大成效且資源最少的方案,再找 PM 一起討論。 + 4. Q:會跑 scrum 嗎? - + A:Scrum 以前很流行,但是現在我待過的 team 都沒有在用,我認為是因為如果有兩個 project,那不就要在兩邊的 scrum 跑,這樣其實很累也沒效率。所以我會讓 team member 自己規劃哪時候需要討論或報告。 + 5. Q:Jacky 是非本科系出身,在工作經驗兩三年的狀況下,你覺得自己讓 Facebook 錄取的原因或特質是? - + A:運氣好 (笑 我分享一下自己面試的經驗,我每次面試完都會反省,自己哪邊沒講好、哪題沒寫出來、哪邊緊張...。面試時不只要會寫題,還要會溝通,如果白板題都在思考題目,一句話也不講,那對方會以為你只會寫程式但不會溝通。所以在面試時,寫題目之前要解釋自己打算怎麼寫,以及為什麼要這麼寫。再來是刷題刷得很熟是基本,更重要的是要實際面試,訓練自己溝通的能力。 自己剛開始面試也是很沒自信,後來面試久了就開始有自信,臉皮開始厚 (笑 最後問問題時也會問面試官是負責做什麼產品,面試官通常都會很喜歡聊自己做的產品。 + 6. Q:Jacky 每天五點起床,前一天是幾點睡?怎麼控制自己的工作和生活時間? - + A:我都盡量十一點左右睡,其實是因為發現自己在那段時間通常沒什麼生產力,都是滑手機,覺得很可惜,有點浪費時間,所以不如早點睡,讓明天的行程可以早點開始。剛開始起不來不要氣餒,至少你已經開始嘗試了。可以考慮跟別人約清晨運動,這樣就比較不會賴床;也可以每次起床都 po 上網,讓別人知道,這樣別人就會問你早起做了些什麼事情,之後你會不想讓別人失望,也因此讓自己更有動力持續下去。再來是剛起床意志力弱,東找西找很容易就想放棄倒頭繼續睡,所以我會先把運動裝備準備好,一起床就直接穿上不需要思考,讓自己沒有懶惰的機會 。(編:感覺就跟當兵一樣) + 7. Q:想問 Jacky 是什麼時候開始刷 Leetcode,刷的方式是? - + A:其實我是到了矽谷才開始刷題,因為實際面試了之後才知道會考這些題目,需要刷題準備,推薦買 Leetcode premium 專門刷你要面試的那間公司的題目,還有要看 Glassdoor interview question。我的方法是面試前一天把所有題目複習一遍,因為題目刷多了就會發現其實大同小異,因此面試的實戰經驗比較重要。 如果想知道更多關於 Jacky 的消息或欣賞他鏡頭下的美景,可以追蹤他的 [Medium](https://medium.com/@jackywang135)、[Instagram](https://instagram.com/jackywangadventures) 和 [Jacky Wang Photography](https://jackywang.org/) 📷 diff --git a/content/zh/posts/2020-12-29-2020-career-change-reflection/index.md b/content/zh/posts/2020-12-29-2020-career-change-reflection/index.md index 02254f2..925be55 100644 --- a/content/zh/posts/2020-12-29-2020-career-change-reflection/index.md +++ b/content/zh/posts/2020-12-29-2020-career-change-reflection/index.md @@ -2,7 +2,21 @@ title: "2020 轉職後端工程師心得" summary: "在今年八月底結束 ALPHA Camp 三個學期課程後即投入 A+ 人才計畫,該計畫旨在給參與者更上一層樓的機會,從 Junior 到 Junior+。這篇文章主要是記錄求職過程的心得,面試文請看「轉職後端工程師 24 場面試全記錄」。" categories: ["blog"] -tags: ["ALPHA Camp", "Bootcamp", "Career", "SoftwareEngineer"] +tags: + [ + "ALPHA Camp", + "Bootcamp", + "Career", + "CareerChange", + "SoftwareEngineer", + "BackendEngineer", + "Reflection", + "職涯", + "轉職", + "軟體工程師", + "後端工程師", + "回顧", + ] #externalUrl: "" # showSummary: true date: 2020-12-29 @@ -102,5 +116,6 @@ AC 助教 PJCHENder、 Leo、Brian 及之前的同學 Tim 與我分享面試的 最後的最後,也要感謝自己,你真的走過來了,你很棒! 想知道轉職之後的故事,可以看這幾篇文章 + - [2021–2022 回顧 | 轉職軟體工程師後的第一年](/posts/2022-02-25-year-reflection)。 - [2022–2024 回顧 | 轉職軟體工程師後的第二、三年](/posts/2024-05-05-year-reflection)。 diff --git a/content/zh/posts/2020-12-29-24rounds-backend-engineer-interviews/index.md b/content/zh/posts/2020-12-29-24rounds-backend-engineer-interviews/index.md index eb31678..53643b0 100644 --- a/content/zh/posts/2020-12-29-24rounds-backend-engineer-interviews/index.md +++ b/content/zh/posts/2020-12-29-24rounds-backend-engineer-interviews/index.md @@ -3,7 +3,22 @@ title: "轉職後端工程師 24 場面試全記錄 — LINE TV/91APP/和泰 summary: "這篇只是面試文,面試過程中也參考了許多網路分享,現在輪到自己來回饋了,對於求職心得有興趣請看「2020 轉職後端工程師心得」。" image: https://i.imgur.com/Nft41an.jpg categories: ["blog"] -tags: ["ALPHA Camp", "Bootcamp", "Career", "SoftwareEngineer"] +tags: + [ + "ALPHA Camp", + "Bootcamp", + "Career", + "CareerChange", + "SoftwareEngineer", + "BackendEngineer", + "Node.js", + "Interview", + "職涯", + "轉職", + "軟體工程師", + "後端工程師", + "面試", + ] #externalUrl: "" # showSummary: true date: 2020-12-29 diff --git a/content/zh/posts/2022-02-25-year-reflection/index.md b/content/zh/posts/2022-02-25-year-reflection/index.md index 0466c73..f97ec2b 100644 --- a/content/zh/posts/2022-02-25-year-reflection/index.md +++ b/content/zh/posts/2022-02-25-year-reflection/index.md @@ -2,7 +2,20 @@ title: "2021–2022 回顧 | 轉職軟體工程師後的第一年" summary: "2021 年發生的事情,可能會有點像流水帳,不過我還是有挑出進入業界後的幾個主題:心態調整、全端的重要性、強者姿態、新技術,有興趣就繼續看下去吧~" categories: ["blog"] -tags: ["Reflection", "Career", "SoftwareEngineer"] +tags: + [ + "Reflection", + "Career", + "SoftwareEngineer", + "FrontendEngineer", + "BackendEngineer", + "回顧", + "轉職", + "職涯", + "軟體工程師", + "前端工程師", + "後端工程師", + ] #externalUrl: "" # showSummary: true date: 2022-02-25 diff --git a/content/zh/posts/2024-03-18-hktv-shoalter-resignation-review/index.md b/content/zh/posts/2024-03-18-hktv-shoalter-resignation-review/index.md index c4fe26d..7ccd506 100644 --- a/content/zh/posts/2024-03-18-hktv-shoalter-resignation-review/index.md +++ b/content/zh/posts/2024-03-18-hktv-shoalter-resignation-review/index.md @@ -2,7 +2,19 @@ title: "HKTV Group | Shoalter Technology 離職回顧" summary: "四月,是台灣的春天。在這個季節裡,天氣變化多端,忽冷忽熱。前一天還是陽光明媚,第二天可能就陰雨綿綿。職涯的新機會也是突如其來。" categories: ["blog"] -tags: ["Career", "SoftwareEngineer", "Resignation"] +tags: + [ + "Career", + "SoftwareEngineer", + "FrontendEngineer", + "Resignation", + "Reflection", + "職涯", + "軟體工程師", + "前端工程師", + "離職", + "回顧", + ] #externalUrl: "" # showSummary: true date: 2024-03-18 diff --git a/content/zh/posts/2024-05-05-year-reflection/index.md b/content/zh/posts/2024-05-05-year-reflection/index.md index 7ed55a3..e6608cf 100644 --- a/content/zh/posts/2024-05-05-year-reflection/index.md +++ b/content/zh/posts/2024-05-05-year-reflection/index.md @@ -2,7 +2,26 @@ title: "2022–2024 回顧 | 轉職軟體工程師後的第二、三年" summary: "這兩年的時間,我在工作上有了一些轉變,和新的體會,這篇文章就來分享一下。" categories: ["blog"] -tags: ["Reflection", "Career", "SoftwareEngineer", "Senior"] +tags: + [ + "Reflection", + "Career", + "SoftwareEngineer", + "FrontendEngineer", + "BackendEngineer", + "Senior", + "Growth", + "回顧", + "職涯", + "轉職", + "軟體工程師", + "前端工程師", + "後端工程師", + "資深", + "成長", + "薪資", + "心態", + ] #externalUrl: "" # showSummary: true date: 2024-05-05 @@ -37,7 +56,7 @@ draft: false ### 刷經驗與升等的迴圈! -在主管離職後,公司將整個團隊交由資深工程師來管理。這段時間我也協助資深工程師分擔一些工作。對我來說,這就像上半年資深人員跑光一樣,往好處想這個情況是一個很好的學習機會,我可以透過這個機會接觸到 Engineer Management,從旁學習如何管理團隊,如何與其他部門溝通,如何規劃技術架構等等。過了一陣子,我們撐過了那段兵荒馬亂的日子,公司決定將我升為 Senior,這對我來說是一個很大的肯定,當然這中間也有前任主管在離職前的努力,這邊也要感謝他🙏🏻。 +在主管離職後,公司將整個團隊交由資深工程師來管理。這段時間我也協助資深工程師分擔一些工作。對我來說,這就像上半年資深人員跑光一樣,往好處想這個情況是一個很好的學習機會,我可以透過這個機會接觸到 Engineer Management,從旁學習如何管理團隊,如何與其他部門溝通,如何規劃技術架構等等。過了一陣子,我們撐過了那段兵荒馬亂的日子,公司決定將我升為 Senior,這對我來說是一個很大的肯定,當然這中間也有前任主管在離職前的努力,這邊也要感謝他 🙏🏻。 升 Senior 之後,我開始接手一些比較大的專案,這些專案都是公司的重點專案,學習定義前端的 ticket 開發內容與範圍,進行合適分工並達成開發目標;也有從 0 到 1 建立專案的機會,並接觸 `Next.js page router`、`GitLab CI/CD`、`Docker`、`Vite`、`Jest`、`Cypress` 等技術,建立更完整的 `git flow`、`release flow`,確保開發成果可以順利交付。 @@ -150,7 +169,9 @@ draft: false ## 成長 ### 工作能力成長 + #### 硬技能 + `入行時的履歷 summary` 技術能力及產品思維兼備的軟體工程師,擅長 Vue.js + Node.js 全端開發,具備 3 @@ -244,11 +265,13 @@ Production level 的產品還要考量 Observability,也就是監控,要如 這些都是開發 Web App 時需要考量的議題,都沒有絕對的答案.但都是 Manager 或 Senior 需要有的技能和經驗,如果能夠 pick up 起來,在職涯發展上自然會有更多的選擇。當然你可能受限於團隊,沒辦法有這些經驗,這時候就要主動去尋找公司和團隊的痛點或最佳化的方向,然後提出合適的解決方案,這樣才能夠有機會學習到這些議題。 #### 軟技能 (產品思維、溝通、協作、解決問題) + 不論公司的產品為何,前端工程師負責實作 user interface 都是直接面向 end user,需要能夠從 end user 的角度思考,才能在規格不明確或不合適時,主動提出合理的解決方案,這會需要具備一定的產品思維。 另外,跨職能(部門)的溝通與協作能力也相當重要,前端工程師會需要與許多不同職能的人合作,這中間涉及到的溝通跨度是非常大的,例如要跟 PM 討論需求、要跟 UI/UX 設計師討論設計如何落地、要跟後端工程師討論 API 規格、要跟 DevOps 討論佈署等等、要跟 QA/SDET 討論自動化測試等等。這些都需要具備一定的溝通能力和協作能力,才能夠順利解決問題。 #### AI 工具 & 筆記軟體 + 還有一些工具是我有課金的,近年 AI 大爆發,我最常用的工具是 [ChatGPT](https://chatgpt.com/) 和 [GitHub Copilot](https://github.com/features/copilot),這兩個工具讓我在開發時更有效率,學習新技術時更快速,每個月花幾百塊錢直接原地變強真的是非常划算。 另外,筆記軟體對於工程師來說也是非常這要的,我使用的是 [Heptabase](https://heptabase.com/),這是一個專門用來研究複雜主題的筆記軟體,他提供非常強的視覺化功能,讓我可以更容易的拆解複雜的主題,進而建構屬於我的知識體系。附圖是我運用 Heptabase 的 Whiteboard 和 PDF parser 功能在輔助學習。Heptabase 是台灣團隊開發的,在全球市場也發展得不錯,而且團隊很用心在經營,推薦給大家。 diff --git a/content/zh/posts/2024-06-01-2022-tsmc-it-interview/index.md b/content/zh/posts/2024-06-01-2022-tsmc-it-interview/index.md index 67a29fd..1702ba2 100644 --- a/content/zh/posts/2024-06-01-2022-tsmc-it-interview/index.md +++ b/content/zh/posts/2024-06-01-2022-tsmc-it-interview/index.md @@ -2,7 +2,19 @@ title: "2022 台積電 TSMC IT 面試經驗 (BSID/TSID)" summary: "最近收到台積電 IT 的招募宣傳信,在個人 IG 上分享了一下,沒想到有不少朋友詢問我有關台積電 IT 的面試經驗,所以想說乾脆寫成一篇文章來分享一下。不過我面試台積電 IT 已經是 2022 年的事情了,所以相關資訊可能已經過時,請讀者自己斟酌參考。" categories: ["blog"] -tags: ["Interview", "SoftwareEngineer", "TSMC", "IT"] +tags: + [ + "Interview", + "SoftwareEngineer", + "TSMC", + "IT", + "BSID", + "TSID", + "台積電", + "台積電 IT", + "軟體工程師", + "面試", + ] #externalUrl: "" # showSummary: true date: 2024-06-01