# 17 面試紀錄(簡潔版) Codility 有五題,寫了四題,第五題來不及,但還是有到下一階段 題目可站內共同學習 ## 現場 ## 面試場地 gmail 的信上說在 14 樓,但我在 14 樓被警衛告知面試請上 15 樓,櫃台在 15 樓,警衛的反應看起來很熟練。 ### 男士考官一 #### 白板題 是在白紙上面寫的,因為沒有板擦跟白板筆,我有自備白板筆,但沒有拿來擦白板的衛生紙(面試場地也沒有衛生紙)故無用,面試官表示已經跟 HR 反應過但尚未改善。 1. 對 string 格式儲存的數字做減法 題目為口述 idx 0 | idx 1 ---- | ------- 9 | 0 - | 8 8 | 2 一開始想 corner case 有點想太久,後來決定先把數字反轉然後再從頭一路跑過去比較簡單,一開始會判斷大小,如果被減的比較小會追加負號並且 swap 做到一半問提問 10 - 9 = 01 前面多零的話可以嗎?數學意義上是一樣的。 對方:你覺得可以? 我 :我覺得意義上沒問題。 對方:所以你覺得呢?(正經地不苟言笑) 我 :好,你說不行就不行 個人對於此種溝通氣氛較不適應,我自身在公司內面試應徵者時,認為白板題交流上也是重點,不清楚的 spec 問清楚不是壞事。 接著多加了一個迴圈在最後從頭把 0 砍回來。 寫完對方審閱說道: 對方:你為什麼不用兩個指標讀過去就好 我:可是這樣要維護兩個 index 我覺得很麻煩,我現在這樣做只要跑到 min 就好,而且時間複雜度一樣。 對方:可是這樣能寫比較短(嚴肅貌) 我:是,你說的對。 不過這題我一開始的確卡太久,這點表現不好,尚需訓練。 看面試官溝通氣氛可能對方也不偏好 Think out loud 的部分。 後來想到更優解: 因為沒限定語言,故直接用 python 內建大數運算的特性去處理就好 return str(int(a)-int(b)) 似乎就好了,我個人認為善用語言特性並不是壞事。 一行完成,優美。 自行實作的部分可以作為延伸繼續討論。 #### 對方提問 為何在 team 內導入 docker 前公司業務類型 負責工作內容 架構如何設計 DB 優化 有沒有用過公司產品......等等 #### 我方提問 Q:你們 team 主要做什麼 A:我們 Backend 有好幾個 team,所以面試 Backend 會進去哪個 team 我不確定 Q:這個職缺是裁出來的還是多出來的 A:最近終於「開始」賺錢了,是多出來的 Q:你們系統困難點在哪 A:我們流量高峰不同,那要能處理峰值在架構跟細節上有不同困難點,至於是哪些我不能說。 Q:你們系統最大的 legacy 還有哪些 A:我們系統常常有在重構,不過有些舊的也有不同問題,至於是哪些問題我不能說 Q:你們要負荷的 QPS 高峰跟低峰大概差幾倍 A:差很多,至於是多少我不能說 ### 女士考官二 #### 白板 2. pair number 取交集 一開始排序之後用 binary search 去找,後面敘述時發現不用,用類似 dp 的方式從後往前推就是了。 這部分倒是聊的頗愉快,個人比較偏好有來有往討論式的白板題。 3. 如何在多個 DB 間打 transaction,假設跨 DB 的款項轉移 按照以前的經驗會使用 uuid 做同步,分成未發送,發送中,已發送。 並且在後端不斷同步,多扣了就還錢這樣。 不會少扣,因為都會預扣款項。 我覺得她期待的正解可能會是 https://blog.csdn.net/lengxiao1993/article/details/88290514 4. 如何在 DB 紀錄樹狀結構,快速取出子樹 沒接觸過,我覺得對方期待的正解是 https://en.wikipedia.org/wiki/Nested_set_model 我先問了是讀取遠大於插入的情景嗎?她說是。 這種場合讀寫分離跟 index 是基本的,並且我提出了用一個額外表格維護 sub 的方法,每次插入時遞迴的新增 parrent 的 sub list 這樣可以 O(1) 拿出 sub 列表,配合 index 用 O(klogn) 的方式找出全部 #### 對方提問 之前 team 怎麼會想導入 protobuf 大學期間自己接 api 的經驗 DB 接觸範圍 #### 我方提問 Q:那我想問上面兩題妳預期對方的解法會是什麼呢?為什麼會這樣預期?是希望能從中考到哪些部分呢? A:你可以上網查喔 ## 表示接下來 HR 會進來討論待遇及文化相關的部分 ## 然後 HR 就站在門口送客了 ## Result * 感謝函 其實面完就知道結果了,文化風格與在下相差較大,個人表現也不甚完美。 實際面試感覺跟網路上查到的和跟學長問到的一致。