Последние посты

Backend Portal | Программирование
23 сент., 06:07
Ваш API работает медленно.Что проверите первым?• Добавите database index • Увеличите ресурсы сервера • Добавите больше replicas • Обвините сетьВместо этого сначала проследите весь путь request:Client → DNS → Load Balancer → API Server → Database → External ServicesА затем измерьте время на каждом этапе. Backend с ответом за 10 мс не поможет, если браузер загружает bundle размером 15 МБ.Исправный API не поможет, если database query выполняется 4 секунды. И быстрая database не спасёт, если сторонний API постоянно уходит в timeout.«API работает медленно» — это не диагноз. Это отправная точка для диагностики.Я собрал практический API Debugging Cheat Sheet с основными проверками, командами, HTTP status codes, распространёнными проблемами и быстрыми способами их устранения.👉 @BackendPortal


Backend Portal | Программирование
22 сент., 16:07
DevOps-инструмент недели: sofkaKubernetes говорит, что что-то сломалось. Но говорит ли он, почему именно? Приходится проверять статус, события, логи и пытаться понять, в чём проблема.Именно это решает sofka.sofka — это TUI для Kubernetes, вдохновлённый k9s. Он показывает состояние rollout, деградировавшие состояния, блокирующие поды и последние warning-событияВот что он умеет:• Объясняет, почему ресурс сломан, а не просто сообщает, что с ним проблема • Встроенная поддержка Flux CD: можно приостанавливать, возобновлять и запускать reconcile без установленного Flux CLI • Инспектор Helm: история релизов, values и сгенерированные манифесты без установленного Helm • Есть фильтры вроде cpu>500m, restarts>=5, age<2h, чтобы быстро находить именно то, что нужно • Можно просматривать таймлайн всех изменений объекта, которые зафиксировал инструмент • Можно просматривать и передавать
Backend Portal | Программирование
22 сент., 06:07
Полезная шпаргалка по SQL: основы JOIN-запросы и агрегацияИзучите базовые операции SQL: выборку данных, объединение таблиц с помощью JOIN, агрегирование с функциями COUNT, AVG, SUM и создание подзапросов. Эта шпаргалка станет вашим надежным помощником в ежедневной работе с SQL.Полная PDF версия тут ⬇️👉 @BackendPortal


Backend Portal | Программирование
21 сент., 16:07
Roadmap, которому стоит следовать, чтобы стать сильным Backend Developer в 2026 году:1. Programming Fundamentals • Java • OOP • Collections • Multithreading • Exception Handling2. Backend Core • APIs • Authentication • JWT/OAuth • Validation • File Uploads3. Databases • SQL • Indexing • Transactions


Backend Portal | Программирование
21 сент., 14:07
⚡️⚡️Joker 2026: что происходит с профессией разработчикаИндустрия разработки проходит через серьезный переломный момент. Меняются не только инструменты и фреймворки, но и привычный подход к работе.Поэтому в этом сезоне меняется и Joker: первый день традиционно посвящен Java — Core Java, рантайму и работе на уровне железа. А во второй день будем обсуждать, как прямо сейчас меняется сама инженерная практика.В программе — Context Engineering, команды из людей и ИИ-агентов, Self-Evolving Agents, новые подходы к архитектуре и работе с моделями, а также вопросы ответственности и роли эксперта.Собрали главные темы второго дня в карточках.🌟С промокодом: BackendPortal персональные билеты дешевлеПолное расписание и билеты — на сайте.




Backend Portal | Программирование
21 сент., 06:07
Backend Checklist — День 15: CORSВаш API работает в Postman. Работает через curl. Но стоит вызвать его из браузера — и внезапно появляется CORS error.> Дело в браузере, а не в сервереRequest может успешно дойти до сервера. Сервер может даже вернуть 200. Но браузер всё равно может запретить frontend читать response, если CORS headers настроены неправильно. Postman и curl не волнует CORS. Браузер — волнует.> Preflight, который вы не отправлялиЗдесь всё становится интереснее. Вы отправляете POST с JSON, добавляете Authorization header или используете PUT / DELETE. Перед фактическим request браузер может сначала отправить OPTIONS request. Если сервер не обработает его правильно, основной request вообще не будет отправлен. Именно поэтому GET может работать, а POST — внезапно нет.> Wildcard, который не работает с credentialsЕсли вы отправляете credentials, то: Access-Control-Allo


