Struchkov // Java TechLead
919 subscribers
16 photos
2 videos
73 links
Заметки: https://garden.struchkov.dev
— — — — —
Блог: https://struchkov.dev/blog
— — — — —
Связь: @uPagge
Download Telegram
📢 Эволюция Java-кода: от анонимных классов к лямбда-выражениям.

Когда я работал наставником в Яндекс.Практикум, одной из самых сложных тем для студентов был функциональный подход в Java. Лямбда-выражения и функциональные интерфейсы буквально “ломали мозг” многим 🤯

В своей новой статье я детально разобрал, как можно перейти от базовых подходов работы с методами к — функциональным интерфейсам, лямбда-выражениям и ссылкам на методы. Мы рассмотрим, как сделать код не только более читабельным, но и легко расширяемым.

https://struchkov.dev/blog/ru/lambda-expression-java/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥281
Для лучшего усвоения материала, я делаю подробные конспекты статей, докладов и книг. И решил попробовать делиться этими конспектами, чтобы каждый мог получить полезные выводы из лекций, даже если нет времени слушать их целиком. Эти материалы также служат “почвой” для моего цифрового сада.

Буду рад получить вашу обратную связь: стоит ли продолжать делиться такими конспектами?

-- -- -- -- --

🤔 Virtual Threads или WebFlux? Что лучше выбрать?

Доклад о том, могут ли Virtual Threads заменить WebFlux в современных Java-приложениях. Оказалось, что оба подхода имеют свои плюсы и минусы, и выбор зависит от конкретных задач.

🔑 Основные выводы:

* Virtual Threads в Java 21 существенно повышают производительность и их внедрение довольно простое.
* WebFlux остается мощным инструментом для задач, требующих максимальной оптимизации, но за это придется заплатить сложностью разработки.


📊 По результатам тестирования:

* Прирост производительности при использовании Virtual Threads достигает 200% по сравнению с обычными потоками.
* WebFlux даёт ещё дополнительные 30%, но требует глубокого изучения и изменения подхода к разработке.

https://garden.struchkov.dev/ru/source/lecture/%D0%94%D0%BE%D0%BA%D0%BB%D0%B0%D0%B4.-%D0%9C%D0%BE%D0%B3%D1%83%D1%82-%D0%BB%D0%B8-Virtual-threads-%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C-Webflux
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥16
Struchkov // Java TechLead
📢 Эволюция Java-кода: от анонимных классов к лямбда-выражениям. Когда я работал наставником в Яндекс.Практикум, одной из самых сложных тем для студентов был функциональный подход в Java. Лямбда-выражения и функциональные интерфейсы буквально “ломали мозг”…
🚀 Новый разбор работы лямбд в Java 8!

Недавно я выпустил статью о лямбда-выражениях, и один из разделов вызвал много вопросов. Поэтому я решил переписать этот фрагмент, чтобы сделать его более понятным. Теперь в нём подробно объясняется, как работает LambdaMetafactory при динамическом создании лямбд.

Я также добавил пример, в котором сэмулировал поведение лямбды вручную с использованием LambdaMetafactory, без явного создания лямбды. Это поможет лучше понять, что происходит под капотом при работе с лямбда-выражениями в Java.

Перейти к обновленому разделу "Хранение в памяти и работа в JVM"
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21
💡 Хочу порекомендовать канал Юли (@javagirlspace), который я читаю с самого начала!

Мы с Юлей начали вести свои каналы примерно одновременно, и её публикации всегда вдохновляли меня. Сейчас она работает в Яндексе, а начинала как 1С-программист, постепенно став востребованным Java специалистом — её канал как раз о таких профессиональных достижениях и развитии. Там вы найдёте размышления о work-life балансе, профессиональном развитии и честные истории о сложностях, с которыми она сталкивается как на работе, так и в личной жизни.

Юля пишет легко и искренне, делится своими успехами и вызовами, будь то сдача сложных проектов, организация рабочего дня на удалёнке или участие в IT-мероприятиях. Особенно ценю, что она открыто рассказывает, как находит баланс и ритм в жизни, не скрывая трудностей. Канал полон её личного опыта и полезных мыслей, которые будут интересны не только разработчикам, но и всем, кто ищет гармонию в жизни.

Если вам нравятся живые, искренние заметки о жизни в IT, где можно не только почерпнуть новые знания, но и почувствовать поддержку, то этот канал — для вас. Кроме того, Юля всегда открыта для общения и рада отвечать на вопросы подписчиков.

👩‍💻 Заходите, читайте и вдохновляйтесь!
👍13🔥1
🚀 Введение в многопоточность: Преимущества, проблемы и ключевые концепции

Это первая статья из серии о многопоточности. Мы начнем с базовых понятий и будем постепенно углубляться до более сложных тем, таких как реактивное программирование. Всего в серии запланировано около 7-8 статей.

В этой статье мы обсудим основы многопоточности и затронем такие ключевые концепции, как потоки, конкурентность, параллелизм и асинхронность.

📖 Подробнее
🔥306🏆4👍1
Новая рубрика — “Вопрос недели”!

С сегодняшнего дня в канале стартует новая рубрика — “Вопрос недели”! 🎉 Каждое утро среды я буду задавать важный или интересный вопрос, связанный с разработкой, чтобы вы могли начать день с размышлений и обсуждений.

Приглашаю вас дискутировать в комментариях к опросу, обдумывать возможные решения и делиться своим опытом. А уже вечером выйдет заметка с разбором этой темы!

И, конечно, отличного вам рабочего дня! 🚀
👍8
🗳 Вопрос недели: Создаёте ли вы индекс для внешнего ключа при проектировании базы данных?
Anonymous Poll
37%
Да
34%
Нет
28%
В некоторых ситуациях
🔑 Индекс на внешний ключ — это не опция, а необходимость

Часто забываемый, но очень важный момент в проектировании схемы базы данных — добавление индекса на столбец внешнего ключа. Почему это так важно?

В заметке вы найдете наглядный и неочевидный пример, в котором без индекса запрос выполнялся 690 мс, а с индексом — всего 0.1 мс 😱

📖 Подробнее
3👍17🔥93😱1😨1
🔑 Как я решаю проблему уникальных идентификаторов в своих приложениях?

Когда дело касается уникальных идентификаторов, я почти всегда выбираю UUID. Однако версию UUID я подбираю в зависимости от задач конкретного сервиса. Каждая версия UUID имеет свои особенности, и выбор зависит от того, что важнее: сортируемость, случайность или производительность.

Подробнее о том, как я использую UUID и какие версии предпочитаю, можно узнать в моей заметке. Там вы найдете обзор каждой версии, с ее преимуществами и недостатками, а также сравнение производительности вставки и чтения в базе данных для разных версий UUID.

https://garden.struchkov.dev/ru/dev/Universal-Unique-IDentifier

А пока предлагаю вам поделиться своим опытом и проголосовать в опросе ниже!👇
1👍11
Какой способ генерации уникальных идентификаторов вы используете?
Anonymous Poll
11%
UUID V1
40%
UUID V4 / V5
12%
UUID V7
43%
Автоинкремент
6%
Собственная реализация
4%
Другие способы — расскажите в комментариях!
👍4
🔍 Потоки в Java: Thread и Runnable

В новом посте продолжаем цикл про многопоточность, разбираясь, когда лучше использовать Thread, а когда Runnable, и рассматривая их ключевые отличия.

Сегодня потоки практически никогда не создают напрямую — вместо этого используют высокоуровневые инструменты, такие как ExecutorService или ForkJoinPool, которые мы рассмотрим в следующих статьях.

Однако важно понимать, что происходит «под капотом» этих абстракций, чтобы уверенно строить многопоточные приложения.

https://struchkov.dev/blog/ru/threads-in-java-thread-and-runnable/
3👍21🔥8
Небольшой лайфхак для защиты оплаченной лицензии в IntelliJ IDEA: установите случайные значения в настройках proxy.

Или поднять нормальную прокси за бугром и указать ее :)

P.S. Если используете Toolbox App, то там тоже нужно добавить
3👍20❤‍🔥1🔥1
🛠️ Как управлять VIEW в Liquibase и избегать проблем с их обновлением?

В заметке я объясняю, как справиться с изменениями вьюх и почему важно выделять их в отдельные changeLog файлы. В статье есть практические советы, примеры кода и ключевые рекомендации по поддержке вьюх без ошибок и конфликтов.

📖 Подробнее
3👍12🔥2🤔1
🧩 Пятничный Java-пазлер: `System.out.println(-Integer.MIN_VALUE)`
Anonymous Quiz
45%
-2147483648
15%
Исключение
5%
0
4%
-1
32%
2147483648
👍11🤔10
Пятничный наброс на финтех

Многие говорят, что у нас один из лучших финтехов в стране, но отдельные аспекты у меня вызывают вопросы — особенно в части безопасности. Недавно посмотрел видео, которое напомнило мне об одной из таких проблем, и решил поделиться мыслями.

Почему в наших банковских и особенно инвестиционных приложениях до сих пор не используются протоколы безопасности вроде U2F или хотя бы TOTP?

Для вывода средств с банковского счёта сейчас требуется только пароль и SMS-код, который легко перехватить, как и голосовой звонок. Если мошенникам удаётся похитить деньги, виноватым обычно считают самого пользователя, полагая, что он спалил свой пароль.

Особенно странно смотрятся платные сервисы банков, предлагающие защиту от мошенничества за отдельную плату.

Для сравнения: чтобы вывести средства с криптобиржи, требуется многоступенчатая аутентификация. Сначала — пароль и физический токен (U2F) для входа в систему, затем при выводе отправляется одноразовый код на почту (письмо при этом содержит заранее установленное пользователем слово, защищающее от фишинга), одноразовый SMS-код и ещё один код TOTP, сгенерированный приложением-аутентификатором. Только после ввода всех данных возможен вывод средств. Вот это я понимаю — надежная защита.

Разумеется, усиление безопасности ухудшает пользовательский опыт, но я не предлагаю включать все по умолчанию. Дайте выбор: кому нужна дополнительная защита — пусть включает её, кому не нужна — может остаться на SMS. В случае с криптобиржами даже эту многоступенчатую защиту можно сделать более удобной: можно добавить адрес кошелька в белый список и впоследствии выводить на него средства без повторного подтверждения.

Так почему же до сих пор отсутствуют такие протоколы в нашем хваленом финтехе? Это негласный запрет? или просто низкий приоритет у таких задач безопасности, которые не приносят бизнесу деньги и важнее выпускать новые фичи? Или просто эти протоколы недостаточно надежны?
👍21🤔5💯3
Работал с виртуальной машиной, куда нельзя было нормально перекидывать файлы. В RocketChat при этом обычные файлы блокировались, а картинки проходили. Так и появилась png-zip — утилита для упаковки произвольных файлов в PNG тремя способами.

Append — дописывает данные после IEND, декодеры это игнорируют.
Chunk — кладёт данные в кастомный чанк pnZp, при необходимости разбивая большие файлы на пронумерованные части.
LSB — прячет данные в младших битах пикселей, незаметно для глаза.

Есть даже bootstrap-режим, когда картинка сама себя распаковывает.

Минусы: append и chunk не переживают пересжатие PNG, LSB не переживает конвертацию в JPEG. Шифрование отдельно через GPG.

Python 3.6+, только стандартная библиотека. Есть PowerShell-версия.

Подробнее / Исходники
111👍5😁5👏1
Недавно скинули в рабочем чате видео про Meshtastic — устройства, которые общаются между собой по радио без интернета и сотовой связи. Заинтересовался, собрал несколько штук.

В городе одно устройство бьёт на 2-4 км, а через ретрансляторы — до 10. Удивило другое: оказалось, в городе уже сотни людей строят эту сеть — со стационарными узлами и координацией.

Фото через такой мессенджер не отправишь, но «я на месте, всё ок» — долетает. На фоне новостей про пейджеры и рации — выглядит как более разумный вариант 😁
— — —
Подробнее / Заметки
14😁5🔥2👍1
Боты добрались до моего маленького self-hosted Gitea. Серьёзно, кому он вообще сдался?

CPU 136%, RAM в потолке, SQL-запросы по 6 секунд. 3.2 миллиона запросов к commit hash URL-ам одного репо. fail2ban: 431 match, 0 banned — тысячи IP, каждый заходит один раз.

Классические инструменты оказались бесполезны. Пришлось учить Nginx отвечать тишиной.

https://hub.struchkov.dev/ru/gitea-botnet-3m-requests-return-444
👍14🤔21
Мой pet-проект 💩 для сообщества вчера превратился во взрослый сервис. Был маленький сайтик на shared-сервере, соседствовал с блогами. Теперь — свой выделенный VPS, новый домен 🚀

Передо мной: миграция с SQLite на PostgreSQL, Docker Compose стек, PostGIS, MinIO, nginx с certbot. Всё сразу. Буду писать обо всех граблях по дороге — где что поломаю, как исправлю.

Что за проект и для какого сообщества — расскажу чуть позже. Пока скажу только, что он про движение 😏

Первые заметки уже скоро. А пока — угадывайте в комментариях ⬇️
1👍27👏2
Обновил старую статью про OAuth 2.0 и OpenID Connect — она была написана в 2021-м, и с тех пор в стандартах произошли серьёзные изменения.

Главное: Implicit Grant и Resource Owner Password теперь запрещены (RFC 9700 с января 2025). Раньше я описывал их как рабочие варианты, и кто-то мог реализовать по ним небезопасный flow.

Добавил актуальное: PKCE для всех публичных клиентов, Device Authorization для CLI и IoT, ротацию refresh-токенов, расширенный разбор OpenID Connect, ссылки на все новые RFC.

https://struchkov.dev/blog/ru/how-oauth2-works/
👍16🔥8
Обновил старую статью про NGINX. Добавил Brotli, HTTP/3, исправил синтаксис для свежих версий. Ещё вычистил кучу мёртвого кода типа поддержки IE6 и Flash (привет, 2010-е 🥲). Заодно обновил секцию SSL — теперь там OCSP Stapling и session cache. Вроде всё, что я использую сейчас на своих сайтах, собрано в одном месте.

https://struchkov.dev/blog/ru/nginx-optimization/
1👍1731🥰1