#полезное
😬 Как перестать усложнять проверки типов:
(и назначать переменные с ненулевыми значениями)
Используйте шаблон объявления (declaration pattern).
Шаблон объявления позволяет проверить, совместим ли тип выражения во время выполнения с указанным типом.
Также можно объявить локальную переменную как результат этой проверки.
Пример использования шаблона объявления в коде выше.
👉 Новости 👉 База вопросов
(и назначать переменные с ненулевыми значениями)
Используйте шаблон объявления (declaration pattern).
Шаблон объявления позволяет проверить, совместим ли тип выражения во время выполнения с указанным типом.
Также можно объявить локальную переменную как результат этой проверки.
Пример использования шаблона объявления в коде выше.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #CSharp
🤔 Как решали проблему высокой нагрузки на БД при генерации отчетов?
Отчёты перенесли в отдельное аналитическое хранилище (Data Warehouse) с регулярным ETL из OLTP- базы. Для срочных отчётов использовали materialized view c incremental refresh либо pre-aggregated таблицы, обновляемые по расписанию. Часто применяли асинхронную генерацию через background job (Hangfire, Quartz) и кэширование результатов в Redis.
👉 Новости 👉 База вопросов
Отчёты перенесли в отдельное аналитическое хранилище (Data Warehouse) с регулярным ETL из OLTP- базы. Для срочных отчётов использовали materialized view c incremental refresh либо pre-aggregated таблицы, обновляемые по расписанию. Часто применяли асинхронную генерацию через background job (Hangfire, Quartz) и кэширование результатов в Redis.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Хватит загружать строки в память только ради их удаления.
В EF Core теперь есть поддержка массового удаления через
🟠 Пиши LINQ-запрос для фильтрации записей
🟠 Чейни несколько
🟠 Вызывай
Без трекинга, без материализации. Только SQL.
Как это использовать (и на что стоит обратить внимание) — читать
👉 Новости 👉 База вопросов
В EF Core теперь есть поддержка массового удаления через
ExecuteDelete().Where-условий ExecuteDelete(), чтобы выполнить один SQL DELETEБез трекинга, без материализации. Только SQL.
Как это использовать (и на что стоит обратить внимание) — читать
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #postgres
🤔 Что такое View (представление) в PostgreSQL?
View — это виртуальная таблица, основанная на SQL-запросе. Она не хранит данные, а предоставляет упрощенный способ доступа к результатам сложных запросов. Views помогают улучшить читаемость кода, повышают безопасность и обеспечивают удобство повторного использования.
👉 Новости 👉 Платформа
View — это виртуальная таблица, основанная на SQL-запросе. Она не хранит данные, а предоставляет упрощенный способ доступа к результатам сложных запросов. Views помогают улучшить читаемость кода, повышают безопасность и обеспечивают удобство повторного использования.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 Я работаю с перечислениями каждый день.
И вот 4 лучших практики, которыми я пользуюсь, чтобы код в проекте оставался чистым:
🟠 Явно указывать тип хранения
🟠 Использовать атрибуты
🟠 Хелпер-метод для получения значения из атрибута
🟠 Безопасный парсинг через
👉 Новости 👉 База вопросов
И вот 4 лучших практики, которыми я пользуюсь, чтобы код в проекте оставался чистым:
Description для отображаемых имёнDescriptionTryParsePlease open Telegram to view this post
VIEW IN TELEGRAM
👍2
#полезное
🛞 Entity Framework 10 будет поддерживать именованные фильтры запросов
Да, это означает, что несколько фильтров теперь можно применять одновременно, начиная с EF 10+ — при условии, что они именованные.
👉 Новости 👉 База вопросов
Да, это означает, что несколько фильтров теперь можно применять одновременно, начиная с EF 10+ — при условии, что они именованные.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🥄 PolySharp — удобный способ использовать новые фичи C# на старых версиях .NET. Этот NuGet-пакет работает как source-генератор, автоматически подбирая нужные полифиллы в зависимости от целевой платформы. Для работы достаточно добавить ссылку на PolySharp, установить последнюю версию C# и можно писать современный код даже для .NET Framework или UWP.
Инструмент обладает умной генерацией только необходимых типов. Например, если компилятору C# 13 нужен
Гитхаб
👉 Новости 👉 База вопросов
Инструмент обладает умной генерацией только необходимых типов. Например, если компилятору C# 13 нужен
[IsExternalInit] для init-only свойств, PolySharp создаст его за кулисами. При этом он не трогает фичи, требующие поддержки рантайма, но покрывает огромный пласт синтаксических улучшений — от nullable-аннотаций до интерполированных строковых обработчиков. Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #postgres
🤔 Что такое секционирование таблиц (table partitioning) в PostgreSQL?
Секционирование - это разделение таблицы на несколько меньших частей (секции), которые обрабатываются отдельно. Это повышает производительность запросов и облегчает управление большими обьемами данных.
👉 Новости 👉 Платформа
Секционирование - это разделение таблицы на несколько меньших частей (секции), которые обрабатываются отдельно. Это повышает производительность запросов и облегчает управление большими обьемами данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Использование Dapper
Я заметил, что есть отличные примеры для простых чтений, но практически нет примеров работы с более чем двумя JOIN'ами.
Это означает, что разработчику нужно хорошо разбираться как в SQL, так и в синтаксисе Dapper.
👉 Новости 👉 База вопросов
Я заметил, что есть отличные примеры для простых чтений, но практически нет примеров работы с более чем двумя JOIN'ами.
Это означает, что разработчику нужно хорошо разбираться как в SQL, так и в синтаксисе Dapper.
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #postgres
🤔 Что такое транзакции в PostgreSQL?
Транзакция - это последовательность операций, которые выполняются как единое целое. Если одна операция не удалась, все изменения откатываются, чтобы сохранить данные в консистентном состоянии. Транзакции поддерживают свойства ACID: атомарность, согласованность, изоляцию и долговечность.
👉 Новости 👉 Платформа
Транзакция - это последовательность операций, которые выполняются как единое целое. Если одна операция не удалась, все изменения откатываются, чтобы сохранить данные в консистентном состоянии. Транзакции поддерживают свойства ACID: атомарность, согласованность, изоляцию и долговечность.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😱 Простой способ улучшить методы в C#
(с переменным числом параметров)
Используй улучшения ключевого слова
Ключевое слово
Раньше:
Теперь в C# 13 и .NET 9:
-
-
-
Это упрощает код и делает API гибче.
👉 Новости 👉 База вопросов
(с переменным числом параметров)
Используй улучшения ключевого слова
params из .NET 9.Ключевое слово
params в C# позволяет передавать переменное количество аргументов без необходимости перегрузки методов. Это удобно, когда количество входных параметров заранее неизвестно.Раньше:
params работал только с массивами.Теперь в C# 13 и .NET 9:
params можно использовать с любыми коллекциями, у которых есть метод Add, включая:-
Span<T>-
ReadOnlySpan<T>-
IEnumerable<T>Это упрощает код и делает API гибче.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#полезное
😇 Как правильно структурировать фичу в формате вертикального среза?
Вот простая структура вертикального среза, которую можно смело брать на вооружение:
🟠 Объект запроса/ответа
🟠 Определение эндпоинта
🟠 Бизнес-логика
Всё, что относится к одной фиче, находится в одном месте.
Почему это круто — объяснено здесь
Если ты до сих пор не используешь подход с вертикальными срезами, скорее всего, твое приложение концептуально сложнее, чем нужно.
👉 Новости 👉 База вопросов
Вот простая структура вертикального среза, которую можно смело брать на вооружение:
Всё, что относится к одной фиче, находится в одном месте.
Почему это круто — объяснено здесь
Если ты до сих пор не используешь подход с вертикальными срезами, скорее всего, твое приложение концептуально сложнее, чем нужно.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😵💫 Вот настройка OpenTelemetry для трассировки и логирования в .NET:
Если хочешь узнать больше, то вот гайд как экспортировать телеметрию в Grafana
👉 Новости 👉 База вопросов
Если хочешь узнать больше, то вот гайд как экспортировать телеметрию в Grafana
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #postgres
🤔 Что такое СТЕ (Common Table Expressions) в PostgreSQL?
СТЕ - это временные результаты, определённые в запросе для упрощения сложных операций. Они создаются с помощью ключевого слова WITH и используются для улучшения читаемости и многократного использования промежуточных данных.
👉 Новости 👉 Платформа
СТЕ - это временные результаты, определённые в запросе для упрощения сложных операций. Они создаются с помощью ключевого слова WITH и используются для улучшения читаемости и многократного использования промежуточных данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
❤️🔥 Оператор конкатенации ANSI SQL (
Он предлагает «более читаемую и соответствующую стандарту альтернативу существующим способам вроде
👉 Новости 👉 База вопросов
||) теперь поддерживается в базе данных Azure SQLОн предлагает «более читаемую и соответствующую стандарту альтернативу существующим способам вроде
+ и CONCAT()».Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
👨💻 Большинство .NET разработчиков никогда с этим не сталкиваются.
Но это делает отладку в 10 раз проще.
Стандартный вид при отладке:
Никакого контекста. Много путаницы.
Но всего одной строкой кода?
Теперь окно наблюдения показывает:
В чём фишка?
Используйте
Добавляете этот атрибут в начало класса, чтобы контролировать, как будет отображаться информация о классе при отладке.
В следующий раз, когда будете смотреть на
👉 Новости 👉 База вопросов
Но это делает отладку в 10 раз проще.
Стандартный вид при отладке:
{Namespace.ObjectName}Никакого контекста. Много путаницы.
Но всего одной строкой кода?
Теперь окно наблюдения показывает:
Order ORD-2025-001: Alice Smith - 249.99
Order ORD-2025-002: Bob Evans - 89.50
Order ORD-2025-003: Maria Lee - 1200.00
В чём фишка?
Используйте
DebuggerDisplay.Добавляете этот атрибут в начало класса, чтобы контролировать, как будет отображаться информация о классе при отладке.
В следующий раз, когда будете смотреть на
{Namespace.ObjectName}, помните: так не обязательно должно быть.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
📞 Горячее мнение:
🔸 Напиши конструктор
🔸 Вызови конструктор
🔸 Готово
Это может быть и статический метод, или что тебе больше нравится.
В своих проектах я редко использую больше одного уровня маппинга.
И ещё реже какие-либо библиотеки для маппинга.
👉 Новости 👉 База вопросов
ВАМ НЕ НУЖНЫ библиотеки для маппинга.
Это может быть и статический метод, или что тебе больше нравится.
В своих проектах я редко использую больше одного уровня маппинга.
И ещё реже какие-либо библиотеки для маппинга.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Техническое собеседование. Осень 2024. Вилка: 200к+. Опыт в резюме: 3
года. Были вопросы по С#, базам данных, рассматривались реальные
кейсы.
Вопросы:
- Какие методы использовали для оптимизации SQL-запросов (индексы, уменьшение JOIN, проверка на NULL)?
- В чём отличие кластеризованного и некластеризованного индекса? Когда их стоит применять?
- Что такое сборщик мусора (Garbage Collection) в С#?
- В чем разница между методами Dispose и Finalize в С#?
Все вопросы можно посмотреть на нашей платформе
#собес
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#полезное
😐 Пример Task.WhenEach в .NET 9
В .NET 9 появилась новая API —
В простом примере выше выполняется несколько запросов через
👉 Новости 👉 База вопросов
В .NET 9 появилась новая API —
Task.WhenEach, которая позволяет обрабатывать асинхронные задачи по мере их завершения.В простом примере выше выполняется несколько запросов через
HttpClient, и их результаты обрабатываются по мере готовности, а не после завершения всех задач.Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
#Собес #postgres
🤔 Какие есть типы соединений (JOIN) в PostgreSQL?
PostgreSQL поддерживает четыре основных типа соединений: INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL OUTER JOIN. Они используются для объединения данных из нескольких таблиц, выбирая соответствующие или все записи в зависимости от типа соединения.
👉 Новости 👉 Платформа
PostgreSQL поддерживает четыре основных типа соединений: INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL OUTER JOIN. Они используются для объединения данных из нескольких таблиц, выбирая соответствующие или все записи в зависимости от типа соединения.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2