ru
Feedback

Не попадитесь на канал ботавода! Telemetrio находит и помечает такие каналы 👉 Хотите видеть метку — оформите подписку

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

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

Открыть в Telegram
5 008
Подписчики
-124 часа
-37 дней
+1430 дней
Архив постов
Все новости из мира программирования на этом канале @umnyiprogrammist Подписывайтесь, чтобы не упустите ничего важного Ставь
Все новости из мира программирования на этом канале @umnyiprogrammist Подписывайтесь, чтобы не упустите ничего важного Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое деревья выражений? Это структура данных, представляющая код в виде дерева. В дереве выражений узлы содержат операции (например, сложение, вызов метода) и операнды (например, переменные, значения). Это позволяет анализировать и изменять выражения программно. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Научим школьников создавать компьютерные игры. Бесплатно Бесплатный мастер-класс для детей возраста 8-14 лет независимо от ур
Научим школьников создавать компьютерные игры. Бесплатно Бесплатный мастер-класс для детей возраста 8-14 лет независимо от уровня знаний в программировании. ✅Педагоги из Университета Иннополис в простой форме обучат основам языка программирования Scratch и его применению для создания интересных компьютерных игр. Всего за одно занятие Ваш ребёнок научится самостоятельно программировать игры и сможет реализовывать собственные замыслы с дальнейшем! ⚡Не упустите возможность подарить ребёнку уникальные знания от ведущего ИТ ВУЗа страны. Кто знает, возможно, это станет фундаментом для востребованной профессии в будущем или просто полезным хобби в настоящем... Попробуем? Регистрируйтесь для участия, количество мест ограничено. Узнать больше #реклама 16+ progmatica.innopolis.university О рекламодателе

🤔 Что такое примитив синхронзиации semaphore? Это механизм синхронизации, который используется для управления доступом к ограниченному ресурсу. Он позволяет ограниченному количеству потоков одновременно использовать общий ресурс. 🚩Как работает семафор? Семафор использует счётчик для отслеживания доступных "разрешений": Когда поток запрашивает доступ к ресурсу, семафор уменьшает счётчик. Если счётчик больше нуля, поток получает доступ. Если счётчик равен нулю, поток блокируется, пока другой поток не освободит ресурс (увеличив счётчик). 🚩Пример использования `SemaphoreSlim` В .NET часто используется SemaphoreSlim, так как он более лёгкий и эффективный, чем Semaphore.
using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static SemaphoreSlim semaphore = new SemaphoreSlim(2); // Разрешаем максимум 2 потока одновременно

    static async Task AccessResource(int id)
    {
        Console.WriteLine($"Поток {id} ждёт доступа...");
        await semaphore.WaitAsync(); // Захватываем семафор
        try
        {
            Console.WriteLine($"Поток {id} получил доступ!");
            await Task.Delay(2000); // Имитация работы с ресурсом
        }
        finally
        {
            Console.WriteLine($"Поток {id} освобождает ресурс.");
            semaphore.Release(); // Освобождаем семафор
        }
    }

    static async Task Main()
    {
        Task[] tasks = new Task[5];
        for (int i = 0; i < 5; i++)
        {
            tasks[i] = AccessResource(i);
        }
        await Task.WhenAll(tasks);
    }
}
🚩Обычный `Semaphore` Если нужна синхронизация между разными процессами, можно использовать Semaphore
Semaphore semaphore = new Semaphore(2, 2, "MyGlobalSemaphore");
Ставь 👍 и забирай 📚 Базу знаний

