C# | Вопросы собесов
Открыть в Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
Больше5 048
Подписчики
-124 часа
-177 дней
-2630 день
Архив постов
5 048
🤔 Какой метод LINQ используется для получения пересечения двух последовательностей?
5 048
Срочно требуются Веб-Дизайнеры в Figma. Обучим с нуля.
Онлайн-программа с наставником и чатом.
Осторожно! 80% практики.
По результату обучения у вас будет портфолио из нескольких работ.
Сертификат о прохождении курса.
Возможность пройти полное обучение и получить гарантированное трудоустройство!
Учитесь дизайну у профессионалов.
Переходи по кнопки: "Узнать больше" и начинай свое обучение.
Доступ 0 руб.
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
5 048
📌 Где мы используем интерфейсы?
💬 Спрашивают в 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 048
Познакомься с миром IT
Привет, меня зовут Андрей, я работаю в IT уже 7 лет.
Все необходимые знания для знакомства с IT я собрал в канале Первая строчка кода.
Это сборник моего опыта, который будет интересно и полезно читать любому, кто хочет познакомиться со сферой и думает о карьере в IT.
Пишу максимально простым языком, делюсь полезными материалами и показываю жизнь айтишников.
Мой канал станет отличной стартовой точкой для входа в новую профессию.
Подписаться
#реклама
О рекламодателе
5 048
🤔 Какая из концепций ООП описывает способность метода работать с объектами разных типов?
5 048
Обучение на Психолога за 1 год. Дистанционно + Диплом.
Станьте Психологом с "0". Диплом с правом работы. Помощь в трудоустройстве или старте частной практики с нуля.
На базе высшего или СПО
Преимущества обучения в НИИ ДПО:
- дистанционное обучение;
- институт с гос. лицензией;
- московский диплом;
- мобильное приложение для удобного обучения;
- бессрочный доступ к лекциям и материалам;
- обратная связь от экспертов-практиков;
- рассрочка 0%.
Подать заявку
#реклама 16+
niidpo.ru
О рекламодателе
5 048
📌 Что такое куча?
💬 Спрашивают в 22% собеседований
В программировании куча (heap) — это область памяти, которая используется для динамического распределения памяти. В отличие от стека, где память выделяется и освобождается автоматически при вызове и завершении функций, куча позволяет разработчику вручную контролировать выделение и освобождение памяти. В контексте C# и .NET, куча имеет свои особенности, связанные с управлением памятью и сборкой мусора (Garbage Collection).
🤔 Основные характеристики кучи
1️⃣ Динамическое распределение памяти:
➕ Куча используется для хранения объектов, которые создаются в процессе выполнения программы с помощью оператора
new.
➕ Память в куче выделяется и освобождается динамически, в отличие от статически выделенной памяти на стеке.
2️⃣ Управление памятью:
➕ Память, выделенная в куче, не освобождается автоматически при выходе из функции или блока кода. Разработчик должен явно освобождать её, если это необходимо (в языках с ручным управлением памятью, таких как C и C++).
➕ В C# и .NET, освобождение памяти в куче осуществляется автоматически с помощью сборщика мусора.
3️⃣ Сборка мусора (Garbage Collection):
➕ В .NET среде управляемая куча используется для хранения объектов, и память управляется сборщиком мусора.
➕ Сборщик мусора автоматически освобождает память, занимаемую объектами, которые больше не используются приложением.
🤔 Пример использования кучи в C#
Когда вы создаете новый объект в C#, он размещается в управляемой куче. Рассмотрим простой пример: class Program
{
static void Main()
{
Person person = new Person();
person.Name = "John";
Console.WriteLine(person.Name);
}
}
class Person
{
public string Name { get; set; }
}
В этом примере:
1️⃣ Person person = new Person(); — создается новый объект типа Person, и память для этого объекта выделяется в куче.
2️⃣ Сборщик мусора автоматически освобождает память, занимаемую объектом Person, когда он больше не нужен (например, после завершения метода Main).
🤔 Сравнение с стеком
1️⃣ Стек (Stack):
➕ Память выделяется автоматически при вызове функции и освобождается при выходе из неё.
➕ Используется для хранения значимых типов (например, int, float, структуры) и указателей на объекты.
➕ Быстрое выделение и освобождение памяти, но ограниченное пространство.
2️⃣ Куча (Heap):
➕ Память выделяется и освобождается динамически.
➕ Используется для хранения объектов и ссылочных типов (например, классов).
➕ Более гибкое управление памятью, но медленное выделение и освобождение по сравнению со стеком.
🤔 Преимущества и недостатки кучи
Преимущества:
➕ Гибкость в управлении памятью, позволяет создавать объекты, срок жизни которых выходит за пределы текущего блока кода или функции.
➕ Подходит для хранения больших объёмов данных и объектов, размер которых неизвестен во время компиляции.
Недостатки:
➕ Более медленное выделение и освобождение памяти по сравнению со стеком.
➕ Возможность утечек памяти в языках с ручным управлением памятью (не относится к C# благодаря сборке мусора).
➕ Фрагментация памяти, которая может возникнуть из-за частого выделения и освобождения различных объектов.
🤔 Краткий ответ
Куча — это область памяти, используемая для динамического распределения памяти объектов в процессе выполнения программы. В C# управление памятью в куче осуществляется автоматически с помощью сборщика мусора. Куча предоставляет гибкость, но может быть менее эффективной по сравнению со стеком.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 048
Как запустить собственный пет-проект и зарабатывать на нём зарплату senior-разработчика?
На этом канале мы решаем сложные задачи, которые часто попадаются на собеседованиях. Но что, если перевернуть игру и вместо работы на кого-то запустить собственный пет-проект, который будет приносить деньги?
Александр Рогачев запустил телеграм-канал Indie Hackers, где рассказывает про пет-проекты, которые приносят стабильный доход своим создателям.
Без венчурных инвестиций, без бизнес-планов и команды.
Разве такое возможно?
Да!
Несколько примеров:
Агрегатор вакансий c доходом в 4000$ / месяц
Плагин для Chrome с доходом 20000₽ / месяц
Если вы в поиске свежих идей, которые могут обеспечить стабильный пассивных доход, подписывайтесь на канал Indie Hackers.
Уверен, что там вы найдёте то самое, что зажжёт огонь в вашем сердце ❤️🔥
➡️ Ссылка для входа
5 048
Как стать программистом? Технологии, веб-разработки
Команда действующих разработчиков с широкой экспертизой back и front рассказывают, как создаются веб-приложения с нуля. Паттерны, лучшие практики.
Бесплатно!
Бонусом нетоксичное сообщество и шутейки на тему.
Подписаться
#реклама
О рекламодателе
5 048
🤔 Какой модификатор доступа позволяет доступ только внутри того же класса?
5 048
Получите диплом от НИТУ МИСИС в веб-разработке
Яндекс Практикум и НИТУ МИСИС приглашают на онлайн-программу «Веб-разработчик»
Полноценная учёба в онлайн-формате
Зачёты, сессии, лекции и семинары с гибким графиком.
На платформе Практикума
Гибкая теория, автоматическая проверка заданий и встроенная YandexGPT.
Преподаватели НИТУ МИСИС и наставники Яндекс Практикума
Они будут проводить занятия и учить вас применять теорию на практике.
Студенческий, льготы и диплом гособразца
У вас будут все преимущества студента-очника. Доступ к инфраструктуре вуза — кампусам, библиотекам и мероприятиям.
Оплатить учёбу можно разными способами: всю сумму сразу, по семестрам или с помощью госкредита — тогда ежемесячный платёж составит от 500 ₽, а государство погасит часть кредита за вас.
Подать заявку
#реклама 16+
practicum.yandex.ru
О рекламодателе
5 048
📌 Что такое .NET Core?
💬 Спрашивают в 22% собеседований
.NET Core — это кроссплатформенная, высокопроизводительная и модульная среда выполнения, разработанная компанией Microsoft. Она предназначена для создания современных приложений, которые могут быть развёрнуты на различных операционных системах, включая Windows, macOS и Linux. .NET Core является частью более широкой экосистемы .NET и представляет собой значительное развитие по сравнению с традиционным .NET Framework. Рассмотрим основные особенности и компоненты .NET Core подробнее.
🤔 Основные особенности .NET Core
1️⃣ Кроссплатформенность:
➕ .NET Core поддерживает работу на различных операционных системах: Windows, macOS и Linux.
➕ Это позволяет разработчикам писать код, который может быть запущен на любом поддерживаемом устройстве или сервере, без необходимости вносить изменения в код.
2️⃣ Высокая производительность:
➕ .NET Core оптимизирован для высокой производительности и эффективности.
➕ Его использование позволяет создавать высоконагруженные приложения, такие как веб-сервисы и микросервисы.
3️⃣ Модульная архитектура:
➕ .NET Core предоставляет возможность установки только тех пакетов и библиотек, которые необходимы для конкретного приложения.
➕ Это уменьшает объём занимаемого пространства и улучшает управляемость зависимостями.
4️⃣ Открытый исходный код:
➕ Исходный код .NET Core является открытым и доступен на GitHub.
➕ Это способствует прозрачности разработки и позволяет сообществу вносить вклад в улучшение платформы.
5️⃣ Унифицированная платформа:
➕ .NET Core объединяет несколько различных платформ (например, ASP.NET для веб-разработки, Xamarin для мобильной разработки и т.д.) под единым фреймворком.
➕ Это позволяет разработчикам использовать одни и те же инструменты и библиотеки для различных типов приложений.
🤔 Компоненты .NET Core
1️⃣ CLR (Common Language Runtime):
➕ Среда выполнения, которая управляет исполнением .NET приложений. Включает в себя управление памятью, выполнение кода, компиляцию JIT (Just-In-Time) и сборку мусора.
2️⃣ Библиотека классов (Base Class Library, BCL):
➕ Набор библиотек, предоставляющих основные функциональные возможности, такие как работа с файловой системой, сетевое взаимодействие, управление потоками и многое другое.
3️⃣ CLI (Command-Line Interface):
➕ Интерфейс командной строки, который предоставляет инструменты для создания, компиляции и развёртывания приложений .NET Core.
4️⃣ SDK (Software Development Kit):
➕ Набор инструментов и библиотек для разработки приложений на .NET Core. Включает компиляторы, библиотеку классов и инструменты для работы с проектами.
5️⃣ ASP.NET Core:
➕ Фреймворк для разработки веб-приложений и веб-API на .NET Core. Поддерживает разработку высокопроизводительных, масштабируемых и облачно-ориентированных веб-приложений.
🤔 Пример создания простого приложения на .NET Core
Для создания простого консольного приложения на .NET Core можно использовать следующие команды CLI:
1️⃣ Установка .NET Core SDK:
➕ Загрузите и установите .NET Core SDK с официального сайта [Microsoft .NET](https://dotnet.microsoft.com/download).
2️⃣ Создание нового проекта:
dotnet new console -n MyConsoleApp
cd MyConsoleApp
3️⃣ Редактирование кода:
➕ Откройте файл Program.cs и внесите изменения: using System;
namespace MyConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, .NET Core!");
}
}
}
4️⃣ Запуск приложения: dotnet run
🤔 Краткий ответ
.NET Core — это кроссплатформенная, высокопроизводительная и модульная среда выполнения, созданная Microsoft. Она поддерживает Windows, macOS и Linux, позволяет создавать современные приложения и является частью экосистемы .NET.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 048
🤔 Какой модификатор доступа позволяет доступ к члену класса только изнутри самого класса и производных классов?
5 048
Ведем набор учеников 3-10 классов на новый учебный год!
Московская школа программистов - это не курсы, а школа с государственной лицензией, которая обучает детей IT с 2001 года. Мы сотрудничаем с МФТИ, НИУ ВШЭ, Яндекс и Физтехпарк
Что получит ребенок, в результате обучения:
- Участие и победы в олимпиадах всероссийского и международного уровня
- Поступление в престижные технические вузы России и работу в известных IT-компаниях: Apple, Google, Yandex, Nvidia и других
- Практику на реальных IT-проектах
- Усидчивость, целеустремленность и умение работать в команде
- Сдача ЕГЭ/ОГЭ на высокие баллы
Сейчас идет набор в виртуальный класс. В этом формате, дети в небольших группах обучаются с преподавателем онлайн в реальном времени.
Эффективно как очно.
Позаботьтесь о том, чтобы ребенок стал востребованным IT-специалистом!
Зарегистрироваться
#реклама
vc.informatics.ru
О рекламодателе
5 048
📌 Какие минусы у микросервисов?
💬 Спрашивают в 22% собеседований
Микросервисная архитектура предлагает множество преимуществ, таких как независимая разработка и развёртывание компонентов, повышенная масштабируемость и устойчивость к сбоям. Однако, несмотря на все эти плюсы, существуют и некоторые недостатки, которые необходимо учитывать при принятии решения о переходе на микросервисную архитектуру.
1️⃣ Сложность управления
Описание:
➕ Микросервисная архитектура подразумевает наличие множества независимых сервисов, каждый из которых может разрабатываться, развёртываться и масштабироваться отдельно. Это приводит к увеличению числа компонентов, которыми нужно управлять.
Проблемы:
➕ Трудность в мониторинге и управлении состоянием множества сервисов.
➕ Усложнение оркестрации и деплоя (развёртывания).
2️⃣ Межсервисное взаимодействие
Описание:
➕ Микросервисы взаимодействуют друг с другом по сети, используя HTTP, gRPC или другие протоколы.
Проблемы:
➕ Возрастают сетевые задержки и накладные расходы на сериализацию/десериализацию данных.
➕ Возможность возникновения сетевых ошибок, что требует дополнительных механизмов для их обработки и повторных попыток.
3️⃣ Сложность тестирования
Описание:
➕ Тестирование микросервисных систем становится более сложным по сравнению с монолитными приложениями.
Проблемы:
➕ Необходимость тестирования взаимодействий между сервисами.
➕ Сложность воссоздания тестовой среды, которая точно отражает производственную.
4️⃣ Управление данными и консистентность
Описание:
➕ В микросервисной архитектуре каждый сервис может иметь собственную базу данных, что помогает в разделении данных, но создаёт новые проблемы.
Проблемы:
➕ Сложность поддержания консистентности данных между различными сервисами.
➕ Необходимость реализации распределённых транзакций или механизмов компенсации.
5️⃣ Повышенные требования к инфраструктуре
Описание:
➕ Микросервисы часто требуют более сложной инфраструктуры для управления контейнерами, оркестрацией, мониторингом и логированием.
Проблемы:
➕ Увеличение затрат на инфраструктуру и её поддержку.
➕ Необходимость в новых инструментах и технологиях, таких как Kubernetes, для эффективного управления контейнерами.
6️⃣ Организационные сложности
Описание:
➕ Микросервисная архитектура требует изменения подхода к разработке и эксплуатации ПО, а также организационных изменений.
Проблемы:
➕ Необходимость переквалификации команды разработчиков и операционной команды.
➕ Потребность в новой культуре взаимодействия между командами (DevOps, CI/CD).
🤔 Пример сложностей
Предположим, у нас есть система микросервисов для интернет-магазина. Один микросервис отвечает за управление товарами, другой за обработку заказов, а третий за платежи. В монолитной архитектуре все компоненты находятся в одном приложении, и взаимодействие между ними происходит напрямую через вызовы методов. В микросервисной архитектуре взаимодействие будет происходить через сетевые запросы.
➕ Межсервисное взаимодействие: Если сервис обработки заказов должен получить информацию о товаре, ему нужно сделать сетевой запрос к сервису управления товарами. Это может привести к сетевым задержкам или временным сбоям, если сервис управления товарами недоступен.
➕ Консистентность данных: Когда заказ обрабатывается, сервис заказов и сервис платежей должны быть синхронизированы, чтобы избежать ситуаций, когда заказ оплачен, но не обработан должным образом. Это требует реализации механизмов для поддержания консистентности между этими сервисами.
🤔 Краткий ответ
Микросервисная архитектура может усложнить управление системой, увеличить сетевые задержки, усложнить тестирование и поддержание консистентности данных, повысить требования к инфраструктуре и создать организационные сложности.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых
5 048
ТОП-4 Курса по Data Science
Tutortop — маркетплейс курсов №1 по количеству школ-партнеров, курсов и реальных отзывов студентов.
🎓Освойте продвинутую математику с самых азов
💻Научитесь создавать ML-модели и работать с нейронными сетями
✅Получите реальный опыт на практических проектах
🏠Начните работать удаленно
💰Подарок в конце подборки!
Выбрать
#реклама 16+
tutortop.ru
О рекламодателе
5 048
📌 Какие есть принципы SOLID?
💬 Спрашивают в 22% собеседований
Принципы SOLID — это пять основных принципов объектно-ориентированного проектирования и программирования, которые помогают создавать гибкие и поддерживаемые системы:
1️⃣ S - Single Responsibility Principle (Принцип единственной ответственности)
2️⃣ O - Open/Closed Principle (Принцип открытости/закрытости)
3️⃣ L - Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
4️⃣ I - Interface Segregation Principle (Принцип разделения интерфейса)
5️⃣ D - Dependency Inversion Principle (Принцип инверсии зависимостей)
1️⃣ Принцип единственной ответственности (Single Responsibility Principle)
➕ Каждый класс должен иметь одну задачу и только одну причину для изменения.
➕ Упрощает понимание, сопровождение и тестирование кода.
Пример:
public class Report
{
public string Text { get; set; }
public void PrintReport()
{
// Логика печати отчета
}
}
public class ReportSaver
{
public void SaveToFile(Report report, string filePath)
{
// Логика сохранения отчета в файл
}
}
2️⃣ Принцип открытости/закрытости (Open/Closed Principle)
➕ Программные сущности должны быть открыты для расширения, но закрыты для модификации.
➕ Позволяет добавлять новые функции без изменения существующего кода.
Пример: public abstract class Shape
{
public abstract double Area();
}
public class Circle : Shape
{
public double Radius { get; set; }
public override double Area()
{
return Math.PI * Radius * Radius;
}
}
public class Square : Shape
{
public double Side { get; set; }
public override double Area()
{
return Side * Side;
}
}
3️⃣ Принцип подстановки Барбары Лисков (Liskov Substitution Principle)
➕ Объекты подклассов должны заменять объекты базового класса без нарушения корректности программы.
➕ Обеспечивает корректное использование наследования.
Пример: public class Bird
{
public virtual void Fly()
{
// Логика полета
}
}
public class Sparrow : Bird
{
public override void Fly()
{
// Логика полета воробья
}
}
public class Ostrich : Bird
{
public override void Fly()
{
throw new NotImplementedException();
}
}
Здесь принцип нарушен, так как страус не может летать. Лучше не наследовать страуса от класса Bird, если метод Fly не применим ко всем подклассам.
4️⃣ Принцип разделения интерфейса (Interface Segregation Principle)
➕ Клиенты не должны зависеть от интерфейсов, которые они не используют.
➕ Улучшает модульность и уменьшает зависимость между компонентами.
Пример: public interface IPrinter
{
void Print();
}
public interface IScanner
{
void Scan();
}
public class MultiFunctionPrinter : IPrinter, IScanner
{
public void Print()
{
// Логика печати
}
public void Scan()
{
// Логика сканирования
}
}
public class SimplePrinter : IPrinter
{
public void Print()
{
// Логика печати
}
}
5️⃣ Принцип инверсии зависимостей (Dependency Inversion Principle)
➕ Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций.
➕ Улучшает тестируемость и уменьшает связанность компонентов.
Пример: public interface IMessageSender
{
void SendMessage(string message);
}
public class EmailSender : IMessageSender
{
public void SendMessage(string message)
{
// Логика отправки email
}
}
public class Notification
{
private readonly IMessageSender _messageSender;
public Notification(IMessageSender messageSender)
{
_messageSender = messageSender;
}
public void Send(string message)
{
_messageSender.SendMessage(message);
}
}
🤔 Краткий ответ
Принципы SOLID помогают создавать гибкие и поддерживаемые системы. Это принципы единственной ответственности, открытости/закрытости, подстановки Лисков, разделения интерфейса и инверсии зависимостей. Они направлены на улучшение структуры и качества кода.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 048
ТОП-4 Курса по UX/UI-дизайну по версии Tutortop
Tutortop — маркетплейс курсов №1 по количеству школ-партнеров, курсов и реальных отзывов студентов.
Освойте востребованную профессию с нуля за 4-5 месяцев.
Соберите портфолио из 10+ проектов.
Выйдите на заработок 100 000₽+ и работайте удаленно в гибком графике.
Выбрать
#реклама 16+
tutortop.ru
О рекламодателе
5 048
🤔 Какое свойство C# используется для реализации пользовательской логики при доступе и изменении значения переменной?
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
