uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

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

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

Відкрити в Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

Показати більше
5 002
Підписники
+324 години
-37 днів
-830 днів
Архів дописів
Всё для уверенной улыбки от Oral-B ✅ Совершенная технология Oral-B iO в ассортименте Oral-B ✅ Беспощадна к налёту, нежная к д
Всё для уверенной улыбки от Oral-B ✅ Совершенная технология Oral-B iO в ассортименте Oral-B ✅ Беспощадна к налёту, нежная к дёснам Купить #реклама market.yandex.ru О рекламодателе

🤔 Какие принципы и практики используешь для обеспечения безопасности приложений? 🟠Валидация и Санитизация Входных Данных Валидация входных данных помогает предотвратить атаки, такие как SQL-инъекции, XSS (межсайтовый скриптинг) и другие. SQL-инъекции: Используйте параметризованные запросы или ORM (например, Entity Framework).
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE Username = @username", conn))
{
    cmd.Parameters.AddWithValue("@username", username);
    // Выполнение команды
}
XSS: Используйте библиотеку для экранирования HTML, например, AntiXSS.
string safeContent = Microsoft.Security.Application.Encoder.HtmlEncode(userInput);
🟠Использование Аутентификации и Авторизации Обеспечьте надежную аутентификацию и разграничение доступа к ресурсам. Аутентификация: Используйте современные методы аутентификации, такие как OAuth, OpenID Connect. Авторизация: Применяйте ролевую или заявочную (claims-based) авторизацию.
[Authorize(Roles = "Admin")]
public IActionResult AdminOnly()
{
    return View();
}
🟠Защита от CSRF (Межсайтовая подделка запросов) Используйте анти-CSRF токены для защиты от CSRF атак.
<form asp-action="Create">
    <input type="hidden" name="__RequestVerificationToken" value="@Antiforgery.GetTokens(HttpContext).RequestToken" />
    <!-- Другие поля формы -->
</form>
🟠Шифрование и Защита Данных Шифруйте чувствительные данные как при передаче, так и при хранении. При передаче: Используйте HTTPS для шифрования данных, передаваемых через сеть. При хранении: Используйте библиотеки для шифрования, такие как System.Security.Cryptography.
using (Aes aes = Aes.Create())
{
    aes.Key = key;
    aes.IV = iv;
    // Шифрование данных
}
🟠Логирование и Мониторинг Внедрите логирование и мониторинг для обнаружения и анализа подозрительной активности. Логирование: Логируйте важные действия, такие как входы в систему, изменения данных. Мониторинг: Используйте инструменты мониторинга, такие как Application Insights, для отслеживания состояния приложения.
_logger.LogInformation("User {UserId} logged in.", userId);
🟠Управление Ошибками и Исключениями Не показывайте подробные сообщения об ошибках пользователям, чтобы не раскрывать внутреннюю структуру приложения. Обработка исключений: Ловите и корректно обрабатывайте исключения, предоставляя пользователю дружелюбные сообщения.
try
{
    // Код, который может вызвать исключение
}
catch (Exception ex)
{
    _logger.LogError(ex, "Произошла ошибка.");
    return View("Error");
}
🟠Обновления и Патчи Регулярно обновляйте используемые библиотеки и фреймворки, чтобы закрывать уязвимости. 🟠Минимизация Поверхности Атаки Удалите или отключите ненужные функции и сервисы, чтобы минимизировать возможные точки входа для атак. 🟠Защита Конфигурации Защитите конфигурационные файлы, содержащие чувствительную информацию. Секреты и ключи: Используйте секреты и безопасное хранилище для конфиденциальной информации.
var connectionString = Configuration["ConnectionStrings:DefaultConnection"];
Ставь 👍 и забирай 📚 Базу знаний