Repost from easyoffer
Ищу работу пол года Практически под каждым постом в этом канале я вижу комментарии от людей, которые ищут работу по полгода. Это перерастает в обсуждение того, как нужно (или не нужно) искать работу, почему процесс найма сломан и как они откликались на фейковые вакансии. Честно говоря, искать работу полгода — это нонсенс. Очевидно, что человек делает что-то не так. Главная ошибка, которую совершают многие, — это создание иллюзии поиска работы. То есть человек вроде бы ищет работу, но делает это неэффективно, тратя время на нецелевые действия. Например: ➖ Просматривает вакансии перед откликом. ➖ Пытается понять, подходит ли он под вакансию. Если считает, что не подходит — не откликается. ➖ Пишет сопроводительные письма (иногда даже уникальные под каждую вакансию). ➖ Заполняет анкеты, проходит тесты. Все эти действия отнимают время, но не приводят к результату. Почему это не работает? HR-менеджер не может вручную отсмотреть 2000 откликов, оценить каждое резюме и прочитать сопроводительные письма. Поэтому компании используют ATS-системы (системы автоматического подбора), которые анализируют резюме и определяют процент его соответствия вакансии. Что делать, чтобы повысить шансы? 1️⃣ Добавить ключевые навыки в резюме — и в основной текст, и в теги. Возьмите их с easyoffer.ru 2️⃣ Убрать нерелевантный опыт, оставить только подходящий. 3️⃣ Оформить опыт так, чтобы он выглядел релевантным. Если у вас его нет, укажите проекты, стажировки или другой опыт, который можно представить как работу от 1 года. Если опыт слишком большой, сузьте его до 6 лет. 4️⃣ Откликаться на все вакансии без разбору. Если вы Junior, не ищите только стажер или Junior-вакансии — пробуйте везде. Не отказывайте себе сами, пусть это решит HR 5️⃣ Сделать резюме публичным, потому что HR-менеджеры часто ищут кандидатов не только среди откликов, но и в базе резюме. 6️⃣ Используйте ИИ по минимуму – ATS-системы считывают это и помечают "сгенерировано ИИ" ‼️ Главное правило: чем больше откликов — тем выше шанс получить оффер. Делайте резюме удобным для ATS-систем, и вас заметят. 1. Посмотрите видео о том как я вывел свою резюме в Топ1 на HH 2. Посмотрите видео как я нашел первую работу 3. Прочитайте этот кейс про оптимизацию резюме Если прям вообще тяжело. Создайте несколько разных резюме. Создайте 2, 3 да хоть 10 резюме. Настройте авто-отлики и ждите приглашения на собесы. Не нужно создавать иллюзию поиска работы, сделайте несколько простых и актуальных действий.

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

Пс... Тут два С++ сеньора создали канал, где простым языком поясняют за плюсы, метапрограммирование, фишки новых стандартов,
Пс... Тут два С++ сеньора создали канал, где простым языком поясняют за плюсы, метапрограммирование, фишки новых стандартов, алгоритмы, вопросы с собеседований, многопоточку и другие непонятные штуки из современного программирования на С++. Если ты еще совсем новичок, то забирай список всех полезных материалов для старта. Хочешь устроиться на работу? Забирай гайд по собеседованиям. Вообще, у них куча годных постов и гайдов на любой вкус. Все найдете в закрепе. Подписывайся в элитный клуб плюсовиков: Грокаем С++

🤔 Какие есть модификаторы доступа? Есть модификаторы доступа, которые определяют, кто может использовать классы, методы и переменные. Они помогают скрыть внутренние детали кода и контролировать доступ к данным. 🚩Подробное объяснение с примерами 🟠`public` (Открытый доступ) Открытый доступ означает, что элемент можно использовать везде.
public class Car
{
    public string Model = "Tesla";
}

class Program
{
    static void Main()
    {
        Car car = new Car();
        Console.WriteLine(car.Model); // Доступ открыт
    }
}
🟠`private` (Только внутри класса) Самый закрытый модификатор. Поля и методы невидимы за пределами класса.
class Car
{
    private string model = "Tesla";

    private void PrintModel()
    {
        Console.WriteLine(model);
    }
}

class Program
{
    static void Main()
    {
        Car car = new Car();
        // car.model = "BMW";   Ошибка! Поле `model` — private
        // car.PrintModel();  Ошибка! Метод `PrintModel` — private
    }
}
🟠`protected` (Доступен в наследниках) Доступен только внутри класса и его наследников.
class Car
{
    protected string Model = "Tesla";
}

class ElectricCar : Car
{
    public void ShowModel()
    {
        Console.WriteLine(Model); //  Можно, потому что наследуемый класс
    }
}

class Program
{
    static void Main()
    {
        ElectricCar eCar = new ElectricCar();
        // eCar.Model  Ошибка! Поле `Model` доступно только в наследниках
    }
}
🟠`internal` (Только внутри проекта) Элементы с internal можно использовать только внутри одной сборки (проекта).
internal class Engine
{
    public void Start() => Console.WriteLine("Двигатель запущен");
}

