Jane street 訪談 | Jane street VO面​​經 | Jane street VO輔助 | 代面

3,049Views
Jane street 訪談 | Jane street VO面​​經 | Jane street VO輔助 | 代面

最近面試了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:

  1. compress(‘deef’, 3) -> “”
  2. compress(‘bbcc’, 1) -> “”
  3. compress(‘ab’, 0) -> ‘a1b1’
  4. 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 面試 | 一畝三分地

Interviewing :: Jane Street

經過我們的強力VO輔助代面,候選人透過這些面試題的解析和溝通,面試官不僅了解了候選人的程式設計能力,也看到了在解決問題過程中的清晰思路和有效溝通技巧。祝大家面試順利!

author avatar
Alex Ma Staff Software Engineer
目前任職於Google,10餘年開發經驗,目前擔任Senior Solution Architect職位,北大電腦本碩,擅長各種演算法、Java、C++等程式語言。在學校期間多次參加ACM、天池大數據等多場比賽,擁有多場頂級paper、專利等。
END
 0