fa
Feedback
Войти в Y_LAB | IT развитие и юмор

Войти в Y_LAB | IT развитие и юмор

رفتن به کانال در Telegram

Стажировки, вакансии, полезные материалы, развлекательный контент. Y_LAB — команда опытных IT-специалистов, которая готова помочь вам войти в мир технологий! Сотрудничество (ylab v it) @tamriko1_5

نمایش بیشتر
766
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-17 روز
-830 روز
آرشیو پست ها
Не беспокоить... машина учится 🧑‍🏫 #Y_LAB_University #Y_LAB_Memes
Не беспокоить... машина учится 🧑‍🏫 #Y_LAB_University #Y_LAB_Memes

Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый виде
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый видеоролик “Java 21-25: что реально изменилось между двумя LTS-релизами”. О чем видео? В данном видео вместе с нашим Java-разработчиком Иваном разбираемся, чем Java 25 отличается от Java 21 и какие изменения действительно важны для production-разработки. Обсудим, как эволюционировали виртуальные потоки, FFM API, JVM, сборщики мусора и средства диагностики, а также почему переход на Java 25 — это не только новые возможности, но и более зрелая, стабильная платформа для современных приложений. 📱 YouTube ——— 📱 VK #Y_LAB_University #Y_LAB_YouTube #Y_LAB_VK

Уроки CSS, обьясняем на котиках #Y_LAB_University #Y_LAB_Memes
Уроки CSS, обьясняем на котиках #Y_LAB_University #Y_LAB_Memes

Новый пост Y_LAB_Learning! | FastAPI: современный взгляд на разработку API на Python 📱 Python О чем статья? Что такое FastAP
Новый пост Y_LAB_Learning! | FastAPI: современный взгляд на разработку API на Python 📱 Python О чем статья? Что такое FastAPI, чем он отличается от Django и Flask, и почему стал одним из самых популярных Python-фреймворков для создания API. Ключевые возможности FastAPI. 📎 Читать статью #Y_LAB_University #Y_LAB_Learning

Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем рубрику, в которой разбираем небольшие фрагменты кода и конфигура
Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем рубрику, в которой разбираем небольшие фрагменты кода и конфигураций, чтобы находить скрытые проблемы и лучше понимать, как работают привычные инструменты разработки. Сегодня под микроскопом HTTP 👨‍💻 http GET /api/users/delete/42 HTTP/1.1 Host: example.com Вопрос:
Что не так с этим запросом?
На первый взгляд всё выглядит вполне логично: отправляем запрос и удаляем пользователя с идентификатором 42. ❗️ Но здесь есть проблема. Согласно принципам HTTP, метод GET предназначен для получения данных и не должен изменять состояние системы. Другими словами, такой запрос: http GET /api/users/delete/42 не должен удалять данные, создавать записи или запускать какие-либо операции, меняющие содержимое системы. 💬💬💬 Многие инструменты считают GET-запросы безопасными: 🎯 Браузеры могут кэшировать их; 🎯 Поисковые роботы могут переходить по ссылкам; 🎯 Системы мониторинга могут автоматически выполнять такие запросы для проверки доступности сервиса. Если удаление данных привязано к GET-запросу, последствия могут быть очень неожиданными. Как лучше сделать? Для удаления ресурсов используется метод: http DELETE /api/users/42 Так API становится более предсказуемым и соответствует общепринятым стандартам. А если удалить через браузер нельзя? Это одна из причин, почему многие приложения используют кнопку, которая отправляет AJAX-запрос или обращается к backend через форму с нужным HTTP-методом. Главное правило остаётся тем же:
GET должен получать данные, а не изменять их.
🛠 Почему такие ошибки всё ещё встречаются? Часто разработчик думает не о протоколе, а о бизнес-операции:
> Нужно удалить пользователя → сделаем URL /delete/42.
Логика понятна, но со временем подобные решения начинают создавать проблемы для интеграций, кэширования и поддержки API. А вам встречались API, в которых GET-запросы неожиданно изменяли данные? 👀 #Y_LAB_University #Y_LAB_Actual

#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes

Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый виде
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый видеоролик “Что такое Agile?”. О чем видео? В данном видео вместе с нашим Scrum-мастером Анной разбираемся, что такое Agile, как и почему появился этот подход, чем он отличается от Scrum и Kanban, а также почему его внедрение далеко не всегда приносит ожидаемый результат. Обсудим историю Agile, его применение в IT и за его пределами, а также самые распространённые ошибки, которые мешают командам работать по-настоящему гибко. 📱 YouTube ——— 📱 VK #Y_LAB_University #Y_LAB_YouTube #Y_LAB_VK

