顯示具有 國外工作 標籤的文章。 顯示所有文章
顯示具有 國外工作 標籤的文章。 顯示所有文章

2024/04/30

如何保持穩定心態在異國生活與工作,給自己的筆記和提醒


在國外工作生活,不知道大家覺得最難的點是什麼?

我個人是覺得能保持穩定的心態很重要,察覺自己的心理狀態「知人者智,自知者明」,以及懂得利用工具有效管理

因為一個人在異國生活、除了要適應食衣住行、重新建立朋友圈、工作生活上文化的差異性,身體不適時沒有像台灣方便的醫療健保可以使用,很容易不小心就累積太多壓力。


2022/08/17

轉職工程師 :: 從打包行李準備回台灣,到拿到英國工簽軟體工程師之路 (3)

達成用美金打組長的成就


「待業就好像你人生上所有的齒輪都被卡死了,你不能規劃未來,你不被允許開心、不配覺得幸福,所有的路都被這個障礙給擋住了。」

本來的公司是有贊助簽證的,但我們有些狀況,
所以最後是先辭職後再找有贊助簽證的公司。

可是當我準備一段時間開始投履歷時,
剛好遇到很大型的人事凍結,各公司不是凍結就是在裁員,
也看到很多人分享心得拿到好幾家 offer 最後卻都說 headcount freeze。
請人內推和投了 200, 300 封履歷,好像只有收到 3 家左右的回覆,
和之前封城時比算是少相當多,
還有好不容易收到面試邀約,得到的回覆卻是 unfortunately, we don't support visa

嘗試轉職工程師時我待業了約一年,
曾經想放棄當工程師時待業了約半年,
拿到打工簽找英國工作時待業了約半年,

但這時候的待業是壓力最大最大的,因為不但負債、簽證快到期還可能要打包回台灣

2022/08/13

轉職工程師 :: 從放棄當工程師,到在英國就職的軟體工程師之路 (2)

達成整主管的成就



找工作 - 放棄當工程師去應徵文書


在新創公司那時候除了平日常常加班到凌晨 12 點、1 點外,星期六、日也可能被叫去加班,有次還掛急診又回來繼續加班;
沒有學習到新事物和解決問題的能力,一直重複搬磚的行為,天天被業務壓得喘不過氣來,對自己未來一點幫助都沒有
另一個 team 更可憐,尾牙喝酒後去卡拉 OK 唱歌,唱到凌晨五點被公司 call 回去修 bug。

我不想要生活品質不好、但薪水高的生活,寧願薪水低一點卻可以準時上下班,那時候反省時覺得是不是自己不適合當工程師,辭職後曾經跑去應徵文書。

但當時面試文書時,面試官了解我心路歷程和我在公司做的事情後,苦口婆心勸我繼續當工程師,覺得放棄很可惜。

而我也感謝當時那個面試官拒絕我,因為讓我後來有機會進大公司,讓我理解到原來也是有可以兼顧生活品質和薪水的公司。


--
那時候也了解到當主管 / PM / 客戶提出的需求或時限,你評估過後覺得不可行、執行上有困難、花費很多時間但效益不高、時間太趕等等。

不需要勉強自己一定要達成對方的要求,然後加班或用自己時間去趕出來,有第一次就會有第二次,然後就會有第三第四五六次,有可能最後趕出來還是不是對方要的,卻花了很多自己的時間。

把為什麼不可行的原因、疑慮的點和對方討論、說明,
如果對方還是不接受,常常要你加班或用自主時間做出來,請快逃。

2022/07/20

轉職工程師 :: 撞牆撞得亂七八糟,從睡廁所到睡公司的軟體工程師之路 (1)

達成在主管辦公室玻璃上畫畫的成就


大學 & 研究所 & 交換學生 - 所有階段都不務正業


大學的時候念工業工程,但非常的不務正業,
除了大一必修計算機概論寫 C++。

大二必修網路資訊應用 ASP.NET C# 架網站和資料庫管理系統
選修系統分析與設計學畫 UML 和資訊安全與規範密碼學。

