漂J
回台中面試碰到 System Design 大魔王
由於沒準備所以亂畫一通
漂J
考了一題我覺得 Tsuki-勝ったな、ガハハ! 一定會的東西 (設計一套可以 Infinite Scale Up 的 Messaging Broadcast Service)
但是我沒準備只能亂畫一通
漂J
然後有個面試官長得實在太像前前前主管,我看到的時候傻眼了 1 分鐘,頻頻確認是否是同一個人(雖然心裡想不可能,但實在長得有點像,只是畫風更美型一點
Tsuki-勝ったな、ガハハ!
scale up 還是 scale out?
漂J
Tsuki-勝ったな、ガハハ! : 有差別嗎 慘了連專有名詞都分不出來
Tsuki-勝ったな、ガハハ!
毀了
漂J
坦白說這家因為要回台中,所以不是首選,但因為想體驗看看大公司面試所以還是去面了,確實也見識了一番,挺不錯的
漂J
https://images.plurk.com/42SwA215zwcQPBQJTdSFrE.png
印象中的題目大概是這樣
漂J
另外還考了一題怎麼實作 Set 這個資料結構
只要實作兩個方法:(1) 放入資料 (假設都是 String 即可) (2) 列舉 Set 內的所有資料
實作完成之後希望你改用 O (1) 的時間複雜度來最佳化

但我一開始設計出來就是 O (1) G___G
l• ܫ•) Davyキュルッ
一開始就是 O(1) 不是很棒嗎XDDDD
漂J
l• ܫ•) Davyキュルッ : 但這樣最佳化的時候就無事可做了 等於一開始寫的 O (n) 的那個回圈就完全是多餘的,只是把它擦掉而已
漂J
對了它們的白板題是真的在白板考的...
漂J
然後我 System Design 最後就卡在 Redis 怎麼 scale 那邊
漂J
可能要加更多東西進去 但我亂畫一通只想得出 Redis ...
漂J
面試官有提示可以把不同 client 的資料分開放在不同 instance 的 Redis 內(我回答可以用類似 Sharding 的方式),但接著又被考會不會重複 broadcast,我很艱難的擠出可以用類似 queue 的資料結構判斷 client (browser) 是否已經 broadcast 過了,接著又被要求設計每次 pub message 的時候要怎麼去實現和判斷是否重複 broadcast 的資料結構...
l• ܫ•) Davyキュルッ
最佳化的時候可以提出你已經最快了的說明就好啦
l• ܫ•) Davyキュルッ
就直接 partition 讓不同 redis 負責不同 client 也可以吧?
l• ܫ•) Davyキュルッ
從設計上保證不會撞
漂J
我最後作答出來的版本是這樣
(但中間面試官有提示我,不然一開始我連 LB 都忘記畫...)
漂J
https://images.plurk.com/37QG24RjbqgareuMBzxIpN.png
漂J
但要解釋用怎樣的資料結構去紀錄 pub message 給每個 client 的時候就卡卡...
l• ܫ•) Davyキュルッ
omg... 你有用過 redis cluster 嗎
達人🐉☄️💫
沒用過
漂J
l• ܫ•) Davyキュルッ : 我有提到 redis cluster,但問題是我不熟 所以只好跟面試官坦承其實我也不熟,只知道用 redis cluster 應該可以實現 (ninja)
漂J
然後面試官就給我個提示說,假如先不講 redis cluster,覺得單純就把 client 分流的角度來看,假如可以用很多不同的 redis instance,那我覺得怎麼分會比較好,我就講說可以類似 sharding 那樣的概念,然後把白板的圖改成我上面上傳的那張
l• ܫ•) Davyキュルッ
redis cluster 主要是靠 key hashing 做 sharding
讓所有的 instance 負責處理不重複的 key
用這種方法來 scaling
l• ܫ•) Davyキュルッ
這種 stateful 的東西沒辦法簡單用 L4 load balancer 解決
你需要仰賴 L7 load balancer 或 clustering 達到
漂J
l• ܫ•) Davyキュルッ : 這樣單純用 redis 做 pub/sub 可以支援嗎?
泉的第一張限定SSR
感覺漂 J 面的職位很資深...
漂J
BTW 先跳到面試結束的那一段好了,主管請我到他的辦公室,問完期望薪資和一些到職日之類的規劃之後(當然他有說他後續還有安排一些人選面試),問完我的期望薪資後,講了一句
「你知道台中和台北還是有差」
(他是指...薪資???)

