en
Feedback
C# | Вопросы собесов

C# | Вопросы собесов

Open in Telegram
5 050
Subscribers
-324 hours
-167 days
-2830 days
Posts Archive
Когда подрядчик тележится, добавляйте его в Коллабу Битрикс24 Коллабы – платформа для эффективной работы с подрядчиками. Тут
Когда подрядчик тележится, добавляйте его в Коллабу Битрикс24 Коллабы – платформа для эффективной работы с подрядчиками. Тут обсуждения превращаются в задачи, а видео созвон можно собрать одной кнопкой. Любой проект можно разложить по полочкам с понятным ТЗ и обозначенными сроками. Работайте в Битрикс24 и создавайте Коллабы с подрядчиками. Начать #реклама 16+ collabs.bitrix24.ru О рекламодателе

🤔 Для чего нужен Dependency Injection? Dependency Injection используется для передачи зависимостей в класс извне, что упрощает управление и замену этих зависимостей. Это позволяет легче тестировать код, так как зависимости можно подменить на заглушки. Также это снижает уровень связности, делая код более модульным. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Repost from easyoffer
– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с тру
– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с трудоустройством Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT. 🔥 Узнай список топовых менторов ✴ Многие из них предлагают бесплатную первую консультацию

🤔 Что такое interceptor? Interceptor (перехватчик) — это паттерн программирования, используемый для перехвата и обработки вызовов методов, запросов или событий перед их исполнением или после. В контексте C# и .NET, интерцепторы чаще всего применяются в: ASP.NET Core Middleware — для перехвата HTTP-запросов. Entity Framework Core Interceptors — для перехвата SQL-запросов и изменений данных. Aspect-Oriented Programming (AOP) — для добавления кода перед или после выполнения метода. 🚩Зачем нужен Interceptor? 🟠Логирование можно записывать запросы, исключения, время выполнения. 🟠Безопасность проверка прав доступа перед выполнением запроса. 🟠Транзакции автоматическое управление транзакциями в базе данных. 🟠Изменение поведения методов например, автоматическая подмена аргументов. 🟠Кэширование можно сохранять результаты выполнения метода. 🚩Пример использования Interceptor в Entity Framework Core Entity Framework Core позволяет использовать интерцепторы для перехвата SQL-запросов. Это может быть полезно, например, для логирования всех SQL-запросов.
using Microsoft.EntityFrameworkCore.Diagnostics;
using System;
using System.Data.Common;
using System.Threading;
using System.Threading.Tasks;

public class SqlInterceptor : DbCommandInterceptor
{
    public override InterceptionResult<DbDataReader> ReaderExecuting(
        DbCommand command, CommandEventData eventData, InterceptionResult<DbDataReader> result)
    {
        Console.WriteLine($"SQL Query: {command.CommandText}");
        return base.ReaderExecuting(command, eventData, result);
    }
}
Теперь подключим этот интерцептор в DbContext
using Microsoft.EntityFrameworkCore;

public class MyDbContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.AddInterceptors(new SqlInterceptor());
        base.OnConfiguring(optionsBuilder);
    }
}
🚩Пример использования Interceptor в ASP.NET Core (Middleware) В ASP.NET Core интерцепторы можно реализовать через Middleware. Например, перехватим все HTTP-запросы и добавим в лог
public class RequestInterceptor
{
    private readonly RequestDelegate _next;

    public RequestInterceptor(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        Console.WriteLine($"HTTP Request: {context.Request.Method} {context.Request.Path}");
        await _next(context);
    }
}
Добавляем middleware в Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseMiddleware<RequestInterceptor>();

app.Run(async (context) =>
{
    await context.Response.WriteAsync("Hello World!");
});

app.Run();
Ставь 👍 и забирай 📚 Базу знаний

