Библиотека собеса по C# | вопросы с собеседований
5.67K subscribers
210 photos
2 videos
1 file
186 links
Вопросы с собеседований по C# и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/4c2f1c3b

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Объясните модификаторы доступа в C#.

Ответ: Модификаторы доступа — это ключевые слова, которые определяют уровень доступности члена типа или самого типа. Например, открытый класс доступен всему миру, тогда как внутренний класс может быть доступен только сборке.
🏗️ Структуры данных для разработчиков: 10 самых важных

Структуры данных — фундамент эффективной разработки. Кратко разберем 10 ключевых структур данных, которые необходимо освоить каждому разработчику для создания производительных и масштабируемых приложений, а подробнее читайте в статье👇

🔹 Списки отлично подходят для хранения и обработки упорядоченных данных и полезны в различных приложениях, таких как управление задачами, ленты соцсетей и корзины интернет-магазинов.
🔹 Массивы — упорядоченная коллекция элементов фиксированного размера и хорошо подходят для ситуаций, где размер коллекции известен или редко меняется.
🔹 Стеки следуют принципу «последним пришел — первым вышел». Они идеальны для реализации операций отмены/повтора в текстовых редакторах или ведения истории просмотров в веб-браузерах.
🔹 Очереди работают по принципу «первым пришел — первым вышел». Они подходят для управления заданиями печати, отправки действий пользователя в играх на сервер или обработки сообщений в чат-приложениях.
🔹 Кучи используются для планирования задач и управления памятью. Они особенно полезны в реализации очередей с приоритетами, где нужен доступ к элементу с наивысшим или наименьшим приоритетом.
🔹 Деревья организуют данные иерархически. Они полезны для представления данных с естественными иерархиями или связями и могут использоваться в различных приложениях, таких как индексация баз данных.
🔹 Хеш-таблицы позволяют эффективно искать, вставлять и удалять данные. Они используют хеш-функцию для сопоставления ключей с соответствующими местами хранения и обеспечивают доступ к сохраненным значениям за постоянное время.
🔹 Суффиксные деревья специализируются на поиске строк в документах, что делает их идеальными для текстовых редакторов и алгоритмов поиска.
🔹 Графы отслеживают отношения и находят пути, что делает их незаменимыми в социальных сетях, рекомендательных системах и алгоритмах поиска путей.
🔹 KD-деревья хороши для поиска ближайших соседей и важны для картографических приложений и геолокационных сервисов.
const vs readonly

const — значение подставляется при компиляции => установить можно только до компиляции.

readonly — установить значение можно только до компиляции или в конструкторе.
Свойства LinkedList

Класс LinkedList определяет следующие свойства:

• Count: количество элементов в связанном списке;

• First: первый узел в списке в виде объекта LinkedListNode;

• Last: последний узел в списке в виде объекта LinkedListNode.
🛠️ API-документация без головной боли: ТОП-11 инструментов

Ручное создание документации отнимает много времени и чревато ошибками. Представляем подборку инструментов, которые автоматизируют процесс и помогут вам сосредоточиться на разработке, а не на написании документации.

🔗 Читать статью
Что такое глобальный кэш сборок в C#?

Глобальный кэш сборок (GAC) — это централизованный репозиторий или кэш для хранения и совместного использования сборок .NET (DLL) на машине. GAC является частью .NET Framework и используется для предотвращения конфликтов DLL и обеспечения параллельного выполнения различных версий одной и той же сборки.

Сборки, хранящиеся в GAC, должны иметь строгое имя, которое состоит из имени сборки, номера версии, информации о культуре (если применимо) и токена открытого ключа (сгенерированного из закрытого ключа разработчика). Это строгое имя позволяет GAC однозначно идентифицировать и управлять каждой сборкой и ее версиями.
Полезные методы для работы с датой

Метод ToLocalTime() преобразует время UTC в локальное время, добавляя смещение относительно времени по Гринвичу.

Метод ToUniversalTime(), наоборот, преобразует локальное время во время UTC, то есть вычитает смещение относительно времени по Гринвичу.

Остальные методы преобразуют дату к определенному формату.
🛠 Сага: эффективный шаблон микросервисной архитектуры

