PrepBro
Профессии
PrepBro
Профессия:

Подготовка

  • Вопросы1513
  • Задачи21

Аналитика

  • hh статистика
  • Анализ резюме

Практика

  • Тестовое собеседование
  • Mock-собеседование
  • Менторы

Поддержка / отзывы

Telegram админа
Профессия:

Подготовка

  • Вопросы1513
  • Задачи21

Аналитика

  • hh статистика
  • Анализ резюме

Практика

  • Тестовое собеседование
  • Mock-собеседование
  • Менторы

Поддержка / отзывы

Telegram админа
Все 24 профессии
Android DeveloperData AnalystSystem Analyst1С DeveloperiOS DeveloperBusiness AnalystJava DeveloperData ScientistQA EngineerQA AutomationPHP BackendC/C++ BackendDevOps EngineerIT Project ManagerFrontend DeveloperNode.js BackendUnity DeveloperC# BackendProduct AnalystFlutter DeveloperPython DeveloperIT Product ManagerGo DeveloperData Engineer

© 2026 PrepBro. Все права защищены.

Telegram-бот

Вопросы по C# Backend

Что такое try-catch?
1.0 Junior🔥 30💬 2

Что такое try-catch в C#?

try-catch — это механизм обработки исключений (exception handling), который позволяет программе корректно реагировать на ошибки во время выполнения, не прерывая работу приложения. Это фундаментальная конструкция языка C#, основанная на парадигме структурированной обработки исключений.

Основная цель и принцип работы

Цель — отделить нормальный поток выполнения программы (бизнес-логику) от кода, обрабатывающего возможные ошибки (логику восстановления). Принцип работы заключается в следующем:

Читать полностью ->
Что такое WPF?
1.3 Junior🔥 30💬 2

Что такое Windows Presentation Foundation (WPF)?

Windows Presentation Foundation (WPF) — это графическая подсистема (UI-фреймворк) от Microsoft, предназначенная для построения настольных клиентских приложений под операционную систему Windows. Он был впервые выпущен как часть .NET Framework 3.0 в 2006 году и с тех пор стал основным инструментом для разработки богатых пользовательских интерфейсов (Rich Client Applications) на платформе .NET. WPF пришёл на смену устаревшим технологиям, таким как Windows Forms (WinForms), и представил революционный подход к созданию UI за счёт разделения логики приложения и его визуального представления.

Ключевые концепции и архитектурные особенности WPF

Читать полностью ->
Что такое Runtime error?
1.8 Middle🔥 30💬 1

Что такое Runtime Error (Ошибка времени выполнения)?

Runtime Error — это класс ошибок, возникающих во время выполнения программы, после успешной компиляции, когда процессор уже выполняет скомпилированный код. В отличие от compile-time errors (ошибок компиляции), которые препятствуют созданию исполняемого файла, runtime-ошибки проявляются при конкретных условиях работы программы и часто связаны с логикой приложения, внешними ресурсами или состоянием системы.

Основные характеристики

Читать полностью ->
Что такое Like в SQL?
1.0 Junior🔥 30💬 1

Что такое оператор LIKE в SQL?

LIKE — это оператор языка SQL, используемый для поиска указанного шаблона в столбце. Он применяется в предложении WHERE для фильтрации строк по частичному совпадению текстовых данных, когда точное значение неизвестно или требуется найти вариации.

Основное назначение и принцип работы

Оператор LIKE позволяет выполнять частичный поиск в текстовых полях (типы CHAR, VARCHAR, TEXT и т.д.) с использованием специальных символов-шаблонов (wildcards). В отличие от оператора =, который ищет точное совпадение, LIKE даёт гибкость для поиска строк, содержащих определённые подстроки, начинающихся или заканчивающихся конкретными символами.

Ключевые символы-шаблоны (Wildcards)

В большинстве СУБД (SQL Server, MySQL, PostgreSQL, SQLite) поддерживаются два основных wildcard-символа:

Читать полностью ->
Придерживаешься ли принципов RESTful APIs при разработке контроллеров?
2.0 Middle🔥 30💬 1

Мой подход к RESTful API при разработке контроллеров C#

Да, я строго придерживаюсь принципов RESTful API при разработке контроллеров в C#, так как это обеспечивает предсказуемость, масштабируемость и удобство использования API. Вот как я это реализую на практике:

Ключевые принципы REST в моих проектах

1. Ресурсо-ориентированная архитектура Я проектирую API вокруг ресурсов, а не действий. Каждый контроллер отвечает за определенный тип ресурса:

Читать полностью ->
Может ли конструктор объекта быть с параметрами?
1.3 Junior🔥 30💬 2

Да, конструктор объекта в C# может быть с параметрами

В C# конструкторы с параметрами — это стандартная и широко используемая возможность, позволяющая инициализировать состояние объекта при его создании.

Ключевые аспекты конструкторов с параметрами

Конструктор с параметрами (parameterized constructor) — это специальный метод класса, который:

  1. Имеет такое же имя, как и класс
  2. Не возвращает никакого значения (даже void не указывается)
  3. Принимает один или несколько параметров
  4. Вызывается при создании экземпляра класса с использованием оператора new

Базовый пример реализации

public class Person
{
    // Поля класса
    private string name;
    private int age;
    
    // Конструктор с параметрами
    public Person(string personName, int personAge)
    {
        name = personName;
        age = personAge;
    }
    