🔍 Как улучшить мониторинг приложений в .NET? На открытом уроке «Трейсинг запросов в .NET с использованием Jaeger v2» мы пока
🔍 Как улучшить мониторинг приложений в .NET? На открытом уроке «Трейсинг запросов в .NET с использованием Jaeger v2» мы покажем, как настраивать и использовать мощные инструменты для анализа запросов. Что вас ждёт: — Общая концепция трейсинга запросов в распределённых системах. — Настройка Jaeger v2 для ASP.NET Core. — Анализ данных в Jaeger UI. 📅 Урок пройдет 20 февраля в 20:00 в преддверии старта курса «C# ASP.NET Core разработчик», а все участники получат 🎁скидку на обучение. 👉Зарегистрируйтесь на бесплатный урок прямо сейчас, чтобы прокачать свои навыки мониторинга и отладки приложений: https://otus.pw/x9Ji/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Онлайн-интенсив для ИТ-специалистов в Открытых школах Т1 Уже есть опыт работы в ИТ, но хочешь прокачать скилы и продвинуться в карьере? Тогда скорее залетай на бесплатный ИТ-интенсив в Открытых школах Т1. Открытые школы — это возможность усилить свои навыки и получить оффер в ИТ-холдинг Т1. И все это за месяц, онлайн и в удобное вечернее время. Что ты получишь? ✅ бесплатное обучение в гибком формате: по вечерам, онлайн, из любого города РФ и РБ. ✅ материалы от HR для прокачки резюме и подготовки к интервью в Т1. ✅ много практики и уникальный рыночный опыт. ✅ поддержку опытных преподавателей и карьерный фаст-трек до мидла в Т1 для лучших выпускников. ✅ реальный шанс получить оффер в Т1. Более 1000 специалистов уже прошли этот путь — теперь твоя очередь! Регистрация до 14 марта! Подать заявку #реклама 16+ t1.ru О рекламодателе

🤔 Если не использовать абстракции, что может произойти? Отсутствие абстракций приводит к сильной связности компонентов кода, что делает его сложным для изменений и тестирования. Например, изменения в одной части кода могут затронуть множество других модулей. Код становится менее гибким, менее читаемым и требует больше времени на поддержку. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В каком случае использовать интерфейс, в каком абстрактный класс? Выбор между интерфейсом и абстрактным классом в C# зависит от нескольких факторов, таких как потребности в наследовании, степень общности, возможность множественного наследования и необходимость реализации по умолчанию. 🚩Когда использовать интерфейсы 🟠Множественное наследование Класс может реализовывать несколько интерфейсов, но наследоваться только от одного класса. Используйте интерфейсы, когда требуется множественное наследование.
public interface IDriveable
{
void Drive();
}

   public interface IFlyable
   {
   void Fly();
   }

public class FlyingCar : IDriveable, IFlyable
{
public void Drive() { /* Реализация вождения */ }
public void Fly() { /* Реализация полета */ }
}
🟠Общее поведение без реализации Используйте интерфейсы, чтобы определить общий набор методов и свойств без предоставления какой-либо реализации. Это позволяет разным классам реализовать интерфейс по-своему.
public interface IShape
{
double GetArea();
}

public class Circle : IShape
{
public double Radius { get; set; }
public double GetArea() => Math.PI * Radius * Radius;
}

public class Rectangle : IShape
{
public double Width { get; set; }
public double Height { get; set; }
public double GetArea() => Width * Height;
}
🟠Гибкость и полиморфизм Интерфейсы позволяют легко менять реализацию и обеспечивают гибкость в коде. Можно использовать интерфейсы для создания полиморфных коллекций или методов, которые работают с разными реализациями интерфейсов.
public void DrawShapes(IEnumerable<IShape> shapes)
{
foreach (var shape in shapes)
{
Console.WriteLine($"Area: {shape.GetArea()}");
}
}
🚩Когда использовать 🟠Частичная реализация Используйте абстрактные классы, если вы хотите предоставить некоторую общую реализацию, которую могут использовать подклассы. Абстрактные классы могут содержать как абстрактные, так и не абстрактные методы.
public abstract class Animal
{
public abstract void MakeSound();
public void Sleep() => Console.WriteLine("Sleeping");
}

