Новое: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 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Entity FrameworkВсе вопросы
Entity FrameworkMiddleОпыт

Какие ошибки делают команды, когда прячут сложность базы данных за Entity Framework?

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

Команды прячут за EF N+1 запросы, загружают таблицы в память вместо SQL-фильтра, применяют миграции без проверки DDL, забывают про индексы на FK и делают DbContext синглтоном — каждая из этих ошибок обнаруживается только в production.

Ошибка 1: N+1 запросы, спрятанные за навигационными свойствами

// Плохо: каждый вызов .Items генерирует отдельный SELECT
var orders = await db.Orders.Where(o => o.Status == "pending").ToListAsync();
foreach (var order in orders)
    Console.WriteLine($"{order.Id}: {order.Items.Count} items"); // N+1!

// Хорошо: один JOIN запрос
var orders = await db.Orders
    .Where(o => o.Status == "pending")
    .Include(o => o.Items)
    .ToListAsync();

Команды обнаруживают это только когда в таблице 10 000 заказов и страница начинает грузиться 30 секунд.

Типичные ошибки команд при абстрагировании БД через EF

Entity Framework создаёт иллюзию, что разработчик может не знать SQL. Это работает до первой production-проблемы. Вот конкретные ошибки, которые происходят в реальных проектах.

Ошибка 2: Загрузка всей таблицы с фильтрацией в памяти

// Плохо: EF загружает всех пользователей в память, потом фильтрует
var admins = (await db.Users.ToListAsync())
    .Where(u => u.Role == "admin");

// Хорошо: WHERE переходит в SQL
var admins = await db.Users
    .Where(u => u.Role == "admin")
    .ToListAsync();

Это происходит, когда ToListAsync() вызывается до Where(), или когда в LINQ используются методы, которые EF не умеет транслировать в SQL.

Ошибка 3: Миграции без проверки сгенерированного SQL

# Команда создаёт миграцию и сразу применяет в production
dotnet ef migrations add RenameColumn
dotnet ef database update  # ОПАСНО!

# Правильно: сначала проверить SQL
dotnet ef migrations script --idempotent
# Просмотреть ALTER TABLE, проверить что нет DROP COLUMN вместо RENAME
# Только потом применять

EF может сгенерировать DROP + ADD вместо RENAME для колонки с данными — все данные теряются.

Ошибка 4: Отсутствие индексов на FK-колонках

EF создаёт внешние ключи, но не всегда создаёт индексы на них. По умолчанию EF Core добавляет индексы на FK, но при ручной конфигурации через Fluent API это легко пропустить:

// В DbContext.OnModelCreating нужно явно добавить индекс
modelBuilder.Entity<Order>()
    .HasIndex(o => o.CustomerId)   // индекс на FK
    .HasIndex(o => o.CreatedAt);   // индекс для сортировки

Ошибка 5: DbContext как синглтон

// Плохо: DbContext не потокобезопасен!
services.AddSingleton<AppDbContext>();

// Правильно: Scoped — новый контекст на каждый HTTP-запрос
services.AddDbContext<AppDbContext>(options =>
    options.UseNpgsql(connectionString)); // AddDbContext автоматически делает Scoped

Синглтон DbContext в многопоточном ASP.NET Core приложении приводит к race condition на ChangeTracker.

Ошибка 6: Слепое доверие к generated SQL для сложной аналитики

EF плохо справляется с оконными функциями, GROUP BY с HAVING, рекурсивными CTE. Команды пишут сложный LINQ, получают неоптимальный или неправильный SQL и не проверяют его через ToQueryString().

// Для сложных запросов — сразу сырой SQL
var report = await db.Database
    .SqlQueryRaw<SalesReport>(@"
        SELECT
            DATE_TRUNC('month', created_at) AS month,
            SUM(total) AS revenue,
            COUNT(*) AS order_count
        FROM orders
        WHERE created_at >= @start
        GROUP BY 1
        ORDER BY 1",
        new NpgsqlParameter("start", startDate))
    .ToListAsync();

Как предотвращать

  • Code review с обязательной проверкой сгенерированного SQL для новых запросов
  • MiniProfiler или EF Core logging в dev-окружении — видно все запросы в браузере
  • Интеграционные тесты с реальной PostgreSQL (через Testcontainers) — ловят N+1 и медленные запросы
  • Проверка миграций через --idempotent скрипт перед применением

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

  • Lazy loading через прокси (UseLazyLoadingProxies) скрывает N+1 — кажется, что всё работает, пока БД маленькая.
  • Soft-delete через глобальный HasQueryFilter обходится через IgnoreQueryFilters() — разработчики делают это случайно.
  • Конкурентные migrations при горизонтальном масштабировании (несколько инстансов стартуют одновременно) — нужна блокировка или проверка в CI/CD.
  • Change tracker накапливает данные в long-lived DbContext — в background jobs нужно вызывать db.ChangeTracker.Clear() или пересоздавать контекст.
  • EF Core 6+ interceptors позволяют перехватывать и модифицировать SQL — команды используют их неаккуратно и ломают транзакции.
  • Обновление EF Core минорной версии может изменить генерируемый SQL — нужно тестировать производительность после обновления.
  • Отсутствие составных индексов при фильтрации по нескольким колонкам — EF не подсказывает, какие индексы нужны.

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

  • Как предотвратить проблему N+1 запросов в Entity Framework?
  • Как работают migration в EF Core? Как создавать и применять их?
  • В чём разница между eager loading, lazy loading и explicit loading?
  • Как сравнить Entity Framework с raw SQL, query builder и другими ORM по контролю, типобезопасности и производительности?

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

  • Перечислять ошибки без объяснения причин
  • Не отличать beginner mistakes от production failure modes
  • Не предлагать процесс, который предотвращает повторение ошибок

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

  • Знает типичные ошибки при работе с Entity Framework
  • Понимает причины ошибок
  • Предлагает практики prevention и early detection

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

Проверить себя по теме Entity Framework →
←Предыдущий вопросВ чём разница между `Include()` и `ThenInclude()`?Следующий вопрос→Какая mental model Entity Framework важнее всего: unit of work, change tracking, query generation, migrations или generated client?

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

Entity Frameworktechnical-communicationtechnology-selectiontrade-off-analysis