🔴 Открытое собеседование на Middle C# | 10 ноября, 19:00 мск Senior C# разработчик проведёт техническое интервью в прямом эф
🔴 Открытое собеседование на Middle C# | 10 ноября, 19:00 мск Senior C# разработчик проведёт техническое интервью в прямом эфире. Посмотришь, как всё устроено изнутри, какие задания предлагают кандидатам и насколько ты готов к такому формату. Как всё будет проходить: 📂 Интервьюер: Александр Моргунов, Senior C# разработчик с опытом 7+ лет в европейских высоконагруженных сервисах. В роли кандидата - разработчик-доброволец. 📂 Никакого сценария: Александр задаст вопросы и предложит задачи, которые использует на технических интервью. Кандидат заранее их не знает. 📂 В конце Александр пообщается со зрителями и ответит на их вопросы Участие бесплатное! Эфир проходит в рамках менторской программы ШОРТКАТ для разработчиков, которые хотят сменить работу, вырасти в грейде и зарплате или прокачать технические навыки Переходи в бота, чтобы получить ссылку на эфир → @shortcut_csharp_bot Реклама. О рекламодателе.

🤔 Когда можно использовать using? using используется для управления объектами, реализующими интерфейс IDisposable, чтобы гарантировать освобождение ресурсов. Это удобно для работы с файлами, потоками, базами данных и другими ресурсами, требующими явного закрытия. Код внутри блока using автоматически вызывает метод Dispose для объекта, даже если возникло исключение. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое IQueryable? Это интерфейс, который наследуется от IEnumerable и предоставляет функциональность для оценки запросов к источнику данных. Основное отличие IQueryable от IEnumerable заключается в том, что IQueryable позволяет запросы быть построенными и выполненными отложенно на стороне источника данных, такого как база данных. Это обеспечивает большую эффективность, поскольку именно необходимые данные извлекаются и передаются, вместо извлечения всего объема данных и их фильтрации на стороне клиента. 🚩Как работает IQueryable Использует LINQ-провайдеры, которые транслируют выражения LINQ в запросы, специфичные для источника данных (например, SQL для баз данных). Это позволяет делать запросы более оптимальными, так как они обрабатываются средствами самого источника данных. 🟠Отложенное выполнение (Deferred Execution) Запросы IQueryable не выполняются, пока не будут перечислены. Это позволяет системе строить более сложные запросы перед их выполнением. 🟠Составление запросов Вы можете построить запрос по частям, добавляя условия на каждом шаге. Финальный запрос выполняется только при перечислении результатов, что позволяет избежать ненужной нагрузки на источник данных. 🟠Преобразование запросов LINQ-провайдеры могут преобразовать выражения запросов IQueryable в оптимизированные запросы к базе данных или другим источникам, что позволяет выполнять сложные операции на стороне сервера, такие как сортировка, группировка и агрегирование.
using (var context = new MyDbContext()) // MyDbContext — это контекст Entity Framework
{
    IQueryable<Product> query = context.Products.Where(p => p.Price > 100);

    // Запрос еще не выполнен, можно добавить другие условия
    query = query.OrderBy(p => p.Name);

    // Запрос выполняется только при перечислении
    foreach (var product in query)
    {
        Console.WriteLine($"{product.Name}: {product.Price}");
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Бесплатные онлайн-лекции по ИТ и биотеху: 6—17 ноября Что меняется с развитием ИИ в ИТ-сфере? Расскажут эксперты — представит
Бесплатные онлайн-лекции по ИТ и биотеху: 6—17 ноября Что меняется с развитием ИИ в ИТ-сфере? Расскажут эксперты — представители науки и индустрии на открытых лекциях магистратуры Центрального университета. 6—17 ноября онлайн. Для тех, кто строит карьеру в ИТ! Зарегистрироваться #реклама 16+ cu.ru О рекламодателе

🤔 Что такое try-catch? try-catch — это механизм обработки исключений в C#. Код, который может вызвать ошибку во время выполнения, помещается в блок try. Если ошибка происходит, выполнение переходит в соответствующий блок catch. Блок finally может использоваться для выполнения завершающих действий, выполняемых независимо от ошибок (например, закрытие файлов, соединений и т.д.). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое делегаты и зачем они нужны? Делегаты — это типы, которые безопасно инкапсулируют методы, подобно указателям на функции в других языках программирования, но с проверкой типов во время компиляции. Могут ссылаться на метод, который принимает параметры и возвращает значение. Они используются для реализации обратных вызовов и событий, а также для определения пользовательских операций, которые могут быть выполнены методом, принимаемым в качестве параметра. 🚩Зачем они нужны? 🟠Обратные вызовы (Callbacks) Делегаты предоставляют механизм для передачи методов в качестве аргументов другим методам. Это полезно для реализации обратных вызовов, позволяя вызывать методы в ответ на определенные события или условия. 🟠События Являются основой системы событий. Они позволяют определять события и подписываться на них. Когда событие происходит, вызываются делегаты, связанные с этим событием, что позволяет реагировать на изменения или действия пользователя. 🟠Параметризация методами Позволяют создавать более гибкие и масштабируемые приложения, поскольку методы могут быть переданы и использованы динамически в различных контекстах. 🟠Асинхронное программирование Используются для асинхронного программирования, позволяя выполнять задачи в фоновом режиме, не блокируя основной поток приложения.
public delegate int Operation(int x, int y);

public class Calculator
{
    public int PerformOperation(int x, int y, Operation op)
    {
        return op(x, y);
    }
}

class Program
{
    static int Add(int x, int y)
    {
        return x + y;
    }

    static int Multiply(int x, int y)
    {
        return x * y;
    }

    static void Main()
    {
        Calculator calc = new Calculator();

        // Создание делегата для метода Add и вызов через метод PerformOperation
        Operation addOp = new Operation(Add);
        int result = calc.PerformOperation(5, 6, addOp);
        Console.WriteLine("Addition: " + result);

        // Создание делегата для метода Multiply и вызов через метод PerformOperation
        Operation mulOp = new Operation(Multiply);
        result = calc.PerformOperation(5, 6, mulOp);
        Console.WriteLine("Multiplication: " + result);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Нейросети сбежали из лаборатории. Лови! Claude, GPT, Grok, Gemini, Muse, GLM, Qwen: о них слышно со всех сторон, и у каждой своя суперсила. Как попробовать всех, сравнить и запрячь в реальную работу? В D'Lemma они живут в одном чате: меняй нейросеть прямо в беседе, история остается общей. Изображения. Nano Banana, GPT Image и другие - рисуют по описанию в любом стиле: акварель, зарисовка, фото. Загрузи свое фото, и они отретушируют его, сменят фон или примерят образ по образцу. Музыка. Suno и Fuzz сочиняют и поют: поздравление с именем, трек для ролика, песня на твои стихи. Просто расскажи, о чем петь. А еще пойманные нейросети соберут презентацию или документ готовым файлом. Оплата в рублях, один баланс на всех. Поймай их всех! Попробуй D'Lemma Узнать больше #реклама 16+ dlemma.tech О рекламодателе

🤔 В чем отличие монолитной и микросервисной архитектуры на практике? 1. Монолит: весь код в одном приложении; легче разрабатывать и развертывать, но сложнее масштабировать и обновлять. 2. Микросервисы: система состоит из небольших сервисов, каждый из которых работает независимо; проще масштабировать и изменять, но сложнее управлять взаимодействиями. 3. На практике микросервисы требуют продвинутой инфраструктуры и мониторинга. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие есть способы (протоколы) обмена данными между сервером и клиентом? При взаимодействии клиента и сервера используются различные*протоколы обмена данными, в зависимости от задачи, скорости, надежности и реального времени. 🚩HTTP(S) – стандартный протокол веба Клиент (браузер, мобильное приложение) делает запрос к серверу. Сервер отправляет ответ с данными (HTML, JSON, XML). Использует методы: GET, POST, PUT, DELETE и т. д.
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data));
🚩WebSocket – двусторонняя связь в реальном времени Клиент устанавливает постоянное соединение с сервером. Сервер и клиент могут отправлять друг другу данные в любое время. Используется для чата, онлайн-игр, бирж, обновлений в реальном времени.
const socket = new WebSocket('wss://example.com/socket');

socket.onopen = () => socket.send('Привет, сервер!');
socket.onmessage = event => console.log('Сообщение от сервера:', event.data);
🚩SSE (Server-Sent Events) – поток данных от сервера Клиент делает HTTP-запрос, но соединение не закрывается. Сервер постепенно отправляет данные в виде событий (event-stream). Используется для новостей, биржевых данных, уведомлений.
const eventSource = new EventSource('/events');

eventSource.onmessage = event => console.log('Новое сообщение:', event.data);
🚩gRPC – быстрый RPC поверх HTTP/2 Клиент вызывает удаленные методы напрямую как обычные функции. Работает на HTTP/2, использует бинарный формат Protocol Buffers (быстрее, чем JSON). Используется для высокопроизводительных API, микросервисов.
import grpc
import my_service_pb2
import my_service_pb2_grpc

channel = grpc.insecure_channel('localhost:50051')
stub = my_service_pb2_grpc.MyServiceStub(channel)
response = stub.MyMethod(my_service_pb2.MyRequest(name="Alice"))
print(response.message)
🚩MQTT – лёгкий протокол для IoT Работает по модели издатель/подписчик. Клиент подписывается на тему (topic) и получает сообщения, когда кто-то публикует данные. Используется для умных устройств, датчиков, IoT.
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://broker.hivemq.com');

client.on('connect', () => {
    client.subscribe('myTopic');
    client.publish('myTopic', 'Привет, MQTT!');
});

client.on('message', (topic, message) => {
    console.log(`Сообщение из ${topic}: ${message.toString()}`);
});
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое deadlock? Deadlock — это ситуация, когда два или более потока заблокированы, каждый из них ждёт ресурс, занятый другим, и в результате никто не может продолжить работу. Система зацикливается и зависает. Такое часто происходит при неправильной последовательности захвата ресурсов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как сделать связь один к одному? В реляционных базах данных связь "один к одному" (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 за тебя OfferMate подбирает IT-вакансии на hh.ru, отправляет отклики и пишет сопроводительные письма. Отвеча
Ищем работу в IT за тебя OfferMate подбирает IT-вакансии на hh.ru, отправляет отклики и пишет сопроводительные письма. Отвечает рекрутерам, решает тесты при отклике и готовит резюме под нужную роль. Посмотри, как работает сервис. Узнать больше #реклама 16+ offermate.ru О рекламодателе

🤔 Сравнение паттернов Adapter и Decorator 1. Adapter: преобразует интерфейс одного класса в интерфейс, который ожидает клиент; используется для интеграции несовместимых компонентов. 2. Decorator: добавляет новую функциональность существующему объекту без изменения его структуры. 3. Adapter изменяет совместимость, а Decorator — поведение объекта. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое предикат? Это делегат, представляющий метод, который принимает один или несколько аргументов и возвращает логическое значение (true или false). Предикаты часто используются для фильтрации коллекций, поиска элементов и других операций, связанных с условными проверками. 🚩Особенности 🟠Тип делегата В C# предикат представлен делегатом Predicate<T>, который принимает один аргумент типа T и возвращает bool. 🟠Использование Предикаты обычно используются в методах стандартных коллекций, таких как List<T>, для поиска, удаления и фильтрации элементов. 🚩Пример использования предиката Определение предиката
public static bool IsEven(int number)
{
    return number % 2 == 0;
}
Использование предиката с методом коллекции
using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };

        // Использование предиката для поиска первого четного числа
        int firstEven = numbers.Find(IsEven);
        Console.WriteLine("First even number: " + firstEven);

        // Использование предиката для удаления всех четных чисел
        numbers.RemoveAll(IsEven);
        Console.WriteLine("Numbers after removing evens: " + string.Join(", ", numbers));
    }

    public static bool IsEven(int number)
    {
        return number % 2 == 0;
    }
}
🚩Лямбда-выражения как предикаты Лямбда-выражения часто используются для определения предикатов непосредственно в месте вызова метода. Это делает код более компактным и удобочитаемым. Пример использования лямбда-выражений
using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };

        // Использование лямбда-выражения для поиска первого четного числа
        int firstEven = numbers.Find(n => n % 2 == 0);
        Console.WriteLine("First even number: " + firstEven);

        // Использование лямбда-выражения для удаления всех четных чисел
        numbers.RemoveAll(n => n % 2 == 0);
        Console.WriteLine("Numbers after removing evens: " + string.Join(", ", numbers));
    }
}
🚩Сценарии использования предикатов 🟠Фильтрация коллекций Предикаты используются для определения условий фильтрации элементов в коллекциях.
List<int> evenNumbers = numbers.FindAll(IsEven);   
🟠Поиск элементов Предикаты помогают находить элементы, соответствующие определенному условию.
int firstEven = numbers.Find(IsEven);   
🟠Удаление элементов Предикаты используются для удаления элементов, соответствующих определенному условию.
numbers.RemoveAll(IsEven);
Ставь 👍 и забирай 📚 Базу знаний

