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

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

Kanalga Telegram’da o‘tish
5 042
Obunachilar
-624 soatlar
-167 kunlar
-3030 kunlar
Postlar arxiv
🤔 Зачем нужен Git? Это система контроля версий, которая позволяет отслеживать изменения в коде, сотрудничать в командах и управлять проектами. 1. Она сохраняет историю изменений и упрощает возврат к предыдущим версиям. 2. Обеспечивает возможность ветвления и слияния для параллельной разработки. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое static? Static - это ключевое слово, которое используется для объявления статических членов в классе. Статические члены принадлежат самому классу, а не его экземплярам. 🚩Основные моменты использования 🟠Поля Статические поля объявляются с использованием ключевого слова static и принадлежат классу в целом. Все экземпляры класса разделяют одно и то же статическое поле.
public class Example
{
     public static int Counter;
}

// Доступ к статическому полю
Example.Counter = 10;
Console.WriteLine(Example.Counter); // Выведет 10
🟠Методы Статические методы могут быть вызваны без создания экземпляра класса. Статические методы могут обращаться только к другим статическим членам класса.
public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// Вызов статического метода
int sum = Calculator.Add(5, 3);
Console.WriteLine(sum); // Выведет 8
🟠Свойства Статические свойства похожи на статические поля, но с доступом через методы get и set.
public class Configuration
{
    private static string _setting;

    public static string Setting
    {
        get { return _setting; }
        set { _setting = value; }
    }
}

// Доступ к статическому свойству
Configuration.Setting = "My Setting";
Console.WriteLine(Configuration.Setting); // Выведет "My Setting"
🟠Конструкторы Статические конструкторы используются для инициализации статических членов класса. Они вызываются один раз при первом обращении к статическим членам.
public class Database
{
    public static string ConnectionString;

    static Database()
    {
        ConnectionString = "Initial Catalog=myDatabase;Data Source=myServer;";
    }
}

// При первом доступе вызывается статический конструктор
Console.WriteLine(Database.ConnectionString); // Выведет строку подключения
🚩Зачем нужен? 🟠Общие данные и функции: Статические члены полезны для хранения данных или функций, которые должны быть общими для всех экземпляров класса. 🟠Упрощение доступа: Позволяет вызывать методы и свойства без необходимости создавать экземпляр класса. 🟠Инициализация ресурсов: Статические конструкторы полезны для инициализации ресурсов или настройки параметров, необходимых для работы класса. 🚩Ограничения 🟠Статические методы не могут обращаться к нестатическим членам напрямую, так как у них нет доступа к экземпляру класса. 🟠Статические конструкторы не могут иметь параметры и вызываются автоматически при первом обращении к классу. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие бывают самые популярные коды ошибок в HTTP? 1. 400 Bad Request: запрос клиента некорректен. 2. 401 Unauthorized: требуется аутентификация. 3. 403 Forbidden: доступ запрещён. 4. 404 Not Found: ресурс не найден. 5. 500 Internal Server Error: ошибка на стороне сервера. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое события? Это механизм, который позволяет объектам уведомлять другие объекты о том, что произошло определенное действие. Это важная часть паттерна "наблюдатель" (observer pattern), который используется для реализации асинхронного взаимодействия между объектами. 🚩Основные компоненты событий 🟠Делегаты Делегаты определяют сигнатуру методов, которые могут быть вызваны при возникновении события. 🟠События События — это специальные делегаты, которые могут быть вызваны для уведомления подписчиков о происходящем действии. 🟠Подписчики Объекты, которые подписаны на событие и реагируют на его вызов. 🚩Пример использования событий Определение делегата и события
public class Publisher
{
    // Определение делегата
    public delegate void NotifyEventHandler(object sender, EventArgs e);

    // Определение события на основе делегата
    public event NotifyEventHandler Notify;

    // Метод, вызывающий событие
    public void RaiseEvent()
    {
        if (Notify != null)
        {
            Notify(this, EventArgs.Empty);
        }
    }
}
Подписка на событие и обработчик события
public class Subscriber
{
    public void OnNotify(object sender, EventArgs e)
    {
        Console.WriteLine("Получено уведомление о событии.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Publisher publisher = new Publisher();
        Subscriber subscriber = new Subscriber();

        // Подписка на событие
        publisher.Notify += subscriber.OnNotify;

        // Вызов события
        publisher.RaiseEvent();
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое 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 Текстовые данные. Ставь 👍 и забирай 📚 Базу знаний