public class Dog : Animal
{
public override void MakeSound() => Console.WriteLine("Bark");
}
🟠Шаблонный метод Абстрактные классы хорошо подходят для реализации паттерна "Шаблонный метод", где общий алгоритм реализован в абстрактном классе, а конкретные шаги определены в подклассах.
public abstract class Game
{
public void Play()
{
Initialize();
StartPlay();
EndPlay();
}

protected abstract void Initialize();
protected abstract void StartPlay();
protected abstract void EndPlay();
}

public class Football : Game
{
protected override void Initialize() => Console.WriteLine("Football Game Initialized");
protected override void StartPlay() => Console.WriteLine("Football Game Started");
protected override void EndPlay() => Console.WriteLine("Football Game Ended");
}
Ставь 👍 и забирай 📚 Базу знаний

ТОП 2 канала для тех кто увлекатеся хакингом и кибербезопасностью: Этичный Хакер — крупнейший в СНГ канал по информационной б
ТОП 2 канала для тех кто увлекатеся хакингом и кибербезопасностью: Этичный Хакер — крупнейший в СНГ канал по информационной безопасности. OSINT, анонимность, пентест, социальная инженерия. Лаборатория Хакера авторский канал от специалиста по ИБ. Новости даркнета, сетевая разведка, обзоры инструментов с github, полезные подборки.

Нужен человек, для сбора вопросов из собеседований на должность C# разработчик. Что надо делать: 1. Смотреть записи собеседований (список будет дан) 2. Выписывать вопросы, которые задают кандидату Ставка: 450 руб. / час Примерная ЗП: 54 000 руб. / месяц (4 часа в день) Если интересно и можешь уделять работе от 4 часов / день, то отправь сообщение https://t.me/niniafd и сразу напиши какие языки программирования знаешь и какие лучше всего?

Целевые кибератаки 2024: аналитика и кейсы На вебинаре 27 февраля команда Solar 4RAYS подведет итоги по следам расследований целевых атак 2024 года Вы узнаете, как профессиональные хакеры атакуют российские компании и обходят системы безопасности, когда защита не соответствует уровню угроз. А также какие тактики используют киберпреступники, каков конечный импакт для систем ИБ от воздействия хакеров и как выстроить стратегию защиты. Что будет на вебинаре: - Какие инструменты противодействия актуальны в 2025 году; - Какие отрасли бизнеса подвергались атакам и с какой целью; - Какие интересные техники использовали злоумышленники: разбор кейсов расследований. Все примеры и рекомендации основаны на реальных расследованиях инцидентов в российских организациях. Зарегистрироваться #реклама 16+ rt-solar.ru О рекламодателе

🤔 Чем String отличается от других типов? 1. Неизменяемость: - После создания строка не может быть изменена. 2. Ссылочный тип: - Хотя String является ссылочным типом, его ведение в памяти ближе к значимым, так как неизменяемость обеспечивает предсказуемость поведения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Квартиры в ЖК SOKOLNIKI! Рассрочка до 2,5 лет, ПВ от 10% Видовые квартиры бизнес+ класса возле парка от 28 м² от 400 000 руб./м² Первый взнос от 10% Гибкие программы рассрочки до 2,5х лет с переходом в ипотеку Квартиры от 28м² до 135м² От студий до семейных фоматов с большими гостиными Колясочные на этаже Все для удобства родителей Дизайнерские лобби Стильные входные группы Подземный паркинг Системы хранения велосипедов и самокатов Детский сад Закрытая территория Девелопер STONE 18 лет на рынке недвижимости. 27 проектов м. "Сокольники", 12 мин. от парка Перейти на сайт Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО СЗ «КВАРТАЛ СОКОЛЬНИКИ». Финансовые услуги оказывает: ПАО "Совкомбанк". #реклама stone-sokolniki.ru О рекламодателе