Полную бизнес-транзакцию, как правило, очень сложно описать с помощью одной транзакции в базе данных. Возьмем, к примеру, процесс покупки в онлайн-магазине — с момента нажатия кнопки «Купить» до момента доставки заказа к вашей двери происходит серия шагов:

🔸 Размещение заказа. Пользователь выбирает нужные товары, добавляет их в корзину и начинает процесс оформления заказа. Система сохраняет информацию о видах товаров, их количестве, имени заказчика, адресе и способе доставки.
🔸 Создание счета-фактуры. После размещения заказа создается счет-фактура, который служит основной записью о транзакции и используется для выставления счета и учета.
🔸 Обработка платежа. Инициируется процесс оплаты, пользователь предоставляет данные банковской карты или электронного кошелька. Оплата безопасно обрабатывается, и после успешного завершения заказ подтверждается.
🔸 Отправка товара. После обработки платежа заказ готовится к отправке: создается информация для отслеживания, система уведомляет пользователя об ориентировочной дате доставки.

Каждый из этих шагов включает взаимодействие с различными микросервисами — сервисов заказов, платежным сервисом и сервисом доставки. Для успешного и последовательного выполнения бизнес-транзакции важна безупречная координация всех частей системы. Эта задача кажется очень сложной, но к счастью, есть универсальный и надежный паттерн, который помогает выстроить взаимодействие микросервисов самым оптимальным образом — Сага. О нем и пойдет речь в статье.
Что такое управляемый или неуправляемый код?

Код, написанный с целью получения сервисов управляемой среды выполнения, такой как CLR (Common Language Runtime) в .NET Framework, называется управляемым кодом. Он всегда реализуется управляемой средой выполнения, а не выполняется напрямую операционной системой. Управляемая среда выполнения предоставляет различные типы служб, такие как сборка мусора, проверка типов, обработка исключений, проверка границ и т. д. для автоматического кода без вмешательства программиста. Он также обеспечивает выделение памяти, безопасность типов и т. д. для кода. Приложение, написанное на таких языках, как Java, C#, VB.Net и т. д., всегда нацелено на сервисы среды выполнения для управления выполнением, а код, написанный на этих типах языков, называется управляемым кодом.

Код, который напрямую выполняется операционной системой, называется неуправляемым кодом. Он всегда нацелен на архитектуру процессора и зависит от архитектуры компьютера. Когда этот код компилируется, он всегда стремится получить определенную архитектуру и всегда работает на этой платформе, другими словами, всякий раз, когда вы хотите выполнить тот же код для другой архитектуры, вам приходится перекомпилировать этот код снова в соответствии с этой архитектурой. Он всегда компилируется в нативный код, который специфичен для архитектуры.
❗️Задача для конкурса в честь дня программиста

Условие:

Даны две строки s и f (начальная и конечная) и словарь D (набор слов).

Нужно определить, можно ли преобразовать s в f, используя только слова из словаря D. При этом каждое преобразование должно менять только один символ, а длина слова должна оставаться неизменной. Если преобразование возможно, нужно найти кратчайшую последовательность таких преобразований и вернуть ее длину. Если преобразование невозможно, вернуть "Преобразование невозможно".

Пример ввода 1:
    D = ["cat", "cot", "dot", "dog", "bat", "dag"]
    s = "cat"
    t = "dog"

Вывод:
Минимальное количество шагов для преобразования 'cat' в 'dog': 3

Пример ввода 2:
    D = ["cat", "cot", "bat"]
    s = "cat"
    t = "dog"

Вывод:
Минимальное количество шагов для преобразования 'cat' в 'dog': Преобразование невозможно
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое анонимный тип в C#?

Анонимный тип позволяет пользователям создавать новый тип без необходимости его определения. Это способ определить свойства, доступные только для чтения, в одном объекте без явного определения типа.
Что такое индексаторы в C# .NET?

Индексаторы известны в C# как умные массивы. Это позволяет индексировать экземпляры класса так же, как и массив.
Как убрать тесную связь между двумя классами?

Путем введения интерфейсов между ними и использованием внедрения зависимостей.