    // Метод для демонстрации
    public void DisplayInfo()
    {
        Console.WriteLine($"Имя: {name}, Возраст: {age}");
    }
}
Читать полностью ->
Какую проблему решает Docker?
1.0 Junior🔥 30💬 2

Какую проблему решает Docker?

Docker решает комплексную проблему несоответствия среды разработки, тестирования и эксплуатации программного обеспечения, часто называемую "It works on my machine". Это фундаментальная проблема в жизненном цикле приложений, которая приводит к огромным затратам времени и ресурсов, снижает надежность и затрудняет масштабирование.

Основные проблемы, которые Docker устраняет

1. Унификация и изоляция среды выполнения

Каждый проект требует специфичного окружения: версии языка (например, C# .NET Core 6.0 vs 8.0), версии библиотек, конфигурационных файлов, системных зависимостей (например, конкретной версии SQL Server). В классической модели разработчик устанавливает все это локально, что приводит к:

  • Конфликтам версий между проектами.
  • "Загрязнению" основной операционной системы.
  • Невозможности точного воспроизведения среды на другом компьютере или сервере.
Читать полностью ->
Какие знаешь архитектуры приложения?
1.8 Middle🔥 30💬 1

Архитектуры приложения в C# Backend-разработке

В контексте C# Backend-разработки я выделяю несколько ключевых архитектурных подходов, каждый из которых решает определённые задачи. Их выбор зависит от масштаба проекта, требований к гибкости, тестируемости и долгосрочной поддержки.

1. Многоуровневая архитектура (Layered Architecture)

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

// Пример структуры проекта
MyApp/
├── Presentation/    // UI или API слой (контроллеры)
├── Business/        // Бизнес-логика (сервисы, модели)
├── DataAccess/      // Работа с данными (репозитории, EF Core)
└── Common/          // Общие утилиты

Преимущества:

  • Простота понимания и внедрения.
  • Чёткое разделение ответственности.
  • Подходит для небольших и средних проектов.

Недостатки:

  • Склонность к "разбуханию" бизнес-слоя.
  • Зависимости между слоями могут становиться жёсткими.
Читать полностью ->
Что такое JOIN в SQL?
1.0 Junior🔥 30💬 1

Что такое JOIN в SQL?

JOIN — это оператор языка SQL, предназначенный для объединения строк из двух или более таблиц реляционной базы данных на основе логически связанных между ними столбцов (ключей). Основная цель JOIN — предоставить возможность извлекать согласованные данные из нескольких таблиц в рамках одного запроса, что является фундаментальным принципом реляционных баз данных, избегая избыточности информации и обеспечивая целостность данных.

Без использования JOIN разработчику пришлось бы выполнять несколько отдельных запросов и "сшивать" результаты на уровне приложения, что крайне неэффективно с точки зрения производительности, увеличивает сетевой трафик и сложность кода. JOIN позволяет выполнить эту работу на стороне СУБД, которая оптимизирует процесс.

Основные типы JOIN

В стандарте SQL (и в частности, в Microsoft SQL Server, PostgreSQL, MySQL) определены несколько основных видов соединений. Их понимание критически важно.

Читать полностью ->
Что такое EF Core?
1.0 Junior🔥 30💬 3

Что такое Entity Framework Core (EF Core)?

Entity Framework Core (EF Core) — это легковесная, расширяемая, кроссплатформенная и открытая версия популярной технологии доступа к данным Object-Relational Mapper (ORM) от Microsoft для платформы .NET (ранее .NET Core и .NET 5+). Он позволяет разработчикам работать с реляционными базами данных, используя объекты .NET, вместо написания прямых SQL-запросов, что значительно повышает производительность труда и абстрагирует от деталей конкретной СУБД.

Ключевые концепции и архитектура

В основе EF Core лежит концепция DbContext — это центральный класс, который представляет сессию работы с базой данных. Через него выполняются все операции: запросы, сохранение изменений, отслеживание объектов. DbContext работает с сущностями (Entities) — это обычные классы C# (POCO — Plain Old CLR Objects), которые отображаются на таблицы базы данных.

Читать полностью ->
Что такое событие?
1.7 Middle🔥 30💬 2

Что такое событие (Event) в C#?

Событие (Event) — это механизм в C#, реализующий шаблон проектирования Наблюдатель (Observer), который позволяет объекту (издателю) уведомлять другие объекты (подписчиков) о возникновении определенного действия или изменения состояния. События представляют собой специальный вид делегата, обеспечивающий безопасное и инкапсулированное взаимодействие между компонентами системы.

Основные принципы работы событий

События строятся на основе делегатов и включают три ключевых элемента:

  1. Издатель (Publisher) — класс, который определяет событие и генерирует его при наступлении определенных условий.
  2. Подписчик (Subscriber) — класс, который регистрирует обработчик для события и реагирует на его возникновение.
  3. Обработчик события (Event Handler) — метод, который выполняется при срабатывании события.

Синтаксис и реализация событий

Базовый пример создания и использования события:

Читать полностью ->
Что такое GarbageCollector?
1.0 Junior🔥 30💬 1

🗑️ Что такое Garbage Collector (GC) в C#?

Сборщик мусора (Garbage Collector) — это автоматический менеджер памяти в среде выполнения .NET (CLR), который освобождает разработчика от ручного управления памятью. Его основная задача — обнаруживать и освобождать объекты, которые больше не используются приложением, предотвращая утечки памяти и обеспечивая эффективное использование ресурсов.

🔍 Как работает Garbage Collector?

GC работает на основе концепции "достижимости" объектов. Объект считается "живым", если на него существует хотя бы одна ссылка из так называемых корней (roots). Корни включают:

  • Глобальные и статические переменные
  • Локальные переменные в активных методах
  • Параметры методов
  • Указатели в машинных регистрах

Основные этапы работы GC:

Читать полностью ->
Что такое процедура в SQL?
2.0 Middle🔥 30💬 1

Что такое процедура в SQL?

SQL процедура (Stored Procedure) — это набор SQL-команд, скомпилированный и хранящийся на сервере БД. Это переиспользуемый блок кода, который можно вызвать из приложения или других процедур.

Синтаксис

Вот пример процедуры в SQL Server:

CREATE PROCEDURE sp_CreateUser
    @FirstName NVARCHAR(100),
    @LastName NVARCHAR(100),
    @Email NVARCHAR(100),
    @UserId INT OUTPUT
AS
BEGIN
    INSERT INTO Users (FirstName, LastName, Email, CreatedDate)
    VALUES (@FirstName, @LastName, @Email, GETUTCDATE())
    
    SET @UserId = SCOPE_IDENTITY()
END

Вызов из C#

Читать полностью ->
Для чего нужно разделение на значимые и ссылочные типы данных?
2.3 Middle🔥 30💬 1

Для чего нужно разделение на значимые и ссылочные типы данных?

Разделение типов на значимые (Value Types) и ссылочные (Reference Types) — это фундаментальная архитектурная решение в .NET/C#, которое влияет на память, производительность, семантику передачи данных и поведение программы. Это разделение критично для эффективной работы с ресурсами и правильного проектирования приложений.

Основные различия

Значимые типы (Value Types):

  • Хранятся в стеке (Stack)
  • Занимают столько памяти, сколько нужно для хранения данных
  • При присваивании или передаче параметра — копируется значение
  • Включают: int, double, bool, struct, enum

Ссылочные типы (Reference Types):

  • Хранятся в куче (Heap)
  • На стеке хранится только ссылка (адрес) на объект
  • При присваивании или передаче параметра — копируется ссылка
  • Включают: class, interface, delegate, string, array

Пример разного поведения

Читать полностью ->
Что такое String?
1.6 Junior🔥 30💬 1

Что такое String в C#

Определение

String — это встроенный тип данных в C#, который представляет последовательность символов Unicode. Это один из самых часто используемых типов в .NET Framework.

String является ссылочным типом (reference type), хотя ведёт себя как значимый тип благодаря специальной обработке в .NET.

Основные характеристики

1. Неизменяемость (Immutability)

Строки в C# — это неизменяемые объекты. Это значит, что после создания строку нельзя изменить. Любая операция, которая кажется изменением строки, на самом деле создаёт новую строку.

string text = "Hello";
text = text + " World";  // Создаёт НОВУЮ строку "Hello World"
                         // Старая строка "Hello" остаётся в памяти

string str = "ABC";
str = str.ToLower();     // Создаёт новую строку "abc"
                         // Старая строка "ABC" остаётся в памяти
Читать полностью ->
Расскажи о себе как о разработчике
1.0 Junior🔥 30💬 1

Обо мне как о разработчике

Я опытный C# Backend разработчик с 10+ годами профессионального опыта в .NET экосистеме. На протяжении карьеры я сосредоточился на разработке высоконагруженных серверных приложений, микросервисной архитектуре и работе с корпоративными системами.

Основной стек

  • Основной язык: C# 12+, .NET 8 / .NET Framework
  • Web фреймворки: ASP.NET Core MVC, WebAPI, Minimal APIs
  • ORM & Data Access: Entity Framework Core (EF Core), Dapper, raw SQL
  • Архитектура: Clean Architecture, SOLID, DDD (Domain-Driven Design)
  • Паттерны: Repository, Unit of Work, Dependency Injection, Strategy, Factory
  • Асинхронность: async/await, Task Parallel Library (TPL), Reactive Extensions (Rx)

Основной опыт

Читать полностью ->
Что такое метод?
1.3 Junior🔥 29💬 1

Что такое метод в C#?

Метод — это фундаментальная конструкция в C# и объектно-ориентированном программировании, представляющая собой именованный блок кода, который выполняет определенную задачу или вычисление. Метод инкапсулирует логику, обеспечивает повторное использование кода, улучшает читаемость и структурирует программу, следуя принципу «разделяй и властвуй».

Ключевые характеристики метода

Читать полностью ->
Что такое OCP?
1.7 Middle🔥 29💬 1

Ответ: Принцип открытости/закрытости (Open/Closed Principle, OCP)

Принцип открытости/закрытости (OCP) является одним из пяти фундаментальных принципов SOLID объектно-ориентированного дизайна. Он был сформулирован Бертраном Майером и гласит:

"Программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для изменения."

Это означает, что поведение модуля можно расширять (добавлять новые функции) без необходимости изменять его исходный код. Это достигается через использование абстракций (интерфейсов или абстрактных классов) и таких механизмов, как наследование, полиморфизм и композиция.

Ключевые идеи и цель OCP

Читать полностью ->
Приведи пример использования SQL баз данных
1.0 Junior🔥 29💬 1

Пример использования SQL-баз данных в Backend-разработке на C#

SQL-базы данных — это реляционные хранилища данных, которые широко используются в бэкенд-разработке для управления структурированной информацией. Ниже приведён пример использования SQL Server в приложении на C# с применением Entity Framework Core — популярного ORM (Object-Relational Mapper), который упрощает взаимодействие с базой данных.

Архитектура примера

Пример представляет собой простое CRUD-приложение (Create, Read, Update, Delete) для управления списком пользователей. Мы используем подход Code-First, где сначала определяем модели C#, а затем на их основе создаём структуру базы данных.

1. Определение модели данных

Создаём класс User, который будет соответствовать таблице Users в базе данных:

Читать полностью ->
Какие знаешь способы настройки маршрутизации в ASP.NET приложении?
2.0 Middle🔥 29💬 2

Способы настройки маршрутизации в ASP.NET

Маршрутизация — это фундаментальный механизм в ASP.NET, который сопоставляет входящие HTTP-запросы с обработчиками (контроллерами, страницами или методами). Существует несколько подходов к настройке, которые различаются в зависимости от типа приложения (MVC, Web API, Razor Pages, Blazor) и версии фреймворка.

1. Маршрутизация на основе атрибутов (Attribute Routing)

Наиболее современный и гибкий подход, доступный в ASP.NET Core и Web API 2+. Позволяет определять маршруты непосредственно над контроллерами и методами действий с помощью атрибутов.

[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    [HttpGet("{id:int}")] // /api/products/5
    public IActionResult GetById(int id) { ... }

[HttpGet("search/{name}")] // /api/products/search/laptop
    public IActionResult SearchByName(string name) { ... }
Читать полностью ->
Какие знаешь виды загрузок данных в EF Core?
2.2 Middle🔥 29💬 1

Виды загрузки данных в Entity Framework Core

В Entity Framework Core существует три основных стратегии загрузки связанных данных: ленивая (Lazy Loading), жадная (Eager Loading) и явная (Explicit Loading). Правильный выбор стратегии критически важен для производительности и поведения приложения.

1. Жадная загрузка (Eager Loading)

Жадная загрузка загружает основные сущности вместе со связанными данными в одном запросе к базе данных с помощью операции JOIN. Это наиболее эффективный способ, когда вы заранее знаете, какие связанные данные понадобятся.

Ключевые методы:

  • Include() - загружает непосредственные связи
  • ThenInclude() - загружает вложенные связи (цепочки навигационных свойств)
// Загрузка блога со всеми его постами
var blogs = context.Blogs
    .Include(b => b.Posts)
    .ToList();
Читать полностью ->
Как развивался в программировании?
1.2 Junior🔥 29💬 1

Мой путь в программировании

Мой путь от начинающего до senior-разработчика занял более 10 лет и включал несколько ключевых этапов, каждый из которых вносил значительный вклад в моё профессиональное становление.

Этап 1: Академические основы и первые проекты (первые 2-3 года)

Начал с изучения фундаментальных дисциплин в университете: алгоритмы, структуры данных, ООП, архитектура ЭВМ. Параллельно осваивал C# и .NET самостоятельно, решая задачи на платформах вроде LeetCode и Codewars. Первые коммерческие проекты были связаны с разработкой desktop-приложений на WinForms и простых веб-API.

Читать полностью ->
Назови способы управления асинхронными операциями
1.8 Middle🔥 29💬 1

Способы управления асинхронными операциями в C#

В современных приложениях управление асинхронными операциями является ключевым для обеспечения высокой производительности, отзывчивости и эффективного использования ресурсов. В C# существует несколько основных подходов к управлению асинхронностью, каждый из которых имеет свои особенности и области применения.

1. Асинхронные методы и операторы async/await

Это наиболее распространенный и удобный способ, появившийся в C# 5.0. Использование ключевых слов async и await позволяет писать код, который выглядит как синхронный, но выполняется асинхронно.

public async Task<string> DownloadDataAsync(string url)
{
    using (var client = new HttpClient())
    {
        // Операция выполняется асинхронно, не блокируя основной поток
        var data = await client.GetStringAsync(url);
        return ProcessData(data);
    }
}
Читать полностью ->
Что такое класс?
1.3 Junior🔥 29💬 1

Что такое класс в объектно-ориентированном программировании (ООП)?

Класс — это фундаментальная концепция объектно-ориентированного программирования, представляющая собой шаблон, чертёж или абстрактное описание для создания объектов. Класс определяет структуру и поведение будущих экземпляров (объектов), инкапсулируя в себе данные (поля, свойства) и методы (функции), которые оперируют этими данными.

Основные компоненты класса

В C# класс состоит из следующих ключевых элементов:

  • Поля (Fields) — переменные, хранящие состояние объекта.
  • Свойства (Properties) — обеспечивают контролируемый доступ к полям, часто с логикой валидации в get/set аксессорах.
  • Методы (Methods) — функции, определяющие поведение объекта.
  • Конструкторы (Constructors) — специальные методы, вызываемые при создании экземпляра для его инициализации.
  • События (Events) — позволяют объекту уведомлять другие объекты о происходящих с ним действиях.
Читать полностью ->
Что такое GROUP BY в SQL?
1.3 Junior🔥 29💬 2

Что такое GROUP BY в SQL?

GROUP BY — это оператор языка SQL, предназначенный для группировки строк результирующего набора данных по одному или нескольким столбцам. Это один из фундаментальных инструментов для агрегации данных, который позволяет преобразовывать детализированные записи в суммарную информацию — считать количество, вычислять суммы, средние значения, находить экстремумы и т.д.

Основная цель и логика работы

Когда вы выполняете запрос с GROUP BY, движок базы данных:

  1. Разделяет все строки из исходной таблицы (или результата JOIN) на группы на основе одинаковых значений в указанных столбцах.
  2. Сворачивает каждую группу в одну результирующую строку.
  3. Позволяет применять агрегатные функции (COUNT, SUM, AVG, MAX, MIN и др.) к другим столбцам в пределах каждой группы.

Без GROUP BY агрегатные функции применяются ко всей таблице целиком, возвращая одно значение. С GROUP BY вы получаете одно суммарное значение на каждую группу.

Читать полностью ->
Что такое Dictionary?
1.0 Junior🔥 29💬 1

Что такое Dictionary в C#?

Dictionary<TKey, TValue> — это универсальная коллекция в .NET, представляющая собой структуру данных "ключ-значение" (hash table), которая обеспечивает быстрый поиск, вставку и удаление элементов по уникальному ключу. Это один из наиболее часто используемых типов коллекций в C# для ассоциативного хранения данных.

Основные характеристики Dictionary:

Читать полностью ->
Когда вызывается Finalize?
2.0 Middle🔥 29💬 1

Когда вызывается Finalize в C#

Основы: Финализатор и сборка мусора

Finalize — это специальный метод деструктора в C#, который вызывается автоматически сборщиком мусора (Garbage Collector) перед удалением объекта из памяти. Это не то же самое, что Dispose().

Жизненный цикл объекта с Finalize

Этап 1: Создание объекта

public class MyResource
{
    public MyResource()
    {
        Console.WriteLine("Конструктор: объект создан");
    }
    
    ~MyResource()  // Это финализатор (деструктор)
    {
        Console.WriteLine("Finalize: объект удаляется из памяти");
    }
}

// Использование
var obj = new MyResource();  // Выводит: "Конструктор: объект создан"
obj = null;  // Объект становится кандидатом на удаление

Когда Finalize вызывается

Правило 1: После того, как объект становится недостижимым (unreachable)

public class Resource
{
    ~Resource()
    {
        Console.WriteLine("Finalize вызван");
    }
}
Читать полностью ->
Что такое ошибка с кодом 500?
1.0 Junior🔥 28💬 1

Ошибка HTTP 500: Internal Server Error

Ошибка с кодом 500 (Internal Server Error) — это общий статусный код HTTP, указывающий, что сервер столкнулся с непредвиденной проблемой, которая препятствует выполнению запроса клиента. Это одна из наиболее распространённых ошибок на стороне сервера, сигнализирующая о внутренней неисправности, которую сервер не смог обработать корректно.

Что означает ошибка 500?

Читать полностью ->
Что значит буква O в SOLID?
2.0 Middle🔥 28💬 1

Принцип открытости/закрытости (Open/Closed Principle - OCP)

Принцип открытости/закрытости (Open/Closed Principle) — второй из пяти принципов SOLID, сформулированных Робертом Мартином. Формулировка принципа гласит: «Программные сущности (классы, модули, функции) должны быть открыты для расширения, но закрыты для модификации».

Суть принципа

Этот принцип предлагает архитектурный подход, при котором:

  • Открытость для расширения — вы можете добавлять новую функциональность, не нарушая существующий код
  • Закрытость для модификации — базовые классы и модули остаются неизменными при добавлении новых возможностей

Проблемный пример (нарушение OCP)

Читать полностью ->
Какие рабочие места были?
1.3 Junior🔥 28💬 1

Мой профессиональный путь в C# Backend разработке

За более чем 10 лет работы в области C# Backend разработки, я прошел через различные роли и компании, что позволило мне получить широкий опыт в создании высоконагруженных, масштабируемых и надежных систем. Моя карьера развивалась от уровня разработчика до ведущих технических позиций.

Основные рабочие места и роли

1. Junior/Middle Backend Developer в финансовой компании (первые 3 года)

  • Основные задачи: Разработка и поддержка внутренних систем для обработки транзакций и отчетности.
  • Технологический стек: .NET Framework 4.x, ASP.NET MVC, Entity Framework, SQL Server, WCF.
  • Ключевые достижения: Участие в проекте по переходу с монолитной архитектуры на более модульную, оптимизация критических запросов к базе данных.
Читать полностью ->
Какие знаешь джойны в SQL?
1.0 Junior🔥 28💬 1

Джойны в SQL: типы и особенности

В SQL оператор JOIN используется для объединения строк из двух или более таблиц на основе связанного между ними столбца. Это фундаментальная концепция для работы с реляционными базами данных, позволяющая выполнять сложные запросы и агрегировать данные. Основные типы джойнов можно разделить на INNER, OUTER, CROSS и специальные виды.

Основные типы JOIN

1. INNER JOIN

INNER JOIN возвращает только те строки, где есть совпадение в обеих таблицах. Это самый распространенный тип.

SELECT 
    employees.name, 
    departments.department_name
FROM employees
INNER JOIN departments 
    ON employees.department_id = departments.id;

Если у сотрудника нет департамента (NULL в department_id) или департамент не существует в таблице departments, такие строки не будут включены в результат.

Читать полностью ->
Как работает технология аутентификации на базе JWT?
2.3 Middle🔥 28💬 1

Как работает технология аутентификации на базе JWT

JWT (JSON Web Token) — это открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ безопасной передачи информации между сторонами в виде JSON объекта. Эта информация может быть проверена и доверена, потому что она цифровая подписана. JWT часто используется для аутентификации и авторизации в современных веб-приложениях и API, особенно в архитектурах, основанных на микросервисах или отдельном фронтенде и бэкенде.

Структура JWT

JWT состоит из трех частей, разделенных точками: Header, Payload и Signature.

xxxxx.yyyyy.zzzzz

Вот пример разбора реального токена:

// Header (закодирован в Base64Url)
{
  "alg": "HS256",
  "typ": "JWT"
}

// Payload (закодирован в Base64Url)
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022
}

// Signature
HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret-key
)
Читать полностью ->
В чём разница между асинхронным вызовом и асинхронным вызовом с использованием await?
2.0 Middle🔥 28💬 1

