Теория языков программирования

PL Theory на интервью

Jane Street, Stripe, Airbnb, Bloomberg - эти компании спрашивают не 'напишите reverse linked list', а 'объясните variance в системах типов' и 'почему Rust ownership решает data races без GC'. PL theory на интервью - признак зрелой инженерной культуры компании. Это не академика - это фильтрация инженеров которые думают, а не просто кодируют.

  • **Jane Street**: все интервью на OCaml. Вопросы о type inference, GADTs, functors. Без знания PL theory туда не попасть. Торговая платформа обрабатывает $17B/день
  • **Stripe systems team**: вопросы о memory models, happens-before, lock-free structures. Stripe платёжная система: wrong concurrency = money bugs
  • **Cloudflare Workers team**: вопросы о WASM, isolation models, V8 Isolates vs WASM sandbox. Понимание runtime internals обязательно для работы с edge platform

Вопросы о системах типов

Вопросы о системах типов на senior/staff интервью в компаниях с сильной инженерной культурой (Jane Street, Stripe, Airbnb, Bloomberg). Проверяют понимание tradeoffs, не заучивание определений. Типичные вопросы: structural vs nominal typing, variance, Hindley-Milner, soundness vs completeness.

Сильный ответ на variance включает пример: если List<Dog> <: List<Animal>, то можно добавить Cat в список Dogs (через reference List<Animal>). Это нарушение типобезопасности. Поэтому mutable коллекции invariant, readonly - covariant. Java arrays covariant + runtime check = ArrayStoreException.

Почему mutable List<T> должен быть invariant по T, а readonly - covariant?

Вопросы о компиляторах

Вопросы о компиляторах на интервью для ролей Platform Engineer, Compiler Engineer, или глубоких backend позиций. Часто спрашивают: pipeline компилятора, SSA, как GC влияет на производительность, difference между AOT и JIT.

Интервьюер спрашивает: почему LLVM выбрал SSA как внутреннее представление? Лучший ответ:

Модели конкурентности

Конкурентность - частая тема на senior/staff интервью. Вопросы: разница threads vs goroutines vs async/await, memory model (happens-before), lock-free vs wait-free, CSP vs actor model. Ожидается понимание tradeoffs, а не только API.

Почему async/await в Python не даёт parallelism, только concurrency?

Language Tradeoffs на интервью

Вопросы о tradeoffs языков - проверяют способность мыслить системно, а не 'какой язык лучше'. Типичные: почему Go выбрал простоту вместо дженериков до 1.18, почему Rust не имеет GC, как TypeScript совместим с JavaScript, зачем Kotlin избегает checked exceptions.

На PL theory интервью нужно знать все языки и запомнить их синтаксис

Интервьюеры хотят понимание трейдофов: почему дизайнеры языка сделали конкретный выбор, и когда этот выбор правильный или неправильный для конкретного контекста

Stripe engineering interview: 'расскажи о memory model языка которым пользуешься каждый день'. Не синтаксис - понимание. Jane Street: 'почему OCaml выбирает structural typing для объектов но nominal для типов?'. AWS: 'как Rust ownership решает data race без GC?'

Интервьюер: 'Почему стоит выбрать Erlang/Elixir для чат-сервиса?' Сильный ответ включает:

Итоги

  • **Type systems**: structural vs nominal, variance (co/contra/in), soundness vs completeness. Конкретные примеры почему Java arrays covariant - design mistake
  • **Compiler design**: pipeline (lexer->parser->AST->IR->codegen), SSA benefits, JIT tiered compilation, register allocation heuristics
  • **Concurrency**: goroutines vs OS threads (M:N scheduling), happens-before semantics, CSP vs Actor model, lock-free vs wait-free
  • **Tradeoffs**: Rust без GC (predictability + ownership), Go без дженериков (simplicity), TypeScript (safety vs erasure). Конкретные числа > абстрактные claims

Связанные темы

Интервью по PL theory охватывают весь курс:

  • Системы типов — Variance, structural vs nominal, Hindley-Milner - основа вопросов о type systems
  • Управление памятью — GC алгоритмы, ARC, ownership model - стандартные вопросы о memory management

Вопросы для размышления

  • Jane Street использует OCaml для всей торговой системы. OCaml - нишевый язык. Какие конкретные свойства OCaml (не 'он функциональный') делают его выбором для financial systems?
  • На интервью спросили: 'Rust guarantees memory safety, но Rust unsafe существует. Что это значит для safety guarantees?' Как ответить честно и показать глубокое понимание?
  • Golang выбрал CSP (channels), Erlang - Actor model, Rust - ownership без runtime concurrency abstractions. Все решают concurrency. Какой подход правильный и при каких условиях?

Связанные уроки

  • alg-01-big-o
PL Theory на интервью

0

1

Войти