Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
В C# классы могут быть статическими (
static) и нестатическими (обычными). Разница в том, как они используются и хранят данные. Не могут создавать объекты (экземпляры)
Содержат только статические (
static) методы и поля Не могут наследоваться и не могут быть унаследованы
Используются для утилитарных методов, глобальных констант и вспомогательных функций
public static class MathHelper
{
public static int Square(int x) => x * x;
}
Использование
int result = MathHelper.Square(5); // 25
Можно создавать экземпляры (
new) Могут содержать как статические, так и нестатические члены
Можно наследовать от других классов
Используются для работы с данными
public class Car
{
public string Model { get; set; }
public void Drive()
{
Console.WriteLine($"{Model} едет!");
}
}
Использование
Car myCar = new Car { Model = "Tesla" };
myCar.Drive(); // Tesla едет!Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
- I/O-bound — задачи, основное время которых уходит на ожидание внешних операций: чтение файлов, запросы в сеть или базу данных.
Решение: использовать асинхронность, чтобы не блокировать поток.
- CPU-bound — задачи, требующие активных вычислений, загрузки процессора (например, шифрование, расчёты).
Решение: запускать на отдельных потоках или использовать параллелизм.
Знание разницы помогает выбрать стратегию оптимизации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
В ASP.NET Core жизненный цикл запроса проходит несколько этапов — от получения HTTP-запроса до отправки ответа. В этом процессе участвуют Middleware, контроллеры, фильтры и обработчики событий.
Получение запроса (
HttpContext создаётся) Обработка через Middleware (передача запроса вниз)
Маршрутизация (Routing) — определение контроллера
Фильтры (например, аутентификация)
Вызов контроллера и метода (
Action) Обратный проход через Middleware (формирование ответа)
Отправка ответа клиенту
Middleware — это основной механизм обработки запросов.
Где регистрируются? → В
Program.cs (в app.Use...) Методы Middleware
app.Use(async (context, next) =>
{
Console.WriteLine("Перед обработкой запроса");
await next(); // Передаём запрос дальше
Console.WriteLine("После обработки запроса");
});
Контроллер обрабатывает запросы после маршрутизации.
Основные методы
public class HomeController : Controller
{
// Метод вызывается при GET-запросе
public IActionResult Index()
{
return View();
}
// Метод вызывается при POST-запросе
[HttpPost]
public IActionResult SubmitForm(FormModel model)
{
return RedirectToAction("Index");
}
}
Фильтры выполняются до и после вызова контроллера.
Методы фильтров
public class MyActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
Console.WriteLine("Перед вызовом метода контроллера");
}
public void OnActionExecuted(ActionExecutedContext context)
{
Console.WriteLine("После вызова метода контроллера");
}
}
В ASP.NET Core 6+ вся конфигурация находится в
Program.cs. Методы инициализации
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews(); // Подключаем MVC
var app = builder.Build();
app.UseRouting(); // Включаем маршрутизацию
app.UseAuthorization(); // Проверка прав
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers(); // Подключаем контроллеры
});
app.Run();
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👀1💊1
1. Проверить необходимость всех join — убрать ненужные связи.
2. Использовать индексы — создать индексы на ключевых колонках.
3. Разделить запрос — разбить сложный запрос на несколько более простых.
4. Использовать denormalization — объединить часто используемые данные в одну таблицу.
5. Кэшировать данные — уменьшить нагрузку на базу данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍1
Метод Finalize() представляет собой специальный метод, который предназначен для выполнения финальной очистки ресурсов перед тем, как объект будет уничтожен сборщиком мусора. Это метод, который может быть определен в классе для очистки неуправляемых ресурсов, если класс не реализует интерфейс
IDisposable.Сборщик мусора автоматически вызывает
Finalize() на объекте, который не имеет других активных ссылок и который определяет финализатор. Это происходит непосредственно перед тем, как сборщик мусора освобождает память, занимаемую объектом.Все объекты наследуют от базового класса
Object, который предоставляет реализацию Finalize(). Однако в большинстве случаев Finalize() не имеет реализации и не делает ничего, пока не будет переопределен в производном классе.Наличие объектов с финализаторами может замедлить процесс сборки мусора, так как объекты, требующие финализации, должны быть обработаны дважды: сначала они помещаются в очередь финализации, а затем их память освобождается после выполнения
Finalize().class ResourceWrapper
{
// Конструктор
public ResourceWrapper() {
// Инициализация ресурсов
}
// Финализатор
~ResourceWrapper() {
// Код очистки ресурсов
}
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Forwarded from easyoffer
⏳ Осталось всего 14 дней до завершения краудфандинга
Сейчас самое подходящее время подключиться, если вы ждали или откладывали:
Все, кто поддержат проект сейчас, до релиза, получат:
🚀 PRO-доступ на 1 год по цене месячной подписки
➕ Бета-доступ к EasyOffer 2.0 (конец мая)
👉 Поддержать: https://planeta.ru/campaigns/easyoffer
Сейчас самое подходящее время подключиться, если вы ждали или откладывали:
Все, кто поддержат проект сейчас, до релиза, получат:
🚀 PRO-доступ на 1 год по цене месячной подписки
➕ Бета-доступ к EasyOffer 2.0 (конец мая)
👉 Поддержать: https://planeta.ru/campaigns/easyoffer
😁2🤯1👀1
Операторы в C# позволяют:
- Выполнять арифметические, логические и побитовые операции (+, -, &&, |, <<, ++).
- Сравнивать значения (==, !=, >, <).
- Управлять потоком исполнения (??, ?:, is, as, await).
- Создавать собственные операторы перегрузки (например, operator + для собственного класса).
Операторы — важная часть языка, они позволяют делать код лаконичным, выразительным и типобезопасным.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔4❤1😁1🤯1
Тестирование программного обеспечения включает планирование тестов, их выполнение для проверки функциональности и других аспектов, а отладка занимается устранением найденных в ходе тестирования ошибок через анализ кода и логов.
Visual Studio предоставляет мощные инструменты отладки. Основные возможности включают установку точек останова (breakpoints), пошаговое выполнение кода (step over, step into, step out), просмотр значений переменных и выражений.
Для вывода отладочной информации можно использовать классы
Debug и Trace из пространства имен System.Diagnostics. using System.Diagnostics;
public class Program
{
public static void Main()
{
Debug.WriteLine("This is a debug message.");
Trace.WriteLine("This is a trace message.");
}
}
Использование журналирования позволяет записывать события и ошибки во время выполнения приложения. В .NET Core и ASP.NET Core используется встроенная система логирования.
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Executing Index method");
return View();
}
}
В случае критических ошибок можно анализировать дампы памяти для диагностики проблем. Используйте WinDbg или Visual Studio для анализа дампов.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
1. Явное (explicit) — требует указания типа вручную. Может привести к ошибке времени выполнения.
2. Неявное (implicit) — происходит автоматически, когда не теряется информация.
3. Пользовательское (custom) — через оператор operator или as/is.
4. Boxing/Unboxing — упаковка значимых типов в объект и обратно.
5. Приведение интерфейсов/наследования — преобразование к базовому или интерфейсному типу.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Привязка данных (Data Binding) — это механизм, который позволяет автоматически синхронизировать данные между источником (например, моделью) и интерфейсом (например, элементами UI).
Данные идут только в одном направлении: из модели в UI.
- Для вывода данных, которые не должны изменяться пользователем
- Например, для отображения текущего времени
Пример в WPF
<TextBlock Text="{Binding UserName}" />Данные синхронизируются в обе стороны: UI ↔️ Модель
- В формах ввода (например,
TextBox), чтобы обновлять данные в модели - Используется в MVVM
Пример в WPF
<TextBox Text="{Binding UserName, Mode=TwoWay}" />Позволяет связывать UI с методами обработки событий.
- Для обработки кнопок (
Button.Click) - В реактивных фреймворках (Blazor, WinForms)
Пример в Blazor
<button @onclick="IncrementCount">Добавить</button>
@code {
private int count = 0;
private void IncrementCount() => count++;
}
Используется в паттерне MVVM вместо событий
- В WPF и Xamarin
- Позволяет отделить логику от UI
Пример в WPF
<Button Content="Сохранить" Command="{Binding SaveCommand}" />Позволяет привязывать списки к элементам UI (ListBox, DataGrid)
- В списках, таблицах, дропдаунах
Пример в WPF
<ListBox ItemsSource="{Binding Users}" DisplayMemberPath="Name" />Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Можно, но не рекомендуется. Строки могут быть разделяемыми между разными частями программы, даже если они написаны одинаково. Это может привести к неожиданным блокировкам. Лучше использовать уникальные объекты, специально созданные для блокировки.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Forwarded from easyoffer
🎉 Easyoffer 2.0 — самый успешный краудфандинг в истории рунета в категории "Технологии"!
Мы это сделали! За считанные часы после старта, благодаря вашей поддержке, проект не просто стартовал — он взлетел.
💸 Собрано: 2 276 840 рублей
Это не просто цифра — это ваше доверие, ваша вера в идею, и ваша инвестиция в будущее карьеры сотен (а скоро — тысяч) специалистов.
💼 Благодаря этой сумме мы уже:
— Наняли ещё пару разработчиков и аналитиков
— Запустили активный сбор и разметку новых данных
— Ускорили разработку и подняли планку качества
Спасибо каждому, кто поверил в нас на старте! Дальше — только масштабирование и развитие. Мы строим сервис, который станет must-have для всех, кто ищет работу в IT.
👉 Присоединяйтесь сейчас — это только начало.
Мы это сделали! За считанные часы после старта, благодаря вашей поддержке, проект не просто стартовал — он взлетел.
💸 Собрано: 2 276 840 рублей
Это не просто цифра — это ваше доверие, ваша вера в идею, и ваша инвестиция в будущее карьеры сотен (а скоро — тысяч) специалистов.
💼 Благодаря этой сумме мы уже:
— Наняли ещё пару разработчиков и аналитиков
— Запустили активный сбор и разметку новых данных
— Ускорили разработку и подняли планку качества
Спасибо каждому, кто поверил в нас на старте! Дальше — только масштабирование и развитие. Мы строим сервис, который станет must-have для всех, кто ищет работу в IT.
👉 Присоединяйтесь сейчас — это только начало.
В C# строки (
string) являются ссылочным типом, но ведут себя как значимый тип из-за своей неизменяемости (immutability).В C# все классы (
class) – ссылочные типы, и string не исключение. - Переменная
string хранит ссылку на объект в памяти, а не сам текст. - Две переменные могут ссылаться на один и тот же объект.
string str1 = "Hello";
string str2 = str1; // str2 теперь указывает на тот же объект, что и str1
Console.WriteLine(object.ReferenceEquals(str1, str2)); // True
Хотя
string – ссылочный тип, каждое изменение строки создаёт новый объект в памяти, а не модифицирует существующий.string str = "Hello";
str += " World"; // Создаётся новый объект в памяти
Неизменяемость (Immutability) – строка не меняется после создания.
Операции со строками создают новые объекты (как копирование значимых типов).
Сравнение строк по значению (
==), а не по ссылке (как у ссылочных типов). 1210 string s1 = "hello";
string s2 = "hello";
Console.WriteLine(s1 == s2); // True (сравниваются значения, а не ссылки)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
2. Сервер обрабатывает запрос, взаимодействует с API и возвращает HTTP-ответ с данными или кодом состояния.
3. Ответ содержит тело, заголовки и статус выполнения запроса.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Делегат (
delegate) — это указатель на метод(ы). Он может хранить: 1. Ссылку на один метод (одиночный делегат)
2. Ссылки на несколько методов (групповой делегат / multicast)
3. Анонимные методы и лямбда-выражения
Делегаты позволяют вызвать метод, даже если его имя заранее неизвестно.
Пример с одиночным делегатом
public delegate void MyDelegate(string message); // Объявляем делегат
public class Program
{
public static void ShowMessage(string msg) => Console.WriteLine($"Сообщение: {msg}");
public static void Main()
{
MyDelegate del = ShowMessage; // Делегат хранит ссылку на метод
del("Привет, делегаты!"); // Вызывает ShowMessage
}
}
Делегаты можно связывать с несколькими методами с помощью
+=. Пример группового делегата public delegate void MyDelegate(string message);
public class Program
{
public static void Method1(string msg) => Console.WriteLine($"Метод 1: {msg}");
public static void Method2(string msg) => Console.WriteLine($"Метод 2: {msg}");
public static void Main()
{
MyDelegate del = Method1;
del += Method2; // Добавляем второй метод
del("Привет!");
// Выведет:
// Метод 1: Привет!
// Метод 2: Привет!
}
}
Делегаты могут хранить "встроенные" методы (без отдельного определения).
Пример с анонимным методом
MyDelegate del = delegate (string msg)
{
Console.WriteLine($"Анонимный метод: {msg}");
};
del("Привет!");
Пример с лямбда-выражением
MyDelegate del = msg => Console.WriteLine($"Лямбда: {msg}");
del("Привет!");Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Forwarded from easyoffer
Что такое PRO-подписка на easyoffer 2.0?
easyoffer PRO — это не просто доступ к базе, а полноценный инструмент для получения оффера.
🧠 База вопросов с собеседований
+ Анализ на основе 4,000 собеседований
+ Вероятность встречи каждого вопроса
+ Фильтрация по грейдам, компаниям, типам интервью
+ Примеры ответов: текстовые и видео
+ Готовьтесь к собеседованию в конкретную компанию
🛠 Тренажер "Проработка вопросов"
+ Флеш-карточки + интервальные повторения
+ Персональная система показа карточек в зависимости от ваших ответов
+ Упор на наиболее частые вопросы
+ Фокус на слабые места и быстрый прогресс
🎭 Тренажер "Реальное собеседование"
+ Сценарии на основе реальных интервью
+ Подготовка к конкретным компаниям
+ Итоговая статистика: прошёл/не прошёл
🧩 База задач с собеседований
+ Live-coding и System Design задачи
+ Оценка вероятности встречи задачи
+ Подготовка к задачам по конкретным компаниям
📋 База тестовых заданий
+ Задания из реальных вакансий
+ Фильтрация по технологиям и грейдам
+ Лучшие решения в доступе
📈 Тренды технологий в вакансиях
+ Топ-100 навыков, которые требуют компании
+ Динамика популярности технологий
+ Фильтрация по грейдам
🎁 Специальная цена до релиза:
3200 руб. за целый год
Сейчас PRO на 1 год стоит как будет стоить 1 месяц после релиза. Покупка также открывает доступ к закрытому бета-тестированию.
+ Вы можете активировать подписку в любой момент, например, когда начнете искать работу.
Предзаказ здесь: https://planeta.ru/campaigns/easyoffer
📌 Цена поднимется сразу после запуска.
Если вы хотите перестать угадывать, что спросят на собеседовании, и начать точечно готовиться на основе реальных данных — easyoffer PRO именно для вас.
Экономьте время. Получайте оффер легко.
easyoffer PRO — это не просто доступ к базе, а полноценный инструмент для получения оффера.
🧠 База вопросов с собеседований
+ Анализ на основе 4,000 собеседований
+ Вероятность встречи каждого вопроса
+ Фильтрация по грейдам, компаниям, типам интервью
+ Примеры ответов: текстовые и видео
+ Готовьтесь к собеседованию в конкретную компанию
🛠 Тренажер "Проработка вопросов"
+ Флеш-карточки + интервальные повторения
+ Персональная система показа карточек в зависимости от ваших ответов
+ Упор на наиболее частые вопросы
+ Фокус на слабые места и быстрый прогресс
🎭 Тренажер "Реальное собеседование"
+ Сценарии на основе реальных интервью
+ Подготовка к конкретным компаниям
+ Итоговая статистика: прошёл/не прошёл
🧩 База задач с собеседований
+ Live-coding и System Design задачи
+ Оценка вероятности встречи задачи
+ Подготовка к задачам по конкретным компаниям
📋 База тестовых заданий
+ Задания из реальных вакансий
+ Фильтрация по технологиям и грейдам
+ Лучшие решения в доступе
📈 Тренды технологий в вакансиях
+ Топ-100 навыков, которые требуют компании
+ Динамика популярности технологий
+ Фильтрация по грейдам
🎁 Специальная цена до релиза:
3200 руб. за целый год
Сейчас PRO на 1 год стоит как будет стоить 1 месяц после релиза. Покупка также открывает доступ к закрытому бета-тестированию.
+ Вы можете активировать подписку в любой момент, например, когда начнете искать работу.
Предзаказ здесь: https://planeta.ru/campaigns/easyoffer
📌 Цена поднимется сразу после запуска.
Если вы хотите перестать угадывать, что спросят на собеседовании, и начать точечно готовиться на основе реальных данных — easyoffer PRO именно для вас.
Экономьте время. Получайте оффер легко.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Entity Framework Core (EF Core) — это ORM (Object-Relational Mapping), которая упрощает работу с базой данных в C#.
Основные подходы работы с EF Core:
Code First (Код → База)
Database First (База → Код)
Model First (Модель → База → Код)
Сначала создаётся код (C# классы), а база данных создаётся автоматически.
Если у нас нет готовой базы данных
Когда разрабатываем с нуля
Легче вносить изменения через миграции
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer("Server=.;Database=TestDb;Trusted_Connection=True;");
}
dotnet ef migrations add InitialCreate
dotnet ef database update
База данных уже есть → EF Core генерирует код (модели, DbContext).
Когда уже существует база
Когда работаете с наследуемой системой
Как сгенерировать модели из базы?
dotnet ef dbcontext scaffold "Server=.;Database=TestDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
Создаём модель (визуально), потом генерируем базу и код.
Не поддерживается в EF Core! (была в EF 6)
В старых проектах (EF 6) с визуальным проектированием
Когда нужна автогенерация схемы БД
Используйте Code First с миграциями вместо Model First.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1💊1
Индексы позволяют базе данных быстрее находить и фильтровать данные за счет создания упорядоченной структуры. Вместо полного сканирования таблицы база данных может использовать индекс, чтобы сразу перейти к нужным записям, что значительно ускоряет выполнение запроса. Однако индексы занимают дополнительное место и могут замедлять операции вставки и обновления данных, так как индексы нужно поддерживать в актуальном состоянии.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3💊2