C# | Вопросы собесов
رفتن به کانال در Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
نمایش بیشتر5 048
مشترکین
-124 ساعت
-157 روز
-2530 روز
آرشیو پست ها
5 047
Реклама для бизнеса любого уровня в Яндекс Директе
Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌
Начните прямо сейчас ⚡
Зарегистрироваться
#реклама
direct.yandex.ru
О рекламодателе
5 047
Что такое ref & out ?
Спросят с вероятностью 22%
ref и out являются модификаторами параметров, которые позволяют методам изменять значения переменных, переданных в качестве аргументов. Оба модификатора используются для передачи аргументов по ссылке, но они работают немного по-разному и применяются в различных сценариях.
ref
Используется для передачи переменной по ссылке. Это означает, что любые изменения, сделанные с переменной внутри метода, отражаются на исходной переменной, переданной из вызывающего кода. Важно отметить, что переменная, передаваемая с модификатором
ref, должна быть инициализирована перед передачей в метод.
void Increment(ref int number)
{
number += 1;
}
int value = 5;
Increment(ref value);
Console.WriteLine(value); // Выведет 6
В этом примере value передаётся по ссылке, так что изменения в методе Increment видны и снаружи метода.
out
Также используется для передачи аргументов по ссылке, но оно имеет одно ключевое отличие от ref: переменная, передаваемая с out, не обязательно должна быть инициализирована до её использования в методе. Однако метод, получающий параметр out, обязан присвоить этой переменной значение до выхода из метода.
void GetCoordinates(out int x, out int y)
{
x = 10;
y = 20;
}
int a, b;
GetCoordinates(out a, out b);
Console.WriteLine(a); // Выведет 10
Console.WriteLine(b); // Выведет 20
Здесь переменные a и b не были инициализированы перед передачей в метод GetCoordinates. Метод же устанавливает их значения, которые затем доступны после выполнения метода.
Сравнение ref и out
✅Инициализация: Переменные, передаваемые с ref, должны быть инициализированы перед вызовом метода. Переменные, передаваемые с out, инициализируются внутри метода.
✅Использование: ref используется, когда переменная уже содержит важное значение, которое может быть изменено, в то время как out используется, когда необходимо вернуть значение, которое устанавливается внутри метода.
Оба модификатора играют важную роль для управления и изменения данных во время выполнения программы, обеспечивая гибкость в обработке и передаче данных между методами.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 047
Разработка мобильных приложений и веб-сервисов - WINFOX
Для ритейла и ecommerce. Продуктовый подход. Большой опыт. Компания из топа рейтингов.
Получить предложение
#реклама
wnfx.ru
О рекламодателе
5 047
В чем разница между процессами и потоками ?
Спросят с вероятностью 22%
"процесс" и "поток" относятся к фундаментальным аспектам управления выполнением задач в операционных системах. Хотя оба являются единицами выполнения, они имеют существенные различия и используются в разных контекстах.
Процесс
Это экземпляр программы, выполняющийся в операционной системе. Это полностью изолированная и самодостаточная сущность с собственным виртуальным адресным пространством памяти. Каждый процесс имеет свой собственный набор ресурсов, включая файловые дескрипторы, переменные окружения, основной поток выполнения и другие системные ресурсы.
✅Изоляция: Процессы изолированы друг от друга, что обеспечивает безопасность и стабильность системы. Ошибка в одном процессе обычно не влияет на работу других процессов.
✅Переключение контекста: При переключении между процессами операционная система должна сохранять и восстанавливать контекст процесса, что может быть ресурсоёмкой операцией.
✅Взаимодействие: Процессы могут взаимодействовать друг с другом через механизмы межпроцессного взаимодействия (IPC), такие как сокеты, файлы, общая память и другие.
Поток (Thread)
Это легковесная единица выполнения, которая работает в контексте процесса. Потоки в рамках одного процесса разделяют его ресурсы, такие как память и файловые дескрипторы, что делает их более эффективными в плане использования ресурсов по сравнению с процессами.
✅Разделение ресурсов: Все потоки внутри одного процесса разделяют одно и то же адресное пространство и системные ресурсы, что позволяет им эффективно обмениваться данными без использования IPC.
✅Создание и управление: Создание потока быстрее и требует меньше ресурсов, чем создание процесса. Переключение контекста между потоками происходит быстрее, чем между процессами.
✅Риски и недостатки: Поскольку потоки разделяют память, ошибка в одном потоке, такая как неправильная работа с памятью, может повлиять на другие потоки и весь процесс.
Представьте себе браузер, который является одним процессом. Внутри этого процесса могут работать множество потоков: один поток может обрабатывать пользовательский интерфейс, другой — загрузку данных с интернета, а третий — выполнение JavaScript на веб-странице. Ошибки в потоке выполнения JavaScript не должны влиять на поток пользовательского интерфейса, позволяя пользователю закрыть вкладку, которая вызвала сбой.
Основное различие между процессами и потоками заключается в том, что процессы являются изолированными и самостоятельными единицами выполнения с собственным набором ресурсов, в то время как потоки являются более легковесными единицами, которые работают в рамках процесса и разделяют его ресурсы. Эти различия делают потоки идеальными для задач, требующих эффективного взаимодействия и обмена данными, в то время как процессы лучше подходят для задач, требующих изоляции и безопасности.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых
5 047
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
5 047
🤔 Что означает ключевое слово virtual в контексте метода в C#?
5 047
Какие API можно назвасть Restо-вым ?
Спросят с вероятностью 22%
RESTful API (Representational State Transfer) — это архитектурный стиль взаимодействия компонентов в сети. Создание его включает в себя следование ряду принципов, которые делают API легко использовать и интегрировать в различные приложения. Основные принципы REST включают использование стандартных методов HTTP, семантически ясных URL и передачу данных в форматах, таких как JSON или XML. Чтобы API можно было назвать RESTful, он должен следовать этим ключевым принципам:
1️⃣Использование стандартных методов HTTP:
✅GET: Получение данных.
✅POST: Создание новой записи.
✅PUT: Обновление существующей записи.
✅DELETE: Удаление записи.
2️⃣Без сохранения состояния (Stateless):
✅Каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для выполнения запроса. Сервер не должен хранить контекст клиента между запросами.
3️⃣Кэширование:
✅Ответы должны быть явно маркированы как кэшируемые или некэшируемые, чтобы клиенты могли избежать повторной отправки запросов за неизменной информацией.
4️⃣Единообразие интерфейса:
✅Интерфейс должен быть единообразным, что облегчает взаимодействие с API. URL должны быть структурированы логически, а передача данных должна быть прозрачной и понятной.
5️⃣Слоистая система:
✅Клиент не должен обязательно знать, общается ли он напрямую с сервером или через промежуточные слои (прокси, балансировщики нагрузки).
Примеры популярных RESTful API:
✅GitHub API: Предоставляет доступ к функциям, таким как репозитории, коммиты, вопросы и т.д., используя стандартные методы HTTP для управления ресурсами.
✅Twitter API: Позволяет разработчикам взаимодействовать с основными аспектами Twitter, включая твиты, профили пользователей и т.д.
✅Google Maps API: Дает возможность добавлять карты Google и другие функции местоположения в веб-сайты и приложения.
✅Amazon S3 API: Обеспечивает программный доступ к функциям хранения файлов на Amazon S3.
Эти API являются примерами, как можно организовать взаимодействие между клиентом и сервером, используя принципы REST для обеспечения гибкости, масштабируемости и удобства интеграции.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых
5 047
👩💻 Программирование теперь в телеграм!
Вот обширная база материалов, которая ежедневно обновляется, выбирай своё направление:
Обучение С# с нуля
Обучение Python с нуля
Обучение Java с нуля
Обучение JavaScript с нуля
Обучение HTML/CSS с нуля
Обучение C/С++ с нуля
Обучение DevOps с нуля
Обучение SQL/GO/PHP с нуля
Обучение Kotlin/Swift с нуля
⛓ Архив на 1789ГБ: Курсы, книги, шпаргалки, статьи, видео ресурсы — всё собрано в одном месте: @roadmap_ready
5 047
Какие проблемы могут быть при многопоточности и как их избежать ?
Спросят с вероятностью 22%
Многопоточное программирование позволяет улучшить производительность программ за счет параллельной обработки данных, но это также влечет за собой ряд специфических проблем. Понимание этих проблем и способы их предотвращения или управления ими критически важны для создания надежных и эффективных многопоточных приложений.
Основные проблемы:
1️⃣Гонки данных (Race Conditions)
✅Проблема: Два или более потоков пытаются одновременно изменить общие данные или один поток читает данные во время их изменения другим потоком, что приводит к непредсказуемым результатам.
✅Решение: Использование механизмов синхронизации, таких как блокировки (locks), мьютексы (mutexes) и семафоры (semaphores), для контроля доступа к общим ресурсам.
2️⃣Взаимная блокировка (Deadlock)
✅Проблема: Два или более потоков бесконечно ожидают ресурсы, заблокированные друг другом, в результате чего они не могут продолжить выполнение.
✅Решение: Разработка программы таким образом, чтобы потоки запрашивали ресурсы всегда в одном и том же порядке, использование таймаутов для блокировок, чтобы потоки могли выйти из состояния ожидания.
3️⃣Голодание (Starvation)
✅Проблема: Один или несколько потоков не могут получить доступ к необходимым ресурсам, потому что другие потоки постоянно занимают их.
✅Решение: Применение справедливых блокировок (fair locks) или алгоритмов планирования, которые обеспечивают всем потокам равный доступ к ресурсам.
4️⃣Переключение контекста (Context Switching)
✅Проблема: Частое переключение контекста между потоками может значительно снизить производительность системы, особенно если потоки часто блокируются и разблокируются.
✅Решение: Оптимизация количества потоков, уменьшение зависимостей между потоками и уменьшение использования блокировок.
5️⃣Проблемы с проектированием
✅Проблема: Неправильное проектирование многопоточной архитектуры может привести к сложностям в поддержке и расширении программного обеспечения.
✅Решение: Использование абстракций высокого уровня для работы с потоками, таких как пулы потоков, параллельные библиотеки (например, TPL в .NET) и модели акторов.
Использование блокировки:
private static readonly object _lock = new object();
private static int _sharedResource;
public static void UpdateResource()
{
lock (_lock)
{
_sharedResource++;
// Выполнение некоторой работы с общим ресурсом
}
}
Этот пример показывает использование объекта блокировки для предотвращения гонки данных при доступе к общему ресурсу.
Избегание взаимной блокировки:
private static readonly object _lock1
= new object();
private static readonly object _lock2 = new object();
public static void Method1()
{
lock (_lock1)
{
// Некоторые действия
lock (_lock2)
{
// Дополнительные действия
}
}
}
public static void Method2()
{
lock (_lock1)
{
// Аналогичные действия
lock (_lock2)
{
// Дополнительные действия
}
}
}
Запрашивая блокировки в одном и том же порядке, мы предотвращаем взаимную блокировку, которая могла бы возникнуть, если бы порядок блокировок был обратным в разных методах.
Многопоточное программирование требует внимательного проектирования и тщательного управления ресурсами. Использование современных инструментов и подходов, таких как библиотеки и фреймворки высокого уровня, может значительно упростить создание надежных и эффективных многопоточных приложений.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 047
🤔 Какой модификатор доступа делает класс доступным только в текущей сборке?
5 047
Repost from easyoffer
Канал приближается к 20к подписчиков, а здесь так и нет нормального контент плана 😒
Ищу талантливых журналистов, способных писать клевые и авторские посты на тему "Карьера в IT" и все что с этим связано: поиск работы, повышение з/п, разбор кейсов, переезд в другие страны по рабочим визам, аналитика, исследование рынка и т.д.
Важно глубокое понимание IT индустрии, вы должны иметь опыт работы в ней
Если интересно отправьте мне свое резюме @kivaiko
5 047
Зачем нужны поколения для сборщика мусора ?
Спросят с вероятностью 22%
Поколения в сборке мусора (.NET Garbage Collector) играют важную роль в оптимизации процесса управления памятью. Использование поколений основывается на наблюдении, известном как "гипотеза о слабой генерализации", которая гласит, что большинство объектов умирает молодыми. Это означает, что объекты, которые были недавно созданы, с большей вероятностью будут недоступны или "умрут" быстро, в то время как объекты, которые уже существовали в течение более длительного времени, вероятнее всего, будут нужны программе еще дольше.
1️⃣Улучшение производительности
Сбор мусора может быть затратным с точки зрения производительности, особенно если он запускается часто или должен проверять большое количество объектов. Разделение объектов на поколения позволяет сборщику мусора оптимизировать свою работу:
✅Частые сборы в младших поколениях: Поскольку большинство объектов умирает молодыми, частая сборка мусора в поколении 0 (где находятся новые объекты) быстро освобождает память, занимаемую недолговечными объектами, с минимальными затратами времени.
✅Реже сборы в старших поколениях: Объекты, которые выжили несколько сборок мусора и были продвинуты в поколение 1 и далее в поколение 2, проверяются на достижимость менее часто, что снижает нагрузку на систему.
2️⃣Минимизация фрагментации памяти
Компактификация, которая часто выполняется в процессе сборки мусора, особенно в младших поколениях, помогает уменьшить фрагментацию памяти. Перемещение "выживших" объектов в одну непрерывную область памяти улучшает производительность доступа к памяти и увеличивает эффективность выделения памяти для новых объектов.
3️⃣Сокращение времени простоя
Интеллектуальное управление поколениями позволяет сборщику мусора выполнять полную сборку мусора (включающую все поколения) гораздо реже, что сокращает время простоя приложения, связанное с сбором мусора. Таким образом, приложения работают более плавно и с меньшими задержками.
В приложении, где создаются множество временных объектов (например, в результате парсинга данных или обработки запросов пользователя), сборщик мусора быстро удаляет эти объекты в поколении 0, предотвращая накопление "мусора" и сохраняя высокую производительность приложения.
Использование поколений в сборке мусора позволяет более эффективно управлять памятью, сокращая время, необходимое на сборку мусора, и улучшая общую производительность приложений.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых
5 047
Почему тебя не зовут на интервью? Исправь это в своем резюме…
Получить приглашение на интервью сейчас сложнее, чем с нуля обучиться разработке. И к сожалению, это не шутка.
Скорее всего только 1-2% работодателей сейчас позовут тебя на интервью. Это статистика, которую мы собирали по 10.000 откликам. Но над этой цифрой можно и нужно работать.
Если правильно оформить свое резюме, и поменять свою стратегию с откликами, то конверсию можно увеличить до 10%. Т.е почти в 10 раз!
Как это сделать?
1. Проверить свое резюме по нашему чек листу, и внести в него то, чего будет не хватать.
2. Поменять свой подход к поиску работы, ведь одними откликами на hh.ru сыт не будешь.
16 июля, в 18:00 по москве, мы вместе с Максом из CodeReview проведем вебинар на тему эффективного поиска работы в 2024 году.
На нем Макс покажет как сейчас нужно искать работу. В прямом эфире.
А также раскроет что именно нужно писать в свое резюме, чтобы оно ПРОДАВАЛО.
Получить чек лист по составлению резюме, а также зарегистрироваться на вебинар можно по этой ссылке.
Регистрируйся сейчас и увидимся 16 июля, в 18:00 по мск.
👉 Зарегистрироваться и получить чек-лист по резюме.
5 047
Что такое IEnumerable ?
Спросят с вероятностью 22%
IEnumerable — это интерфейс в базовой библиотеке классов .NET Framework, который определяет один метод:
GetEnumerator(). Этот метод возвращает объект IEnumerator, который позволяет перебирать элементы коллекции (например, массива или списка) один за другим.
Зачем он нужен?
Используется для создания универсального метода перебора данных, не зависящего от типа коллекции. Это означает, что любой тип данных, который реализует IEnumerable, можно перебирать с помощью цикла foreach в C#. Это упрощает работу с различными структурами данных, предоставляя единый механизм для итерации элементов.
Как он используется?
Когда вы реализуете интерфейс IEnumerable в своём классе, вы обязуете этот класс предоставлять метод GetEnumerator(), который возвращает IEnumerator. IEnumerator, в свою очередь, имеет методы для перехода к следующему элементу (MoveNext) и для получения текущего элемента (Current), а также метод Reset(), который возвращает перечислитель в начальное состояние.
using System;
using System.Collections;
public class DaysOfWeek : IEnumerable
{
private string[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };
public IEnumerator GetEnumerator()
{
for (int index = 0; index < days.Length; index++)
{
// Yield each day of the week.
yield return days[index];
}
}
}
public class Program
{
public static void Main()
{
DaysOfWeek daysOfWeek = new DaysOfWeek();
foreach (string day in daysOfWeek)
{
Console.WriteLine(day);
}
}
}
В этом примере класс DaysOfWeek реализует IEnumerable, что позволяет использовать его в цикле foreach для вывода всех дней недели. Использование yield return в методе GetEnumerator() упрощает создание итератора.
IEnumerable позволяет объектам быть перебираемыми в цикле foreach. Это дает возможность скрыть внутреннюю реализацию коллекции, предоставляя простой и понятный интерфейс для доступа к её элементам. Также это способствует созданию кода, который легче читать и поддерживать.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 047
Привет! Ты сейчас ищешь работу?
Если да, то у меня для тебя классные новости.
Мы с Максом решили провести вебинар на тему поиска работы и того, как быстрее получить оффер.
Зачем?
Да потому что найти работу просто откликаясь на вакансии теперь практически нереально.
На Junior вакансии откликаются по 1500 кандидатов. 1500 человек, Карл...
Вопрос: Как искать работу в таких условиях?
Ответ: Нужно менять подходы, и использовать новые способы поиска работы.
А вот какие способы, и как искать работу в 2024 году, расскажет мой товарищ - Макс, который помогает разработчикам с трудоустройством.
Он расскажет тебе как ПРАВИЛЬНО откликаться на вакансии, на что смотрят рекрутеры, и как ты должен быть упакован, чтобы получить работу в это непростое время.
🗓 Когда? Во вторник – 16 июля, в 18:00 по мск.
🎁 После регистрации он также обещал прислать: 1) Анализ рынка труда. 2) Разбор кейсов тех, кто сейчас находит работу. 3) Пошаговый план, что нужно делать, чтобы прийти к оферу.
👉 Записаться на вебинар по поиску работы.
5 047
🤔 Какое ключевое слово используется для создания неизменяемого поля в C#?
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