class Program
{
    static void Main()
    {
        Engine engine = new Engine();
        engine.Start(); //  Работает, потому что внутри того же проекта
    }
}
🟠`protected internal` (В сборке и у наследников) Этот модификатор разрешает доступ внутри сборки, а также в классах-наследниках за её пределами.
public class Car
{
    protected internal string Model = "Tesla";
}

class ElectricCar : Car
{
    public void ShowModel()
    {
        Console.WriteLine(Model); //  Можно, потому что наследник
    }
}
🟠`private protected` (Только в классе и наследниках из той же сборки) Этот модификатор ещё жёстче, чем protected internal: - Доступ внутри класса – да - В наследниках – только внутри той же сборки - В других проектах – нет доступа!
class Car
{
    private protected string Model = "Tesla";
}

class ElectricCar : Car
{
    public void ShowModel()
    {
        Console.WriteLine(Model); //  Можно, потому что наследник в той же сборке
    }
}

class Program
{
    static void Main()
    {
        ElectricCar eCar = new ElectricCar();
        // eCar.Model  Ошибка! `Model` доступен только в наследниках из этой сборки
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🔥 Хотите узнать, как создавать мощные WebAPI с MongoDB и EF Core? Добро пожаловать на эксклюзивный открытый урок «Создание W
🔥 Хотите узнать, как создавать мощные WebAPI с MongoDB и EF Core?   Добро пожаловать на эксклюзивный открытый урок «Создание WebAPI с помощью EF Core и MongoDB»! 🚀 📗На бесплатном вебинаре вы узнаете: — Как работать с NoSQL-хранилищем MongoDB в реальных приложениях. — Новые возможности EF Core для интеграции с MongoDB. — Стандарты работы с MongoDB в .NET. 📅 Встречаемся 12 февраля в 🕗 20:00 мск. Этот урок - ваша возможность погрузиться в мир передовых технологий ASP.NET. А участники получат эксклюзивную скидку на обучение на курсе «C# ASP.NET Core разработчик». 🎓 Не упустите возможность!  Зарегистрируйтесь на открытый урок прямо сейчас: https://otus.pw/6pkQ/?erid=2W5zFJkXBtC  Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🤔 Где хранятся ссылочные типы? Ссылочные типы (reference types) хранятся в куче (heap), а их ссылки — в стеке. Примеры ссылочных типов: объекты классов, массивы, строки. При передаче ссылочного типа в метод передается ссылка на объект, а не сам объект. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое post? post чаще всего ассоциируется с HTTP POST-запросами, которые используются для отправки данных на сервер. Это один из основных методов HTTP-протокола наряду с GET, PUT, DELETE и другими. 🚩Основные понятия 🟠HTTP POST-запрос Метод HTTP, используемый для отправки данных на сервер. Обычно применяется для создания новых ресурсов или передачи данных, которые могут изменять состояние сервера. 🟠Отправка данных Данные могут быть отправлены в теле запроса в различных форматах, таких как JSON, XML или обычный текст. 🟠Использование в веб-приложениях POST-запросы широко используются в веб-приложениях для передачи данных от клиента к серверу, например, при отправке формы, загрузке файлов или выполнении AJAX-запросов. 🚩Пример использования HTTP POST-запроса Для выполнения HTTP POST-запроса в C# часто используется класс HttpClient, который предоставляет удобные методы для взаимодействия с веб-сервисами. 🚩Пример отправки JSON-данных 1⃣Настройка проекта Убедитесь, что в вашем проекте установлен пакет System.Net.Http (обычно он включен по умолчанию в .NET Core проектах). 2⃣Отправка POST-запроса
   using System;
   using System.Net.Http;
   using System.Text;
   using System.Threading.Tasks;

   class Program
   {
       static async Task Main(string[] args)
       {
           // Создаем HttpClient
           using (HttpClient client = new HttpClient())
           {
               // URL-адрес, на который отправляется запрос
               string url = "https://example.com/api/resource";

               // Данные для отправки
               var data = new
               {
                   Name = "John Doe",
                   Age = 30
               };

               // Сериализуем данные в JSON
               string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(data);

               // Создаем содержимое запроса
               StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");

               // Отправляем POST-запрос
               HttpResponseMessage response = await client.PostAsync(url, content);

               // Проверяем успешность ответа
               if (response.IsSuccessStatusCode)
               {
                   Console.WriteLine("Запрос выполнен успешно.");
               }
               else
               {
                   Console.WriteLine($"Ошибка: {response.StatusCode}");
               }
           }
       }
   }
   
Ставь 👍 и забирай 📚 Базу знаний

Repost from easyoffer
Привет, ребята! 1,5 года я учился на программиста, а сайт easyoffer.ru стал моим пет-проектом. Я создавал его, потому что: а)
Привет, ребята! 1,5 года я учился на программиста, а сайт easyoffer.ru стал моим пет-проектом. Я создавал его, потому что: а) нужно было добавить хоть какой-нибудь проект в резюме б) подготовиться к прохождению собесов И всё получилось! Благодаря еasyoffer я успешно прошёл собеседование и устроился Python Junior-разработчиком на удаленку с зарплатой 115 тысяч рублей. Однако ещё во время разработки я понял, что у этого проекта есть потенциал. Казалось, что сайт может стать популярным и, возможно, превратиться в стартап. По-этому я с самого начала заложил в проект минимальную бизнес-модель, на случай, если сайт начнёт набирать трафик. Я предложил пользователям полный доступ к сайту в обмен на подписку на Telegram-каналы. Это позволяло развивать аудиторию, а в будущем — зарабатывать на рекламе. Результат превзошёл ожидания! С момента запуска easyoffer посетило 400 тысяч человек. А когда доход с рекламы превысил мою зарплату программиста, я принял решение уйти с работы и полностью посвятить себя разработке новой версии сайта. Вот так, зайдя в IT, через 4 месяца вышел через свой же пет-проект. Мне очень повезло Уже год я работаю над easyoffer 2.0. Это будет более масштабный и качественной новый проект: – Появится тренажер – Появятся задачи из собесов – Фильтрация контента по грейдам и еще очень много фич, о которых я расскажу позже. Хочу, довести easyoffer до ума, чтобы сайт стал настоящим помощником для всех, кто готовится к собеседованиям. По этому в ближайшее время я объявлю о старте краудфандинговой кампании, чтобы ускорить разработку и я готов щедро отблагодарить всех, кто поддержит проект. А те, кто поддержат проект первыми, получат специальные лимитированные выгодные вознаграждения. Следите за этим телеграм каналом, если хотите стать первыми сапортерами.

