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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish
770
Obunachilar
-224 soatlar
-27 kunlar
-630 kunlar
Postlar arxiv
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый виде
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый видеоролик “Хочу стать Junior QA”. О чем видео? В этом видео разберем Roadmap Junior QA: кто такой QA Engineer, какие hard и soft skills необходимы начинающему тестировщику, какие инструменты используются в работе и что нужно изучить для успешного старта в профессии. Также поговорим о возможных направлениях развития и карьерном росте в тестировании. 📱 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_Learning! | Тестирование в Python: от юнит-тестов до TDD и monkey patching 📱 Python О чем статья? Чем отлич
Новый пост Y_LAB_Learning! | Тестирование в Python: от юнит-тестов до TDD и monkey patching 📱 Python О чем статья? Чем отличаются юнит- и интеграционные тесты, что такое TDD, когда использовать mocking и monkey patching. 📎 Читать статью #Y_LAB_University #Y_LAB_Learning

Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем рубрику, в которой разбираем реальные ситуации из разработки и ищ
Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем рубрику, в которой разбираем реальные ситуации из разработки и ищем неочевидные причины ошибок. Сегодня под микроскопом — многопоточность в Java 📱 class Counter { private int value = 0; public void increment() { value++; } public int getValue() { return value; } } Представим, что метод increment() одновременно вызывают 100 потоков по 1000 раз каждый. ❓ Вопрос: Какое значение в итоге вернёт: counter.getValue(); Кажется, ответ очевиден: 100000 Но на практике результат может быть совершенно другим. 🤓 Например: 98341 99612 99987 И каждый запуск программы может давать новое значение. 🤔 Почему так происходит? Операция: value++; только выглядит как одно действие. На самом деле она состоит сразу из трёх шагов: 🎯1. прочитать текущее значение; 🎯2. увеличить его на единицу; 🎯3. записать обратно. Если два потока одновременно прочитают одно и то же значение, оба увеличат его и оба запишут результат. Один из инкрементов просто потеряется. Кроме того, в многопоточных приложениях может возникнуть ещё одна проблема — видимость изменений между потоками. Из-за оптимизаций процессора и JVM один поток может некоторое время работать с устаревшим значением переменной. Для решения именно этой задачи в Java существует ключевое слово volatile. Оно гарантирует, что потоки будут видеть актуальное значение переменной. Однако в нашем примере volatile не решит проблему полностью. Операция value++ всё равно состоит из чтения, увеличения и записи, поэтому инкременты могут теряться. ↔️ Например: Поток A читает 5 Поток B читает 5 Поток A записывает 6 Поток B записывает 6 Хотя ожидалось уже значение 7. 🔗 Как исправить? Для счётчиков в многопоточной среде обычно используют AtomicInteger: java AtomicInteger counter = new AtomicInteger(); counter.incrementAndGet(); или синхронизацию (synchronized), если требуется защитить более сложную логику. 📢📢📢 Такие ошибки одни из самых неприятных. Программа не падает. Компилятор не выдаёт ошибок. Тесты могут проходить десятки раз подряд. А проблема проявится только под нагрузкой, когда приложение окажется в реальной эксплуатации. Сталкивались когда-нибудь с багами, которые появлялись только при большом количестве одновременных запросов? 👀 #Y_LAB_University #Y_LAB_Actual

Не беспокоить... машина учится 🧑‍🏫 #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