Backend Portal | Программирование
20 сент., 16:07
Большой бесплатный гайд по SQL для начинающихНа freeCodeCamp лежит полноценный текстовый курс по SQL, который ведёт от самых основ до более серьёзных тем. Материал построен последовательно и подойдёт тем, кто только начинает разбираться в реляционных базах данных.Внутри: таблицы и типы данных, CRUD, SELECT и WHERE, constraints, агрегатные функции, подзапросы, нормализация, JOIN и основы оптимизации запросов. Для практики в курсе используется SQLite, при этом отдельно разбираются различия между SQL-базами.Хороший материал, чтобы системно пройти SQL с нуля или освежить базу.👉 @BackendPortal


Backend Portal | Программирование
20 сент., 08:38
Backend Checklist — День 14: Schema ValidationВаш endpoint получает age из request body и прибавляет к нему 1. Месяцами всё работает нормально. А затем client отправляет age как "twenty", и необработанный TypeError приводит к ошибке где-то глубоко внутри приложения — далеко от handler, который изначально получил request.Валидируйте данные на входе, а не внутри business logic.Request body — это недоверенные входные данные. Schema явно определяет, что именно принимает приложение: названия полей, типы данных, ограничения и обязательные значения.Валидные данные попадают в приложение как проверенный, строго типизированный object. Невалидные сразу отклоняются на HTTP boundary с 422 Unprocessable Content или 400 Bad Request.Без schema каждой downstream function приходится самостоятельно перепроверять входные данные. И первая функция, которая забудет это сделать, может стать причиной


Backend Portal | Программирование
19 сент., 16:07
Не нарушайте принцип единственной ответственностиФункция должна делать одну вещь, делать её хорошо и только её.Эта функция делает слишком много:def calculate_final_total( price: float, quantity: int, discount_rate: float, tax_rate: float ) -> float: # Расчёт промежуточной суммы subtotal = price quantity# Применение скидки discounted_amount = subtotal (1 - discount_rate)# Расчёт налога final_total = discounted_amount (1 + tax_rate)


Backend Portal | Программирование
19 сент., 10:33
Главное правило SQL GROUP BY, которое должен знать каждыйЕсли в SELECT используются неагрегированные столбцы, убедитесь, что они добавлены в GROUP BY. Это не просто хорошая практика — в некоторых базах данных это обязательное требование.Почему это важно?GROUP BY определяет, что представляет собой одна строка результата. База данных должна точно понимать, какое единственное значение поместить в каждую ячейку этой строки.В запросе ниже одна строка = одна должность (job_title) внутри конкретного отдела (department). Поэтому и department, и job_title должны присутствовать в GROUP BY.Если пропустить неагрегированный столбец:• Некоторые СУБД вернут ошибку • Другие могут вернуть произвольное значение • Запрос может «работать» сегодня, но завтра вернуть некорректный результатОбщее правилоКаждый столбец в SELECT должен быть функционально зависим от GROUP BY. Если внутри одной


Backend Portal | Программирование
19 сент., 06:07
Backend Checklist — День 13: JSON SerializationSerialization — это преобразование Python objects в текст для передачи по сети. Звучит как простая смена формата, но на деле это скорее перевод, а при переводе часть информации может потеряться.В JSON всего семь типов, а у ваших objects их гораздо большеВесь набор типов JSON — это object, array, string, number, true, false, null. И всё. Никаких datetime, Decimal, set, UUID или bytes. Поэтому более сложные типы приходится преобразовывать, иначе json.dumps() завершится с TypeError:• datetime, UUID, Decimal — соответствующего JSON-типа нет, поэтому их обычно преобразуют в строки • set, bytes — прямого аналога тоже нет, поэтому нужно выбрать представление: например, set → list, а bytes → Base64 • tuple — незаметно превращается в array, а после десериализации возвращается уже как listПоследний пример отлично показывает суть проблемы.


Backend Portal | Программирование
18 сент., 15:08
Удивительно, как часто путают программу, процесс и поток.Вот простое объяснение.1. ПрограммаЭто файл на диске, содержащий набор инструкций.Одна программа может запускать несколько процессов.Например, Firefox может создавать отдельные процессы для разных компонентов.2. ПроцессЭто программа, которая уже выполняется.Программа превращается в процесс, когда загружается в память и запускается.Для работы процесс использует, например, счётчик команд, стек и регистры.


