C# | Вопросы собесов
Kanalga Telegram’da o‘tish
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Ko'proq ko'rsatish5 018
Obunachilar
Ma'lumot yo'q24 soatlar
-157 kunlar
-4930 kunlar
Postlar arxiv
5 018
Современная магистратура от Центрального университета
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
- 4 офлайн программы по востребованным направлениям ИТ
- Онлайн-программа по машинному обучению
- 300 мест с грантами до 1,2 млн руб.
- Вечерние занятия и учеба по выходным — удобно совмещать с работой
- Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса
- Возможность стажировок и трудоустройства в ведущих компаниях
- Государственный диплом за 2 года
Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии.
Оставляй заявку на грант уже сейчас!
Подать заявку
#реклама 16+
apply.centraluniversity.ru
О рекламодателе
5 018
🤔 Что бывает, когда количества подключений не хватает?
Когда лимит подключений к базе данных превышен:
1. Запросы начинают блокироваться, вызывая задержки.
2. Сервер может возвращать ошибки подключения.
3. Производительность приложения резко снижается. Решение: увеличить лимит подключений или оптимизировать запросы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 018
🤔 Что такое cancellation token в многопоточности?
CancellationToken в C# используется для координации отмены между потоками. Это механизм, позволяющий запрашивать отмену операции (например, задачи Task или асинхронного метода), не прерывая поток принудительно.
🚩Зачем нужен `CancellationToken`?
В многопоточных или асинхронных операциях бывает необходимо отменить выполнение кода, например:
Пользователь отменил загрузку файла.
Истек тайм-аут выполнения операции.
Нужно прервать выполнение нескольких связанных задач.
🚩Как работает `CancellationToken`?
🟠Создание `CancellationTokenSource`
Источник токена (CancellationTokenSource) управляет токеном (CancellationToken), который передаётся в задачи.
🟠Передача токена в выполняемую операцию
Код регулярно проверяет cancellationToken.IsCancellationRequested, чтобы определить, нужно ли остановиться.
🟠Запрос на отмену
Если вызывается cts.Cancel(), все методы, использующие этот токен, получают сигнал об отмене.
🚩Пример использования
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var cts = new CancellationTokenSource();
// Отменяем операцию через 3 секунды
cts.CancelAfter(3000);
try
{
await DoWorkAsync(cts.Token);
}
catch (OperationCanceledException)
{
Console.WriteLine("Операция отменена!");
}
}
static async Task DoWorkAsync(CancellationToken cancellationToken)
{
for (int i = 0; i < 10; i++)
{
cancellationToken.ThrowIfCancellationRequested(); // Проверка отмены
Console.WriteLine($"Работаем... {i}");
await Task.Delay(1000, cancellationToken); // Ожидание с проверкой отмены
}
}
}
Ставь 👍 и забирай 📚 Базу знаний5 018
🤔 Использование интерфейса уже является Dependency Inversion?
Да, использование интерфейса поддерживает принцип Dependency Inversion, так как позволяет объектам зависеть от абстракций, а не от конкретных реализаций. Это уменьшает связанность и повышает гибкость кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 018
🤔 Какие есть способы (протоколы) обмена данными между сервером и клиентом?
При взаимодействии клиента и сервера используются различные*протоколы обмена данными, в зависимости от задачи, скорости, надежности и реального времени.
🚩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()}`);
});
Ставь 👍 и забирай 📚 Базу знаний5 018
🤔 Что значит, что система является RESTful?
Это система, реализующая архитектурный стиль REST (Representational State Transfer). Это означает:
- Используются HTTP-методы как команды (GET, POST, PUT, DELETE).
- Ресурсы имеют уникальные URI.
- Коммуникация без состояния (stateless).
- Возможна кэшируемость.
- Данные передаются в виде представлений ресурса (обычно JSON/XML).ксте онлайн
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 018
📺 Уникальная база IT собеседований
456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы.
Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д.
🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!
5 018
🤔 В каком случае использовать интерфейс, в каком абстрактный класс?
Выбор между интерфейсом и абстрактным классом в 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");
}
Ставь 👍 и забирай 📚 Базу знаний5 018
🤔 Есть ли какие-то ограничения для типов данных по ключу?
Да:
- Ключ не должен быть null (в Dictionary).
- Ключ должен быть неизменяемым, т.е. после помещения в словарь не должен меняться его хеш или логическое состояние.
- Должен корректно реализовывать Equals() и GetHashCode(), иначе возможны ошибки поиска или дубликаты.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 018
🤔 Про абстрактные классы, интерфейсы и в чем их разница и особенности?
В 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
Ставь 👍 и забирай 📚 Базу знаний5 018
🤔 Как компилятор понимает, какой результат возвращать?
Компилятор определяет тип возвращаемого значения на основе сигнатуры метода и контекста его вызова.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 018
🤔 Что такое аутентификация?
Когда человек вводит логин и пароль, система аутентифицирует его, проверяя, действительно ли это тот, за кого он себя выдаёт.
🚩Как работает аутентификация?
Пользователь вводит данные (например, логин и пароль).
Система проверяет их в базе данных.
Если данные верны → доступ разрешён.
Если данные неверны → отказ в доступе.
public async Task<IActionResult> Login(string username, string password)
{
var user = await _userManager.FindByNameAsync(username);
if (user != null && await _userManager.CheckPasswordAsync(user, password))
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "Неверный логин или пароль");
return View();
}
🚩Виды аутентификации
🟠По паролю
Самый распространённый вариант. Минус: если пароль украден – доступ открыт.
🟠Двухфакторная (2FA)
Например, SMS-код + пароль. Усложняет взлом аккаунта.
🟠Биометрическая
Отпечаток пальца, Face ID. Удобно, но требует спецоборудования.
🟠OAuth (Google, Facebook, GitHub)
Вход через соцсети. Удобно, не нужно запоминать пароль.
🟠Аутентификация по токену (JWT)
Используется в API и микросервисах. Позволяет работать без сохранения сессий.
Ставь 👍 и забирай 📚 Базу знаний5 018
🤔 Что такое стек?
Стек — это структура данных LIFO, где последний добавленный элемент извлекается первым, используется для вызовов функций и локальных переменных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 018
🤔 Что такое контекст синхронизации?
"контекст синхронизации" (SynchronizationContext) — это класс, который предоставляет возможность управлять способом, которым операции переключаются обратно в основной поток или контекст для продолжения выполнения после асинхронной операции. Это важно для приложений с графическим пользовательским интерфейсом, таких как Windows Forms и WPF, где доступ к элементам пользовательского интерфейса разрешён только из основного потока.
🚩Как он работает
Абстрагирует модель синхронизации для различных сред выполнения. Например, в приложениях Windows Forms и WPF управление элементами UI должно происходить в главном потоке.
SynchronizationContext предоставляет методы для отправки (Send) и постановки (Post) задач, которые должны выполняться в правильном контексте.
🟠Send
синхронно отправляет делегат на выполнение в контекст синхронизации.
🟠Post
асинхронно отправляет делегат на выполнение в контекст синхронизации.
🚩Применение SynchronizationContext
Используется для того, чтобы после асинхронной операции вернуться в правильный поток и безопасно обновить UI или выполнить код, который требует выполнения в определённом потоке.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
LoadDataAsync();
}
private async void LoadDataAsync()
{
string data = await GetDataAsync();
// Асинхронно получаем данные и обновляем UI
Dispatcher.Invoke(() => DisplayData(data));
}
private Task<string> GetDataAsync()
{
return Task.Run(() =>
{
// Имитация долгой операции
Thread.Sleep(5000);
return "Data loaded";
});
}
private void DisplayData(string data)
{
MyTextBox.Text = data;
}
}
🚩Зачем он нужен
🟠Безопасность потоков
Позволяет безопасно обращаться к элементам UI из асинхронных или вторичных потоков.
🟠Правильное управление потоками
Обеспечивает выполнение кода в контексте, для которого он предназначен, что особенно важно в многопоточных и сетевых приложениях.
Ставь 👍 и забирай 📚 Базу знаний5 018
Распродажа внедорожников HAVAL. Выгода до 850 000 ₽
Купить новый внедорожник HAVAL проще и дешевле чем вы думаете!
✨Стартовая цена от 2 149 000 ₽ у официального дилера Автопродикс СПб. Действуют рассрочка и кредит на минимальных процентных ставках.✨
Оставьте заявку до 15.05 и закрепите условия:
- Выгода до 850.000 ₽
- Рассрочка на 36 мес.
- КАСКО в подарок
- Зимние шины в подарок
Нажмите "Получить предложение" чтобы узнать стоимость автомобиля и закрепить бонусы:
Получить предложение
Изучите все условия кредита (займа) на сайте в соответствующем разделе. Оценивайте свои финансовые возможности и риски. Финансовые услуги оказывает: ПАО Сбербанк, СПАО "Ингосстрах".
#реклама
autoprodix-havalpro.rqch.ru
О рекламодателе
5 018
🤔 Какая связь между асинхронностью и многопоточностью?
Асинхронность и многопоточность — разные концепции, но они могут пересекаться.
- Многопоточность — параллельное выполнение на нескольких потоках (обычно на разных ядрах процессора).
- Асинхронность — способ не блокировать поток при ожидании завершения операции (например, I/O), не обязательно создавая новый поток.
Асинхронные операции (async/await) чаще всего используют один поток, но освобождают его во время ожидания, позволяя выполнять другую работу.
Многопоточность полезна при расчётах, асинхронность — при ожидании (например, сетевых операций).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 018
🤔 Для чего нужны методы service configuration?
В ASP.NET Core методы Service Configuration используются для настройки и регистрации зависимостей в контейнере внедрения зависимостей (Dependency Injection, DI). Это позволяет управлять зависимостями в приложении, делая код более гибким, тестируемым и удобным для расширения.
🚩Где происходит настройка сервисов?
Настройка сервисов выполняется в методе
ConfigureServices(IServiceCollection services), который находится в классе Program.cs или Startup.cs (в зависимости от версии .NET).
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(); // Добавление контроллеров для API
services.AddDbContext<ApplicationDbContext>(); // Регистрация контекста базы данных
services.AddScoped<IMyService, MyService>(); // Внедрение зависимости
}
🚩Основные виды регистрации сервисов
🟠`AddSingleton<T>`
создаёт единственный экземпляр объекта на всё время работы приложения.
services.AddSingleton<ILogger, ConsoleLogger>();
🟠`AddScoped<T>`
создаёт один экземпляр объекта на каждый HTTP-запрос.
services.AddScoped<IUserService, UserService>();
🟠`AddTransient<T>`
создаёт новый экземпляр объекта при каждом запросе.
services.AddTransient<IEmailSender, EmailSender>();
🚩Пример использования в контроллере
public class HomeController : Controller
{
private readonly IMyService _myService;
public HomeController(IMyService myService)
{
_myService = myService;
}
public IActionResult Index()
{
var data = _myService.GetData();
return View(data);
}
}
Ставь 👍 и забирай 📚 Базу знаний5 018
🤔 Что из себя представляет абстракция?
Это процесс выделения важных характеристик объекта и скрытия несущественных деталей. Она позволяет:
1. Создавать простые интерфейсы для сложных систем.
2. Сосредотачиваться на логике, а не на деталях реализации.
3. Обеспечивать полиморфизм и унифицированный подход к различным объектам.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 018
🤔 В чем суть extension методов?
Extension-методы (методы расширения) — это способ добавить новые методы к существующим классам, не изменяя их код и не создавая наследников. Они позволяют расширять классы и интерфейсы, даже если у нас нет доступа к их исходному коду.
🚩Как работают extension-методы?
Это обычные статические методы, но объявленные внутри статического класса.
Первый параметр метода должен принимать тот тип, который мы хотим расширить, и перед ним ставится ключевое слово
this.
После этого метод становится доступен как "встроенный" у этого типа.
🟠Добавляем метод к `string`
Допустим, у нас есть строка, и мы хотим добавить метод ToSnakeCase, который заменяет пробелы на нижние подчеркивания.
using System;
public static class StringExtensions
{
public static string ToSnakeCase(this string str)
{
return str.Replace(" ", "_").ToLower();
}
}
class Program
{
static void Main()
{
string text = "Hello World";
Console.WriteLine(text.ToSnakeCase()); // hello_world
}
}
🟠Расширяем `List<int>`
Добавим метод `SumEvenNumbers()`, который суммирует только четные числа в List<int>.
using System;
using System.Collections.Generic;
using System.Linq;
public static class ListExtensions
{
public static int SumEvenNumbers(this List<int> numbers)
{
return numbers.Where(n => n % 2 == 0).Sum();
}
}
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(numbers.SumEvenNumbers()); // 12 (2 + 4 + 6)
}
}
🚩Когда использовать extension-методы?
Когда нужно добавить новый метод к существующему классу, но нельзя изменить его код (например, string, List<T>, DateTime).
Когда хочется сделать код более читаемым: numbers.SumEvenNumbers() лучше, чем MyExtensions.SumEvenNumbers(numbers).
Когда нужно улучшить API без наследования и изменения структуры классов.
Ставь 👍 и забирай 📚 Базу знаний5 018
🤔 Что такое команда throw?
throw используется для генерации исключения вручную или повторной генерации перехваченного.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
