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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 807
  • Облачные технологии6 651
  • QA вакансии2 171
  • Android1 317
  • Инженер данных867
  • Продакт-менеджер313

Разработка

  • iOS1 229
  • Backend вакансии1 199
  • AI вакансии548
  • Fullstack вакансии496
  • Frontend вакансии424
  • Mobile вакансии28

По стеку

  • Go5 239
  • Java3 132
  • Kotlin1 122
  • Node.js1 007
  • Rust852
  • .NET662
  • PHP319
  • C++268
  • C#207

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

  • Kubernetes3 912
  • Linux-инфраструктура2 845
  • DevOps вакансии2 680
  • Terraform / IaC2 177
  • Мониторинг и Observability1 072
  • CI/CD913
  • SRE307
  • Кибербезопасность34

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

  • Аналитик данных528
  • Data Scientist433
  • Бизнес-аналитик399
  • Системный аналитик67

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

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

По регионам

  • Вакансии в США25 969
  • Вакансии в Европе10 284
  • Работа в России3 634
  • Вакансии в Канаде2 280

По формату

  • Удалённые вакансии42 910
  • Релокация в США25 969
  • Гибридная работа5 672
  • Офисная работа4 445

По уровню

  • Senior вакансии22 739
  • Middle вакансии11 602
  • Junior вакансии3 909

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

Все компании
  • Rakuten189 вакансий
  • Wise187 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis47 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

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

В чём различия между value types и reference types в C#?

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

Value types (int, struct, enum) хранятся по значению и копируются при присваивании; reference types (class, string, array) хранят ссылку на объект в куче. Это влияет на семантику копирования, null-возможность и производительность.

Семантика копирования

// Value type — независимые копии
int a = 5;
int b = a;
b = 10;
Console.WriteLine(a); // 5 — не изменился

// Reference type — общий объект
var list1 = new List<int> { 1, 2, 3 };
var list2 = list1; // копируем ссылку!
list2.Add(4);
Console.WriteLine(list1.Count); // 4 — оба указывают на один объект

// Struct — копирование по значению
public struct Point { public int X; public int Y; }
var p1 = new Point { X = 1, Y = 2 };
var p2 = p1; // копия
p2.X = 99;
Console.WriteLine(p1.X); // 1 — оригинал не изменился

Value Types и Reference Types

Каждый тип в C# относится к одной из двух категорий, определяющих, где хранятся данные и как они передаются между переменными.

Ключевые отличия

  • Value types: int, double, bool, char, struct, enum, decimal, DateTime. Хранят данные непосредственно. При присваивании создаётся полная копия.
  • Reference types: class, string, object, interface, массивы, делегаты. Переменная хранит ссылку (адрес) на объект в куче. При присваивании копируется ссылка, объект остаётся один.

Передача в методы

// Value type передаётся по значению — метод получает копию
void IncrementValue(int n) => n++;
int x = 5;
IncrementValue(x);
Console.WriteLine(x); // 5 — не изменился

// ref — передаём по ссылке
void IncrementRef(ref int n) => n++;
IncrementRef(ref x);
Console.WriteLine(x); // 6

// Reference type — метод работает с тем же объектом
void AddItem(List<int> items) => items.Add(42);
var list = new List<int>();
AddItem(list);
Console.WriteLine(list.Count); // 1

// Но переприсвоение параметра не затрагивает оригинал
void Replace(List<int> items) => items = new List<int> { 0 };
Replace(list);
Console.WriteLine(list.Count); // 1 — оригинальная ссылка не изменилась

Null-возможность

// Value types не могут быть null (без Nullable)
int n = null; // ошибка компиляции

// Nullable value type
int? nullableN = null;
if (nullableN.HasValue)
    Console.WriteLine(nullableN.Value);

// Короткий синтаксис с оператором ??
int result = nullableN ?? -1;

// Reference types могут быть null
string? s = null;
Console.WriteLine(s?.Length ?? 0); // null-conditional operator

Struct vs Class — когда что выбрать

// Struct — для маленьких иммутабельных значений (координаты, цвет, деньги)
public readonly struct Money
{
    public decimal Amount { get; }
    public string Currency { get; }
    public Money(decimal amount, string currency) => (Amount, Currency) = (amount, currency);
}

// Class — для объектов с идентичностью, поведением, иерархией наследования
public class BankAccount
{
    public Guid Id { get; } = Guid.NewGuid();
    public decimal Balance { get; private set; }
    public void Deposit(decimal amount) => Balance += amount;
}

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

  • Изменяемые (mutable) struct — неожиданное поведение при копировании: изменение локальной копии не отражается на оригинале. Делайте struct иммутабельными через readonly struct.
  • Boxing — помещение value type в переменную типа object или интерфейс создаёт объект на куче: object o = 42 — аллокация.
  • Struct в коллекциях: List<MyStruct> — каждый элемент хранится как копия; изменение через индекс (list[0].X = 1) запрещено, нужна промежуточная переменная.
  • Сравнение reference types через == по умолчанию сравнивает ссылки, а не содержимое (исключение — string, переопределяет ==).
  • Большие struct в hot path — копирование при каждой передаче дороже передачи ссылки; используйте in-параметры для readonly-доступа без копирования.
  • Наследование: struct не поддерживает наследование от других struct/class (только от интерфейсов).

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

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

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

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

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

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

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

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

Источники

  • https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types
  • https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types
Следующий вопрос→В чём разница между `IEnumerable<T>` и `IQueryable<T>`?

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

C#runtime-reasoning

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

C# вакансии
  • QA Fullstack (C#)
  • Python-разработчик (OCR)
  • C#/.NET Backend Developer
  • Fullstack-разработчик (C#/.NET, Python, Web)
  • Game Programmer