大三選修3D 互動內容製作用 unity 寫 JavaScript。

大四畢業專題大家都在寫生產管理、供應鏈等,我跑去寫 AR;
那時候展出時外來的評審委員看了後大為驚艷,還遞名片給我說希望我過去他們那邊就讀,其實是挺開心的,但還沒有真的想到要往資訊這方面發展,所以就沒有考慮。

再來就是以前想念的科系想做的事情都被家裡限制,想念醫學想念美術想念哲學想念建築,
所以大學快畢業時期時還是不知道自己想做什麼或是我能做什麼,本來還考慮考高普考,後來卻誤打誤撞申請了研究所。


--
碩一時進了 AR/VR | AutoCAD 實驗室,
選修 3D 視覺模擬和虛擬實境,用 unity、cinema 4D 結合 kinect 做手機遊戲寫 JavaScript。

接國科會計劃時和機械、化學系合作,用 dreamweaver 架宣傳網站,
那是第一次一個人架網站而且不是只是作業,是要公開出去的,
那時候還被 TPCA 台灣電路板協會把網站連結放在首頁,又覺得更有成就感;
後來化學系會長也想委託我幫忙架站,只是那時候沒有接受。

論文時則是用 C++ 寫 PSO 演算法解問題。


--
那時候念碩士時到處聽校內的演講,意外知道有交換學生這件事,
那時候我直接鎖定要去德國,直接不填備取選項,如果沒上我就不去交換了
除了德國我都不要! 就是對於德國有種莫名憧憬。

而德國又是全校最熱門的交換學校,所以一定要面試,
那因為我是系上頭一個申請交換學生的人,準備和查詢起資料特別辛苦。

於是碩班時白天寫論文、和教授 meeting、當兩門課助教批改考卷上課、當實驗室管理員、辦理實驗室聚餐、接國科會計劃、和機械化材系開會等;
晚上則是準備第一階段校內初審 : 純粹是交換申請、校內成績等基本資料;
還有第二階段校內面試 : 準備 PPT 上台報告包括自我介紹、申請動機、學習計劃等。

那時候收到面試通知的時候,是在我論文提案的前兩天,提案前就已經熬夜熬得天翻地覆不知白天黑夜了,提案完才休息一晚上馬上就開始準備面試資料。再來因為我想出國交換前把論文寫好,所以非常拚,那時候一到日都是早上起來忙到半夜。

面試通過後要再提供相關資料給德國校方審查 : 自傳、動機信、推薦信、校內成績、英文檢定、學習計劃、選修課程學分及採計表、其他有利審查等,

審查過了再能再去德國在台協會辦簽證、後續訂機票等。

而準備資料相關,認識的管院同學蓋章都是秘書蓋一蓋就好很快,
但我就必須要自己跑,找系主任與工學院院長簽名時之類,
因為是系上第一個,每次找對方簽名都會有個小面試吧,
系主任與院長都會問問相關的事情,所以會花點時間。

後來在德國選經濟系,因為覺得大學研究所都是工科,想修點經濟財金相關的課程,但我跑去選修了資訊相關課程寫 SAP,
那時候開始真的覺得我真的對寫程式有興趣,想要做相關工作,
然後那時候看到 ROR 很熱門薪水很高,就開始學 Ruby


2022/07/12

System Design Interview 不是比誰口才比較好


之前在台灣面試時都沒遇過 system design 面試,好像也較少聽聞有 system design 的關卡;
在英國時也不是所有面試時都會考 system design,通常是用來判斷該工程師是不是 senior 時會才比較會遇到。身為一個 senior engineer 除了被要求技術能力外,對於系統的架構設計和溝通能力也都會被期望達到一定的程度,同時也會預期多少具有領導能力。

而面試範圍可以小到設計一個 rate limiter,也可以大到設計一個 Netflix,其中要考慮的深度和廣度也就跟著不同,而且也有可能因為公司需求、軟硬體限制等而有所改變,沒有所謂最佳的解答。

