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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

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

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

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

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 685
  • Вакансии в Европе23 684
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 887
  • Релокация в США43 685
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

Что такое source generators в C# и какие проблемы они решают?

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

Source generators — Roslyn-компоненты, генерирующие C#-код во время компиляции. Устраняют runtime-reflection в сериализаторах, DI-контейнерах и маппинге, давая нулевой overhead в production.

System.Text.Json Source Generation

// 1. Определяем модель
public record OrderDto(int Id, string Product, decimal Price);

// 2. Создаём JsonSerializerContext с атрибутом
[JsonSerializable(typeof(OrderDto))]
[JsonSerializable(typeof(List<OrderDto>))]
public partial class AppJsonContext : JsonSerializerContext { }

// 3. Используем при сериализации
var order = new OrderDto(1, "Laptop", 999.99m);
string json = JsonSerializer.Serialize(order, AppJsonContext.Default.OrderDto);

// Регистрация в ASP.NET Core
builder.Services.ConfigureHttpJsonOptions(opts =>
    opts.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonContext.Default));

Source Generators в C#

Source generators — это компоненты компилятора Roslyn, которые запускаются во время сборки, анализируют синтаксическое дерево исходного кода и добавляют новые файлы .cs в компиляцию. Сгенерированный код становится частью сборки — без reflection, без emit, без overhead во время выполнения.

Какие проблемы решают

  • Производительность сериализации — System.Text.Json source generation вместо runtime reflection.
  • DI-регистрация — автосканирование типов без Assembly.GetTypes() при старте.
  • Маппинг объектов — Mapperly генерирует typed маппер вместо AutoMapper с reflection.
  • Логирование — LoggerMessage.Define source gen для zero-allocation логов.
  • NativeAOT-совместимость — reflection недоступно или обрезается триммером; source gen даёт статический код.

Structured Logging с LoggerMessage Source Gen

public partial class OrderService
{
    private readonly ILogger<OrderService> _logger;

    public OrderService(ILogger<OrderService> logger) => _logger = logger;

    // Компилятор генерирует zero-allocation метод
    [LoggerMessage(Level = LogLevel.Information, Message = "Order {OrderId} created by {UserId}")]
    private partial void LogOrderCreated(int orderId, string userId);

    public void CreateOrder(int id, string userId)
    {
        // ...
        LogOrderCreated(id, userId); // нет boxing, нет аллокаций
    }
}

Написание собственного Source Generator

[Generator]
public class HelloGenerator : IIncrementalGenerator
{
    public void Initialize(IncrementalGeneratorInitializationContext context)
    {
        // Ищем классы с атрибутом [GenerateGreeting]
        var classes = context.SyntaxProvider
            .ForAttributeWithMetadataName(
                "GenerateGreetingAttribute",
                predicate: (node, _) => node is ClassDeclarationSyntax,
                transform: (ctx, _) => (INamedTypeSymbol)ctx.TargetSymbol)
            .Where(t => t is not null);

        context.RegisterSourceOutput(classes, (spc, type) =>
        {
            var source = $$"""
                namespace {{type.ContainingNamespace}};
                partial class {{type.Name}}
                {
                    public string Greet() => "Hello from {{type.Name}}!";
                }
                """;
            spc.AddSource($"{type.Name}.g.cs", source);
        });
    }
}

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

  • Source generators работают только в IIncrementalGenerator (v2) — старый ISourceGenerator медленнее и устарел.
  • Генератор не может изменять существующий код — только добавлять новые файлы; для патчинга используйте partial классы/методы.
  • Ошибки в генераторе приводят к непонятным ошибкам компиляции — всегда добавляйте диагностические дескрипторы (DiagnosticDescriptor).
  • Горячая перезагрузка в Rider/VS может работать нестабильно с генераторами — иногда требуется полный rebuild.
  • Сгенерированные файлы не отображаются в проекте по умолчанию — смотри obj/Generated/ или включи <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> в .csproj.
  • Тестирование генераторов требует отдельного проекта с Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing.
  • Зависимости генератора (AnalyzerReference) не должны тянуть тяжёлые пакеты — это замедляет компиляцию.

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

  • В чём различия между value types и reference types в C#?
  • В чём разница между IEnumerable<T> и IQueryable<T>?
  • Что такое LINQ? Приведите примеры часто используемых LINQ-операторов.
  • Как работает оператор lock и что такое deadlock?

Типичные ошибки

  • Путать source generators и генерация кода на этапе компиляции с похожим механизмом из другой версии или платформы.
  • Игнорировать runtime-границы C#: lifecycle, DI scope, SQL translation, UI thread или platform API.
  • Не обсуждать null/empty/error cases и поведение под нагрузкой.

Что проверяет интервьюер

  • Кандидат объясняет source generators и генерация кода на этапе компиляции на конкретном примере, а не только определением.
  • Указывает последствия для производительности, тестируемости и поддержки.
  • Различает документированное поведение текущего стека и устаревшие практики.

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

Проверить себя по теме C# →

Источники

  • https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview

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

C#runtime-reasoning

Вакансии с этим навыком

C# вакансии
  • Vue.js / C# Developer
  • Lead DevOps Engineer - Warszawa
  • Senior QA Fullstack Engineer (C#)
  • Senior Software Engineer – Web & Desktop Applications
  • Senior Fullstack .NET & React Developer