Какие версии, возможности или изменения экосистемы Elixir важно учитывать на собеседованиях в 2026 году?
В 2026 году важны: Phoenix 1.7+ с HEEx и LiveView 1.0 streams, Oban 2.x как стандарт фоновых задач, mix release вместо distillery, Broadway для потоков данных и разница compile-time vs runtime конфигурации.
Elixir в 2026: что важно знать на собеседовании
Экосистема Elixir активно развивалась в 2024–2025 годах. Ряд изменений напрямую влияет на архитектурные решения и является стандартом, который ожидают на senior/middle уровне.
Elixir 1.17–1.18: ключевые изменения
В версии 1.17 появились типы для структур через @type t и улучшенный вывод типов в Dialyzer. В 1.18 добавлен официальный языковой сервер (elixir-ls заменён на встроенный Mix.Tasks.ElixirLS), а также улучшена обработка предупреждений компилятора.
# Elixir 1.17+: улучшенные типы для struct
defmodule User do
@enforce_keys [:id, :email]
defstruct [:id, :email, :name]
@type t :: %__MODULE__{
id: integer(),
email: String.t(),
name: String.t() | nil
}
end
Phoenix 1.7+ и LiveView 1.0
Phoenix 1.7 переработал генераторы: теперь используется ~H-сигил для HEEx-шаблонов, core_components.ex как замена Bootstrap-подобных зависимостей. LiveView 1.0 (2024) стабилизировал API: Phoenix.Component, LiveView.JS, stream/3 для больших списков.
# LiveView 1.0: streams для эффективного рендеринга больших списков
def mount(_params, _session, socket) do
{:ok, stream(socket, :messages, Messages.list_recent())}
end
def handle_info({:new_message, msg}, socket) do
{:noreply, stream_insert(socket, :messages, msg, at: 0)}
end
Oban 2.x как стандарт для фоновых задач
Oban (фоновые задачи на Postgres) стал де-факто стандартом. Важно знать: очереди, приоритеты, Oban.Worker behaviour, уникальность джобов (unique: [period: 30]), Oban.Testing для тестов.
defmodule MyApp.Workers.EmailWorker do
use Oban.Worker, queue: :emails, max_attempts: 3
@impl Oban.Worker
def perform(%Oban.Job{args: %{"user_id" => user_id}}) do
user = Repo.get!(User, user_id)
Mailer.send_welcome(user)
:ok
end
end
# Постановка в очередь
%{user_id: user.id}
|> MyApp.Workers.EmailWorker.new()
|> Oban.insert()
Nx и Livebook в ML-пайплайнах
Nx (numerical computing), Axon (neural networks), Explorer (dataframes) — это стек для ML на Elixir. В 2025 году он достиг production-ready состояния. Livebook 0.13+ поддерживает Smart Cells для Nx. Если позиция связана с data engineering — это нужно знать.
Broadway и GenStage для потоков данных
Broadway — стандарт для обработки сообщений из Kafka, RabbitMQ, SQS. GenStage — back-pressure примитив под ним. На собеседованиях в компаниях с высокой нагрузкой это обязательная тема.
defmodule MyPipeline do
use Broadway
def start_link(_opts) do
Broadway.start_link(__MODULE__,
name: __MODULE__,
producer: [
module: {BroadwayRabbitmq.Producer, queue: "events"},
concurrency: 1
],
processors: [default: [concurrency: 10]]
)
end
@impl true
def handle_message(_processor, message, _context) do
IO.inspect(message.data)
message
end
end
Mix Release и Docker деплой
Знание mix release обязательно: как собрать релиз без Mix, как передать конфигурацию через config/runtime.exs и переменные окружения, как собрать минимальный Docker-образ.
# config/runtime.exs — runtime конфигурация для релизов
import Config
config :my_app, MyApp.Repo,
url: System.fetch_env!("DATABASE_URL"),
pool_size: String.to_integer(System.get_env("POOL_SIZE", "10"))
Подводные камни
- Путаница между
config/config.exs(compile-time) иconfig/runtime.exs(runtime) — критично для Docker/release деплоев. - Использование устаревшего
distilleryвместо встроенногоmix release(доступен с Elixir 1.9). - Незнание
Phoenix.LiveView.stream/3— без него рендеринг тысяч элементов списка в LiveView неэффективен. - Отсутствие знаний об
Oban.Testing: тесты фоновых задач черезassert_enqueued/2иperform_job/2. - Игнорирование
:telemetryиTelemetry.Metrics— в 2026 году это базовый стандарт наблюдаемости. - Незнание HEEx и
~H-сигила в Phoenix 1.7+ — старые EEx-шаблоны считаются устаревшими. - Непонимание разницы между
assign/3иstream/3в LiveView — неправильный выбор ведёт к деградации производительности.
What hurts your answer
- Рассказывать устаревший подход как актуальную практику
- Не отличать личный legacy-опыт от состояния экосистемы в 2026 году
- Игнорировать migration notes и deprecated API
What they're listening for
- Понимает актуальное состояние Elixir
- Отличает современные практики от legacy-подходов
- Учитывает миграции, deprecated API и совместимость