在網路上看文章、影片 mock system design interview 時發現大家面試時,同樣一個問題,面試官的著眼點、流程的進行架構都不太一樣,那究竟什麼樣的內容是 system design inteview 時必須要談到的呢?

這裡用 designing a URL shortener 當範例,盡可能將流程結構化,並列出在設計時會考量的點,希望在面試時自己心中能有個大綱,好跑過一輪必考量的點;不過 system design 可以包含的範圍實在太廣了,可能會有些疏漏,還請見諒。


2022/06/16

簡單輕鬆十分鐘學會 Greedy Algorithm (貪婪演算法) 刷 LeetCode

一、Greedy Algorithm



1.1 基本觀念介紹


Greedy Algorithm (貪婪演算法) 是指在對問題求解時,總是做出在當前看起來最好的選擇,所以此種演算法在解問題時,不是所有題型都能得到 global optimization (全域最佳解),但對於相當多問題能產生整體最佳解或者是近似整體最佳解。


總之貪婪演算法的精神就是 : 短視近利、今朝有酒今朝醉,每一步面臨選擇時,都做眼前最有利的選擇,不考慮對將來是否有不良的影響,與 dynamic programming 不同,不會保留計算結果。


假設現在有個金額 M,有 1、5、10、20、50 元這些幣值種類,要盡可能用最少的錢幣湊到金額 M。根據貪婪演算法,能用 50 的就盡量用 50 的,否則盡量用 20 的...以此類推;在這種策略下,M 若是 15 則等於 10 * 1 + 5 * 1,共使用了 2 種錢幣。


但是如果我們換一組錢幣的種類如 1、5、11,貪婪演算法可能就不是最佳解。


或是我們有一個最多能背重量為 W 的背包,現在有 N 件物品,每件物品只能用一次且價值不相等,求解將哪些物品裝入背包裡物品價值總和最大,這時候因為要同時考慮重量和價值,也沒辦法用貪婪就取得最佳解。


這在下一篇 Dynamic Programming (動態規劃) 會講解到。


2022/06/14

簡單輕鬆十分鐘學會 Graph (圖) 刷 LeetCode

一、Graph

1.1 基本觀念介紹


此處談及的 Graph 並不是指圖片或者圖形,而是由數個 vertex (點) 及數條 edgs (邊) 所構成;點與點之間以邊相連,表示這兩點有關聯性。


而一個頂點的 degree (度) 指與該頂點相連的邊的條數。


兩點之間也可以有很多條邊,代表這兩點有很多項關聯;一個點有連到自己的邊,稱之為self-loop (自環),表示自己和自己有關聯。



1.1.1 Isomorphism / Isomorphic




