路人超能100 第三季真的太好看,一哭一哭

Oh ya fans 快破 100,快分享給你所有要找遠端工作的朋友?

2022 上半年中國網路公司大裁員

2022年上半年中國疫情再次爆發,開始無限封城,中國內需死亡,一線網路公司開始裁員:阿里、騰訊、百度。前一份工作是遠端香港輿情公司,因此年中也把台北辦公室撤除。好在年初就開始刷題,陸續有面試,資遣以後兩週就找到工作,算順利。當時也有考慮到下半年經濟轉弱,想說不要休息太久,也沒有進入高風險的區塊鏈產業。

目標就是找一份遠端美國的工作,了解一下矽谷的工作方式,練一下全英文工作,因此拒絕了一些全遠端的東南亞新創,滿可惜,雖然也是全英文。除了新加坡以外,印尼跟馬來西亞的軟體新創也很不錯,市場大就能養出大型軟體公司。

遠端美國公司是怎樣的生活呢?

開發上:

  1. 測試很嚴格:80%以上的覆蓋率,無論是 UI 還是 utility: API, formatter
  2. 開發時間很充裕:比起前一份香港公司超級加班,完全有時間好好完成工作,開會時間也額外計算,請假也很容易,完美的 work life balance
  3. 元件拆分到極致:每個 component 都超小,完全把 UI 跟 Function 分開,能共用的元件一律拆開,每份文件都不超過 100 行
  4. micro frontend:用 Rush 進行版本控制,把 component 變成 module,再利用公司自己建立的 layout 系統整合

以上當然有優點也有缺點,基本上就是大公司的開發方式,開發上當然也會比較慢,但架構就很優秀,前端團隊也有架構師,開發過程會不斷 refactor。

工作模式:

  1. 半夜要開會但白天時間自由:晚上 12 點左右開會,其他時間要幹嘛都可以,完成工作就好
  2. 主動發問:遠端見不到同事,因次找人都要主動問好幾個人,被動很容易被放在一邊沒事幹,跟台灣公司不同,主管不會一直盯著你
  3. 自律且自修:公司留不少進修時間,也有提供線上課程,自己想辦法跟上 senior 的程度
  4. 全英文開會還是要專心:中文開會滑個手機基本上內容都還聽懂,英文就要專心一點,雖然有時候別團隊的東西不懂正常,但如果不主動了解,可能過半年對產品都還不懂,只能做好自己拿到的任務

需要花時間習慣,也不一定適合每個人,獨立作業能力要強,學習能力快。其他就是遠距會碰到的問題,文件沒有及時更新,訊息傳遞不及時等,同事除工作以外沒有交流。

小結:好英文能讓你有更多機會,面對更少競爭

中文開發者真的很多,雖然中國軟體業開的薪水也很不錯,但競爭真的很激烈,加班也是家常便飯。英文開發者雖然很多,但工作機會更多,對美國軟體公司來說海外員工薪水較低,向外找人才的動力很強。雖然薪資低於美國本土,但對台灣人來說薪水也不差,工時跟自由度絕對是大勝。

唯一要注意的是畢竟是海外員工,不容易成為核心,要加倍努力刷存在感。或是直接躺平,平凡也不是什麼壞事(笑)。祝大家 2023 工作順利

新年快樂!!!

--

--

最近看青之蘆葦,為足球有更深入的了解
var largestNumber = function(nums) {
// 如果 array 為 [0, 0] 則不用排序回傳 0
if (nums.join("") * 1 === 0 ) {
return '0';
}
function quickSort(arr) {
// 如果 array 為空陣列或只有一個元素,直接返回,不需排序。
if (arr.length <=1 ) {
return arr;
}
let pivot = arr[arr.length -1]; // 將陣列元素最後一項設為基準值
let left = []; // 用來儲存比基準值大的元素
let right = []; // 用來儲存比基準值小的元素
for(let i = 0; i < arr.length - 1; i++) {
// 設定 i < arr.length - 1 是因為陣列最後一項被我們設為 pivot 因此不需考慮
if (`${arr[i]}${pivot}` > `${pivot}${arr[i]}`) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return [...quickSort(left), pivot, ...quickSort(right)]
}
return quickSort(nums).join('');
};

利用 Quick Sort ,例如 9, 23 判斷標準為 923 > 239,所以 9 要放到 left array

--

--

希望中國人平安
var sortColors = function(nums) {
let zeroIndex = 0
let twoIndex = nums.length - 1
for (let i = 0; i <= twoIndex; i++) {
if (nums[i] === 0) {
[nums[i],nums[zeroIndex]] = [nums[zeroIndex], nums[i]]
zeroIndex ++
} else if(nums[i] === 2) {
[nums[i],nums[twoIndex]] = [nums[twoIndex], nums[i]]
twoIndex --
i--
}
}
};

利用 zeroIndex 和 twoIndex 兩個指針判斷下一個數字要放到前面還是後面,迴圈指針 i 等於第一個 twoIndex 停止,若 nums[i] === 2 i 需要再次判斷,可能被交換的 twoIndex 為 2 ,則需要再被放到最後

--

--

我妹今天出發去史丹佛資工碩士,很了不起呢!
/**
* @param {number[]} w
*/
var Solution = function(w) {
this.arr = [];
let sum = 0;
for(let i = 0; i < w.length; i++) {
sum += w[i];
this.arr.push(sum);
}
};
/**
* @return {number}
*/
Solution.prototype.pickIndex = function() {
let target = Math.random() * this.arr[this.arr.length-1];
let low = 0;
let high = this.arr.length - 1;
while (low < high) {
let mid = Math.floor((low + high)/2)
if (this.arr[mid] <= target)
low = mid + 1;
else
high = mid;
}
return high;
};

題目中例子2,權重為[1, 3],表示有兩個點,權重分別為1和3,那麼就是說一個點的出現概率是四分之一,另一個出現的概率是四分之三。由於我們的Math.random()函數是等概率的隨機,那麼我們如何才能有權重的隨機呢? 我們可以使用一個trick,由於權重是1和3,相加為4,那麼我們現在假設有4個點,然後隨機等概率取一個點,隨機到第一個點後就表示原來的第一個點,隨機到後三個點就表示原來的第二個點,這樣就可以保證有權重的隨機。那麼我們就可以建立權重數組的累加和數組,比如若權重數組為[1, 3, 2] 的話,那麼累加和數組為[1, 4, 6],整個的權重和為6,Math.random() * this.arr[this.arr.length-1],可以隨機出範圍[0, 5] 內的數,隨機到0 則為第一個點,隨機到1,2,3 則為第二個點,隨機到4,5 則為第三個點,所以我們隨機出一個數字target後,然後再累加和數組中查找第一個大於隨機數target的數字,使用二分查找法可以找到第一個大於隨機數target的數字的坐標,即為所求。

參考:https://www.cnblogs.com/grandyang/p/9784690.html

--

--

黃韋智

自學寫程式,目前爲 React 前端工程師。熱愛旅遊,將近 30 個國家,足跡遍佈亞洲與歐洲。生命與街舞已經離不開,歡迎訂閱 Youtube 頻道:https://www.youtube.com/channel/UCEU-bEDl7R-iGyLVZFae33g