ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

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

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

前往频道在 Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

显示更多
5 005
订阅者
-324 小时
-87 天
+430 天
帖子存档
🤔 Что такое DELETE? Это HTTP-метод, используемый для удаления ресурса на сервере. 1. Указывает серверу удалить указанный ресурс по заданному URL. 2. Также является идемпотентным, так как повторные вызовы не изменяют результат. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В какой момент отправляется запрос к базе данных? Запрос к базе данных отправляется в момент выполнения операций, которые требуют взаимодействия с базой данных. В контексте использования ORM, таких как Entity Framework, это происходит в определенные моменты, когда вы явно вызываете методы для сохранения изменений или выполнения запросов. 🚩Основные моменты отправки запросов к базе данных 🟠При вызове SaveChanges() Все изменения, сделанные в контексте (например, добавление, обновление, удаление объектов), отправляются в базу данных.
     using (var context = new AppDbContext())
     {
         var product = new Product { Name = "Example" };
         context.Products.Add(product);
         context.SaveChanges(); // Запрос к базе данных отправляется здесь
     }
     
🟠При выполнении LINQ-запросов с использованием методов, которые требуют данных из базы Методы, такие как ToList(), FirstOrDefault(), SingleOrDefault(), Count(), и другие, вызывают выполнение запроса к базе данных для получения данных.
     using (var context = new AppDbContext())
     {
         var products = context.Products.ToList(); // Запрос к базе данных отправляется здесь
     }
     
🟠При использовании методов асинхронного выполнения запросов Асинхронные методы, такие как SaveChangesAsync(), ToListAsync(), и другие, также отправляют запросы к базе данных.
     using (var context = new AppDbContext())
     {
         var product = new Product { Name = "Example" };
         context.Products.Add(product);
         await context.SaveChangesAsync(); // Запрос к базе данных отправляется здесь
     }
     
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое PUT? Это HTTP-метод, используемый для создания или полного обновления ресурса на сервере. 1. Если ресурс существует, он обновляется, а если нет — создаётся. 2. Это идемпотентный метод, что означает одинаковый результат при многократных вызовах с теми же данными. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое ORM? Это технология, которая позволяет автоматически связывать объекты в коде с таблицами в базе данных. Это упрощает работу с базой данных, позволяя разработчикам работать с данными как с объектами, а не писать сложные SQL-запросы. 🚩Плюсы ➕Упрощает работу с БД Позволяет использовать объектно-ориентированный подход. ➕Автоматизация запросов Генерирует SQL-запросы автоматически. ➕Поддержка транзакций Управляет транзакциями на уровне объектов. ➕Поддержка миграций Легко обновлять структуру БД через код. Пример с Entity Framework (C#)
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class AppDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }
}

// Использование
using (var context = new AppDbContext())
{
    var product = new Product { Name = "Example" };
    context.Products.Add(product);
    context.SaveChanges();
}
Ставь 👍 и забирай 📚 Базу знаний

🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и ав
+5
🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и автономных агентов, разбирает гайды, редкую литературу и код топовых моделей машинного обучения и искусственного интеллекта. В 2025 году ИИ выйдет на совершенно новый уровень тот, кто не успеет за прогрессом - отстанет, а кто разберется - сорвет куш. Стоит подписаться: t.me/ai_machinelearning_big_data

🤔 Где используются интерфейсы? Интерфейсы применяются для создания контракта, который классы должны реализовать. 1. Обеспечивают гибкость и модульность, позволяя использовать зависимости через абстракции. 2. Используются в многократной реализации, так как классы могут реализовывать несколько интерфейсов. 3. Позволяют писать тестируемый код за счёт внедрения зависимостей (Dependency Injection). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем используется библиотека Moq? Библиотека для создания заглушек (mock-объектов) в модульных тестах. Она позволяет изолировать тестируемый код от внешних зависимостей, таких как базы данных или веб-сервисы, упрощая и повышая надежность тестирования. 🚩Плюсы ➕Изоляция кода Изолирует тестируемый код от внешних зависимостей. ➕Упрощение тестирования Легко создавать заглушки и настраивать их поведение. ➕Проверка поведения Проверяет вызовы методов заглушек, параметры и частоту вызовов. 🚩Пример использования Интерфейс и класс
public interface IUserRepository
{
    User GetUserById(int id);
    void SaveUser(User user);
}

public class UserService
{
    private readonly IUserRepository _userRepository;

    public UserService(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    public void UpdateUser(int id, string newName)
    {
        var user = _userRepository.GetUserById(id);
        if (user == null) throw new ArgumentException("User not found");

        user.Name = newName;
        _userRepository.SaveUser(user);
    }
}

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}
Модульный тест с Moq
using Moq;
using Xunit;

public class UserServiceTests
{
    [Fact]
    public void UpdateUser_ShouldUpdateUserName()
    {
        // Arrange
        var mockRepository = new Mock<IUserRepository>();
        var user = new User { Id = 1, Name = "Old Name" };
        mockRepository.Setup(repo => repo.GetUserById(1)).Returns(user);

        var userService = new UserService(mockRepository.Object);

        // Act
        userService.UpdateUser(1, "New Name");

        // Assert
        Assert.Equal("New Name", user.Name);
        mockRepository.Verify(repo => repo.SaveUser(user), Times.Once);
    }

