拼多多 后端 二面 壓力-拷打-羞辱(??)
拼多多 暑期實習 二面,總共用時1h 左右, 被面試官瘋狂拷打, 估計涼涼。
首先介紹項目, 對方完全不感興趣: 你做的這些和后端開發(fā)有什么關系?
我簡單介紹了下后端相關的,面試官可能覺得太簡單了,沒有繼續(xù)問。
然后就是痛苦的手撕拷打,持續(xù)50mins 左右。
問題1: 給你兩個班級, 每個班級共有 k 個人,你是班主任,要從每個班級中挑出1個人,使得他們的身高差最小。
回答: 先排序, 然后遍歷A班級,二分查找B班級中的第一個大于等于(lower_bound)A班級里的那個 的位置,然后比較那個位置和前一個位置。
面試官和我不太同頻,問我為什么要找第一個大于等于?二分查找不就是找一個位置嗎? 面試官笑瞇瞇的問我是第一次接觸二分搜索嗎?
然后計算時間復雜度。
感覺完全不同頻。
問還有更優(yōu)解法嗎?
回答雙指針,還是固定遍歷A, 然后另一個指針從B開始找比A大的,然后在和前一個也比較,取最小的。這樣就是O(n).
面試官提示一下,不要局限在當前這個和前一個比較,換種思路。
然后我一直在思考,對方問我雙指針要怎么初始化? 因為我還沒想好,就沒回答。
面試官: 雙指針要怎么初始化?這你都不懂嗎。。。? 怎么不回答我。
我說新思路還沒想好,面試官表示剛才那種思路的雙指針要怎么初始化? 答:都初始化在第一個位置。
問題2: 兩個班級, 換成 N 個班級, 每個班級選1個人, 要求算出來的人里的 max - min 最小。
答沒思路, 面試官提示下多個指針? 考慮下指針應該如何移動。
我想了想,移動最小的那個指針,直到所有指針都走到末尾,每次移動,從這個N個人里面取最大的,最小的,比較。
然后算時間復雜度:
n個班,每個班k個人, 我想整體的數據規(guī)模是 N = n*k , 然后我用 N 去后續(xù)表示。
面試官:你為什要定義新的符號N?
算完時間復雜度,問我“從這個N個人里面取最大的,最小的”這部分可以優(yōu)化嗎?
我回答可以使用 map (cpp里的),面試官表示你直接說數據結構,不要說語言中的名字。
問這個的時間復雜度,答logn
面試官:那你開始寫吧。
寫了大概 3 分鐘。 他看了眼。
問題3: ping 100ms , curl http://1.2.3.4:8080/hello 需要多少時間?
這里我考慮了4次揮手, 面試官:需要考慮這個嗎?
答 200ms.
問題4: 直播間,打賞金額最高的100個用戶? 你應該如何實現維護?
我回答使用 redis 的 zset , 可以高效的獲取top 100.
面試官問:這樣有什么問題嗎? 如果用戶特別多的情況。
我想了一會,也沒想出什么問題,回答沒什么思路。
面試官:用戶太多了會有 大 key 問題, zset 刪除的時候會阻塞幾秒。 (我不太理解)
面試官:你應該考慮怎么優(yōu)化?
答: string 配合 zset 使用, string kv 中存 user, money, 而 zset 中只維護 top 100 的。同時更新這倆。
最后, 反問
部門業(yè)務:拼多多直播帶貨。
技術棧: 面試官看我的簡歷里面,cpp 太底層了我們這邊不用,golang 也不用,主要是 java , 然后 redis, mysql, kafka這些。
面試官問我懂不懂二分, 我當時多少有點生氣??, 不過總的來說面試官人還不錯,還算友善,給了很多引導。
#??蛣?chuàng)作賞金賽#
#拼多多#
首先介紹項目, 對方完全不感興趣: 你做的這些和后端開發(fā)有什么關系?
我簡單介紹了下后端相關的,面試官可能覺得太簡單了,沒有繼續(xù)問。
然后就是痛苦的手撕拷打,持續(xù)50mins 左右。
問題1: 給你兩個班級, 每個班級共有 k 個人,你是班主任,要從每個班級中挑出1個人,使得他們的身高差最小。
回答: 先排序, 然后遍歷A班級,二分查找B班級中的第一個大于等于(lower_bound)A班級里的那個 的位置,然后比較那個位置和前一個位置。
面試官和我不太同頻,問我為什么要找第一個大于等于?二分查找不就是找一個位置嗎? 面試官笑瞇瞇的問我是第一次接觸二分搜索嗎?
然后計算時間復雜度。
感覺完全不同頻。
問還有更優(yōu)解法嗎?
回答雙指針,還是固定遍歷A, 然后另一個指針從B開始找比A大的,然后在和前一個也比較,取最小的。這樣就是O(n).
面試官提示一下,不要局限在當前這個和前一個比較,換種思路。
然后我一直在思考,對方問我雙指針要怎么初始化? 因為我還沒想好,就沒回答。
面試官: 雙指針要怎么初始化?這你都不懂嗎。。。? 怎么不回答我。
我說新思路還沒想好,面試官表示剛才那種思路的雙指針要怎么初始化? 答:都初始化在第一個位置。
問題2: 兩個班級, 換成 N 個班級, 每個班級選1個人, 要求算出來的人里的 max - min 最小。
答沒思路, 面試官提示下多個指針? 考慮下指針應該如何移動。
我想了想,移動最小的那個指針,直到所有指針都走到末尾,每次移動,從這個N個人里面取最大的,最小的,比較。
然后算時間復雜度:
n個班,每個班k個人, 我想整體的數據規(guī)模是 N = n*k , 然后我用 N 去后續(xù)表示。
面試官:你為什要定義新的符號N?
算完時間復雜度,問我“從這個N個人里面取最大的,最小的”這部分可以優(yōu)化嗎?
我回答可以使用 map (cpp里的),面試官表示你直接說數據結構,不要說語言中的名字。
問這個的時間復雜度,答logn
面試官:那你開始寫吧。
寫了大概 3 分鐘。 他看了眼。
問題3: ping 100ms , curl http://1.2.3.4:8080/hello 需要多少時間?
這里我考慮了4次揮手, 面試官:需要考慮這個嗎?
答 200ms.
問題4: 直播間,打賞金額最高的100個用戶? 你應該如何實現維護?
我回答使用 redis 的 zset , 可以高效的獲取top 100.
面試官問:這樣有什么問題嗎? 如果用戶特別多的情況。
我想了一會,也沒想出什么問題,回答沒什么思路。
面試官:用戶太多了會有 大 key 問題, zset 刪除的時候會阻塞幾秒。 (我不太理解)
面試官:你應該考慮怎么優(yōu)化?
答: string 配合 zset 使用, string kv 中存 user, money, 而 zset 中只維護 top 100 的。同時更新這倆。
最后, 反問
部門業(yè)務:拼多多直播帶貨。
技術棧: 面試官看我的簡歷里面,cpp 太底層了我們這邊不用,golang 也不用,主要是 java , 然后 redis, mysql, kafka這些。
面試官問我懂不懂二分, 我當時多少有點生氣??, 不過總的來說面試官人還不錯,還算友善,給了很多引導。
#??蛣?chuàng)作賞金賽#
#拼多多#
全部評論
第一個身高差問題,如果是整型,因為身高數據量不大,可以直接搞個數組,身高直接作為下標,出現就+1,然后遍歷兩個班級 2*n如果第二遍遍歷班級的時候沒有出現>2的數組,說明身高沒有相同的。就需要遍歷存儲身高數量的數組,這時候使用兩個變量記A,B錄下標而且因為是按照下表從小到大便利或者從大到小便利的,那么兩個變量都已經使用之后在遇到另外一個身高C的時候A和C的身高差距肯定不會比B小,這時候只需要比較B/C A/B之間的差距再決定要不要更新,如果AB都有值之后,而且當前下標- B> B-A的時候就可以退出這次遍歷了。這樣只需要三次遍歷就能拿到結果,時間復雜度是 2*N + K = O(N),不過如果使浮點型這個方法就不行了
大佬有后續(xù)嗎
這手撕也太不常規(guī)了
很強!
昂? 拼多多是我覺得最容易的面試了 uu運氣不好
面試官表示 zset 最好不要超過 1000。 我對這個表示懷疑,key, value 都很小, zset真的handle不了嗎?
相關推薦
點贊 評論 收藏
分享