#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes

Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем рубрику, в которой разбираем небольшие фрагменты кода и конфигураций, чтобы найти скрытые проблемы и понять, почему всё работает совсем не так, как ожидалось. Сегодня под микроскопом — Docker 🐳 dockerfile FROM openjdk:21 COPY . . RUN ./gradlew build CMD ["java", "-jar", "build/libs/app.jar"] Вопрос:
Какую проблему можно заметить в этом Dockerfile?
На первый взгляд всё выглядит логично: ↔️ Копируем проект; ↔️ Собираем приложение; ↔️ Запускаем готовый JAR-файл. 🫠 Но у такого решения есть серьёзный недостаток: Docker использует кэш слоёв, и если изменяется слой COPY . ., то все последующие слои теряют кэш и выполняются заново. 🗂️ Почему так происходит Docker использует систему слоёв (layers). Каждая инструкция (FROM, COPY, RUN и т.д.) создаёт отдельный слой, который может быть взят из кэша при следующей сборке. Но здесь сначала выполняется: dockerfile COPY . . То есть в образ копируется весь проект целиком. Даже если вы изменили всего один файл, Docker считает слой изменённым и заново выполняет: dockerfile RUN ./gradlew build А это может занимать минуты вместо нескольких секунд. 💻 Как сделать лучше? Обычно сначала копируют только файлы зависимостей: dockerfile COPY gradlew . COPY gradle gradle COPY build.gradle . COPY settings.gradle . и выполняют загрузку зависимостей. Только после этого копируют исходный код: dockerfile COPY src src Так при изменении Java-классов слой с зависимостями останется в кэше, а пересобираться будет только приложение. ↪️↪️↪️ На небольшом проекте разница почти незаметна. Но на крупном сервисе с десятками зависимостей неудачный порядок команд в Dockerfile может увеличивать время сборки в несколько раз.
Иногда оптимизация начинается не с кода, а с пары строк в конфигурации.
А вы когда-нибудь замечали, насколько сильно порядок инструкций влияет на скорость сборки Docker-образа? 👀 #Y_LAB_University #Y_LAB_Actual

#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes

😭😭😭 #Y_LAB_University #Y_LAB_Memes
😭😭😭 #Y_LAB_University #Y_LAB_Memes

Новый пост Y_LAB_Learning! | Spring WebFlux для Java-разработчиков: устройство, преимущества и подводные камни 📱 Java О чем
Новый пост Y_LAB_Learning! | Spring WebFlux для Java-разработчиков: устройство, преимущества и подводные камни 📱 Java О чем статья? Что такое Spring WebFlux, как работает реактивный подход и чем он отличается от Spring MVC. Основные преимущества, ограничения и сценарии, в которых WebFlux действительно оправдан. 📎 Читать статью #Y_LAB_University #Y_LAB_Learning

Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем рубрику, в которой разбираем неочевидные ситуации из мира разрабо
Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем рубрику, в которой разбираем неочевидные ситуации из мира разработки и ищем подвох там, где его не всегда ожидаешь увидеть. Сегодня под микроскопом Git. И одна из ошибок, которую хотя бы раз совершал почти каждый разработчик 👇 bash git add . git commit -m "Fix bug" git push Вопрос:
Что произойдёт, если выполнить эти команды, находясь в ветке main?
Многие ответят:
> Изменения попадут в удалённый репозиторий.
И это действительно так. ❗️ Но есть нюанс: Git совершенно не проверяет, ту ли ветку вы собирались использовать. 🤔 Если вы забыли переключиться на feature-ветку и случайно остались в main, то изменения будут закоммичены и отправлены именно туда. Для Git это абсолютно корректное действие: bash git branch может показать: bash * main а дальше команды спокойно выполнятся без каких-либо предупреждений. ❔ Почему это важно Многие воспринимают Git как инструмент, который не позволит совершить ошибку. На самом деле Git отлично защищает историю проекта, но не может понять, что вы случайно работаете не в той ветке. 💬 Что делать, если ошибка уже допущена 🎯 Если коммит уже сделан, но git push ещё не выполнялся Исправить ситуацию достаточно просто: можно создать новую ветку от текущего состояния и перенести в неё коммит, а ветку main вернуть к предыдущему состоянию. Так ошибка останется только локальной и не затронет остальных участников команды. 🎯 Если коммит уже отправлен (git push выполнен) Здесь всё зависит от процесса в команде. ↔️ Если ветка общая и её используют другие разработчики, безопаснее всего сделать новый коммит, который отменит изменения (git revert), а затем перенести нужный код в отдельную рабочую ветку. ↔️ Если же история ещё никем не использовалась, иногда применяют переписывание истории (git reset + push --force), но делать это стоит только после согласования с командой, иначе можно испортить историю репозитория коллегам. ⌨️ Почему этот кейс встречается так часто? Потому что ошибка выглядит не как ошибка. Все команды выполняются успешно. Никаких предупреждений. Никаких конфликтов. Именно поэтому многие замечают проблему только после того, как коллеги начинают писать: «А зачем это оказалось в main?» А вам доводилось случайно коммитить или пушить не в ту ветку? 👀 #Y_LAB_University #Y_LAB_Actual