咦奇怪我記得他們開的待遇範圍很高啊 XDDDDDD
我覺得我講的還很保守了(我每家都講一樣,然後他們家自己貼在 JD 的待遇範圍下限應該就比我講的期望待遇上限還高了)
漂J
泉的第一張限定SSR : 的確是有掛 Senior 的 title
漂J
這是我少數看到會蹦出那一句的公司,覺得微妙...
漂J
但平心而論,主管跟面試的工程師(應該是他們其他 Senior 的 team member 或是 team lead 之類的) 都滿客氣也滿親切的,然後我又一直被安慰說「不要緊張,你看起來很緊張」
漂J
如果沒有主管蹦出的那一句,我對這家公司面試的評價是非常高的,以台中來說實屬難得
漂J
我記得他們 JD 上面打成 JK = =寫 1.3N ~ 1.5N,我開的期望待遇是 1N ~ 1.15N ,應該沒很貪心吧
達人🐉☄️💫
N 是什麼意思
AllanCat
你面的都好猛喔,我只會相談勝歡
漂J
達人🐉☄️💫 : N 就是一百萬
Tsuki-勝ったな、ガハハ!
這樣不是要用 M 嗎?
漂J
AllanCat : 沒吧 我也是各種被打臉 連 Easy 等級的題目都寫不出來
泉的第一張限定SSR
n 不是台積電新人的月薪嗎xd
漂J
Tsuki-勝ったな、ガハハ! : 因為不想說 N 是多少啊
Tsuki-勝ったな、ガハハ!
漂接的黑話,懂
漂J
總之我覺得大概 Fail,但坦白說因為不太想回台中 完全本末倒置了啊… 沒有很認真準備這次的面試,就當增加面試經驗吧
漂J
HH 每次都先把人拐騙去面試再說
l• ܫ•) Davyキュルッ
N 不是臺積電新人月薪嗎 <--- 我也這麼以爲
漂J
總之它們開的價格在台中其實算很有競爭力了我覺得,畢竟你也知道的台中除了菠菜以外其他接案公司的待遇都頗慘
l• ܫ•) Davyキュルッ
那看來是你開太低 主管以爲臺北這麼低價
漂J
講到這個就想到面試時講到離職原因,被進一步追問我們工程師有沒有實際碰業務 or 只是負責寫 code ,是不是怕要去柬埔寨,笑死 XDDD
l• ܫ•) Davyキュルッ
他是不是也想去
達人🐉☄️💫
真假 台積新人月薪一百萬喔
l• ܫ•) Davyキュルッ
漂J
BTW 昨天面試被問了最後一題額外的,大意是 function 裡面會做一件事情,要怎麼讓它在一秒鐘後才做(有點忘了,大概是這樣)

然後我用 promise 寫之後,被問 follow up 是如果改寫一下會不會動,我就傻掉了答不出來
可是我現在想起來,在電腦測試,看起來沒問題啊...
漂J
https://images.plurk.com/17VVRN6ttpnoVqFZddBeVZ.png
l• ܫ•) Davyキュルッ
改寫成怎樣
Dameningen
上禮拜才建了六主六從 的Redis,原來還可以這樣用啊
看到WS以為是用MQ之類的東西然後用K8S搭起來
漂J
l• ܫ•) Davyキュルッ : 就改寫成下面 const p = 那段,然後問說這樣能不能跑 (應該啦 我有點忘了)
漂J
原本只有 function test 那段
l• ܫ•) Davyキュルッ
follow up: 那如果是要讓他執行完之後才做另一個 func2() 呢?
可以嗎?
漂J
l• ܫ•) Davyキュルッ : 可以ㄅ,就用 then ()
就 func2() {
return new Promise ...
}

然後 p().then(result => {
func2 ();
})
漂J
Redis 分很多 instance 這題我記得 i 社 screening interview 其實也有問到
l• ܫ•) Davyキュルッ
你跑看看ㄚw
漂J
.......奇怪怎麼不行
漂J
不對我回憶了一下,我在這則噗寫錯了,實際上我寫在白板的裡面有 resolve(true) 之類的
漂J
修正一下,應該是這樣
面試時寫的 test() 裡面有 resolve
https://images.plurk.com/3orvusTdwj05C4BlzM3aXv.png
漂J
但因為是最後一分鐘被追加的問題
不知道是不是看我 System Design 寫爛了打算不給過了

面試官的 follow up 只有寫到 const p = test 那一段(我有點忘了,但應該差不多是那樣沒錯),然後問我那樣寫會不會執行的出來,我就傻掉了跟面試官說窩不知道,面試官就點了點頭說好ㄅ,不確定對方實際上到底想考我什麼
漂J
話說這樣面了一輪,我發現講「優化」的人真的超多的啊

只有我因為以前大吵一架,始終堅持講「最佳化」或是「optimize」嗎
debɐnchery
要仔細分辨 改善 改進 增強 進步 提升 之間的語感細微差異太難了 通通講優化就好
l• ܫ•) Davyキュルッ
阿你的 2 怎麼又沒有 resolve 了wwww
漂J
l• ܫ•) Davyキュルッ : 忘記了
不過如果 2 後面沒做其他事情那會影響嗎?
l• ܫ•) Davyキュルッ
你這 Promise 就結束不了啊 卡在那
漂J
那還好他沒繼續考下去,不然後面就忘記 Promise ㄌ
達人🐉☄️💫
沒 await 應該不會卡吧
達人🐉☄️💫
而且這題目連 Promise 都不用吧
漂J
想想好像是耶,如果只是要一秒鐘後再執行 func1 裡面的內容,那應該也不用特地用 Promise 包起來
l• ܫ•) Davyキュルッ
達人🐉☄️💫 : 會消不掉 卡 GC
漂J
l• ܫ•) Davyキュルッ : 會卡 GC 是因為沒有 clearTimeout 吧
達人🐉☄️💫
l• ܫ•) Davyキュルッ : p2 回傳值沒存 還是會 gc 吧
l• ܫ•) Davyキュルッ
是 Promise 沒有結束 一直在 not fullfilled
漂J
l• ܫ•) Davyキュルッ : 可是我查 Stackoverflow 他寫瀏覽器會自己 GC 耶
Does never resolved promise cause memory leak?
漂J
還是是要看 Runtime 實作差異
l• ܫ•) Davyキュルッ
這是被保護機制強制回收了吧XDDDD
達人🐉☄️💫
js 應該沒蠢到沒存 reference 沒傳 resolve 沒傳 reject 還不 gc 吧
達人🐉☄️💫
啊少一句
而且裡面的 function 跑完了
l• ܫ•) Davyキュルッ
畢竟 resolve 跟 reject 也是可以帶到別的地方去 call 的(ry
並不是裡面 function 跑完就可以直接當作結束
載入新的回覆