Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Phoenix (Elixir)Все вопросы
Phoenix (Elixir)SeniorОпыт

Проект на Phoenix (Elixir) вырос из MVP в большой production-сервис. Какие проблемы архитектуры и сопровождения вы ожидаете увидеть?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

При росте MVP главные проблемы: god context с N+1 запросами, синхронные тяжёлые операции вместо Oban, несовместимые DB-миграции при rolling deploy, stateful LiveView без стратегии reconnect и отсутствие структурированного логирования.

2. N+1 запросы в Ecto

В MVP часто забывают о preload. При росте данных latency резко возрастает.

# Проблема:
users = Repo.all(User)
users |> Enum.map(& &1.posts) # N+1

# Решение:
users = Repo.all(User) |> Repo.preload(:posts)

# Или явный join:
from(u in User, preload: [:posts]) |> Repo.all()

Включите Ecto.DevLogger или :telemetry-хук для подсчёта запросов на endpoint.

Рост Phoenix-проекта от MVP до production

Проект, выросший из MVP, несёт технический долг в архитектуре, структуре кода и операционных процессах. Ниже — конкретные проблемы, с которыми сталкиваются команды.

1. Монолитный Context

MVP часто имеет один-два Phoenix Context (Accounts, Core), которые со временем становятся «мусорными корзинами» с сотнями функций. Симптомы: circular dependencies между контекстами, невозможность вынести логику в отдельный сервис.

  • Разбейте по bounded contexts: Billing, Notifications, Catalog, Analytics.
  • Введите явные публичные API контекстов; запретите вызовы внутренних схем из соседних контекстов.
  • Используйте mix xref graph --format dot для визуализации зависимостей и обнаружения циклов.

3. Отсутствие фоновых задач

MVP часто делает тяжёлые операции (email, PDF, внешние API) синхронно в контроллере. При росте это создаёт timeout-ы и user-facing latency. Решение — Oban:

defmodule MyApp.Workers.SendEmail do
  use Oban.Worker, queue: :emails, max_attempts: 3

  @impl true
  def perform(%Oban.Job{args: %{"user_id" => user_id}}) do
    user = Accounts.get_user!(user_id)
    Mailer.send_welcome(user)
    :ok
  end
end

# В контроллере:
%{user_id: user.id}
|> MyApp.Workers.SendEmail.new()
|> Oban.insert()

4. Миграции без обратной совместимости

Добавление NOT NULL колонки без default значения ломает rolling deploy: новый код ожидает колонку, старый инстанс пишет без неё. Стратегия: expand-migrate-contract в три деплоя.

5. Stateful LiveView при масштабировании

LiveView хранит state в памяти процесса. При горизонтальном масштабировании reconnect клиента к другой ноде теряет state. Решения: хранить state в БД/Redis, использовать sticky sessions на балансировщике, минимизировать state в assigns.

6. Отсутствие структурированного логирования

В MVP логи — строки. В production без structured logging невозможно строить алерты и корреляцию. Настройте Logger с JSON-форматтером:

config :logger,
  backends: [:console],
  level: :info

config :logger, :console,
  format: {MyApp.LogFormatter, :format},
  metadata: [:request_id, :user_id, :trace_id]

7. Тесты без изоляции

MVP тесты часто используют глобальный state или не оборачивают тесты в транзакции. При росте — flaky tests. Решение: DataCase с async: true и Ecto.Adapters.SQL.Sandbox.

8. Отсутствие feature flags

Большие фичи нельзя выкатить безопасно без feature flags. Используйте FunWithFlags (хранит флаги в Redis/PostgreSQL) для постепенного rollout.

Подводные камни

  • God Context. Единый контекст MyApp.Core с 500+ функциями делает code review и тестирование невозможными. Декомпозиция требует времени, но откладывать её дорого.
  • Прямые вызовы Repo из LiveView. LiveView не должен делать DB-запросы напрямую — только через Context API. Иначе нарушается разделение ответственности и невозможно мокировать в тестах.
  • Отсутствие индексов на foreign keys. В MVP индексы часто забывают. Ecto не создаёт их автоматически при references/2; добавляйте create index(:orders, [:user_id]) явно.
  • Secrets в application.ex. Хардкод токенов в коде при MVP — критическая уязвимость в production. Переходите на runtime.exs и vault-интеграцию.
  • Нет rate limiting. MVP без Plug.Conn throttling или hammer-библиотеки открыт для брутфорса и DDoS. Добавьте Hammer или PlugAttack на ранних стадиях.
  • Накопленные down-migrations. Команды часто не пишут down в миграциях. При rollback это критично. Договоритесь о стандарте миграций с первого дня.

Частые вопросы на собеседовании

  • Как планировать zero-downtime deploy Phoenix-приложения с Ecto migrations и rolling releases?
  • Что такое Plugs в Phoenix и как работает plug-конвейер?
  • Чем Phoenix отличается от Rails или Django по архитектуре?
  • В чём разница между Phoenix templates (.heex) и традиционными EEx-шаблонами?

Что портит ответ

  • Говорить только о запуске Phoenix (Elixir), но не об эксплуатации
  • Не упоминать observability, обновления, безопасность и rollback
  • Описывать риски абстрактно, без способов их снижать

Что слушает интервьюер

  • Видит production-риски Phoenix (Elixir)
  • Говорит про monitoring, rollout, rollback и безопасность
  • Умеет ранжировать риски по вероятности и влиянию

Как вы знаете этот вопрос?

Проверить себя по теме Phoenix (Elixir) →
←Предыдущий вопросКакие production-риски есть у Phoenix (Elixir): blocking code, connection pooling, config, auth, observability, deploy или graceful shutdown?Следующий вопрос→Что такое `mount/3`, `handle_event/3` и `render/1` в LiveView?

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

Phoenix (Elixir)production-readinesstechnical-communicationtechnology-selectiontrade-off-analysis