Разница между асинхронным вызовом и использованием await

Ключевое различие между обычным асинхронным вызовом (например, через Task.ContinueWith или callback-и) и асинхронным вызовом с await заключается в парадигме программирования: первое следует асинхронной модели на основе колбэков, второе — асинхронной модели на основе задач (Task-based Asynchronous Pattern, TAP) с синхронным стилем кода.

1. Обычный асинхронный вызов (без await)

Это подход, где вы запускаете операцию и подписываетесь на её завершение через callback, продолжение (ContinueWith) или ручное ожидание. Код становится "разорванным" и сложным для чтения.

Читать полностью ->
Что такое MS SQL Server?
1.0 Junior🔥 28💬 2

Что такое Microsoft SQL Server?

Microsoft SQL Server — это полнофункциональная, реляционная система управления базами данных (РСУБД), разрабатываемая и поддерживаемая компанией Microsoft. Это один из ведущих коммерческих продуктов в мире баз данных, наряду с Oracle Database и IBM Db2, широко используемый в enterprise-разработке, особенно в экосистеме Microsoft (.NET, Azure).

Ключевые характеристики и архитектура

SQL Server построен на архитектуре клиент-сервер. Его ядро — это серверный процесс (sqlservr.exe), который управляет всеми операциями с данными, обработкой запросов, безопасностью и транзакциями. Клиентские приложения (например, написанные на C#) взаимодействуют с сервером по сети, используя протокол Tabular Data Stream (TDS).

Читать полностью ->
Какие знаешь порождающие архитектурные паттерны?
1.0 Junior🔥 28💬 1

Порождающие архитектурные паттерны

Порождающие паттерны — это шаблоны проектирования, которые абстрагируют и оптимизируют процесс создания объектов, делая систему независимой от способа создания, композиции и представления объектов. В контексте архитектуры C# Backend, они особенно важны для управления зависимостями, тестируемости и поддержки кода.

Основные порождающие паттерны

1. Singleton (Одиночка)

Обеспечивает наличие только одного экземпляра класса в приложении, предоставляя глобальную точку доступа к нему. Широко используется для логирования, конфигурации, кэширования или пулов соединений.

public sealed class Logger
{
    private static Logger _instance;
    private static readonly object _lock = new object();

private Logger() { }
Читать полностью ->
В чем разница между классом и структурой?
1.3 Junior🔥 28💬 1

Разница между классом и структурой в C#

Хотя классы и структуры похожи синтаксически, они имеют принципиальные различия в том, как работают с памятью и поведением.

Основные различия

АспектКлассСтруктура
Тип данныхСсылочный тип (reference type)Тип значения (value type)
ХранениеHeap (куча)Stack (стек) или встроенная память
НаследованиеПоддерживаетТолько от interfaces
КонструкторМожет быть без параметровТребуется инициализация всех полей
Default значениеnullDefault values полей
ПроизводительностьМедленнее (GC overhead)Быстрее (нет GC)

Примеры

Класс:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

var p1 = new Person { Name = "Alice", Age = 30 };
var p2 = p1;
p2.Name = "Bob";

Console.WriteLine(p1.Name); // "Bob" — изменение через p2 повлияло на p1
Читать полностью ->
Что такое SOLID?
1.0 Junior🔥 28💬 1

SOLID - Пять принципов объектно-ориентированного проектирования

SOLID - это набор из пяти принципов, разработанных Robert Martin для создания более гибкого, масштабируемого и поддерживаемого кода. Каждая буква обозначает один принцип.

1. S - Single Responsibility Principle (Принцип единственной ответственности)

Суть: Каждый класс должен иметь только одну ответственность и только одну причину для изменения.

// ПЛОХО - класс имеет много ответственностей
public class UserService
{
    public void RegisterUser(User user)
    {
        if (string.IsNullOrEmpty(user.Email))
            throw new ArgumentException();
        
        _database.SaveUser(user);
        _emailClient.SendWelcomeEmail(user.Email);
        _logger.LogInformation($"User registered: {user.Id}");
    }
}
Читать полностью ->
Что такое new?
1.0 Junior🔥 27💬 1

Оператор new в C#

new — это ключевой оператор в C#, который выполняет несколько взаимосвязанных функций, связанных с выделением памяти, инициализацией объектов и управлением их жизненным циклом. Его основное назначение — создание экземпляров ссылочных типов (классов) и выделение памяти для значимых типов (структур), но он также используется для скрытия членов базового класса и создания анонимных типов.

Основные варианты использования new

1. Создание экземпляров классов (работа в управляемой куче)

При использовании с классами оператор new выполняет три ключевые действия:

  • Выделяет память в управляемой куче (managed heap) для объекта.
  • Инициализирует поля объекта (значениями по умолчанию или через конструктор).
  • Возвращает ссылку на созданный объект.
public class Person
{
    public string Name { get; set; }
    
    public Person(string name)
    {
        Name = name;
    }
}
Читать полностью ->
Что такое State machine?
1.0 Junior🔥 27💬 1

Что такое State Machine (Конечный автомат)?

State Machine (машина состояний, конечный автомат) — это математическая абстракция и архитектурный паттерн, используемый для моделирования поведения системы, которое может находиться в одном из конечного числа состояний (states) в каждый момент времени. Переходы между состояниями происходят в ответ на события (events) или входные данные, причём каждый переход может сопровождаться определёнными действиями (actions). Это фундаментальная концепция в computer science, широко применяемая в backend-разработке на C# для управления сложной бизнес-логикой, workflow, обработки данных и коммуникаций.

Читать полностью ->
Какой тип объекта возвращается при использовании Where?
1.0 Junior🔥 27💬 1

Тип возвращаемого значения метода Where в C#

При использовании метода расширения Where из пространства имён System.Linq возвращается специальный тип, реализующий интерфейс IEnumerable<T>, где T — тип элементов исходной коллекции. Конкретный тип зависит от контекста вызова и исходного источника данных.

Основные варианты возвращаемых типов

1. IEnumerable<T> для коллекций в памяти

При вызове Where на стандартных коллекциях в памяти (таких как List<T>, T[], Collection<T> и т.д.) возвращается экземпляр внутреннего класса System.Linq.Enumerable.WhereArrayIterator<T> или System.Linq.Enumerable.WhereListIterator<T>.

using System.Linq;

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var filtered = numbers.Where(n => n > 3); // Тип: WhereListIterator<int>
Console.WriteLine(filtered.GetType().Name); // Вывод: WhereListIterator`1
Читать полностью ->
Для чего нужен Include?
1.0 Junior🔥 27💬 1

Назначение метода Include в Entity Framework

Include — это метод загрузки связанных данных в Entity Framework, реализующий жадную загрузку (Eager Loading). Его основное назначение — предотвращение проблемы N+1 запросов и оптимизация производительности при работе с связанными сущностями.

Основная проблема, которую решает Include

Без использования Include при доступе к навигационным свойствам Entity Framework выполняет отдельные запросы к базе данных для каждой связанной сущности:

// ПРОБЛЕМА: N+1 запросов
var orders = context.Orders.ToList(); // 1 запрос
foreach (var order in orders)
{
    // Для каждого заказа - отдельный запрос к Customers
    var customerName = order.Customer.Name; // N запросов
}

Как работает Include

Метод Include указывает EF загрузить связанные данные в рамках одного запроса с использованием JOIN:

Читать полностью ->
В чём разница между Transient, Scoped и Singleton?
1.2 Junior🔥 27💬 2

В чём разница между Transient, Scoped и Singleton в ASP.NET Core DI?

В ASP.NET Core Dependency Injection (DI) существует три основных времени жизни (lifetime) служб: Transient, Scoped и Singleton. Понимание этих различий критично для корректного управления ресурсами, состояниями и многопоточностью в веб-приложениях.

Основные различия по времени жизни

1. Transient (Мгновенная)

  • Создание: Новый экземпляр создаётся каждый раз при запросе службы из контейнера зависимостей.
  • Область видимости: Кратковременная, существует только в рамках одного запроса на инъекцию.
  • Использование: Идеально для лёгких, не имеющих состояния (stateless) служб, где каждый вызов должен быть изолирован.
// Регистрация
services.AddTransient<IMyService, MyService>();
Читать полностью ->
В чём разница между Select и Where?
1.0 Junior🔥 27💬 1

Разница между Select и Where в LINQ (C#)

Основное отличие между Select и Where заключается в их предназначении: Where используется для фильтрации коллекции по определённому условию, а Select — для проекции (преобразования) каждого элемента коллекции в новую форму. Оба метода являются частью LINQ (Language Integrated Query) и реализуют отложенное выполнение (deferred execution).

Ключевые различия

Читать полностью ->
String это значимый или ссылочный тип\?
1.3 Junior🔥 27💬 1

String в C#: ссылочный тип

String (строка) в C# является ссылочным типом (reference type), несмотря на некоторые особенности поведения, которые могут напоминать значимые типы (value types).

Почему string — ссылочный тип?

1. Наследование и реализация

public sealed class String : ICloneable, IComparable, IComparable<string>, 
                              IConvertible, IEquatable<string>, IEnumerable<char>

Как видно из определения, string — это sealed-класс, наследующийся от System.Object. Все классы в C# являются ссылочными типами.

2. Расположение в памяти

  • Экземпляры string размещаются в куче (heap)
  • Переменные типа string хранят ссылку на область памяти в куче, а не сами данные
  • Значения по умолчанию: null для ссылочных типов vs. "" (пустая строка через String.Empty)
Читать полностью ->
Что такое статистика в SQL?
1.0 Junior🔥 27💬 1

Что такое статистика в SQL?

Статистика в SQL — это метаинформация о распределении данных в таблицах и индексах, которую использует оптимизатор запросов для выбора оптимального плана выполнения. Это один из ключевых механизмов, влияющих на производительность баз данных.

Зачем нужна статистика?

Функции статистики:

  • Оптимизация планов выполнения — оптимизатор использует статистику для оценки количества строк, которые вернет каждая операция
  • Выбор метода доступа — определяет, использовать ли индекс или полное сканирование таблицы
  • Выбор порядка объединения — в JOIN операциях статистика влияет на очередность объединения таблиц
  • Оценка стоимости — помогает выбрать наименее дорогостоящий план

Типы статистики

В SQL Server:

  • Column statistics — информация о распределении значений в столбце (гистограмма, плотность)
  • Index statistics — статистика по индексам
  • Statistics objects — пользовательские объекты статистики
Читать полностью ->
Что такое принцип единственной ответственности (SRP, Single Responsibility Principle) в ООП?
2.3 Middle🔥 26💬 1

Принцип единственной ответственности (SRP)

Принцип единственной ответственности (Single Responsibility Principle, SRP) — это первый из пяти SOLID принципов объектно-ориентированного программирования, сформулированный Робертом Мартином. Его суть можно выразить так: каждый класс, модуль или функция должны иметь одну и только одну причину для изменения. Иными словами, класс должен отвечать за одну конкретную задачу или функциональность.

Основная идея и формулировка

Классическая формулировка Мартина: "У класса должна быть только одна причина для изменения". "Причина для изменения" здесь — это ответственность (responsibility). Если у класса несколько ответственностей, то изменения в одной из них могут неожиданно сломать другую, что усложняет поддержку и тестирование.

Пример нарушения SRP

Рассмотрим класс Order, который нарушает принцип:

Читать полностью ->
Что такое Inversion of Control & Dependency Injection?
1.6 Junior🔥 26💬 2

Inversion of Control и Dependency Injection

Inversion of Control (IoC) и Dependency Injection (DI) являются ключевыми концепциями в современной архитектуре программного обеспечения, особенно в разработке на C#. Они представляют собой фундаментальные принципы, которые позволяют создавать гибкие, тестируемые и поддерживаемые приложения.

Что такое Inversion of Control (IoC)?

Inversion of Control — это общий принцип, при котором управление потоком выполнения программы или созданием объектов передается от самого приложения к внешней инфраструктуре или фреймворку. В традиционном подходе приложение самостоятельно управляет своими зависимостями и последовательностью действий. При использовании IoC эта ответственность "инвертируется" — передается внешнему компоненту, часто называемому IoC-контейнером.

Ключевая идея IoC заключается в том, что компоненты не должны управлять своими зависимостями напрямую. Это повышает модульность и уменьшает связанность кода.

Читать полностью ->
Что такое HTTP/2?
2.0 Middle🔥 26💬 3

Что такое HTTP/2?

HTTP/2 — это крупное обновление протокола передачи данных в вебе, утверждённое в 2015 году (RFC 7540 и 7541). Это эволюция HTTP/1.1, направленная на устранение ключевых недостатков предыдущей версии и значительное повышение производительности веб-приложений. Разработанный на основе экспериментального протокола SPDY от Google, HTTP/2 сохраняет полную семантику HTTP (методы, статус-коды, заголовки), но меняет способ форматирования и передачи данных между клиентом и сервером.

Ключевые особенности и преимущества

HTTP/2 вводит несколько фундаментальных улучшений:

1. Мультиплексирование (Multiplexing)

Это самая важная инновация. В HTTP/1.x для параллельной загрузки ресурсов требовалось открывать несколько TCP-соединений (что ограничивалось браузерами), при этом возникала проблема Head-of-Line Blocking на уровне приложений: если один запрос «застревал», все последующие в той же очереди ждали.

Читать полностью ->
Сколько занимаешься программированием?
1.0 Junior🔥 26💬 2

Мой опыт в программировании

За моими плечами 10+ лет профессионального опыта в разработке программного обеспечения, с акцентом на C# и экосистему .NET. Мой путь начался с обучения фундаментальным концепциям программирования, после чего я последовательно углублялся в backend-разработку и смежные технологии.

Эволюция моего профессионального пути

Мой опыт можно охарактеризовать как прогрессивное усложнение задач и технологий:

Читать полностью ->
Приведи пример join
1.2 Junior🔥 26💬 1

Примеры JOIN в SQL и LINQ для C# Backend

В контексте C# Backend разработки, JOIN — это операция объединения данных из нескольких таблиц или коллекций. Это фундаментальная концепция для работы с реляционными базами данных через ORM (например, Entity Framework) или при обработке данных в памяти с помощью LINQ.

1. SQL JOIN в запросах к базе данных

Предположим, у нас есть две таблицы: Employees (Сотрудники) и Departments (Отделы).

-- Создание таблиц для примера
CREATE TABLE Departments (
    Id INT PRIMARY KEY,
    Name NVARCHAR(100)
);

CREATE TABLE Employees (
    Id INT PRIMARY KEY,
    Name NVARCHAR(100),
    DepartmentId INT,
    FOREIGN KEY (DepartmentId) REFERENCES Departments(Id)
);

INNER JOIN (Внутреннее соединение)

Возвращает записи, которые имеют соответствие в обеих таблицах.

SELECT e.Name AS EmployeeName, d.Name AS DepartmentName
FROM Employees e
INNER JOIN Departments d ON e.DepartmentId = d.Id;
Читать полностью ->