Why CRDT-Based Collaborative Editing Wins for Live Coding Interviews
リアルタイムコラボレーションの 2 つのアプローチ
2 人が同じファイルを同時に編集する場合、エディタはデータを失わずに奇妙なちらつきを引き起こさずに変更をマージする必要があります。2 つの主要なアプローチが存在します:
- オペレーショナルトランスフォーメーション(OT)。 各編集は操作として送信されます。中央サーバーは、受信した操作を変換して、正しい順序で適用します。Google ドキュメント で使用されています。
- 競合フリー複製データ型(CRDT)。 各編集は十分なメタデータ(通常は一意の ID と論理クロック)を携帯するため、到着順序に関係なく、任意の 2 つのクライアントは同じ状態に収束します。Figma、Linear、およびほとんどの最新コラボレーションツールで使用されています。
ライブコーディング面接 特に、CRDT が勝ちます。
インタビューで CRDT が勝つ理由
インタビューはホテル Wi-Fi、モバイルホットスポット、および積極的なプロキシを備えたコーポレートネットワークで行われます。3 つのことが問題になります:
- 簡潔な切断。 入力中の 4 秒のネットワーク不調。
- 非対称レイテンシー。 候補者のキーストロークはサーバーに 80ms で到達します。面接官の 400ms です。
- 再接続のカオス。 両側がオンラインに戻ると、状態が分岐します。
OT ベースのエディタは、サーバーがすべての操作を仲介する必要があります。ネットワークがグリッチすると、編集がキューアップされ、再接続は見える範囲でのちらつき、失われた文字、または最悪の場合は無声状態の喪失を引き起こすことが多くあります。候補者は混乱し、面接官は候補者のせいにします。
CRDT はこれら 3 つのシナリオを静かに処理します。すべてのクライアントは、ローカル編集をすぐに適用できます。マージは再接続時に、ユーザーに見える影響を与えることなく起こります。エディタは「オフラインファースト」のように「感じ」ます。これは、編集レイヤーの上で インテグリティチェック も実行しているときより重要です。
Yjs + Monaco が標準になった理由
Yjs はテキスト用の最も戦闘テスト済み CRDT ライブラリです。y-monaco を使用して Monaco(VS Code を強化するエディタ)ときれいにペアします。この組み合わせは以下を提供します:
- VS Code の完全なエディタ体験(IntelliSense、マルチカーソル、すべてのキーバインディング)
- 不良ネットワーク上で機能するリアルタイムコラボレーション
- 複数カーソル、選択共有、認識状況
- 規模でテスト済み
ClarityHire は、まさにこれらの理由のために Monaco + Yjs で構築されています。候補者のコード編集は健全な接続で 50ms 以内に面接官に到達し、サーバーで仲介されたエディタを破壊するネットワーク不調から生き残ります。これは ペアプログラミング ラウンドにとって、従来の ライブコーディング面接 と同じくらい重要です。ちらつきは候補者のせいとして読まれます。
これが実際に意味すること
ライブコーディングプラットフォーム を評価している場合、試用中に悪いネットワークをシミュレートします。DevTools で 3G にスロットル、5 秒間接続を切断し、何が起こるかを見てください。CRDT ベースのツールは目に見えない状態で回復します。他はそうではありません。