Backend Portal | Программирование
18 сент., 12:31
БОЛЬШОЙ SQL-ГРЕХИспользовать операторы NOT IN или IN, когда в данных присутствует NULL.В SQL оператор IN — это сокращённая запись нескольких условий OR, а сравнение value = NULL всегда возвращает UNKNOWN. Из-за этого запрос может вернуть неожиданный результат или вообще пустую выборку.Если нужно учитывать NULL, обрабатывайте его явно. Добавьте условие IS NULL к IN или используйте другой подход, корректно учитывающий NULL.Всегда тестируйте SQL-запросы с NULL, чтобы убедиться, что они работают так, как ожидается.👉 @BackendPortal


Backend Portal | Программирование
18 сент., 06:07
Бесплатный гайд по GitHub новичкамОсвоить GitHub - один из первых шагов в карьере разработчика. В официальном руководстве собраны ключевые темы: от создания репозитория до командной работы через Pull Request.Хороший старт для студентов, джунов и всех, кто хочет программировать.👉 @BackendPortal


Backend Portal | Программирование
17 сент., 16:07
Устанавливает более 160 готовых к реальной работе навыков для Claude Code, Cursor и Codex.Они охватывают DevOps, безопасность и инфраструктуру.https://github.com/BagelHole/DevOps-Security-Agent-Skills👉 @BackendPortal
1,010Открыть в Telegram
Backend Portal | Программирование
17 сент., 14:12
Совет на ближайшие годы — идите в Data Science и MLПока ИИ забирает работу у одних специалистов, другие строят на нём карьеру и зарабатывают всё больше. И вопрос уже не в том, изменит ли ИИ рынок, а в том, по какую сторону этих изменений окажетесь вы. DS/ML – один из самых прямых способов оказаться среди тех, кто на этом выигрываетА чтобы не тратить годы на хаотичное обучение – держите в подписках Data Portal. Там практикующие ML-инженеры понятным языком разбирают главное: новые модели, библиотеки, исследования, датасеты, гайды, курсы и практические кейсы.Подписывайтесь: @LLMScience


Backend Portal | Программирование
17 сент., 08:03
Backend Checklist — День 12: PaginationВаш list endpoint содержит 40 000 строк. Вы добавляете ?limit=20&offset=40, выпускаете обновление — все тесты проходят. А затем пользователи начинают получать неправильные строки, хотя в коде ничего не менялось.Есть два способа разбивать длинный список на страницы:• Offset: ?offset=40&limit=20 или ?page=3. Пропустить N строк и взять следующие 20. • Cursor: ?after=<последняя строка, которую вы видели>. Вернуть всё, что идёт после неё.offset=100000 не означает, что база данных бесплатно пропустит эти строки. Ей всё равно приходится обработать пропускаемые строки, прежде чем вернуть нужные двадцать. Поэтому глубокие страницы могут становиться всё медленнее без очевидной причины.Но есть проблема серьёзнее: offset отсчитывается от текущего состояния списка. Если во время просмотра кто-то добавит новую строку в начало, все последующие страницы
1,080Открыть в Telegram
Backend Portal | Программирование
16 сент., 16:10
Краткая шпаргалка по KotlinСинтаксис, типы данных, условия, циклы, коллекции, функции, классы, null safety, generics, lambda и другие конструкции.Сохраняем в закладки 😏👉 @BackendPortal
1,040Открыть в Telegram
Backend Portal | Программирование
16 сент., 06:07
Backend Checklist — День 11: API VersioningВы выпустили v1. Теперь нужно изменить структуру response, не сломав существующих clients. Где указывать версию API?Есть три варианта:• Path: /v1/users • Header: Api-Version: 2 • Query: /users?api-version=2Все три подхода работают. Главное различие — какие компоненты системы могут видеть версию.• Path: версия видна routers, proxies, logs и caches. Простой и широко используемый вариант. • Header: позволяет сохранить URL чистыми, но cache может не различать версии, если не использовать Vary. • Query: версия хорошо видна инфраструктуре, но смешивается с параметрами фильтрации и pagination.Главная опасность — cachingЕсли версия передаётся через header, а cache формирует ключ только по URL, client с v2 может получить закэшированный response от v1.
1,150Открыть в Telegram
Backend Portal | Программирование
15 сент., 14:56
Нашёл сокровищницу для новичков в PythonУдобная шпаргалка, где в одном месте собрали всё, что чаще всего приходится вспоминать: типы данных, операции, строки, списки, словари, методы и база конструкции языка.Хорошая штука, можно держать рядом во время работы, обучения и практики.Забираем в закладки ❤️👉 @BackendPortal
1,120Открыть в Telegram