🔥 Скрытые вакансии с удаленной работой для C# разработчика, которые нигде больше не публикуются. Напрямую от компаний, с кон
🔥 Скрытые вакансии с удаленной работой для C# разработчика, которые нигде больше не публикуются. Напрямую от компаний, с контактами рекрутеров. 🔹 C# .NET Jobs | Вакансии 🔹 Unity Jobs | Вакансии 🔸 Все каналы с вакансиями

Монолит vs микросервисы: битва за ваши нервы 💻 Монолит или микросервисы? Кажется, что ответ очевиден, но почему-то одни прое
Монолит vs микросервисы: битва за ваши нервы 💻 Монолит или микросервисы? Кажется, что ответ очевиден, но почему-то одни проекты летают, а другие тонут в хаосе? Присоединяйтесь к открытому уроку Сергея Прощаева и получите пошаговое руководство по выбору архитектуры. 📅 9 ноября в 20:00. Разберём: - Как не попасть в ловушку «модных» микросервисов. - Признаки, что пора выходить из монолита. - Архитектурные паттерны перехода: Strangler Fig, BFF, Self-contained systems. - Организационные и технические риски — что пойдёт не так. - Роль DevOps, CI/CD и мониторинга. Вы научитесь оценивать реальные риски и стоимость микросервисов, внедрять изменения без сбоев и хаоса и принимать взвешенные решения, сохраняя технический контроль и производительность команды. ✅ Запишитесь сейчас! Узнать больше #реклама 16+ otus.ru О рекламодателе