    [Fact]
    public void UpdateUser_ShouldThrowExceptionIfUserNotFound()
    {
        // Arrange
        var mockRepository = new Mock<IUserRepository>();
        mockRepository.Setup(repo => repo.GetUserById(1)).Returns((User)null);

        var userService = new UserService(mockRepository.Object);

        // Act & Assert
        Assert.Throws<ArgumentException>(() => userService.UpdateUser(1, "New Name"));
    }
}
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что такое куки и где оно хранится в запросе? Это небольшие фрагменты данных, которые веб-сайты сохраняют на устройствах пользователей для хранения информации о сессии и отслеживания состояния. Куки используются для различных целей, таких как аутентификация пользователей, хранение настроек и предпочтений, а также отслеживание активности пользователей на сайте. 🚩Основные свойства 🟠Имя (Name) Уникальный идентификатор для каждого куки. 🟠Значение (Value) Данные, которые хранит куки. 🟠Домен (Domain) Домен, для которого куки действителен. 🟠Путь (Path) Путь на сервере, для которого куки действителен. 🟠Время истечения (Expiration/Max-Age) Дата или время, когда куки должен быть удален. 🟠Безопасность (Secure) Указывает, что куки должны передаваться только через HTTPS. 🟠HTTPOnly Указывает, что куки недоступен через JavaScript, только через HTTP(S) запросы. 🚩Где хранятся 🟠Установка куки с сервера (Set-Cookie) Сервер отправляет куки в ответе на запрос клиента с использованием заголовка Set-Cookie.
   HTTP/1.1 200 OK
   Set-Cookie: sessionId=abc123; Path=/; Expires=Wed, 09 Jun 2023 10:18:14 GMT
   Content-Type: text/html
   
🟠Отправка куки клиентом (Cookie) Браузер автоматически добавляет соответствующие куки в заголовок Cookie при каждом последующем запросе к серверу, для которого эти куки действительны.
   GET /dashboard HTTP/1.1
   Host: example.com
   Cookie: sessionId=abc123
   
🚩Пример использования Установка куки на сервере (пример на Node.js с использованием Express)
const express = require('express');
const app = express();

