漂J
@floatj
好奇
Mon, Sep 5, 2022 9:44 AM
回台中面試碰到 System Design 大魔王
由於沒準備所以亂畫一通
漂J
@floatj
Mon, Sep 5, 2022 10:06 AM
考了一題我覺得
Tsuki-勝ったな、ガハハ!
一定會的東西 (設計一套可以 Infinite Scale Up 的 Messaging Broadcast Service)
但是我沒準備只能亂畫一通
漂J
@floatj
Mon, Sep 5, 2022 10:07 AM
然後有個面試官長得實在太像前前前主管,我看到的時候傻眼了 1 分鐘,頻頻確認是否是同一個人(雖然心裡想不可能,但實在長得有點像,
只是畫風更美型一點
)
Tsuki-勝ったな、ガハハ!
@LegoMania
Mon, Sep 5, 2022 10:08 AM
scale up 還是 scale out?
漂J
@floatj
Mon, Sep 5, 2022 10:08 AM
Tsuki-勝ったな、ガハハ!
: 有差別嗎
慘了連專有名詞都分不出來
Tsuki-勝ったな、ガハハ!
@LegoMania
Mon, Sep 5, 2022 10:08 AM
毀了
漂J
@floatj
Mon, Sep 5, 2022 10:16 AM
坦白說這家因為要回台中,所以不是首選,但因為想體驗看看大公司面試所以還是去面了,確實也見識了一番,挺不錯的
漂J
@floatj
Mon, Sep 5, 2022 10:24 AM
印象中的題目大概是這樣
漂J
@floatj
Mon, Sep 5, 2022 10:28 AM
另外還考了一題怎麼實作 Set 這個資料結構
只要實作兩個方法:(1) 放入資料 (假設都是 String 即可) (2) 列舉 Set 內的所有資料
實作完成之後希望你改用 O (1) 的時間複雜度來最佳化
但我一開始設計出來就是 O (1) G___G
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 10:29 AM
一開始就是 O(1) 不是很棒嗎XDDDD
漂J
@floatj
Mon, Sep 5, 2022 10:39 AM
l• ܫ•) Davyキュルッ
: 但這樣最佳化的時候就無事可做了 等於一開始寫的 O (n) 的那個回圈就完全是多餘的,只是把它擦掉而已
漂J
@floatj
Mon, Sep 5, 2022 10:39 AM
對了它們的白板題是真的在白板考的...
漂J
@floatj
Mon, Sep 5, 2022 10:40 AM
然後我 System Design 最後就卡在 Redis 怎麼 scale 那邊
漂J
@floatj
Mon, Sep 5, 2022 10:40 AM
可能要加更多東西進去
但我亂畫一通只想得出 Redis ...
漂J
@floatj
Mon, Sep 5, 2022 10:42 AM
面試官有提示可以把不同 client 的資料分開放在不同 instance 的 Redis 內(我回答可以用類似 Sharding 的方式),但接著又被考會不會重複 broadcast,我很艱難的擠出可以用類似 queue 的資料結構判斷 client (browser) 是否已經 broadcast 過了,接著又被要求設計每次 pub message 的時候要怎麼去實現和判斷是否重複 broadcast 的資料結構...
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 10:45 AM
最佳化的時候可以提出你已經最快了的說明就好啦
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 10:46 AM
就直接 partition 讓不同 redis 負責不同 client 也可以吧?
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 10:46 AM
從設計上保證不會撞
漂J
@floatj
Mon, Sep 5, 2022 11:00 AM
我最後作答出來的版本是這樣
(但中間面試官有提示我,不然一開始我連 LB 都忘記畫...)
漂J
@floatj
Mon, Sep 5, 2022 11:00 AM
漂J
@floatj
Mon, Sep 5, 2022 11:01 AM
但要解釋用怎樣的資料結構去紀錄 pub message 給每個 client 的時候就卡卡...
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 11:03 AM
omg... 你有用過 redis cluster 嗎
達人🐉☄️💫
@c910335
Mon, Sep 5, 2022 11:04 AM
沒用過
漂J
@floatj
Mon, Sep 5, 2022 11:04 AM
l• ܫ•) Davyキュルッ
: 我有提到 redis cluster,
但問題是我不熟
所以只好跟面試官坦承其實我也不熟,只知道用 redis cluster 應該可以實現
漂J
@floatj
Mon, Sep 5, 2022 11:05 AM
Mon, Sep 5, 2022 11:06 AM
然後面試官就給我個提示說,假如先不講 redis cluster,覺得單純就把 client 分流的角度來看,假如可以用很多不同的 redis instance,那我覺得怎麼分會比較好,我就講說可以類似 sharding 那樣的概念,然後把白板的圖改成我上面上傳的那張
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 11:06 AM
redis cluster 主要是靠 key hashing 做 sharding
讓所有的 instance 負責處理不重複的 key
用這種方法來 scaling
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 11:07 AM
這種 stateful 的東西沒辦法簡單用 L4 load balancer 解決
你需要仰賴 L7 load balancer 或 clustering 達到
漂J
@floatj
Mon, Sep 5, 2022 11:08 AM
Mon, Sep 5, 2022 11:08 AM
l• ܫ•) Davyキュルッ
:
這樣單純用 redis 做 pub/sub 可以支援嗎?
泉的第一張限定SSR
@koftwro01
想
Mon, Sep 5, 2022 11:09 AM
感覺漂 J 面的職位很資深...
漂J
@floatj
Mon, Sep 5, 2022 11:10 AM
Mon, Sep 5, 2022 11:12 AM
BTW 先跳到面試結束的那一段好了,主管請我到他的辦公室,問完期望薪資和一些到職日之類的規劃之後(當然他有說他後續還有安排一些人選面試),問完我的期望薪資後,講了一句
「你知道台中和台北還是有差」
(他是指...薪資???)
咦奇怪我記得他們開的待遇範圍很高啊 XDDDDDD
我覺得我講的還很保守了(我每家都講一樣,然後他們家自己貼在 JD 的待遇範圍下限應該就比我講的期望待遇上限還高了)
漂J
@floatj
Mon, Sep 5, 2022 11:10 AM
泉的第一張限定SSR
: 的確是有掛 Senior 的 title
漂J
@floatj
Mon, Sep 5, 2022 11:10 AM
這是我少數看到會蹦出那一句的公司,覺得微妙...
漂J
@floatj
Mon, Sep 5, 2022 11:11 AM
但平心而論,主管跟面試的工程師(應該是他們其他 Senior 的 team member 或是 team lead 之類的) 都滿客氣也滿親切的,然後我又一直被安慰說「不要緊張,你看起來很緊張」
漂J
@floatj
Mon, Sep 5, 2022 11:12 AM
如果沒有主管蹦出的那一句,我對這家公司面試的評價是非常高的,
以台中來說實屬難得
漂J
@floatj
Mon, Sep 5, 2022 11:13 AM
Mon, Sep 5, 2022 11:13 AM
我記得他們 JD
上面打成 JK = =
寫 1.3N ~ 1.5N,我開的期望待遇是 1N ~ 1.15N ,應該沒很貪心吧
達人🐉☄️💫
@c910335
Mon, Sep 5, 2022 11:19 AM
N 是什麼意思
AllanCat
@AllanCat
Mon, Sep 5, 2022 11:19 AM
你面的都好猛喔,我只會相談勝歡
漂J
@floatj
Mon, Sep 5, 2022 11:21 AM
達人🐉☄️💫
:
N 就是一百萬
Tsuki-勝ったな、ガハハ!
@LegoMania
Mon, Sep 5, 2022 11:21 AM
這樣不是要用 M 嗎?
漂J
@floatj
Mon, Sep 5, 2022 11:22 AM
AllanCat
: 沒吧
我也是各種被打臉
連 Easy 等級的題目都寫不出來
泉的第一張限定SSR
@koftwro01
好奇
Mon, Sep 5, 2022 11:22 AM
n 不是台積電新人的月薪嗎xd
漂J
@floatj
Mon, Sep 5, 2022 11:22 AM
Tsuki-勝ったな、ガハハ!
: 因為不想說 N 是多少啊
Tsuki-勝ったな、ガハハ!
@LegoMania
Mon, Sep 5, 2022 11:23 AM
漂接的黑話,懂
漂J
@floatj
Mon, Sep 5, 2022 11:30 AM
總之我覺得大概 Fail,但坦白說因為不太想回台中
完全本末倒置了啊…
沒有很認真準備這次的面試,就當增加面試經驗吧
漂J
@floatj
Mon, Sep 5, 2022 11:30 AM
HH 每次都先把人拐騙去面試再說
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 11:38 AM
N 不是臺積電新人月薪嗎 <--- 我也這麼以爲
漂J
@floatj
Mon, Sep 5, 2022 11:42 AM
總之它們開的價格在台中其實算很有競爭力了我覺得,
畢竟你也知道的台中除了菠菜以外其他接案公司的待遇都頗慘
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 11:42 AM
那看來是你開太低 主管以爲臺北這麼低價
漂J
@floatj
Mon, Sep 5, 2022 11:44 AM
講到這個就想到面試時講到離職原因,被進一步追問我們工程師有沒有實際碰業務 or 只是負責寫 code ,
是不是怕要去柬埔寨
,笑死 XDDD
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 11:59 AM
他是不是也想去
達人🐉☄️💫
@c910335
Mon, Sep 5, 2022 12:01 PM
真假 台積新人月薪一百萬喔
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 3:16 PM
https://www.readfog.com/...
漂J
@floatj
Mon, Sep 5, 2022 5:41 PM
BTW 昨天面試被問了最後一題額外的,大意是 function 裡面會做一件事情,要怎麼讓它在一秒鐘後才做(有點忘了,大概是這樣)
然後我用 promise 寫之後,被問 follow up 是如果改寫一下會不會動,我就傻掉了答不出來
可是我現在想起來,在電腦測試,看起來沒問題啊...
漂J
@floatj
Mon, Sep 5, 2022 5:42 PM
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 5:53 PM
改寫成怎樣
Dameningen
@Dameningen
Mon, Sep 5, 2022 5:56 PM
上禮拜才建了六主六從
奴
的Redis,原來還可以這樣用啊
看到WS以為是用MQ之類的東西然後用K8S搭起來
漂J
@floatj
Mon, Sep 5, 2022 5:58 PM
l• ܫ•) Davyキュルッ
: 就改寫成下面 const p = 那段,然後問說這樣能不能跑 (應該啦 我有點忘了)
漂J
@floatj
Mon, Sep 5, 2022 5:58 PM
原本只有 function test 那段
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 5:59 PM
follow up: 那如果是要讓他執行完之後才做另一個 func2() 呢?
可以嗎?
漂J
@floatj
Mon, Sep 5, 2022 6:08 PM
l• ܫ•) Davyキュルッ
: 可以ㄅ,就用 then ()
就 func2() {
return new Promise ...
}
然後 p().then(result => {
func2 ();
})
漂J
@floatj
Mon, Sep 5, 2022 6:09 PM
Redis 分很多 instance 這題我記得 i 社 screening interview 其實也有問到
l• ܫ•) Davyキュルッ
@david50407
Mon, Sep 5, 2022 6:09 PM
你跑看看ㄚw
漂J
@floatj
Mon, Sep 5, 2022 6:11 PM
.......奇怪怎麼不行
漂J
@floatj
Mon, Sep 5, 2022 6:12 PM
不對我回憶了一下,我在這則噗寫錯了,實際上我寫在白板的裡面有 resolve(true) 之類的
漂J
@floatj
Mon, Sep 5, 2022 6:13 PM
修正一下,應該是這樣
面試時寫的 test() 裡面有 resolve
漂J
@floatj
Mon, Sep 5, 2022 6:17 PM
但因為是最後一分鐘被追加的問題
不知道是不是看我 System Design 寫爛了打算不給過了
面試官的 follow up 只有寫到 const p = test 那一段(我有點忘了,但應該差不多是那樣沒錯),然後問我那樣寫會不會執行的出來,我就傻掉了跟面試官說窩不知道,面試官就點了點頭說好ㄅ,不確定對方實際上到底想考我什麼
漂J
@floatj
Mon, Sep 5, 2022 6:19 PM
話說這樣面了一輪,我發現講「優化」的人真的超多的啊
只有我因為以前大吵一架,始終堅持講「最佳化」或是「optimize」嗎
debɐnchery
@xatierlike
Mon, Sep 5, 2022 8:05 PM
要仔細分辨 改善 改進 增強 進步 提升 之間的語感細微差異太難了 通通講優化就好
l• ܫ•) Davyキュルッ
@david50407
Wed, Sep 7, 2022 4:59 AM
阿你的 2 怎麼又沒有 resolve 了wwww
漂J
@floatj
Wed, Sep 7, 2022 7:08 AM
l• ܫ•) Davyキュルッ
: 忘記了
不過如果 2 後面沒做其他事情那會影響嗎?
l• ܫ•) Davyキュルッ
@david50407
Wed, Sep 7, 2022 7:40 AM
你這 Promise 就結束不了啊 卡在那
漂J
@floatj
Wed, Sep 7, 2022 8:18 AM
那還好他沒繼續考下去,
不然後面就忘記 Promise ㄌ
達人🐉☄️💫
@c910335
Wed, Sep 7, 2022 8:25 AM
沒 await 應該不會卡吧
達人🐉☄️💫
@c910335
Wed, Sep 7, 2022 8:28 AM
而且這題目連 Promise 都不用吧
漂J
@floatj
Wed, Sep 7, 2022 8:38 AM
想想好像是耶,如果只是要一秒鐘後再執行 func1 裡面的內容,那應該也不用特地用 Promise 包起來
l• ܫ•) Davyキュルッ
@david50407
Wed, Sep 7, 2022 10:41 AM
Wed, Sep 7, 2022 10:42 AM
達人🐉☄️💫
: 會消不掉 卡 GC
漂J
@floatj
Wed, Sep 7, 2022 10:50 AM
l• ܫ•) Davyキュルッ
: 會卡 GC 是因為沒有 clearTimeout 吧
達人🐉☄️💫
@c910335
Wed, Sep 7, 2022 11:00 AM
l• ܫ•) Davyキュルッ
: p2 回傳值沒存 還是會 gc 吧
l• ܫ•) Davyキュルッ
@david50407
Wed, Sep 7, 2022 11:00 AM
是 Promise 沒有結束 一直在 not fullfilled
漂J
@floatj
Wed, Sep 7, 2022 11:09 AM
l• ܫ•) Davyキュルッ
: 可是我查 Stackoverflow 他寫瀏覽器會自己 GC 耶
Does never resolved promise cause memory leak?
漂J
@floatj
Wed, Sep 7, 2022 11:09 AM
還是是要看 Runtime 實作差異
l• ܫ•) Davyキュルッ
@david50407
Wed, Sep 7, 2022 11:13 AM
這是被保護機制強制回收了吧XDDDD
達人🐉☄️💫
@c910335
Wed, Sep 7, 2022 11:21 AM
js 應該沒蠢到沒存 reference 沒傳 resolve 沒傳 reject 還不 gc 吧
達人🐉☄️💫
@c910335
Wed, Sep 7, 2022 11:22 AM
啊少一句
而且裡面的 function 跑完了
l• ܫ•) Davyキュルッ
@david50407
Wed, Sep 7, 2022 7:07 PM
畢竟 resolve 跟 reject 也是可以帶到別的地方去 call 的(ry
並不是裡面 function 跑完就可以直接當作結束
載入新的回覆
由於沒準備所以亂畫一通但是我沒準備只能亂畫一通只是畫風更美型一點)慘了連專有名詞都分不出來印象中的題目大概是這樣
只要實作兩個方法:(1) 放入資料 (假設都是 String 即可) (2) 列舉 Set 內的所有資料
實作完成之後希望你改用 O (1) 的時間複雜度來最佳化
但我一開始設計出來就是 O (1) G___G但我亂畫一通只想得出 Redis ...(但中間面試官有提示我,不然一開始我連 LB 都忘記畫...)
但問題是我不熟所以只好跟面試官坦承其實我也不熟,只知道用 redis cluster 應該可以實現讓所有的 instance 負責處理不重複的 key
用這種方法來 scaling
你需要仰賴 L7 load balancer 或 clustering 達到
「你知道台中和台北還是有差」
(他是指...薪資???)
咦奇怪我記得他們開的待遇範圍很高啊 XDDDDDD
我覺得我講的還很保守了(我每家都講一樣,然後他們家自己貼在 JD 的待遇範圍下限應該就比我講的期望待遇上限還高了)
以台中來說實屬難得上面打成 JK = =寫 1.3N ~ 1.5N,我開的期望待遇是 1N ~ 1.15N ,應該沒很貪心吧N 就是一百萬連 Easy 等級的題目都寫不出來完全本末倒置了啊…沒有很認真準備這次的面試,就當增加面試經驗吧HH 每次都先把人拐騙去面試再說畢竟你也知道的台中除了菠菜以外其他接案公司的待遇都頗慘那看來是你開太低 主管以爲臺北這麼低價是不是怕要去柬埔寨,笑死 XDDD然後我用 promise 寫之後,被問 follow up 是如果改寫一下會不會動,我就傻掉了答不出來
可是我現在想起來,在電腦測試,看起來沒問題啊...
奴的Redis,原來還可以這樣用啊看到WS以為是用MQ之類的東西然後用K8S搭起來
可以嗎?
就 func2() {
return new Promise ...
}
然後 p().then(result => {
func2 ();
})
面試時寫的 test() 裡面有 resolve
不知道是不是看我 System Design 寫爛了打算不給過了面試官的 follow up 只有寫到 const p = test 那一段(我有點忘了,但應該差不多是那樣沒錯),然後問我那樣寫會不會執行的出來,我就傻掉了跟面試官說窩不知道,面試官就點了點頭說好ㄅ,不確定對方實際上到底想考我什麼
只有我因為以前大吵一架,始終堅持講「最佳化」或是「optimize」嗎不過如果 2 後面沒做其他事情那會影響嗎?
不然後面就忘記 Promise ㄌ還是是要看 Runtime 實作差異而且裡面的 function 跑完了
並不是裡面 function 跑完就可以直接當作結束