🤔 В чём разница между SOAP и REST? SOAP — это строго определённый протокол обмена сообщениями, обычно использующий XML и WSDL, с формальной спецификацией. Он более тяжеловесный, ориентирован на стандартизацию и включает такие функции, как безопасность, транзакции, надёжная доставка. REST — это архитектурный стиль, работающий поверх HTTP, ориентированный на ресурсы. Он проще, легче по синтаксису (часто использует JSON), хорошо подходит для веб-приложений и микросервисов. REST ближе к вебу, тогда как SOAP больше используется в корпоративных системах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Про абстрактные классы, интерфейсы и в чем их разница и особенности? В C# абстрактные классы и интерфейсы используются для проектирования системы через наследование и полиморфизм, позволяя описывать общую функциональность, которую будут реализовывать конкретные классы. Однако у них есть свои особенности, ограничения и сферы применения. 🚩Абстрактный класс Абстрактный класс — это класс, который не может быть создан напрямую (нельзя создать объект этого класса). Он может содержать как абстрактные методы (без реализации), так и методы с реализацией.
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!");
    }
}
Использование
Animal myDog = new Dog();
myDog.MakeSound(); // Вывод: Bark!
myDog.Sleep();     // Вывод: Sleeping...
🚩Интерфейс Интерфейс — это контракт, который определяет только сигнатуры методов, свойств, событий и индексаторов. Реализацию этих членов должен предоставить класс, который реализует интерфейс.
public interface IMovable
{
    void Move();
    int Speed { get; set; }
}
Пример
public class Car : IMovable
{
    public int Speed { get; set; }

    public void Move()
    {
        Console.WriteLine($"Moving at speed: {Speed}");
    }
}
Использование
IMovable myCar = new Car { Speed = 60 };
myCar.Move(); // Вывод: Moving at speed: 60
Ставь 👍 и забирай 📚 Базу знаний