#Собес #postgres
🤔 Что такое Foreign Key (внешний ключ) в PostgreSQL?
Foreign Key - это ограничение в PostgreSQL, которое гарантирует целостность данных между двумя таблицами. Он связывает столбец одной таблицы с первичным ключом другой, обеспечивая, что все значения во внешнем ключе существуют в связанной таблице.
👉 Новости 👉 База вопросов
Foreign Key - это ограничение в PostgreSQL, которое гарантирует целостность данных между двумя таблицами. Он связывает столбец одной таблицы с первичным ключом другой, обеспечивая, что все значения во внешнем ключе существуют в связанной таблице.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🛞 Хочешь отслеживать изменения в базе данных в реальном времени?
Я реализовал Change Data Capture (CDC) в .NET с использованием Debezium, PostgreSQL и RabbitMQ.
Поток обработки:
🟠 PostgreSQL настроен на генерацию событий об изменениях
🟠 Debezium перехватывает эти изменения
🟠 События публикуются в RabbitMQ
🟠 MassTransit в .NET потребляет и обрабатывает их
Это лишь один из способов реализации архитектуры, основанной на событиях (Event-Driven Architecture).
Если ты проектируешь распределённые системы в .NET — вот полный гайд по созданию event-driven-систем с RabbitMQ
👉 Новости 👉 База вопросов
Я реализовал Change Data Capture (CDC) в .NET с использованием Debezium, PostgreSQL и RabbitMQ.
Поток обработки:
Это лишь один из способов реализации архитектуры, основанной на событиях (Event-Driven Architecture).
Если ты проектируешь распределённые системы в .NET — вот полный гайд по созданию event-driven-систем с RabbitMQ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
😜 Видишь баг?
9 из 10 разработчиков пропускают его. Проверь себя
Проблема:
>
> Если
Решение:
✅ Явно оборачивай все такие команды в транзакцию вручную
Мелочь, а последствия могут быть серьёзные
👉 Новости 👉 База вопросов
9 из 10 разработчиков пропускают его. Проверь себя
Проблема:
>
ExecuteUpdateAsync и ExecuteDeleteAsync обходят Change Tracker в EF Core> Если
SaveChangesAsync() потом упадёт — обновления в базе не откатятся автоматическиРешение:
Мелочь, а последствия могут быть серьёзные
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🤯1
#полезное
😜 5 недооценённых LINQ-методов, которые мгновенно улучшают твой код:
1⃣
2⃣
3⃣
4⃣
5⃣
Бонус, который почти попал в топ:
🟠
🟠
🟠
🟠
🟠
LINQ — кладезь полезных методов, если знаешь, где копать
👉 Новости 👉 База вопросов
Zip — объединяет две последовательности в парыChunk — разбивает коллекцию на чанки фиксированного размераOfType<T>() — фильтрует элементы по типуDistinctBy — возвращает уникальные элементы по заданному ключуSelectMany — разворачивает вложенные коллекции в плоский списокБонус, который почти попал в топ:
SequenceEqual — сравнивает две коллекции на равенствоAggregate — накапливает значение с помощью функции (reduce)GroupJoin — объединяет по группам (аналог LEFT OUTER JOIN)ToLookup — создает коллекцию, похожую на Dictionary, но с множеством значенийIntersect — возвращает пересечение двух коллекцийLINQ — кладезь полезных методов, если знаешь, где копать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #postgres
🤔 Что такое EXPLAIN в PostgreSQL?
EXPLAIN — это команда в PostgreSQL, которая показывает план выполнения запроса. Она помогает увидеть, как PostgreSQL планирует обрабатывать запрос, какие индексы используются и сколько времени займет выполнение каждого шага.
👉 Новости 👉 База вопросов
EXPLAIN — это команда в PostgreSQL, которая показывает план выполнения запроса. Она помогает увидеть, как PostgreSQL планирует обрабатывать запрос, какие индексы используются и сколько времени займет выполнение каждого шага.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 Визуализатор планов SQL-запросов для Entity Framework
Расширение EFCore.Visualizer для Visual Studio может стать настоящим прорывом.
Оно позволяет разработчикам просматривать план выполнения SQL-запросов напрямую внутри Visual Studio.
👉 Новости 👉 База вопросов
Расширение EFCore.Visualizer для Visual Studio может стать настоящим прорывом.
Оно позволяет разработчикам просматривать план выполнения SQL-запросов напрямую внутри Visual Studio.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰2
#полезное
😊 В .NET 10 появится
Теперь разработчики смогут удобно генерировать бесконечные последовательности как в синхронном, так и в асинхронном виде.
Гитхаб
👉 Новости 👉 База вопросов
{Async}Enumerable.{Infinite}SequenceТеперь разработчики смогут удобно генерировать бесконечные последовательности как в синхронном, так и в асинхронном виде.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #postgres
🤔 Что такое триггеры (Triggers) в PostgreSQL?
Триггер - это специальная функция, которая автоматически выполняется при определенных событиях в таблице, например, при вставке, обновлении или удалении данных. Они используются для проверки данных, поддержания целостности или логирования изменений.
👉 Новости 👉 База вопросов
Триггер - это специальная функция, которая автоматически выполняется при определенных событиях в таблице, например, при вставке, обновлении или удалении данных. Они используются для проверки данных, поддержания целостности или логирования изменений.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😐 В .NET 10, который выйдет в ноябре этого года, значительно оптимизируют работу с небольшими массивами
Если JIT-компилятор определяет, что массив достаточно мал и не выходит за пределы области видимости метода, он размещает его в стеке, а не в куче. Это означает, что память не аллоцируется в heap, GC не задействуется, а производительность повышается почти в два раза.
Например, в .NET 9 массив из 11 элементов занимал 72 байта и выполнялся за 7.7 наносекунды. В .NET 10 те же данные, но 0 байт аллокации и всего 3.9 наносекунды. И самое главное это работает автоматически
👉 Новости 👉 База вопросов
Если JIT-компилятор определяет, что массив достаточно мал и не выходит за пределы области видимости метода, он размещает его в стеке, а не в куче. Это означает, что память не аллоцируется в heap, GC не задействуется, а производительность повышается почти в два раза.
Например, в .NET 9 массив из 11 элементов занимал 72 байта и выполнялся за 7.7 наносекунды. В .NET 10 те же данные, но 0 байт аллокации и всего 3.9 наносекунды. И самое главное это работает автоматически
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
👋 Стриминговые API в C# — используй
🟠 Производители используют
🟠 Потребители читают данные через
Зачем нужны стриминговые API?
В отличие от bulk-передачи, стриминг отправляет данные пакетами.
Сколько и когда передавать — зависит от кода, создающего
Параметр
Где особенно полезно:
1⃣ Отправка больших (или даже бесконечных) наборов данных
Пример: поливать сад из шланга вместо таскания вёдер с водой.
Вёдра тяжелее (ресурсоёмко) и требуют ожидания (блокировка).
2⃣ Получение внешних данных — API, IoT-сенсоры, очереди сообщений
Когда нельзя предсказать, когда будет готов следующий элемент —
3⃣ Снижение потребления памяти
Данные проходят потоком и не накапливаются в памяти целиком.
👉 Новости 👉 База вопросов
IAsyncEnumerableIAsyncEnumerable оптимизирован для потоковой передачи данных и полностью совместим с async/await.IAsyncEnumerable<T> с yield returnawait foreachЗачем нужны стриминговые API?
В отличие от bulk-передачи, стриминг отправляет данные пакетами.
Сколько и когда передавать — зависит от кода, создающего
IAsyncEnumerable.Параметр
T задаёт тип элемента, который будет возвращаться в потоке.Где особенно полезно:
Пример: поливать сад из шланга вместо таскания вёдер с водой.
Вёдра тяжелее (ресурсоёмко) и требуют ожидания (блокировка).
Когда нельзя предсказать, когда будет готов следующий элемент —
IAsyncEnumerable идеально подходит.Данные проходят потоком и не накапливаются в памяти целиком.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
❤️🔥 Рекомендуемые расширения для работы с Copilot prompt-файлами:
🟠 File Explorer for Visual Studio — даёт доступ к prompt-файлам прямо внутри Visual Studio.
🟠 Open in Visual Studio Code — позволяет удобно создавать и редактировать prompt-файлы во внешнем редакторе (VS Code)
👉 Новости 👉 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #CSharp
🤔 Как организовывалось взаимодействие между микросервисами (REST API, брокеры сообщений) ?
Для синхронных операций использовали REST/gRPC: сервисы запрашивали данные друг у друга по НТТР или НТТР/2. Для асинхронных процессов - RabbitMQ или Kafka: публиковали события (OrderCreated) и слушали клиенты. REST подходит для прямых запросов с ожиданием ответа, брокеры - для фоновых задач, рассылок и обеспечения eventual consistency.
👉 Новости 👉 База вопросов
Для синхронных операций использовали REST/gRPC: сервисы запрашивали данные друг у друга по НТТР или НТТР/2. Для асинхронных процессов - RabbitMQ или Kafka: публиковали события (OrderCreated) и слушали клиенты. REST подходит для прямых запросов с ожиданием ответа, брокеры - для фоновых задач, рассылок и обеспечения eventual consistency.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👨💻 Временные сложности различных структур данных
Big O-нотация описывает, как производительность алгоритма растёт относительно размера входных данных (n). Она используется для оценки эффективности алгоритмов вне зависимости от оборудования или языка программирования.
👉 Новости 👉 База вопросов
Big O-нотация описывает, как производительность алгоритма растёт относительно размера входных данных (n). Она используется для оценки эффективности алгоритмов вне зависимости от оборудования или языка программирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
🤓 В VS Code Insiders теперь по умолчанию включён IntelliSense в терминале
Попробуй — ты получишь плавные и динамичные подсказки прямо в терминале, например, при переключении на другую ветку
👉 Новости 👉 База вопросов
Попробуй — ты получишь плавные и динамичные подсказки прямо в терминале, например, при переключении на другую ветку
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😎 Это может быть полезно
WhatItPrints — это браузерная головоломка для разработчиков
Тебе показывают фрагмент кода, а ты должен угадать, что он выведет.
Поддерживает разные языки, включая C#, так что отлично прокачивает:
🟠 понимание синтаксиса
🟠 поведение компилятора
🟠 нюансы типов, LINQ, boxing/unboxing и т.п.
👉 Новости 👉 База вопросов
WhatItPrints — это браузерная головоломка для разработчиков
Тебе показывают фрагмент кода, а ты должен угадать, что он выведет.
Поддерживает разные языки, включая C#, так что отлично прокачивает:
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #CSharp
🤔 Какова сложность доступа к элементу по индексу в List ‹Т› и почему?
Доступ по индексу к
👉 Новости 👉 База вопросов
Доступ по индексу к
List‹T› выполняется за время О (1) - константное. Это происходит потому, что List<T› хранит элементы в непрерывном массиве, и обращение по индексу сводится к вычислению адреса памяти base + index * sizeof(T) и чтению значения.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😵💫 Трудно отследить, что происходит внутри твоего .NET-приложения?
Вот базовая настройка OpenTelemetry, которую я использую в каждом проекте:
- ASP .NET Core instrumentation
- HttpClient instrumentation
- EF Core instrumentation
- Redis instrumentation
- Npgsql (или SqlClient)
Это даёт полноценные, сквозные трассировки — и всё это быстро.
Для визуализации можно использовать:
- Seq
- Jaeger
- Grafana
- Aspire Dashboard
Seq также поддерживает структурированные логи, что хорошо сочетается с трассировкой.
Вот практическое руководство: ссылка
👉 Новости 👉 База вопросов
Вот базовая настройка OpenTelemetry, которую я использую в каждом проекте:
- ASP .NET Core instrumentation
- HttpClient instrumentation
- EF Core instrumentation
- Redis instrumentation
- Npgsql (или SqlClient)
Это даёт полноценные, сквозные трассировки — и всё это быстро.
Для визуализации можно использовать:
- Seq
- Jaeger
- Grafana
- Aspire Dashboard
Seq также поддерживает структурированные логи, что хорошо сочетается с трассировкой.
Вот практическое руководство: ссылка
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👨💻 Самая большая ошибка джуниоров? Игнорировать SQL.
Невозможно по-настоящему понять, как работают базы данных, если полагаться только на ORM.
Реляционные базы данных существуют уже более 40 лет и не просто так.
Сфокусируйся на:
🟠 основах SQL
🟠 моделировании данных
🟠 транзакциях
🟠 индексировании
Как именно — cмотрите тут
Освой SQL и ты вырастешь как разработчик в 10 раз быстрее
👉 Новости 👉 База вопросов
Невозможно по-настоящему понять, как работают базы данных, если полагаться только на ORM.
Реляционные базы данных существуют уже более 40 лет и не просто так.
Сфокусируйся на:
Окупается быстро. Недавно я оптимизировал два запроса:
> SELECT: с 70 мс до 1 мс
> UPDATE: с 300 мс до 52 мс
Как именно — cмотрите тут
Освой SQL и ты вырастешь как разработчик в 10 раз быстрее
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
📞 Одна из самых недооценённых возможностей HttpClient?
Идеально подходит для реализации сквозной логики, такой как:
🟢 Аутентификация
🟢 Логирование
🟢 Аудит
🟢 Кэширование
🟢 Повторные попытки (Retries)
Вместо того чтобы дублировать этот код в каждом запросе — оформляется единый чистый pipeline.
Вот как использовать
👉 Новости 👉 База вопросов
DelegatingHandler — это middleware для исходящих HTTP-запросов.Идеально подходит для реализации сквозной логики, такой как:
Вместо того чтобы дублировать этот код в каждом запросе — оформляется единый чистый pipeline.
Вот как использовать
DelegatingHandler в .NETPlease open Telegram to view this post
VIEW IN TELEGRAM
#Собес #CSharp
🤔 Что такое List‹ T › и как реализованы его Count и Capacity?
👉 Новости 👉 База вопросов
List‹T› - это обёртка над массивом T[] , которая автоматически расширяется по мере добавления элементов. Поле count хранит число фактически добавленных элементов, а capacity - длину внутреннего массива. При достижении count == Capacity при добавлении нового элемента создаётся новый массив с увеличенной capacity (обычно в полтора раза), в который копируются старые элементы.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😇 Использование nameof вместо
В этом нет ничего надуманного, даже ReSharper содержит инспекцию на этот случай.
Reddit тред -> ссылка
👉 Новости 👉 База вопросов
ToString() при обращении к имени члена перечисления в .NET — это абсолютно валидная техника оптимизации производительности.В этом нет ничего надуманного, даже ReSharper содержит инспекцию на этот случай.
nameof выносит получение строки в compile-time, тем самым существенно снижает время выполнения и устраняет аллокации — что особенно важно в производительно-критичных hot-path'ахReddit тред -> ссылка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1