🤔 Как хранить типы данных без unboxing'а? Для избежания unboxing: 1. Используйте обобщения (Generics), которые позволяют работать с типами без преобразования. 2. Применяйте значимые типы вместо ссылочных, где это возможно. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

📺 Уникальная база IT собеседований 456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы. Е
📺 Уникальная база IT собеседований 456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы. Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д. 🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!

🤔 Где могут храниться значимые типы? Значимые типы обычно хранятся в стеке, так как их память выделяется статически. Если значимый тип является частью ссылочного типа, он будет храниться в куче. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как сделать связь один к одному? В реляционных базах данных связь "один к одному" (one-to-one) подразумевает, что каждая запись в одной таблице соответствует ровно одной записи в другой таблице. Для реализации связи "один к одному" в SQL можно использовать несколько подходов, в зависимости от требований и архитектуры базы данных. 🚩Основные подходы 🟠Уникальные внешние ключи Используйте внешний ключ в одной таблице, который ссылается на первичный ключ другой таблицы, и сделайте этот внешний ключ уникальным. 🟠Одинаковые первичные ключи Используйте один и тот же первичный ключ в обеих таблицах, где одна таблица содержит внешний ключ, который является также первичным ключом. 🚩Уникальные внешние ключи Таблицы Users (пользователи) UserId (Primary Key) UserName Profiles (профили) ProfileId (Primary Key) UserId (Foreign Key, Unique) ProfileData Создание таблиц
CREATE TABLE Users (
    UserId INT PRIMARY KEY,
    UserName VARCHAR(100)
);

CREATE TABLE Profiles (
    ProfileId INT PRIMARY KEY,
    UserId INT UNIQUE,
    ProfileData VARCHAR(255),
    FOREIGN KEY (UserId) REFERENCES Users(UserId)
);
Вставка данных
INSERT INTO Users (UserId, UserName) VALUES (1, 'John Doe');
INSERT INTO Profiles (ProfileId, UserId, ProfileData) VALUES (1, 1, 'Profile data for John Doe');
Запрос данных
SELECT Users.UserName, Profiles.ProfileData
FROM Users
JOIN Profiles ON Users.UserId = Profiles.UserId;
🚩Одинаковые первичные ключи Таблицы Users (пользователи) UserId (Primary Key) UserName Profiles (профили) UserId (Primary Key, Foreign Key) ProfileData Создание таблиц
CREATE TABLE Users (
    UserId INT PRIMARY KEY,
    UserName VARCHAR(100)
);

CREATE TABLE Profiles (
    UserId INT PRIMARY KEY,
    ProfileData VARCHAR(255),
    FOREIGN KEY (UserId) REFERENCES Users(UserId)
);
Вставка данных
INSERT INTO Users (UserId, UserName) VALUES (1, 'John Doe');
INSERT INTO Profiles (UserId, ProfileData) VALUES (1, 'Profile data for John Doe');
Запрос данных
SELECT Users.UserName, Profiles.ProfileData
FROM Users
JOIN Profiles ON Users.UserId = Profiles.UserId;
🚩Плюсы и минусы 🟠Уникальные внешние ключи ➕Четкая семантика внешнего ключа. ➕Легкость добавления дополнительных данных в связанную таблицу. ➖Необходимо следить за уникальностью внешнего ключа. 🟠Одинаковые первичные ключи ➕Единый идентификатор для связанных данных. ➕Простота конструкции при обеспечении связи. ➖Необходимость синхронизации идентификаторов в обеих таблицах. Ставь 👍 и забирай 📚 Базу знаний