(https://web.ntnu.edu.tw/~algo/Graph.html)


如果兩張圖的連接方式一模一樣時,則稱作同構圖。圖上的點可以任意移動位置,不論點的位置如何,都不會改變點與點之間的關聯。


簡單輕鬆十分鐘學會 Heap (堆疊) 刷 LeetCode

一、Heap

1.1 基本觀念介紹


Heap 有兩種分為資料結構和記憶體,都是取累積傾向的意思,而這邊要講的是資料結構的 Heap。


Heap 常見的實作為 Binary Heap,它的樹為 complete binary tree (完全二元樹) 如上圖。一棵依序節點可以從上到下、從左到右的表示為 1, 3, 6, 5, 9, 8。如果刪掉 node 9 那麼這便不是棵完全二元樹;如果拿掉 node 8 仍然是棵完全二元樹,因為整棵樹仍然可以從上到下、從左到右的表示成 1, 3, 6, 5, 9。
  • 新增節點時優先從左到右填滿階層後才往下一層
  • 概念基於 binary Tree,每個 node 下面最多只會有兩個 child,也有可能是一個或沒有
  • 常使用 array 來實作,由左至右、由上到下表示出一個完全二元樹
  • 若目前的 node 的 index 是 i,left child node 的 index 就是 i * 2 + 1,right child node 的 index 是 i * 2 + 2

2022/06/13

簡單輕鬆十分鐘學會 Tree & Binary tree & Binary search tree 刷 LeetCode

一秒理解資料結構裡的樹


一、Tree & Binary tree & Binary search tree

1.1 基本觀念介紹

1.1.1 Tree

是一種模擬現實生活中樹幹和樹枝的資料結構,分為 :

Root (根節點):沒有父節點的節點,所以每棵樹只有一個 root,如 A;在根節點之下是樹的樹枝,擁有 0 到 n 個子節點。

Node (節點):一個個連結點,如 A、B、C ... M 都是結點。

Parent (父節點) : 節點 B 是 I 和 J 的父節點。

Child (子節點) : 節點 I 和 J 是 B 的子節點。

Siblings (兄弟節點) : 擁有共同父節點,如 I 和 J、K 和 L 和 M。

Leaf (葉節點):節點沒有子節點的節點稱為葉節點,如 I、J、K、L、M、F、G、H。

Ancenstors (祖先節點) : 指某節點到根節點之間所經過的所有節點,都是此節點的祖先節點。

Level (階層) : 如果樹根是階層 1,其子節點即是階層 2,依序可以計算出樹的階層數;如節點A 階層是1,B、C 到 H 是階層 2,I、 J 到 M 是階層 3。

Height (樹高) : 又稱為 Depth (樹深),指樹的最大階層數,如此圖的樹高是 3。

Dregree (分支度):指每個節點擁有的子節點數,如節點 B 的分支度是 2,節點 E 的分支度是 3。

--
最廣義的樹對於 node 之 child 數目沒有限制,因此每個 node 可以有多個 child。

Linked list 也可以視作是樹只是每個 node 都只有一個 child。


2022/05/09

簡單輕鬆十分鐘學會 Stack & Queue (堆疊 & 佇列) 刷 LeetCode

一、Stack & Queue

1.1 基本觀念介紹

這裡講的 stack 和 queue,就是和 event loop 裡會用到的 call stack 和 callback queue 的基礎資料結構。

如果不是很清楚 event loop 是什麼,可以看這篇

Stack 和 Queue 常常用 array 或 linked list,但沒有限定,只要能實作出該資料結構即可。



1.1.1 Stack

Last in, First out (LIFO)

最後一個進去,第一個出來。

比如書籍堆疊起來,最後一本堆上去的會第一本先被拿走;


最下面 bottom 是第一個被放入的 frame,然後 frame 被一個一個堆起來 (push),

如果要把 frame 抽走,只能從最上方開始拿 (pop)。




2022/04/14

簡單輕鬆十分鐘學會 Recursion (遞迴) 刷 LeetCode

一、Recursion

1.1 基本觀念介紹


遞迴就是在函式之中呼叫函式自己本身,本質上是將複雜的問題,拆分成具有相同性質的子問題,進而解決問題的方法。


一個基本的遞迴函式一定要有:

  • 終止條件 (基本條件)

  • 遞迴條件 (呼叫自己的條件)


如果沒有終止條件,就會無限循環直到當掉。




範例 1 : 假設輸入一個正整數 n,求 1 + 2 + … + n 的總和


我們可以很直覺的使用迭代 (迴圈) 的方式,將所有數字累加在一起。



但因為這個問題能拆成有規律的數個小問題,

如輸入正整數 2 → 1 + 2 = 3

輸入正整數 3 → 1 + 2 + 3 = 6


所以這時候就可以使用遞迴來計算。


Time complexity 是 O(n),Space complexity 是 O(1)


簡單輕鬆十分鐘 Linked List (鍊表) 刷 LeetCode

一、Linked List

1.1 基本觀念介紹



Linked list 是一種常見的資料結構,會包含 head 和 tail 的資訊,以 null 來代表 Linked list 的終點,使用 node 來記錄、表示、儲存資料。



1.1.1 Singly linked list




單向鏈結串列 (單鏈結串列、線性鏈結串列、普通鏈結串列) 是最基本的鏈結串列,其特點是鏈結串列的鏈結方向是單向的,對鏈結串列的存取要通過從頭部開始,依序往下讀取。


每個 node 則會包含 value 和 next (Pointer,指向下一個 node 的位置) 的資訊。


2022/03/22

簡單輕鬆十分鐘學會 Hash Map (雜湊表) 刷 LeetCode

先來個地獄梗 emtional damage!

一、Hash Map

1.1 基本觀念介紹

  • Hash map 是儲存 (key, value) 這種 mapping 關係的一種資料結構 (當數據儲存在記憶體中時,決定數據的順序和位置的稱之為資料結構)
  • 各語言 / library 基本上有其 hash function,如有需要也可以自行建置
  • 語言不同名稱也會不同,但基本上 Hash map == Hash table == Hash object == Hash dictionary

(https://vhanda.in/blog/2012/07/shared-memory-hash-table/)



舉例來說,如果我們有 n 個數字要儲存時,通常會用 array 來存。 存好後如果我們拿到另一個數字 37,要判斷這個數字有沒有在 array 裡面,那我們就得跟 array 裡的元素一個個比較,這時 time complexcity 就會是 O(n);下次再換查另一個數字時, time complexcity 又就會是 O(n)。 但如果已經先建立好 hash table,之後如果要查數字 37 時,建立 hash map 時雖然 time complexcity 會是 O(n),但查詢的 time complexcity 就只會是 O(1)。 不過 O(1) 還是理論值,insert、search、lookup、delete 都有可能造成 time complexcity 是 O(n) (請看 example 3) 。


簡單輕鬆十分鐘看懂 Time complexity & Space complexity 分析刷 LeetCode

一、前導知識

1.1 演算法評估標準


當同一個問題可以用不同演算法去解決時,需要一個評量的標準去評估哪個演算法比較好,通常會用兩個指標去評量演算法的好壞 :
  • Time complexity (時間複雜度)
  • Space complexity (空間複雜度)
當然理論上所花費的時間和占用的記憶體是越小越好。


1.2 Time complexity


Time complexity 是電腦執行演算法所需要耗費的時間成本,通常會用 O (Big O notation) 去計算。


Big O notation 是解決一個規模為 n 的問題所花費的時間,或者所需步驟之數目;而演算法多快通常不是以秒而是步驟次數來衡量,因為每個人電腦效能會影響執行速度,若用秒數來衡量會顯得不夠客觀。

2020/07/31

英文我知道聽讀寫,不知道怎麼開口說

此篇主要是分享關於增進英文口說能力以利應徵職缺、閒聊和辦公的一些個人經驗;不保證完全適用於每個人,但如果因此可以幫到你那就太好了。

*注意 : 因本人主要是應徵英國職缺,所以推薦相關教材會以英國的為主,但不影響如何精進


一、每天都要接觸英文,不管是用哪種方式,讓自己習慣


最好學習某種語言的方式,就是讓自己浸盈在那個語言的環境中 ; 但我們現在不在使用那個語言的國家的時候,可以怎麼做呢?

1.1 查資料看菜單時等等都先看英文說明再對照中文

1.2 看影集時練習聽力

  • 其實也不一定要是影集,也可以是電影Youtube 影片Podcast音樂等,選擇自己有興趣的,不要硬逼自己一定要看新聞或科技新知什麼的,做自己沒興趣的事情沒辦法維持太長久。
  • 第一次看時隱藏字幕用聽的,第二次看時開啟英文台詞,看自己剛剛聽不懂的地方單字和句型是什麼,第三次開啟中文台詞,看自己理解的內容正不正確
  • 重複朗誦影片中人的台詞,學習英語母語者講話的腔調。
  • 看教學、新聞影片時一邊列下大綱和關鍵字,最後用自己的話總結影片中的內容。
  • 看訪談影片,假裝自己是受訪者回答問題。

  • 推薦影集 : 
    • The good place: 演員咬字清晰,對話很實用,非常適合練習口說
    • F is for the family: 可以學到生活化的用語,和不少髒話