Forwarded from Книги для программистов
📚 ТОП-11 книг по базам данных в 2025 году
Хотите разобраться в базах данных, но не знаете, с чего начать? Мы подготовили подборку из 11 лучших книг, которые помогут вам освоить раздичные базы данных, паттерны и антипаттерны, а также оптимизацию запросов.
🔗 Читайте в статье
Хотите разобраться в базах данных, но не знаете, с чего начать? Мы подготовили подборку из 11 лучших книг, которые помогут вам освоить раздичные базы данных, паттерны и антипаттерны, а также оптимизацию запросов.
🔗 Читайте в статье
👍5🔥2🥱1
🧑💻 Венгерская нотация в C#
Венгерская запись – это соглашение об именовании переменных, при котором к именам добавляются префиксы, отражающие тип данных или назначение.
Программисты на C использовали обозначения вроде «sz» для строк с завершающим нулём, «i» для индексов, «dw» для 32-битных числовых значений.
В C# необходимость в указании типа в имени переменной стоит менее остро благодаря строгой статической типизации и поддержке интеллектуальных функций IDE.
Примеры:
•
Префикс «sz» означает строку, заканчивающуюся нулевым символом (zero-terminated string).
•
Префикс «b» обозначает логический тип (boolean), а остальная часть имени описывает назначение переменной.
•
Префикс «p» указывает, что переменная является указателем (pointer).
•
Здесь «m_» означает, что переменная является полем (member) класса, а «str» – строкового типа (string)
🐸 Библиотека шарписта
Венгерская запись – это соглашение об именовании переменных, при котором к именам добавляются префиксы, отражающие тип данных или назначение.
Программисты на C использовали обозначения вроде «sz» для строк с завершающим нулём, «i» для индексов, «dw» для 32-битных числовых значений.
В C# необходимость в указании типа в имени переменной стоит менее остро благодаря строгой статической типизации и поддержке интеллектуальных функций IDE.
Примеры:
•
szMessage
Префикс «sz» означает строку, заканчивающуюся нулевым символом (zero-terminated string).
•
bIsReady
Префикс «b» обозначает логический тип (boolean), а остальная часть имени описывает назначение переменной.
•
pData
Префикс «p» указывает, что переменная является указателем (pointer).
•
m_strName
Здесь «m_» означает, что переменная является полем (member) класса, а «str» – строкового типа (string)
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱29👍9🥰4🤔2🤩2
🆚 System.Text.Json против Newtonsoft.Json
Если вам нужна максимальная производительность и низкое потребление памяти, а ваш проект работает на современных версиях .NET (особенно в ASP.NET или Blazor), выбирайте System.Text.Json.
Если же вам важны расширенные возможности – динамическая работа с JSON, поддержка JObject, гибкие настройки сериализации и удобные атрибуты, или если ваш проект уже использует Newtonsoft.Json, лучше оставить его
➡️ Подробное сравнение с примерами кода
🐸 Библиотека шарписта
Если вам нужна максимальная производительность и низкое потребление памяти, а ваш проект работает на современных версиях .NET (особенно в ASP.NET или Blazor), выбирайте System.Text.Json.
Если же вам важны расширенные возможности – динамическая работа с JSON, поддержка JObject, гибкие настройки сериализации и удобные атрибуты, или если ваш проект уже использует Newtonsoft.Json, лучше оставить его
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
В ASP.NET можно эффективно скачивать большие файлы с помощью потоковой передачи, избегая загрузки всего файла в память.
• Перегрузка памяти (OutOfMemoryException) если файл загружается полностью в память перед отправкой.
• Высокая нагрузка на сервер при одновременной загрузке большого числа файлов.
• Медленная передача данных без использования потоковой передачи.
Используем
FileStreamResult
, который позволяет передавать файл через поток:public ActionResult DownloadLargeFile()
{
string filePath = Server.MapPath("~/App_Data/LargeFile.zip");
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
return new FileStreamResult(fs, "application/octet-stream")
{
FileDownloadName = "LargeFile.zip"
};
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🤩9
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.
В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования
👉Подписаться👈
В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования
👉Подписаться👈
❤1🌚1
Открытые уязвимости могут привести к утечке данных, взлому системы или несанкционированному доступу. Разберём ключевые методы защиты API в .NET
Один из самых популярных способов авторизации – это JSON Web Token. Токен создаётся сервером после успешного входа пользователя и передаётся клиенту. При каждом запросе клиент отправляет этот токен в заголовке, а сервер проверяет его подлинность.
Чтобы сделать JWT безопасным, важно установить короткий срок действия токена и использовать обновляемые refresh-токены. Также стоит подписывать токены с надёжным ключом, а при необходимости применять асимметричное шифрование.
OAuth 2.0 — это способ предоставить доступ к данным без передачи логина и пароля. Приложение получает токен доступа, а не сами учётные данные пользователя.
Для мобильных приложений обязательно нужно использовать PKCE (Proof Key for Code Exchange), чтобы предотвратить перехват кода авторизации. А ещё не стоит выдавать токен с бессрочным сроком действия, иначе это может привести к утечкам.
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍4
📊 Мониторинг .NET приложений
Grafana + Prometheus – это мощное решение для сбора и визуализации метрик, а с Docker его настройка становится еще проще.
Как настроить мониторинг?
1️⃣ Настраиваем Prometheus – это инструмент для сбора метрик. Он периодически опрашивает эндпоинты приложения и сохраняет данные.
2️⃣ Запускаем Grafana — она подключается к Prometheus и строит дашборды с данными о загрузке CPU, памяти и запросах.
3️⃣ Используем Docker Compose — с его помощью развернём оба сервиса одной командой.
📎 Подробное руководство в статье
🐸 Библиотека шарписта
Grafana + Prometheus – это мощное решение для сбора и визуализации метрик, а с Docker его настройка становится еще проще.
Как настроить мониторинг?
global:
scrape_interval: 5s # Интервал опроса метрик
scrape_configs:
- job_name: 'dotnet_app'
metrics_path: '/metrics' # Эндпоинт, откуда брать метрики
static_configs:
- targets: ['host.docker.internal:5000'] # Адрес .NET приложения
📎 Подробное руководство в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
🚀 Обновленный CodeBehind
Вышел CodeBehind 4.0, который добавляет новые возможности для удобного разделения логики и разметки в Blazor.
Основные изменения:
➖ Обновленный BlazorComponentBase — улучшена поддержка жизненного цикла компонентов.
➖ Удобный Dependency Injection — сервисы передаются напрямую в код-бихайнды.
➖ Source Generators — автоматическая генерация кода для снижения рутины.
➖ Гибкая обработка событий — больше контроля и возможностей.
➖ Автоматическая синхронизация состояний — меньше бойлерплейта.
➡️ Подробный обзор обновления
🐸 Библиотека шарписта
Вышел CodeBehind 4.0, который добавляет новые возможности для удобного разделения логики и разметки в Blazor.
Основные изменения:
➡️ Подробный обзор обновления
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2👾1
This media is not supported in your browser
VIEW IN TELEGRAM
KnightMoves.SqlObjects: объектно-ориентированный SQL-конструктор для .NET, который позволяет писать запросы максимально близко к чистому SQL, но с удобством C#.
Вместо строкового SQL-запроса создаются объекты, которые позволяют собирать SQL-инструкции интуитивно:
using KnightMoves.SqlObjects;
var sql = TSQL
.SELECT()
.STAR()
.FROM("Products")
.Build();
Console.WriteLine(sql);
В итоге получится запрос:
SELECT * FROM Products;
Please open Telegram to view this post
VIEW IN TELEGRAM
😁38🤔10😢5👏2🥱2
💻 Управление пакетами в .NET
Благодаря NuGet разработчики могут сосредоточиться на коде, а не на поиске и подключении библиотек. Это стандарт в экосистеме .NET, который упрощает разработку как для одиночных программистов, так и для команд.
➖ Почему NuGet важен
• Автоматическое управление зависимостями – избавляет от ручного скачивания библиотек
• Центральный репозиторий – тысячи готовых пакетов, включая Newtonsoft.Json, Entity Framework и Serilog
• Лёгкая интеграция с .NET CLI, Visual Studio и CI/CD
➖ Что такое
Этот URL — официальный репозиторий пакетов NuGet, поддерживаемый Microsoft
➖ Работа с NuGet в .NET CLI
Установка пакета:
Обновление пакетов:
Удаление пакета:
➡️ Подробнее на официальном сайте
🐸 Библиотека шарписта
Благодаря NuGet разработчики могут сосредоточиться на коде, а не на поиске и подключении библиотек. Это стандарт в экосистеме .NET, который упрощает разработку как для одиночных программистов, так и для команд.
• Автоматическое управление зависимостями – избавляет от ручного скачивания библиотек
• Центральный репозиторий – тысячи готовых пакетов, включая Newtonsoft.Json, Entity Framework и Serilog
• Лёгкая интеграция с .NET CLI, Visual Studio и CI/CD
api.nuget.org/v3/index.json
. Этот URL — официальный репозиторий пакетов NuGet, поддерживаемый Microsoft
Установка пакета:
dotnet add package Newtonsoft.Json
Обновление пакетов:
dotnet restore
Удаление пакета:
dotnet remove package Newtonsoft.Json
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱25👍3🔥1
Swipe right or swipe left
Что делать, если твои мэтчи в жизни не такие точные, как твой код?
Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.
📌 Мы возьмем реальные данные со speed dating.
📌 Обучим модель, которая скажет: match или swipe left.
📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).
💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.
👉 Записаться
Что делать, если твои мэтчи в жизни не такие точные, как твой код?
Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.
📌 Мы возьмем реальные данные со speed dating.
📌 Обучим модель, которая скажет: match или swipe left.
📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).
💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.
👉 Записаться
😁7👍5🥱3❤1
Visual Studio позволяет генерировать и настраивать AI-коммиты. Можно задать длину, формат и количество строк, чтобы коммиты соответствовали стандартам команды.
Перейти в Tools > Options > Copilot и настроить шаблоны и параметры
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱9👍3
Гибридный кэш это баланс между скоростью и масштабируемостью. Он объединяет два уровня хранения данных:
1️⃣ Кэш в памяти. Хранит часто используемые данные локально, обеспечивая моментальный доступ.
2️⃣ Распределенный кэш: Redis, SQL Server Cache. Используется для хранения данных, доступных нескольким серверам.
То есть это метод, при котором данные сначала проверяются в локальном кэше, а если их там нет, запрашиваются из распределенного кэша, например, Redis.
Настройка гибридного кэша в .NET
Чтобы реализовать гибридное кэширование можно использовать HybridCache, который сочетает кэш в памяти и Redis.
Please open Telegram to view this post
VIEW IN TELEGRAM
👏4👍2👾1
🛠 Асинхронное взаимодействие микросервисов в .NET
Одним из самых популярных брокеров сообщений является RabbitMQ, а MassTransit — это удобная библиотека для работы с ним в .NET. Сейчас разберем, как связать эти инструменты и создать отказоустойчивую систему обмена сообщениями.
➖ Какие инструменты нужны
• RabbitMQ. Брокер сообщений, который позволяет сервисам отправлять и получать сообщения асинхронно, используя очереди.
• MassTransit. Библиотека для .NET, которая предоставляет простой и удобный API для работы с брокерами сообщений.
➖ Как использовать их вместе
1️⃣ Устанавливаем RabbitMQ
RabbitMQ можно развернуть в Docker:
2️⃣ Настраиваем MassTransit
Необходимо зарегистрировать MassTransit и подключить его к RabbitMQ:
Этот код создает подключение к RabbitMQ, которое позволяет сервису отправлять и получать сообщения.
3️⃣ Создаем производителя
Производитель отправляет сообщения в очередь, используя MassTransit:
4️⃣ Создаем потребителя
Потребитель автоматически получает и обрабатывает сообщения из очереди:
💾 Сохраняйте мини-гайд себе, чтобы не потерять
📎 Подробный гайд в источнике
🐸 Библиотека шарписта
Одним из самых популярных брокеров сообщений является RabbitMQ, а MassTransit — это удобная библиотека для работы с ним в .NET. Сейчас разберем, как связать эти инструменты и создать отказоустойчивую систему обмена сообщениями.
• RabbitMQ. Брокер сообщений, который позволяет сервисам отправлять и получать сообщения асинхронно, используя очереди.
• MassTransit. Библиотека для .NET, которая предоставляет простой и удобный API для работы с брокерами сообщений.
RabbitMQ можно развернуть в Docker:
docker run -d --hostname my-rabbit --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
Необходимо зарегистрировать MassTransit и подключить его к RabbitMQ:
builder.Services.AddMassTransit(x =>
{
x.UsingRabbitMq((context, cfg) =>
{
cfg.Host("localhost", "/", h =>
{
h.Username("guest");
h.Password("guest");
});
});
});
Этот код создает подключение к RabbitMQ, которое позволяет сервису отправлять и получать сообщения.
Производитель отправляет сообщения в очередь, используя MassTransit:
public async Task SendMessage(IBus bus, string message)
{
var endpoint = await bus.GetSendEndpoint(new Uri("queue:order-queue"));
await endpoint.Send(new OrderCreated { OrderId = Guid.NewGuid(), Message = message });
}
Потребитель автоматически получает и обрабатывает сообщения из очереди:
public class OrderConsumer : IConsumer<OrderCreated>
{
public Task Consume(ConsumeContext<OrderCreated> context)
{
Console.WriteLine($"Получено сообщение: {context.iss.onessage.Message}");
return Task.CompletedTask;
}
}
💾 Сохраняйте мини-гайд себе, чтобы не потерять
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤6🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Windows Terminal Preview 1.23 – что нового в обновлении
Вышла новая версия превью терминала Windows! В этом обновлении разработчики сосредоточились на переносе множества настроек в графический интерфейс, а также внесли исправления ошибок и улучшения доступности.
Ключевые нововведения:
1️⃣ Обновления интерфейса настроек: Многие параметры, ранее доступные только в файле settings.json, теперь можно настроить непосредственно через интерфейс.
2️⃣ Новая вкладка "Совместимость": Добавлена страница настроек "Совместимость", где можно разрешить фоновую работу терминала, включить отладочные функции и изменить режим измерения текста.
3️⃣ Настройка меню новой вкладки: Теперь пользователи могут кастомизировать меню новой вкладки прямо через интерфейс настроек.
Cтабильная версия Windows Terminal обновлена до 1.22, включающей поддержку Sixel и панель сниппетов из предыдущей превью-версии.
Установить Windows Terminal Preview можно со страницы релизов на GitHub или с помощью winget.
👉 Подробности читайте в официальном блоге
Вышла новая версия превью терминала Windows! В этом обновлении разработчики сосредоточились на переносе множества настроек в графический интерфейс, а также внесли исправления ошибок и улучшения доступности.
Ключевые нововведения:
Cтабильная версия Windows Terminal обновлена до 1.22, включающей поддержку Sixel и панель сниппетов из предыдущей превью-версии.
Установить Windows Terminal Preview можно со страницы релизов на GitHub или с помощью winget.
👉 Подробности читайте в официальном блоге
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🧑💻 Мокирование последовательных вызовов в Moq
Когда один и тот же метод вызывается несколько раз в тестах, часто требуется вернуть разные значения при каждом вызове. Например, первый вызов возвращает 1, второй — 2, а третий выбрасывает исключение.
Для подобных задач можно использовать
🛠 Как это работает
Допустим, у нас есть интерфейс
Это удобно при тестировании кеширования, ретраев, обработки ошибок или сложных зависимостей.
➡️ Подробнее о SetupSequence и примерах использования
🐸 Библиотека шарписта
Когда один и тот же метод вызывается несколько раз в тестах, часто требуется вернуть разные значения при каждом вызове. Например, первый вызов возвращает 1, второй — 2, а третий выбрасывает исключение.
Для подобных задач можно использовать
SetupSequence()
. 🛠 Как это работает
Допустим, у нас есть интерфейс
IMyInterface
с методом MyMethod()
, который вызывается несколько раз. Вместо обычного Setup()
мы используем SetupSequence()
, чтобы задать разные результаты:var mock = new Mock<IMyInterface>();
mock.SetupSequence(m => m.MyMethod())
.Returns(1)
.Returns(2)
.Throws(new Exception("Ошибка"));
Это удобно при тестировании кеширования, ретраев, обработки ошибок или сложных зависимостей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25👾3
🤔 Какие вебинары вам действительно нужны?
Привет, шарписты! 👋
Мы готовим новые вебинары и хотим сделать их максимально полезными для вас. Это поможет нам не только создавать актуальный контент, но и развивать проект, находя новые точки контактов для вас.
Ваши ответы дадут нам понимание, какие темы и форматы действительно важны, а также помогут сделать вебинары интереснее и продуктивнее.
Заполнение займет всего пару минут, а нам это очень поможет! Спасибо, что участвуете в нашем развитии! 💙
👉 Пройти опрос
Привет, шарписты! 👋
Мы готовим новые вебинары и хотим сделать их максимально полезными для вас. Это поможет нам не только создавать актуальный контент, но и развивать проект, находя новые точки контактов для вас.
Ваши ответы дадут нам понимание, какие темы и форматы действительно важны, а также помогут сделать вебинары интереснее и продуктивнее.
Заполнение займет всего пару минут, а нам это очень поможет! Спасибо, что участвуете в нашем развитии! 💙
👉 Пройти опрос
❤1
Как классическая классификация ML помогает в реальном мире
🤖 Классификация в ML — это метод обучения, в котором модель обучается на размеченных данных и предсказывает, к какому классу относится новый объект.
✅ Фильтрация спама – чтобы в почте оставалось только важное.
✅ Рекомендации фильмов – Netflix знает, что ты любишь!
✅ Кредитный скоринг – банки решают, дать ли тебе займ.
✅ Предсказание мэтчей – как на нашем вебинаре по speed dating.
14 февраля мы разберём на практике задачу классификации:
- Как выбрать оптимальные признаки
- Что делать с несбалансированными данными
- Как интерпретировать результаты модели
🔥 Если уже работаешь с ML или только начинающий программист – приходи на наш вебинар, в котором мы разберем «как предсказывать мэтч на speed dating» .
Приходи!
🤖 Классификация в ML — это метод обучения, в котором модель обучается на размеченных данных и предсказывает, к какому классу относится новый объект.
✅ Фильтрация спама – чтобы в почте оставалось только важное.
✅ Рекомендации фильмов – Netflix знает, что ты любишь!
✅ Кредитный скоринг – банки решают, дать ли тебе займ.
✅ Предсказание мэтчей – как на нашем вебинаре по speed dating.
14 февраля мы разберём на практике задачу классификации:
- Как выбрать оптимальные признаки
- Что делать с несбалансированными данными
- Как интерпретировать результаты модели
🔥 Если уже работаешь с ML или только начинающий программист – приходи на наш вебинар, в котором мы разберем «как предсказывать мэтч на speed dating» .
Приходи!
👍1
До сих пор в LINQ не было встроенного метода для случайного перемешивания коллекций. Разработчикам приходилось использовать разные неэффективные методы.
В новом PR был добавлен метод
Shuffle()
в IEnumerable<T>
. Будем ждать в одном из следующих релизов .NETПример будущего кода:
var shuffledItems = items.Shuffle();
Подробности:
🔗 Обсуждение необходимости метода
🔗 Реализация в .NET
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40🤔7
Вам нравится читать контент на этом канале?
Возможно, вы задумывались о том, чтобы купить на нем интеграцию?
Следуйте 3 простым шагам, чтобы сделать это:
1) Нажмите на ссылку: Вход
2) Пополняйтесь удобным способом
3) Размещайте публикацию
Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его.
Возможно, вы задумывались о том, чтобы купить на нем интеграцию?
Следуйте 3 простым шагам, чтобы сделать это:
1) Нажмите на ссылку: Вход
2) Пополняйтесь удобным способом
3) Размещайте публикацию
Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его.
Telegram
Telega.in
Платформа для запуска рекламы в Telegram: продвигайтесь в проверенных каналах и чатах.
👍5🥱1