C# | Вопросы собесов
Kanalga Telegram’da o‘tish
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Ko'proq ko'rsatish5 003
Obunachilar
+124 soatlar
-77 kun
-130 kun
Postlar arxiv
5 002
🤔 Какое ключевое слово в C# используется для создания метода, который может быть переопределён в производном классе?
5 002
👨💻 Джун: Слушай, вот стажировку я прошел, где теперь можно чекнуть вакансии на работу?
🍷 Мидл: Ооо, тебе помогут ребята с канала Джун работает
💯 Карьеру нужно начинать с хорошими работодателями. Твое резюме будет ликовать, ведь контент выходит каждый день, работа ждет тебя, мой друг!
😏 Не упускай возможность и подписывайся, чтобы не потерять
5 002
📌 Что такое принцип подстановки Барбары Лисков?
💬 Спрашивают в 22% собеседований
Принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP) - это один из пяти принципов SOLID, который гласит, что объекты подтипов должны быть заменяемы объектами базового типа без нарушения правильности работы программы. Это означает, что если класс
B является подтипом класса A, то объекты класса A могут быть заменены объектами класса B без изменения желаемого поведения программы.
🤔 Основные понятия
1️⃣ Наследование: Подтипы должны наследовать не только интерфейс, но и поведение базовых типов.
2️⃣ Замена: Класс-наследник должен корректно работать в любом контексте, где ожидается объект базового класса.
3️⃣ Контракт: Подтип должен соблюдать контракт базового типа, что включает предусловия, постусловия и инварианты.
🤔 Почему это нужно
➕ Упрощение понимания и поддержки кода: Код, который следует LSP, более предсказуем и понятен, что облегчает его поддержку.
➕ Повышение надежности: Соблюдение принципа помогает избежать неожиданных ошибок при замене объектов базового класса на объекты подклассов.
➕ Расширяемость: Принцип способствует созданию гибкой и расширяемой архитектуры, в которой новые подтипы можно добавлять без риска нарушения существующего кода.
🤔 Пример нарушения LSP
Рассмотрим пример, где нарушение LSP приводит к некорректному поведению программы: public class Rectangle
{
public virtual int Width { get; set; }
public virtual int Height { get; set; }
public int GetArea()
{
return Width * Height;
}
}
public class Square : Rectangle
{
public override int Width
{
set { base.Width = base.Height = value; }
}
public override int Height
{
set { base.Width = base.Height = value; }
}
}
🤔 Проблема
В этом примере Square (квадрат) наследует от Rectangle (прямоугольник). Однако, квадрат имеет особое свойство: его ширина и высота всегда равны. При попытке установить ширину или высоту квадрата, изменяется и другое значение, что нарушает поведение прямоугольника.
🤔 Исправление
Лучше использовать композицию вместо наследования для избежания такой проблемы: public interface IShape
{
int GetArea();
}
public class Rectangle : IShape
{
public int Width { get; set; }
public int Height { get; set; }
public int GetArea()
{
return Width * Height;
}
}
public class Square : IShape
{
public int SideLength { get; set; }
public int GetArea()
{
return SideLength * SideLength;
}
}
🤔 Объяснение
1️⃣ Интерфейс IShape: Определяем общий интерфейс для всех форм.
2️⃣ Реализация прямоугольника и квадрата: Классы Rectangle и Square реализуют интерфейс IShape, но теперь они не наследуются друг от друга и имеют свои собственные свойства и методы.
🤔 Краткий ответ
Принцип подстановки Лисков гласит, что объекты подтипов должны быть заменяемы объектами базового типа без нарушения работы программы. Это необходимо для повышения предсказуемости, надежности и расширяемости кода.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 002
📕 Прогер, как ты расширяешь свой кругозор в сфере IT?
Не достаточно знать что-то одно, мысля глобально и изучая смежные отрасли, ты не только становишься умнее, но и увеличиваешь свою востребованность и свой заработок.
🗿 Не обязательно читать заумные книги и смотреть подкасты - это долго.
У нас есть решение:
🔥 Полезные статьи - концентрат знаний.
🔥 Советы - короткие сообщения, которые будут увеличивать твою эффективность.
🔥 Инструменты - tool-сайты в разы упростят и ускорят твою работу.
🧑💻 Время, силы, желание - ресурсы, которые нужно использовать с умом. Подпишись на канал Заметки прогера, IT ниша скажет "спасибо" за такого специалиста.
5 002
Начните карьеру в IT в Яндексе, VK, Сбере или МТС
В канале собраны самые актуальные стажировки в крупнейших компаниях.
Не упустите возможность найти:
— вакансии для джунов и кандидатов без опыта у лучших работодателей;
— хакатоны, на которых можно получить сертификаты и кейсы для резюме;
— карьерные ивенты, где можно прокачать свои скиллы и заработать денег
Подписаться
#реклама
О рекламодателе
5 002
🤔 Какой из следующих методов C# используется для явного указания, что объект должен быть собран сборщиком мусора?
5 002
😭 Джун: Как мне найти работу в IT, если опыта нет?
🧑💻 Мидл: Просто зайди на канал Джун стажер и подбери стажировку по душе.
📕 Админы отбирают самые сочные вакансии от ведущих компаний, к тому же контент выходит каждый день.
🔥 Не упускай возможность и подписывайся, чтобы не потерять
5 002
ТОП-4 Курса по Программированию
⚡Tutortop — маркетплейс курсов №1 по количеству школ-партнеров, курсов и реальных отзывов студентов.
✅Хотите стать программистом, но не знаете с какого языка начать?
Помогаем разобраться в самых популярных и востребованных языках программирования.
Подарок в конце подборки!
Выбрать
#реклама 16+
tutortop.ru
О рекламодателе
5 002
📌 Что такое IoC-контейнеры?
💬 Спрашивают в 22% собеседований
IoC (Inversion of Control) контейнеры – это фреймворки или библиотеки, которые управляют созданием и внедрением зависимостей в приложении. Они помогают реализовать принцип внедрения зависимостей (Dependency Injection), что делает код более гибким, тестируемым и легко расширяемым.
🤔 Основные понятия
1️⃣ Inversion of Control (IoC): IoC – это принцип, при котором управление объектами и их зависимостями передается внешней системе или фреймворку, вместо того чтобы объекты самостоятельно управляли своими зависимостями.
2️⃣ Dependency Injection (DI): DI – это метод внедрения зависимостей, при котором зависимости (объекты, от которых зависит другой объект) предоставляются внешним источником (например, IoC-контейнером) вместо того, чтобы объект создавал их самостоятельно.
🤔 Почему это нужно
➕ Упрощение тестирования: Легко заменять зависимости на заглушки или моки, что облегчает тестирование.
➕ Снижение связности кода: Объекты не зависят от конкретных реализаций своих зависимостей, а зависят от абстракций (интерфейсов), что упрощает изменение и расширение кода.
➕ Централизованное управление зависимостями: IoC-контейнеры управляют жизненным циклом объектов и их зависимостей, что делает код более организованным и понятным.
🤔 Пример использования IoC-контейнера
Рассмотрим простой пример использования популярного IoC-контейнера Autofac в C#:
1️⃣ Установка Autofac: Добавляем пакет Autofac через NuGet Package Manager.
2️⃣ Создание интерфейсов и классов:
public interface ILogger
{
void Log(string message);
}
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine(message);
}
}
public interface IService
{
void Serve();
}
public class Service : IService
{
private readonly ILogger _logger;
public Service(ILogger logger)
{
_logger = logger;
}
public void Serve()
{
_logger.Log("Service Called");
}
}
3️⃣ Настройка и использование IoC-контейнера: using Autofac;
class Program
{
static void Main(string[] args)
{
var builder = new ContainerBuilder();
// Регистрируем зависимости
builder.RegisterType<ConsoleLogger>().As<ILogger>();
builder.RegisterType<Service>().As<IService>();
// Строим контейнер
var container = builder.Build();
// Разрешаем зависимости
var service = container.Resolve<IService>();
service.Serve();
}
}
🤔 Объяснение кода
1️⃣ Интерфейсы и реализации: Мы создаем интерфейсы ILogger и IService, а также их реализации ConsoleLogger и Service.
2️⃣ Регистрация зависимостей: С помощью ContainerBuilder регистрируем классы ConsoleLogger и Service как реализации соответствующих интерфейсов.
3️⃣ Разрешение зависимостей: С помощью контейнера разрешаем зависимости и вызываем метод Serve у объекта Service, который использует ConsoleLogger для логирования.
🤔 Краткий ответ
IoC-контейнеры управляют созданием и внедрением зависимостей в приложении, упрощая тестирование и организацию кода. Они позволяют регистрировать и разрешать зависимости, делая код более гибким и легко расширяемым.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 002
👨💻 Будущий специалист, ты знаешь, какая самая частая ошибка новичка в сфере IT?
Отсутствие практики убивает в тебе потенциал
✈️ Как с этим бороться, мой друг?
Найди работу и прокачивай свои скилы на конкретных задачах
🔥 У нас ты будешь находить большое количество вакансий каждый день. Понятие работы перестанет быть для тебя размытым.
Подпишись на канал и не откладывай свой прогресс в долгий ящик.
5 002
Jobski - твой помощник при поиске работы в IT
Сервис индивидуально подбирает вакансии, учитывая ваш опыт, навыки и стек технологий.
Узнать больше
#реклама
jobski.ru
О рекламодателе
5 002
🤔 Какое ключевое слово в C# используется для объявления блока кода, который гарантированно выполнится после завершения блока try?
5 002
🧑💻 Если твой английский позволяет ответить только на вопрос "Do you speak English", то с этим нужно что-то делать, будучи программистом.
🫤 Ты в курсе, что ...
- говорят по-английски — 20% из всех людей.
- Большое кол-во IT документации написано на английском.
Хочешь понимать код лучше? Изучи язык, который используется в его основе.
📕 На нашем канале ты постепенно будешь набираться опыта, в этом тебе помогут:
- Тесты для изучения английского: проверьте свои знания на практике.
- Английский через мемы: учите язык весело и с интересом.
- Шпаргалки для повторения: закрепите знания быстро и эффективно.
- Английский сленг программиста: станьте настоящим профи в коммуникации.
🔥 Маленький шаг в изучении иностранного откроет перед тобой большие возможности будущего специалиста и значительно повысит твое зп.
🌸 Подпишись, do it!
5 002
📌 Что такое мультикаст-делегат?
💬 Спрашивают в 22% собеседований
Мультикаст-делегат в C# - это тип делегата, который может ссылаться на несколько методов. Это позволяет вызывать несколько методов в одном вызове делегата. Такая возможность полезна для выполнения последовательности действий, таких как уведомление нескольких подписчиков о событии.
🤔 Основные понятия
1️⃣ Делегат: Делегат - это тип, который определяет сигнатуру метода и может ссылаться на любой метод с совместимой сигнатурой. Делегаты похожи на указатели на функции в C++, но являются типобезопасными и встроены в систему типов C#.
2️⃣ Мультикаст-делегат: Это делегат, который может содержать список методов. Когда вызывается мультикаст-делегат, все методы в его списке вызываются в порядке их добавления.
🤔 Почему это нужно
➕ Уведомление нескольких объектов: Мультикаст-делегаты широко используются в системе событий .NET. Например, когда происходит какое-то событие (например, изменение состояния объекта), все подписчики на это событие могут быть уведомлены через мультикаст-делегат.
➕ Легкость добавления и удаления методов: Методы могут быть легко добавлены или удалены из списка вызовов делегата, что делает их гибким инструментом для динамического управления логикой программы.
🤔 Использование мультикаст-делегатов
Создадим простой пример, где мультикаст-делегат используется для уведомления нескольких методов:
using System;
public class Program
{
// Определяем делегат, который принимает строку и ничего не возвращает
public delegate void Notify(string message);
// Метод, который соответствует сигнатуре делегата
public static void SendEmail(string message)
{
Console.WriteLine($"Email sent: {message}");
}
// Другой метод, который соответствует сигнатуре делегата
public static void LogMessage(string message)
{
Console.WriteLine($"Log entry: {message}");
}
public static void Main()
{
// Создаем экземпляр делегата и добавляем методы
Notify notifyDel = SendEmail;
notifyDel += LogMessage;
// Вызываем делегат
notifyDel("System update available.");
// Удаляем метод из делегата
notifyDel -= LogMessage;
// Вызываем делегат снова
notifyDel("Security patch applied.");
}
}
🤔 Объяснение кода
1️⃣ Определение делегата: Мы объявляем делегат Notify, который принимает строку в качестве параметра и не возвращает значение.
2️⃣ Создание методов: Два метода SendEmail и LogMessage, которые соответствуют сигнатуре делегата Notify.
3️⃣ Создание экземпляра делегата: Мы создаем экземпляр делегата и добавляем методы в список вызовов.
4️⃣ Вызов делегата: Когда мы вызываем делегат, он вызывает все методы в своем списке.
5️⃣ Удаление метода из делегата: Мы удаляем метод LogMessage из списка вызовов делегата.
🤔 Краткий ответ
Мультикаст-делегат - это делегат, который может ссылаться на несколько методов и вызывать их последовательно. Это полезно для выполнения нескольких действий в одном вызове, таких как уведомление нескольких подписчиков о событии.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 002
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
5 002
🤔 Какой метод LINQ используется для получения пересечения двух последовательностей?
5 002
Срочно требуются Веб-Дизайнеры в Figma. Обучим с нуля.
Онлайн-программа с наставником и чатом.
Осторожно! 80% практики.
По результату обучения у вас будет портфолио из нескольких работ.
Сертификат о прохождении курса.
Возможность пройти полное обучение и получить гарантированное трудоустройство!
Учитесь дизайну у профессионалов.
Переходи по кнопки: "Узнать больше" и начинай свое обучение.
Доступ 0 руб.
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
5 002
📌 Где мы используем интерфейсы?
💬 Спрашивают в 22% собеседований
Интерфейсы в C# используются для определения контрактов, которые классы должны реализовать, и играют важную роль в создании гибких и масштабируемых приложений. Вот основные случаи их использования:
🤔 Основные случаи использования интерфейсов
1️⃣ Определение контрактов:
➕ Интерфейсы определяют набор методов и свойств, которые классы должны реализовать, обеспечивая консистентность.
➕ Пример:
public interface ILogger
{
void Log(string message);
}
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine(message);
}
}
2️⃣ Поддержка полиморфизма:
➕ Интерфейсы позволяют обрабатывать объекты разных классов одинаково, если они реализуют один и тот же интерфейс.
➕ Пример:
public interface IShape
{
double Area();
}
public class Circle : IShape
{
public double Radius { get; set; }
public double Area() => Math.PI * Radius * Radius;
}
public class Square : IShape
{
public double Side { get; set; }
public double Area() => Side * Side;
}
3️⃣ Ослабление связей (Decoupling):
➕ Интерфейсы помогают ослабить связи между компонентами, делая систему более модульной и легко модифицируемой.
➕ Пример:
public interface IDataAccess
{
void SaveData(string data);
}
public class DatabaseAccess : IDataAccess
{
public void SaveData(string data)
{
// Сохранение данных в базу данных
}
}
public class FileAccess : IDataAccess
{
public void SaveData(string data)
{
// Сохранение данных в файл
}
}
public class DataService
{
private readonly IDataAccess _dataAccess;
public DataService(IDataAccess dataAccess)
{
_dataAccess = dataAccess;
}
public void Save(string data)
{
_dataAccess.SaveData(data);
}
}
4️⃣ Поддержка множественного наследования:
➕ Классы могут реализовывать несколько интерфейсов, что позволяет реализовать множественное наследование поведения.
➕ Пример:
public interface IFlyable
{
void Fly();
}
public interface IWalkable
{
void Walk();
}
public class Bird : IFlyable, IWalkable
{
public void Fly()
{
// Логика полета
}
public void Walk()
{
// Логика ходьбы
}
}
5️⃣ Инъекция зависимостей (Dependency Injection):
➕ Интерфейсы часто используются в паттерне инъекции зависимостей для внедрения зависимостей и улучшения тестируемости кода.
➕ Пример:
public interface IEmailService
{
void SendEmail(string to, string subject, string body);
}
public class EmailService : IEmailService
{
public void SendEmail(string to, string subject, string body)
{
// Логика отправки email
}
}
public class Notification
{
private readonly IEmailService _emailService;
public Notification(IEmailService emailService)
{
_emailService = emailService;
}
public void NotifyUser(string userEmail)
{
_emailService.SendEmail(userEmail, "Notification", "You have a new notification.");
}
}
🤔 Краткий ответ
Интерфейсы используются для определения контрактов, поддержки полиморфизма, ослабления связей между компонентами, реализации множественного наследования, инъекции зависимостей и упрощения тестирования. Они помогают создать гибкую и поддерживаемую архитектуру приложений.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 002
Познакомься с миром IT
Привет, меня зовут Андрей, я работаю в IT уже 7 лет.
Все необходимые знания для знакомства с IT я собрал в канале Первая строчка кода.
Это сборник моего опыта, который будет интересно и полезно читать любому, кто хочет познакомиться со сферой и думает о карьере в IT.
Пишу максимально простым языком, делюсь полезными материалами и показываю жизнь айтишников.
Мой канал станет отличной стартовой точкой для входа в новую профессию.
Подписаться
#реклама
О рекламодателе
5 002
🤔 Какая из концепций ООП описывает способность метода работать с объектами разных типов?