делает вид, что ничего не знает 👀 #Y_LAB_University #Y_LAB_Memes
делает вид, что ничего не знает 👀 #Y_LAB_University #Y_LAB_Memes

Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый виде
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый видеоролик “Как начать работать с Camunda 7”. О чем видео? В данном видео вместе с нашим Java-разработчиком Артемом разбираемся с Camunda — популярной платформой для автоматизации бизнес-процессов на Java. Рассмотрим ключевые возможности Camunda 7, сравним её с Camunda 8, познакомимся с BPMN-моделированием, создадим и запустим собственный процесс, а также разберём основные компоненты платформы и варианты её развёртывания. 📱 YouTube ——— 📱 VK #Y_LAB_University #Y_LAB_YouTube #Y_LAB_VK

Новый пост Y_LAB_Learning! | За кулисами Spring: как работают аспекты и почему вы уже используете AOP 📱 Java О чем статья? К
Новый пост Y_LAB_Learning! | За кулисами Spring: как работают аспекты и почему вы уже используете AOP 📱 Java О чем статья? Как работают Spring AOP и AspectJ, зачем нужны аспекты и как с их помощью выносить логирование, аудит, безопасность и другие сквозные задачи из бизнес-логики. Основные возможности, ограничения и практические сценарии использования. 📎 Читать статью #Y_LAB_University #Y_LAB_Learning

Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем разбирать фрагменты кода, в которых всё выглядит правильно до тех
Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем разбирать фрагменты кода, в которых всё выглядит правильно до тех пор, пока программа не начинает работать не так, как ожидалось. Сегодня под микроскопом небольшой пример на 📱 Python, который регулярно становится причиной багов даже у опытных разработчиков def add_item(item, items=[]): items.append(item) return items print(add_item("apple")) print(add_item("banana")) Вопрос:
Что выведет программа?
Многие ожидают такой результат: ['apple'] ['banana'] Но на самом деле вывод будет другим: ['apple'] ['apple', 'banana'] Почему так происходит 💬 На первый взгляд кажется, что при каждом вызове функции создаётся новый пустой список: items=[] Но в Python аргументы по умолчанию создаются один раз, в момент объявления функции, а не при каждом её вызове. То есть список items сохраняется между вызовами функции. ↔️Что происходит по шагам: 🎯 Первый вызов: add_item("apple") В список добавляется "apple": ['apple'] 🎯 Второй вызов: add_item("banana") Используется тот же самый список, поэтому результат становится: ['apple', 'banana'] Как исправить 🛠 Обычно используют None в качестве значения по умолчанию: def add_item(item, items=None): if items is None: items = [] items.append(item) return items Теперь при каждом вызове будет создаваться новый список. 💬💬💬 Такая особенность Python может долго оставаться незаметной: функция работает, ошибок нет, но данные начинают «переезжать» между вызовами. Именно поэтому изменяемые объекты в аргументах по умолчанию считаются одним из самых известных антипаттернов языка. А вы знали про эту особенность Python или ожидали другой результат? 👀 #Y_LAB_University #Y_LAB_Actual

#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes

Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый виде
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый видеоролик “Микросервисная коммуникация: Rest vs gRPC”. О чем видео? В данном видео вместе с нашим Java-разработчиком Максимом разбираем, как микросервисы обмениваются данными между собой, и сравним REST и gRPC на практике. Поговорим об эволюции HTTP, отличиях JSON и Protobuf, а также покажем лайвкодинг интеграции сервиса заказов и склада. 📱 YouTube ——— 📱 VK #Y_LAB_University #Y_LAB_YouTube #Y_LAB_VK

#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes