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
773
Obunachilar
-124 soatlar
-67 kunlar
-630 kunlar
Obunachilarni jalb qilish
Iyun '26
Iyun '26
+9
0 kanalda
May '26
+8
0 kanalda
Get PRO
Aprel '26
+13
1 kanalda
Get PRO
Mart '26
+11
0 kanalda
Get PRO
Fevral '26
+9
0 kanalda
Get PRO
Yanvar '26
+8
0 kanalda
Get PRO
Dekabr '25
+13
0 kanalda
Get PRO
Noyabr '25
+29
0 kanalda
Get PRO
Oktabr '25
+27
0 kanalda
Get PRO
Sentabr '25
+15
0 kanalda
Get PRO
Avgust '25
+6
0 kanalda
Get PRO
Iyul '25
+11
0 kanalda
Get PRO
Iyun '25
+11
0 kanalda
Get PRO
May '25
+19
0 kanalda
Get PRO
Aprel '25
+21
0 kanalda
Get PRO
Mart '25
+41
0 kanalda
Get PRO
Fevral '25
+24
0 kanalda
Get PRO
Yanvar '25
+22
0 kanalda
Get PRO
Dekabr '24
+18
0 kanalda
Get PRO
Noyabr '24
+20
0 kanalda
Get PRO
Oktabr '24
+26
0 kanalda
Get PRO
Sentabr '24
+46
0 kanalda
Get PRO
Avgust '24
+24
0 kanalda
Get PRO
Iyul '24
+22
0 kanalda
Get PRO
Iyun '24
+28
0 kanalda
Get PRO
May '24
+48
0 kanalda
Get PRO
Aprel '24
+155
0 kanalda
Get PRO
Mart '24
+33
0 kanalda
Get PRO
Fevral '24
+250
0 kanalda
Get PRO
Yanvar '24
+128
0 kanalda
Get PRO
Dekabr '23
+25
0 kanalda
Get PRO
Noyabr '23
+27
0 kanalda
Get PRO
Oktabr '23
+64
0 kanalda
Get PRO
Sentabr '23
+583
0 kanalda
Sana
Obunachilarni jalb qilish
Esdaliklar
Kanallar
23 Iyun+2
22 Iyun0
21 Iyun0
20 Iyun0
19 Iyun0
18 Iyun0
17 Iyun+1
16 Iyun0
15 Iyun0
14 Iyun0
13 Iyun0
12 Iyun0
11 Iyun+1
10 Iyun+1
09 Iyun+1
08 Iyun0
07 Iyun+1
06 Iyun0
05 Iyun0
04 Iyun+1
03 Iyun0
02 Iyun+1
01 Iyun0
Kanal postlari
Новый пост 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