app.get('/', (req, res) => {
    // Устанавливаем куки
    res.cookie('sessionId', 'abc123', { 
        maxAge: 900000, 
        httpOnly: true 
    });
    res.send('Куки установлены');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
Доступ к куки на клиенте (пример на JavaScript)
// Установка куки
document.cookie = "username=JohnDoe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/";

// Получение всех куки
let cookies = document.cookie;
console.log(cookies);
🚩Важные моменты 🟠Безопасность Куки с флагом Secure передаются только по HTTPS-соединениям. Куки с флагом HttpOnly недоступны через JavaScript, что помогает защитить их от XSS-атак. 🟠Размер и количество Обычно один куки не должен превышать 4KB, и на одном домене может быть установлено не более 20-30 куки. 🟠Конфиденциальность Куки могут содержать чувствительные данные, поэтому важно защищать их и использовать шифрование, если необходимо. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое .NET Core? Это кросс-платформенный фреймворк для разработки приложений. 1. Поддерживает Windows, macOS и Linux. 2. Легковесный, с открытым исходным кодом, предназначен для высокой производительности. 3. Подходит для разработки веб-приложений, облачных сервисов и микросервисов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие типы http запросов бывают и где в них передаются данные? HTTP-запросы делятся на несколько типов, каждый из которых предназначен для выполнения определенных операций. Основные типы HTTP-запросов включают GET, POST, PUT, DELETE, PATCH и другие. Данные в этих запросах могут передаваться через URL, заголовки или тело запроса в зависимости от типа запроса и его назначения. 🚩Основные типы 🟠GET Запрос для получения данных с сервера. Данные передаются в URL в виде параметров запроса.
GET /api/products?category=electronics&page=2 HTTP/1.1
Host: example.com     
🟠POST Запрос для отправки данных на сервер для создания ресурса. Данные передаются в теле запроса.
POST /api/products HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "New Product",
  "price": 19.99
}     
🟠PUT Запрос для отправки данных на сервер для обновления существующего ресурса. Данные передаются в теле запроса.
PUT /api/products/1 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "Updated Product",
  "price": 29.99
}     
🟠DELETE Запрос для удаления ресурса на сервере. Данные могут передаваться в URL или заголовках, но тело запроса обычно не используется.
DELETE /api/products/1 HTTP/1.1
Host: example.com     
🟠PATCH Запрос для частичного обновления ресурса на сервере. Данные передаются в теле запроса.
PATCH /api/products/1 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "price": 24.99
}     
🟠HEAD Запрос, аналогичный GET, но сервер возвращает только заголовки ответа без тела. Данные передаются в URL, как и в GET-запросе.
HEAD /api/products HTTP/1.1
Host: example.com     
🟠OPTIONS Запрос для получения поддерживаемых сервером методов HTTP для указанного ресурса. Данные передаются в URL.
OPTIONS /api/products HTTP/1.1
Host: example.com     
🚩Примеры использования в коде GET-запрос с использованием fetch API в JavaScript
fetch('https://example.com/api/products?category=electronics&page=2')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
POST-запрос с использованием fetch API в JavaScript
fetch('https://example.com/api/products', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'New Product',
    price: 19.99
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие минусы у микросервисов? 1. Сложность разработки: управление большим числом сервисов требует дополнительных инструментов. 2. Усложнение взаимодействия: требуется настройка API и их маршрутизации. 3. Трудности тестирования и деплоя: распределённые системы сложнее тестировать и синхронизировать. 4. Затраты на ресурсы: каждый сервис требует выделения собственных ресурсов, что увеличивает их потребление. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как работает Routing? Маршрутизация в ASP.NET Core сопоставляет URL-запросы с контроллерами и действиями. Определение маршрутов
public void Configure(IApplicationBuilder app)
{
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}
Пример контроллера
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

public class ProductsController : Controller
{
    public IActionResult Index() => View();
    public IActionResult Details(int id) => View();
}
Атрибуты маршрутизации
[Route("api/[controller]")]
public class ProductsController : Controller
{
    [HttpGet("{id}")]
    public IActionResult GetProduct(int id)
    {
        return View();
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие есть принципы 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). Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое DNS? DNS (Domain Name System) переводит доменные имена (например, www.example.com) в IP-адреса (например, 192.0.2.1), чтобы компьютеры могли общаться. 🚩Основные шаги 1⃣Запрос от клиента Браузер отправляет запрос к DNS-серверу. 2⃣Рекурсивный поиск DNS-сервер обращается к корневым, TLD и авторитетным серверам. 3⃣Ответ Авторитетный сервер возвращает IP-адрес. 4⃣Соединение Браузер использует IP-адрес для соединения с веб-сайтом. 🚩Виды DNS-записей 🟠A IPv4-адрес. 🟠AAAA IPv6-адрес. 🟠CNAME Псевдоним. 🟠MX Почтовый сервер. 🟠TXT Текстовые данные. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие есть виды полиморфизмов? 1. Компиляторный (статический): реализуется через перегрузку методов (overloading). 2. Исполнительный (динамический): достигается через переопределение методов (overriding) и виртуальные функции. 3. Полиморфизм позволяет обрабатывать объекты разных типов единообразно, например, через интерфейсы. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как браузер отправляет запрос и получает ответ от 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);
});
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какова концепция сборки мусора? Сборщик мусора (Garbage Collector, GC) автоматически освобождает память от объектов, на которые больше нет ссылок. 1. Поколения памяти: объекты делятся на поколения (0, 1, 2) для оптимизации очистки. 2. Триггер срабатывания: GC запускается при нехватке памяти или явным вызовом. 3. Сбор поколений: сначала очищаются молодые объекты (0 поколение), а затем старшие. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём преимущество блока using? Блок using используется для управления временем жизни объектов, которые потребляют неуправляемые ресурсы, такие как файлы, соединения с базой данных или сетевые соединения. Основное преимущество использования блока using заключается в автоматическом освобождении этих ресурсов, что помогает предотвратить утечки ресурсов и улучшить управление памятью. 🚩Основные преимущества блока 🟠Автоматическое освобождение ресурсов Блок using гарантирует, что метод Dispose() будет вызван автоматически, когда выполнение кода выйдет из блока using, даже если возникнет исключение. Это освобождает программиста от необходимости вручную вызывать Dispose() и уменьшает вероятность ошибок.
using (StreamReader reader = new StreamReader("file.txt"))
{
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}
// StreamReader автоматически закрывается и освобождает ресурсы после выхода из блока using.   
🟠Сокращение количества кода Использование блока using уменьшает количество необходимого кода для обеспечения правильного освобождения ресурсов.
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // Работа с базой данных
}
// SqlConnection автоматически закрывается и освобождает ресурсы после выхода из блока using.   
🟠Повышенная надежность Блок using повышает надежность кода, так как гарантирует, что ресурсы будут освобождены даже в случае возникновения исключений.
try
{
    using (StreamWriter writer = new StreamWriter("file.txt"))
    {
        writer.WriteLine("Hello, World!");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Произошла ошибка: {ex.Message}");
}
// StreamWriter автоматически закрывается и освобождает ресурсы после выхода из блока using, даже если произошла ошибка.   
🟠Чистый и понятный код Код, использующий блок using, выглядит более чистым и упрощает понимание и сопровождение.
using (MemoryStream memoryStream = new MemoryStream())
{
    // Работа с MemoryStream
}
// MemoryStream автоматически освобождается после выхода из блока using.   
🚩Пример использования блока `using` Работа с файлами
using System;
using System.IO;

class Program
{
    static void Main()
    {
        using (StreamReader reader = new StreamReader("example.txt"))
        {
            string content = reader.ReadToEnd();
            Console.WriteLine(content);
        }
        // StreamReader автоматически закрывается и освобождает ресурсы после выхода из блока using.
    }
}
Ставь 👍 и забирай 📚 Базу знаний