🤔 Что такое значимые типы? Это типы данных, которые хранятся в стеке и передаются по значению. Примеры: int, float, struct. В отличие от ссылочных типов, значимые типы копируются при передаче в методы или присваивании. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Когда подрядчик тележится, добавляйте его в Коллабу Битрикс24 Коллабы – платформа для эффективной работы с подрядчиками. Тут
Когда подрядчик тележится, добавляйте его в Коллабу Битрикс24 Коллабы – платформа для эффективной работы с подрядчиками. Тут обсуждения превращаются в задачи, а видео созвон можно собрать одной кнопкой. Любой проект можно разложить по полочкам с понятным ТЗ и обозначенными сроками. Работайте в Битрикс24 и создавайте Коллабы с подрядчиками. Начать #реклама 16+ collabs.bitrix24.ru О рекламодателе

🤔 Что такое предикат? Это делегат, представляющий метод, который принимает один или несколько аргументов и возвращает логическое значение (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);   
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что значит изменить строку? Строки (string) являются неизменяемыми (immutable). Это значит, что при любом изменении строки создается новый объект в памяти. Например, при конкатенации строк или замене символов создается новая строка, а старая остается неизменной. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое lock-еры? lock используется для управления доступом к ресурсам в многопоточных приложениях. Это предотвращает возникновение проблем, связанных с одновременным доступом нескольких потоков к одному и тому же ресурсу, что может привести к непредсказуемому поведению или коррупции данных. 🚩Как это работает? Принимает в качестве параметра объект, который используется в качестве мьютекса (взаимоисключающего объекта). Во время выполнения блока кода внутри lock, текущий поток "захватывает" мьютекс. Если другой поток попытается войти в заблокированный участок кода, используя тот же мьютекс, он будет приостановлен до тех пор, пока первый поток не завершит выполнение блока lock и не освободит мьютекс.
public class Account
{
    private decimal balance;
    private readonly object balanceLock = new object();