2
#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes
120
3
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый виде
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый видеоролик “Что такое Agile?”. О чем видео? В данном видео вместе с нашим Scrum-мастером Анной разбираемся, что такое Agile, как и почему появился этот подход, чем он отличается от Scrum и Kanban, а также почему его внедрение далеко не всегда приносит ожидаемый результат. Обсудим историю Agile, его применение в IT и за его пределами, а также самые распространённые ошибки, которые мешают командам работать по-настоящему гибко. 📱 YouTube ——— 📱 VK #Y_LAB_University #Y_LAB_YouTube #Y_LAB_VK
166
4
#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes
183
5
Новый пост 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
188
6
#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes
178
7
😭😭😭 #Y_LAB_University #Y_LAB_Memes
😭😭😭 #Y_LAB_University #Y_LAB_Memes
360
8
Новый пост 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
231
9
Новый пост 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
192
10
делает вид, что ничего не знает 👀 #Y_LAB_University #Y_LAB_Memes
делает вид, что ничего не знает 👀 #Y_LAB_University #Y_LAB_Memes
186
11
Новый пост 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
253
12
Новый пост Y_LAB_Learning! | За кулисами Spring: как работают аспекты и почему вы уже используете AOP 📱 Java О чем статья? К
Новый пост Y_LAB_Learning! | За кулисами Spring: как работают аспекты и почему вы уже используете AOP 📱 Java О чем статья? Как работают Spring AOP и AspectJ, зачем нужны аспекты и как с их помощью выносить логирование, аудит, безопасность и другие сквозные задачи из бизнес-логики. Основные возможности, ограничения и практические сценарии использования. 📎 Читать статью #Y_LAB_University #Y_LAB_Learning
252
13
Новый пост 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
224
14
#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes
225
15
Новый пост 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
275
16
#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes
244
17
Новый пост Y_LAB_Learning! | Webpack, Vite и No-Build: как сегодня собирать frontend-проекты 🔵 Frontend О чем статья? Как из
Новый пост Y_LAB_Learning! | Webpack, Vite и No-Build: как сегодня собирать frontend-проекты 🔵 Frontend О чем статья? Как изменился подход к сборке Frontend-проектов: от Webpack к Vite и no-build решениям. Плюсы, минусы и сценарии использования каждого подхода в современной разработке. 📎 Читать статью #Y_LAB_University #Y_LAB_Learning
276
18
Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем рубрику, в которой разбираем небольшие фрагменты кода и ищем в ни
Новый пост Y_LAB Actual | Код под микроскопом 🔍 Продолжаем рубрику, в которой разбираем небольшие фрагменты кода и ищем в них скрытые ошибки, неочевидное поведение и моменты, которые могут привести к неожиданным результатам. 🗄 Сегодня пример не на языке программирования, а на SQL. И это тот случай, когда одна маленькая деталь может повлиять сразу на все данные в таблице: sql UPDATE users SET is_active = false; Вопрос: Что сделает этот запрос? На первый взгляд кажется, что всё просто: обновит значение поля is_active. Но есть важный нюанс: запрос изменит каждую строку в таблице users. 📌 Итог: • Все пользователи станут неактивными; • Данные изменятся сразу для всей таблицы; • Откатить последствия без резервной копии может быть непросто. ❓ Почему так происходит В запросе отсутствует ключевое условие: sql WHERE ... Без WHERE команда UPDATE применяется ко всем записям, которые находятся в таблице. То есть этот код: sql UPDATE users SET is_active = false; по сути означает: > «Сделать is_active = false для каждого пользователя». 💡 Как должно быть? Если нужно обновить конкретную запись, необходимо явно указать условие: sql UPDATE users SET is_active = false WHERE id = 42; Теперь изменится только один пользователь. 🛠 Как защититься от таких ошибок? Полезная привычка перед UPDATE и DELETE сначала запускать: sql SELECT * FROM users WHERE id = 42; Так можно заранее проверить, какие строки попадут под изменение. 🎯🎯🎯 Подобная ошибка кажется слишком очевидной… пока не случается в реальной базе. Иногда один пропущенный WHERE — это не просто баг, а очень долгий вечер восстановления данных. Случалось когда-нибудь запускать запрос и сразу тянуться к backup? 👀 #Y_LAB_University #Y_LAB_Actual
225
19
#Y_LAB_University #Y_LAB_Memes
#Y_LAB_University #Y_LAB_Memes
212
20
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый виде
Новый пост Y_LAB Videos! | Свежее видео Всем привет! Рады сообщить, что на наших ютуб-канале и вк-сообществе вышел новый видеоролик “Объектное хранилище S3: Полный разбор и настройка MinIO в Spring Boot”. О чем видео? В данном видео вместе с нашим Java-разработчиком Юрием разбираем, как устроено объектное хранилище S3 и почему этот стандарт стал основой для работы с файлами в современных backend-системах. От теории и сравнения популярных S3-решений до практической настройки MinIO и его интеграции с Spring Boot 3: пошагово показываем, как организовать надежное и масштабируемое файловое хранилище в Java-приложении. 📱 YouTube ——— 📱 VK #Y_LAB_University #Y_LAB_YouTube #Y_LAB_VK
282