
最近面試了jane street的五輪面試,面試官很友善。
第一輪是Take Home測試,開啟文件發現都是熟悉的過往工作內容,暗自慶幸,開局順利。
第二輪是三十分鐘的HR電話面試,常規問題過後居然還有幾個Brain Teaser打底,應接不暇,充滿驚喜。
第三輪是一個小時的Numeracy挑戰,面試官第一個問題是算一個城市有多少個塑膠袋。我們完成後,又讓算一下到一千里頭有多少個四,幸好沒錯。
第四輪一小時履歷深挖。這一輪相對平穩,主要是問過往經歷。不過還是蹦出個關於「做空」的問題,有驚無險。
第五輪兩個半小時的技術大考,分兩場連續面試。第一場順利,第二場面試官掏出Excel,讓我們口述她操作,過程中出現溝通誤解,有些步驟卡殼,面試官和我們都挺不舒服,氛圍一下子緊張起來。
以下分享Jane street面試過程中的Code問題。
Jane street Coding 1:LeetCode 443
給定一個字元數組,使用以下演算法壓縮它:以空字串 s 開頭。對於字元中的每組連續重複字元:
如果群組的長度為 1,則將字元附加到 s。否則,在字元後面附加組的長度
from typing import List
def compress(chars: List[str]) -> str:
chars.append("") # 添加一个哨兵字符
s = ""
count = 1
curr = chars[0]
for i, c in enumerate(chars):
if not i:
continue
if c == chars[i - 1]:
count += 1
else:
s += curr
if count > 1:
s += str(count)
curr = c
count = 1
return s
Jane street Coding 2
請實現一個 字元流壓縮類,該類別支援多次迭代,並能對輸入字串進行壓縮。
壓縮規則如下:
- 只記錄字元連續出現的次數,並將結果儲存在字串中。
- 僅記錄最後一個字元及其重複次數。
- 每次調用
compress()方法時,都會基於目前輸入字串進行壓縮。
Example:
compress(‘aabb’) -> ‘a2’
compress(‘bcccdddd’) -> ‘b1c3d4’
類 StringCompressor:
def __init__(self):
self.last_char = "" # 記錄上次處理的字符
self.count = 0 # 記錄字元出現次數
def compress(self, s: str) -> str:
if not s:
return ""
compressed = ""
self.last_char = s[0]
self.count = 1
for i in range(1, len(s)):
if s[i] == self.last_char:
self.count += 1
else:
compressed += self.last_char + str(self.count)
self.last_char = s[i]
self.count = 1
# 記錄最後一個字元的計數
compressed += self.last_char + str(self.count)
return compressed
Follow up question: 實作與先前相同的類,但每個輸入都有一個表示順序的索引。需要使用 dict 來儲存索引和輸入。
Example:
- compress(‘deef’, 3) -> “”
- compress(‘bbcc’, 1) -> “”
- compress(‘ab’, 0) -> ‘a1b1’
- compress(‘ccdd’, 2) -> ‘c2d2’
class IndexedStringCompressor:
def __init__(self):
self.data = {} # 用於儲存不同索引的字串狀態
def compress(self, s: str, index: int) -> str:
if index not in self.data:
self.data[index] = ""
# 更新該索引的字串
self.data[index] += s
# 執行壓縮邏輯
compressed = ""
last_char = self.data[index][0]
count = 1
for i in range(1, len(self.data[index])):
if self.data[index][i] == last_char:
count += 1
else:
compressed += last_char + str(count)
last_char = self.data[index][i]
count = 1
# 記錄最後一個字元的計數
compressed += last_char + str(count)
return compressed
參考資料
Jane street 面試 | 一畝三分地
經過我們的強力VO輔助代面,候選人透過這些面試題的解析和溝通,面試官不僅了解了候選人的程式設計能力,也看到了在解決問題過程中的清晰思路和有效溝通技巧。祝大家面試順利!