⚡️Вся База по IT в одном месте! Надоело читать мусорные статьи и бред из ChatGPT? Нам тоже, поэтому мы создали IT Базу Знаний
⚡️Вся База по IT в одном месте! Надоело читать мусорные статьи и бред из ChatGPT? Нам тоже, поэтому мы создали IT Базу Знаний, где вручную отбираем всё самое вкусное из мира IT 🧑‍💻 🖥 Python: @python_baza 👩‍💻 Frontend: @frontend_baza 👩‍💻 Backend: @backend_baza 🎨 Дизайн: @design_baza 📚 Книги: @archive_baza 👩‍💻 Топ GitHub: @main_it_baza ⏲️ Ссылки на каналы будут доступны ещё 48 часов, успей забрать лучшее из мира IT в Телеге 👌

🤔 Что известно про классификацию типов? Типы данных классифицируются на: 1. Простые (значимые): - Хранят значения непосредственно в памяти (например, int, float). 2. Ссылочные: - Хранят ссылки на область памяти, где расположены данные (например, String, Array). 3. Пользовательские: - Определяемые разработчиком типы (например, классы, структуры, перечисления). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое unsafe? Используется для объявления небезопасного контекста кода, который позволяет выполнять низкоуровневые операции, такие как манипуляции с указателями. Эти операции обычно не разрешены в безопасном управляемом коде, но могут быть необходимы для взаимодействия с неуправляемым кодом, оптимизации производительности или доступа к определенным системным ресурсам. 🚩Характеристики 🟠Объявление небезопасного контекста Чтобы использовать указатели и выполнять небезопасные операции, нужно объявить метод, блок кода или тип как unsafe.
unsafe void UnsafeMethod()
{
    int a = 10;
    int* p = &a; // Использование указателя
    Console.WriteLine(*p); // Разыменование указателя
}
🟠Компиляция с поддержкой `unsafe` Для компиляции кода с unsafe необходимо включить поддержку небезопасного кода в настройках проекта. В Visual Studio это делается через свойства проекта: 1⃣Откройте свойства проекта. 2⃣Перейдите на вкладку "Сборка". 3⃣Установите флажок "Разрешить небезопасный код". 🟠Использование указателей Указатели позволяют напрямую работать с адресами памяти, что может быть полезно для некоторых оптимизаций или взаимодействия с низкоуровневым кодом, написанным на C или C++.
unsafe void PointerExample()
{
    int a = 5;
    int* p = &a; // p указывает на адрес переменной a
    Console.WriteLine((int)p); // Вывод адреса переменной a
    Console.WriteLine(*p); // Вывод значения переменной a через указатель
}
🟠Небезопасные структуры Вы можете объявлять структуры с указателями и использовать их в небезопасном контексте.
unsafe struct UnsafeStruct
{
    public int* Pointer;
}
🟠Стековые указатели (stackalloc) stackalloc позволяет выделять память в стеке для массива в небезопасном контексте. Это может быть быстрее, чем выделение памяти в куче.
unsafe void StackAllocExample()
{
    int* array = stackalloc int[10]; // Выделение массива из 10 целых чисел в стеке
    for (int i = 0; i < 10; i++)
    {
        array[i] = i;
    }
}
🟠Взаимодействие с неуправляемым кодом Небезопасный код часто используется для взаимодействия с API, написанными на других языках, такими как C или C++.
[DllImport("user32.dll")]
extern static unsafe int MessageBox(IntPtr hWnd, char* text, char* caption, int options);

unsafe void CallUnmanagedCode()
{
    char* text = "Hello, World!";
    char* caption = "My Message Box";
    MessageBox(IntPtr.Zero, text, caption, 0);
}
🚩Плюсы Производительность Позволяет выполнять высокоэффективные операции с памятью. ➕Взаимодействие с неуправляемым кодом Необходим для вызова функций из библиотек, написанных на других языках. ➕Низкоуровневый контроль Предоставляет возможность прямого управления памятью и аппаратными ресурсами. Ставь 👍 и забирай 📚 Базу знаний