    public void Deposit(decimal amount)
    {
        lock (balanceLock)
        {
            balance += amount;
        }
    }

    public void Withdraw(decimal amount)
    {
        lock (balanceLock)
        {
            if (balance >= amount)
            {
                balance -= amount;
            }
        }
    }
}
🚩Зачем это нужно? Без использования lock или других методов синхронизации, программы с многопоточным доступом к общим данным могут испытывать проблемы, такие как гонки и условия гонки (race conditions), когда порядок или время доступа к данным может привести к ошибкам или неожиданным результатам. lock гарантирует, что только один поток может исполнять определенный блок кода, работающий с критическими ресурсами, в любой момент времени. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое unsafe? Это модификатор, который позволяет выполнять небезопасный код, например, работать с указателями. Такой код может взаимодействовать с памятью напрямую, что требует повышенной осторожности. Для использования unsafe нужно разрешить эту опцию в настройках проекта. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как браузер отправляет запрос и получает ответ от API? Когда браузер отправляет запрос и получает ответ от API, это включает несколько шагов, которые следуют HTTP-протоколу. Этот процесс включает в себя создание и отправку HTTP-запроса, обработку на сервере и получение HTTP-ответа. 🚩Отправка запроса 🟠Инициация запроса Обычно запрос инициируется через JavaScript с использованием встроенных функций, таких как XMLHttpRequest, fetch или сторонние библиотеки, такие как Axios.
   fetch('https://api.example.com/data', {
       method: 'GET',
       headers: {
           'Content-Type': 'application/json',
           'Authorization': 'Bearer token'
       }
   })
   .then(response => response.json())
   .then(data => console.log(data))
   .catch(error => console.error('Error:', error));
   
🟠Формирование HTTP-запроса Метод: Указывает тип запроса (например, GET, POST, PUT, DELETE). URL: Указывает на какой URL отправляется запрос. Заголовки (Headers): Включают информацию о типе содержимого, авторизации и других метаданных. Тело (Body): Содержит данные, которые отправляются с запросом (для методов POST, PUT и PATCH). 🟠Отправка запроса Браузер использует сетевые протоколы для отправки сформированного HTTP-запроса на указанный сервер через интернет. 🚩Обработка запроса на сервере 1⃣Получение запроса Сервер получает HTTP-запрос. 2⃣Обработка запроса Сервер обрабатывает запрос, выполняя соответствующие действия, такие как чтение данных из базы данных, выполнение логики приложения или взаимодействие с другими сервисами. 3⃣Формирование ответа Статус код (Status Code): Указывает результат обработки запроса (например, 200 OK, 404 Not Found, 500 Internal Server Error). Заголовки (Headers): Могут включать метаданные о содержимом ответа, кэшировании и других параметрах. Тело (Body): Содержит данные, которые отправляются обратно клиенту, часто в формате JSON или XML.
   HTTP/1.1 200 OK
   Content-Type: application/json
   Content-Length: 85

   {
       "id": 1,
       "name": "Example",
       "description": "This is an example response"
   }
   
🚩Получение ответа 1⃣Получение ответа Браузер получает HTTP-ответ от сервера. 2⃣Обработка ответа Статус код: Браузер или JavaScript-код проверяет статус код, чтобы определить, был ли запрос успешным. Заголовки: Заголовки могут быть использованы для получения дополнительной информации о ответе. Тело: Браузер разбирает тело ответа, если это необходимо, например, преобразует JSON-данные в объект JavaScript. 3⃣Использование данных Полученные данные могут быть использованы в приложении для обновления интерфейса пользователя, хранения в локальном хранилище или выполнения других действий. 🚩Пример полного цикла запроса и ответа Отправка запроса
fetch('https://api.example.com/data', {
    method: 'GET',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer token'
    }
})
.then(response => {
    if (!response.ok) {
        throw new Error('Network response was not ok ' + response.statusText);
    }
    return response.json();
})
.then(data => {
    console.log('Data received:', data);
    // Используем данные для обновления UI или других целей
})
.catch(error => {
    console.error('There has been a problem with your fetch operation:', error);
});
Ставь 👍 и забирай 📚 Базу знаний