Тёмный
Aleksandr Barmin
Aleksandr Barmin
Aleksandr Barmin
Подписаться
Hi there! I'm Aleks 🧑‍💻. It's nice to virtually meet you!

I started a few RU-vid series like Weekly Links and [Leet] Code with me to show that software engineering still can be fun! By sharing news and experience this way I hope I help you to grow as developers as well.

I'm so happy to see you here!
Weekly Links #18 (#java #jep #rdbms #index)
11:47
3 месяца назад
jQuery 4.0.0 Beta is Here!
7:04
3 месяца назад
Weekly Links #17 (#java #JEP #Spring)
9:15
3 месяца назад
[LEET] Code with me #15 (3Sum)
9:46
6 месяцев назад
[LEET] Code with me #13 (Roman to Integer)
5:25
6 месяцев назад
Комментарии
@user-sc5hb2px3f
@user-sc5hb2px3f 15 часов назад
Привет, сложность последнего решения будет O(n^2)?
@ABarmin
@ABarmin 9 часов назад
Да, сложность по времени будет O(n^2), все верно.
@TheExcentro
@TheExcentro 19 часов назад
Спасибо, очень полезно. Я слаб в алгоритмах, по этому хотелось бы видеть обьяснение алгоритма в картинках, если можно :)
@consumerpredicate2559
@consumerpredicate2559 19 часов назад
О, отличный способ начать день с чего-то реально полезного в RU-vid )
@vladimir2139
@vladimir2139 День назад
Spring context +, но Spring Boot :(
@ABarmin
@ABarmin День назад
Про Spring Boot будет, но совсем немного, в основном, про XML и Spring Configuration.
@vladimir2139
@vladimir2139 День назад
@@ABarmin спасибо. Т.к. некоторые проекты сидят на простом спринге
@aliakseiprybytkou7552
@aliakseiprybytkou7552 2 дня назад
о май год
@ABarmin
@ABarmin 2 дня назад
Ну да, кринж!
@alexfern25
@alexfern25 2 дня назад
Can u bring back your English version also 👍👍
@zisoua
@zisoua 9 дней назад
Кто может подсказать где говорилось про protobuf ? А то хочется посмотреть как правильно его использовать )) спасибо!
@ABarmin
@ABarmin 8 дней назад
В 28 выпуске Weekly Links было совсем чуть-чуть про Protobuf + gRPC ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-wWXzrCkyMJw.html
@Lion-hx6th
@Lion-hx6th 9 дней назад
Здравствуйте, как попасть к Вам в команду?
@ABarmin
@ABarmin 8 дней назад
Я покинул EPAM в начале 2024 года. Вакансии, скорее всего, есть на сайте.
@kopn9k735
@kopn9k735 11 дней назад
Вери гуд, вери спасибо!
@ABarmin
@ABarmin 8 дней назад
Рад, что нравится)
@user-gl8vw5vd9u
@user-gl8vw5vd9u 12 дней назад
Комментарии про то, что спикер чавкает. Походу следующие комментарии будут про то, что он открывает рот....
@ABarmin
@ABarmin 12 дней назад
Да вообще!
@user-yp4it7ed5r
@user-yp4it7ed5r 13 дней назад
Иногда ии неплохо пишет юнит тесты
@ABarmin
@ABarmin 12 дней назад
Ну, 50 на 50. Простые тесты и сам могу написать, а сложные, где надо думать ИИ подсказывает не очень все еще =)
@Bassmaniaaa
@Bassmaniaaa 15 дней назад
Хороший доклад, спасибо. Однако, могучий народный перст указал на правильный путь: k8s, helm, и да прибудет с вами микросервисное щастье. У кого побольше денег - openshift. И инфраструктура будет настолько далеко от бизнесового кода, что они вообще ниразу друг друга не встретят.
@ABarmin
@ABarmin 14 дней назад
Да, с 2019 года много воды утекло и докеры-кубернетесы многие задачи решают лучше.
@user-007-1
@user-007-1 16 дней назад
В ликви же не только xml, а ещё и sql и yml формат поддерживается) Если принимаете идеи, то интересно посмотреть на разбор именно продвинутых функций ликвибейза, например передача переменных из пропертей в файлы миграций, команда не падать если имеющаяся миграция изменена и прочее (я знаю только эти из реальных проектов, а хотелось бы понимать все возможности)
@ABarmin
@ABarmin 14 дней назад
Отличная идея, добавлю в свои планы.
@voult89
@voult89 13 дней назад
Еще в ликвибейз можно закинуть все связаные скрипты в один sql-файл и разбить на разные чейнджсеты. Еще и чейнджсетам можно дать нормальные имена, а не непонятные id. Ну и при сборке, ликвибейз можно отделить от имеджа основного приложения, но это уже больше CI/CD.
@voult89
@voult89 13 дней назад
@@ABarmin Было бы еще интересно посмотреть на сравнение ликвибейз и флайвей
@oleggye
@oleggye 17 дней назад
Александр, спасибо!
@ABarmin
@ABarmin 14 дней назад
Рад, что нравится.
@chaywithlemon
@chaywithlemon 18 дней назад
Много чавкает
@ABarmin
@ABarmin 18 дней назад
Ой, это, видимо, случайно так получается
@oleggye
@oleggye 20 дней назад
Спасибо, Александр! Не хотели бы вы сделать рубрику по рефакторингу кода?
@ABarmin
@ABarmin 18 дней назад
Я подумаю, пока разбираюсь в weekly tips и лайв-кодингом. Спасибо за идею
@user-sr2kd7kd6v
@user-sr2kd7kd6v 21 день назад
Спасибо! Офигенно полезная информация!
@ABarmin
@ABarmin 18 дней назад
Спасибо!
@user-eu7xl3nf9y
@user-eu7xl3nf9y 21 день назад
Спасибо!
@ABarmin
@ABarmin 18 дней назад
Рад, что нравится :)
@Valerikvv80
@Valerikvv80 21 день назад
полезное видео
@ABarmin
@ABarmin 18 дней назад
Спасибо:)
@Vladimir-pz5eo
@Vladimir-pz5eo 22 дня назад
Просто о сложном . Спасибо!
@ABarmin
@ABarmin 22 дня назад
Рад, что нравится!
@deniskleverov8288
@deniskleverov8288 23 дня назад
А разве Document и так не содержит поле DocumentType? Разве не правильнее в него и из него конвертировать? А то выйдет что формат документа поменяется, а тест всё еще проходит.
@ABarmin
@ABarmin 22 дня назад
Привет! Да, в документе есть поле типа DocumentType и класс Document для теста тоже подходит. Однако, представим, что в класс Document содержит больше полей, тогда все их придется в тесте инициализировать и обрабатывать. С другой стороны, если DocumentType нигде кроме класса Document не используется, можно и для теста его использовать. Так что, как обычно, все зависит от скойпа. Здесь в тесте я хотел показать именно сереализацию-десериализацию одного поля в изоляции, поэтому и добавил отдельный класс.
@user-iy5ip6zl9d
@user-iy5ip6zl9d 23 дня назад
Спасибо
@ABarmin
@ABarmin 23 дня назад
Рад, что нравится!
@artemdemchenko2358
@artemdemchenko2358 23 дня назад
Доклад пушка! Большое спасибо
@ABarmin
@ABarmin 23 дня назад
Спасибо, стараюсь!
@user-007-1
@user-007-1 24 дня назад
Александр, а можете посоветовать материалы по интеграционному тестированию? Чтобы с 0 погрузиться Мы работаем с интеграционными тестами бд, но я делаю это вслепую почти)
@ABarmin
@ABarmin 23 дня назад
У меня есть вот такой доклад про тестирование ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-alDo8_8f-DE.html
@user-007-1
@user-007-1 25 дней назад
Классное видео! Разберите пожалуйста полную и правильную настройку objectMapper в spring boot приложении, до конца не понятен смысл всяких там findAndRegisterModules, подключение всяких разных serialization features
@ABarmin
@ABarmin 22 дня назад
Отличная идея, добавлю себе в список.
@user-iu6yz6ck6h
@user-iu6yz6ck6h 25 дней назад
Очень крутое видео! Очень полезно. Спасибо большое
@ABarmin
@ABarmin 25 дней назад
Спасибо, буду продолжать. Если есть интересные темы - пишите в комментариях.
@lexjust
@lexjust 25 дней назад
Очень круто 👍
@ABarmin
@ABarmin 25 дней назад
Спасибо, стараюсь!
@user-yp4it7ed5r
@user-yp4it7ed5r 27 дней назад
Круть, просмотрел половину видео под вьетнамские флешбеки парсинга эксемелек
@ABarmin
@ABarmin 25 дней назад
О да, это я еще про SAX/StAX не рассказывал, там бы вообще накрыло - какие большие XML-ки без поточных сканеров)
@user-iy5ip6zl9d
@user-iy5ip6zl9d Месяц назад
Спасибо!
@ABarmin
@ABarmin 29 дней назад
Пожалуйста!
@user-iu6yz6ck6h
@user-iu6yz6ck6h Месяц назад
Очень крутое видео! Спасибо
@ABarmin
@ABarmin Месяц назад
Спасибо, рад, что нравится
@lexjust
@lexjust Месяц назад
👍👍👍 отличный обзор
@ABarmin
@ABarmin Месяц назад
Спасибо!
@oleggye
@oleggye Месяц назад
Александр, спасибо за отличный выпуск!
@ABarmin
@ABarmin Месяц назад
Рад, что понравилось
@user-ix5ti3nh3e
@user-ix5ti3nh3e Месяц назад
Спасибо, Александр! Интересный формат. И вообще крутая идея с weekly links.
@ruslanm.1120
@ruslanm.1120 Месяц назад
bootstrap выпилили jquery
@voult89
@voult89 Месяц назад
Теперь можно в следующей серии написать deserializer без поля с типом, а по сигнантуре. Было бы интересно посмотреть)
@ABarmin
@ABarmin Месяц назад
Я в следующей серии хотел сделать то же самое но с использованием Jackson-а - там есть несколько вариантов - на аннотациях и через собственный десериализатор.
@voult89
@voult89 Месяц назад
Было бы прикольно иметь два формата: weekly links как было и weekly links live coding по одной из статей.
@ABarmin
@ABarmin Месяц назад
Ждите, будет!
@voult89
@voult89 Месяц назад
Для повторных запросов хорошо подходит optimistic lock, например по timestamp. Обновил запись - обновил timestamp. Если не одной записи не обновилось - вернуть 422. Второй запрос по дефолту будет 422 возвращать, так как не сможет обновить запись. Что касается создания чего-то - тут unique index поможет. Ну или можно вынести это в логику приложения, но будет сложнее читать и придется делать транзакцию, чтобы никто не обновил запись, пока мы проверяем. Где лучше эту логику держать: бд или сервис - хороший вопрос. Но клиенту доверять точно не стоит, даже если он какой-то ключ будет кидать. Кто его знает, может он на повторный запрос кинет новый ключ. Как по мне, выглядит как накручивание лишней логики.
@ABarmin
@ABarmin Месяц назад
> Если не одной записи не обновилось - вернуть 422. Второй запрос по дефолту будет 422 возвращать, так как не сможет обновить запись. В таком случае логика должна быть сразу реализована с поддержкой идемпотентности. > Что касается создания чего-то - тут unique index поможет. Предположим, вы переводите некоторую сумму с аккаунта А на аккаунт Б. В данном сценарии индекса будет недостаточно. > Кто его знает, может он на повторный запрос кинет новый ключ. Идея как раз в том, чтобы на все повторы одного и того же запроса был один и тот же ключ. Как обычно - есть сценарии, в которых можно обойтись без внешнего ключа, есть те, в которых не получится.
@voult89
@voult89 Месяц назад
@@ABarmin 1. Может я что-то недопонимаю, но мы тут не вернем тот же результат. В первом запросе мы обновим данные и вернем новые,, на второй запрос вернем 422. 2. Вопрос был про создание, на создание индекса должно хватить, не вовсех случаях, но все же. Что касается перевода денег, то данная операция должна быть атомарной, не зависимо от ключа. 3. Не думаю, что бекенд должен доверять фронтенду. В целом, мой поинт в том, что логика с ключем - усложнение приложения. Нам в любом случае нужно добавлять логику, если придет одинаковый запрос с разными ключами (два клиента сделали одно и тоже в одно время). Добавлять к этому еще логику, где мы храним результат прошлого запроса по ключу, довольно перегружает логику. Проще сказать фронту, чтобы тот рефрешнул данные.
@ABarmin
@ABarmin Месяц назад
Стоит отметить, что общий случай довольно сложно себе представить. Представьте, что запрос в стороннюю систему был отправлен, обработан, но ответ клиентом не получен - случилась проблема с сетью. В этом случае клиент может отправить запрос еще раз. Если для сервера запрос идемпотентный, он может вернуть тот же ответ еще раз, например, извлечь данные из БД и просто вернуть. Если же запрос для сервера не идемпотентный, например, создание записей в БД, то повторная обработка запроса приведет к созданию дублирующих записей. В этом случае у сервера опять же есть несколько вариантов действия - вернуть 422 или вернуть уже созданную запись. А теперь наиболее сложная часть - как убедиться, что повторный запрос действительно повторный, а не второй такой же? Вариантов несколько: Во-первых, можно попробовать использовать уникальный индекс в базе данных. Вариант подходит если запрос можно уникально идентифицировать по совокупности полей, но не подходит, когда может прийти второй такой же запрос. Второй способ - каждому взаимодействию можно присвоить уникальный идентификатор (напомню, что клиент не всегда браузер, это может быть и второе серверное приложение). Такие образом повторный (не второй такой же, а именно повторный) запрос будет иметь тот же самый идентификатор и будет обработан только один раз. На самом деле, это не очень частный сценарий при взаимодействии фронтенда и бакенда, но довольно частый сценарий при взаимодействии между сервисами в бакенде. В общем виде - ключ позволяет отделять повторные запросы от последовательных запросов с одинаковыми данными.
@dmytro0228
@dmytro0228 Месяц назад
Александр, если у вас есть время для этого, то сделайте какой-нибудь исчерпывающий курс по какой-то важной для понимая темы. Я взглянул, у вас есть плейлист с курсом от Epam, но он 2017 года и он очень длинный, его смотреть будет сложновато. В целом, если у вас есть такой опыт преподавания, то было классно увидеть Ваш новый и актуальный курс, например, по Spring. Было бы до невозможности круто увидеть от вас курс по Spring AI хотя бы до базового уровня))
@ABarmin
@ABarmin Месяц назад
Эх, по AI курса, скорее всего, не будет, но у меня есть заготовка на курс по микросервисам. Как думаете, будет интересно?
@dmytro0228
@dmytro0228 Месяц назад
​@@ABarmin Будет интересно абсолютно все, где есть необходимая база по теории и практическое применение, так что при желании и наличии времени выпускайте все что есть))) Вообще было бы классно понять как изучать какую-то технологию не по курсам, а по документации. Курсы - это классно, но думаю многим хочется стать независимыми, но я когда пытаюсь хоть что-то делать по документации, то это превращается в кучу боли. Возможно есть какие-то принципы и подходы для того, чтоб изучить документацию, но которые многие не знают. Вот если бы кто-то с большим опытом объяснил как работать с докой, как оптимально учиться и тд, было бы бомбезно. Банальный пример - Spring AI, новая технология, курсов по ней ещё нет, и что делать? как самому во всем разобраться? Читать документацию на английском от корки до корки? или быстро просматривать какие-то куски? Если, вдруг, Вам нужна будет идея ролика или цикла роликов - возьмите на заметку, потому что уметь работать с документацией - важнее чего-либо.
@user-007-1
@user-007-1 24 дня назад
Да, будет очень интересно Особенно, если затронуть кубер, паттерны отказоустойчивости
@dmytro0228
@dmytro0228 Месяц назад
Коммент в поддержку канала! Спасибо за старания!
@ABarmin
@ABarmin Месяц назад
Спасибо, стараюсь!
@user-iy5ip6zl9d
@user-iy5ip6zl9d Месяц назад
Спасибо
@ABarmin
@ABarmin Месяц назад
Спасибо за поддержку!
@voult89
@voult89 Месяц назад
Удобно хранить дату в UTC, а в коде использовать лонг, который и на ui возвращать, который, в свою очередь, лучше знает где пользователь находится и сам прокручивает время.
@ABarmin
@ABarmin Месяц назад
Я так полагаю, имеется в виду жаваскриптовый Date, который по умолчанию отображает время в часовом поясе пользователя - тоже вариант. Стоит иметь в виду, что не очень хорошо подходит для разных админок, где нужно показать админу (который в другом часовом поясе) во сколько произошло событие (в часовом поясе пользователя). Чем дольше я занимаюсь разработкой, тем больше понимаю, сколько разных нюансов нужно каждый раз держать в голове чтобы решить даже такую простую задачу как отображение даты.
@voult89
@voult89 Месяц назад
@@ABarmin Это уже похоже на какой-то аудит. Тут, мне кажется, нет смысла усложнять всю систему преобразованием даты и стоит сохранять часовой пояс пользователя только в аудите, а дату также хранить в UTC. Действительно, везде есть свои нюансы, но кмк, всегда стоит смотреть на самый простой вариант, ибо чем больше будет накрученно такой логики, там сложнее будет поддерживать и развивать приложение. И тут появляется вопрос: а стоило ли оно того?
@ABarmin
@ABarmin Месяц назад
Как обычно, уровень сложности зависит от требований. Можно начать с самого простого варианта и хранить дату-время как получится и затем по мере изменения требований постепенно усложнять и поддерживать новые возможности. Здесь как везде - важно не переусложнять с самого начала, но при этом оставлять какую-то возможность для расширения и обновления.
@user-cm2vr5ss4z
@user-cm2vr5ss4z Месяц назад
Спасибо
@ABarmin
@ABarmin Месяц назад
Рад, что нравится!
@TheExcentro
@TheExcentro Месяц назад
Добрый день, Александр. Спасибо за видео. Раз уж Вы упомянули Jooq, может сделаете по нему коротенькое видео?
@ABarmin
@ABarmin Месяц назад
Без проблем, а о чем хотите послушать?
@TheExcentro
@TheExcentro Месяц назад
@@ABarmin Можно просто ознакомительное видео - что это, как и зачем можно использовать, в чем отличие от хибера. Можно еще пример использования со spring boot.
@ABarmin
@ABarmin Месяц назад
Я добавлю себе в список идей, спасибо!
@alisaromanova3933
@alisaromanova3933 2 месяца назад
Спасибо за спринг кеш, как раз на днях делал костыль, возможно удастся его заменить
@ABarmin
@ABarmin 2 месяца назад
Со спринговым кешем надо быть аккуратным, как и с любым другим кешем, особенно, если запущено несколько инстансов одного приложения.
@alisaromanova3933
@alisaromanova3933 2 месяца назад
Спасибо Александр, что помогаешь быть в курсе новых технологий!
@ABarmin
@ABarmin 2 месяца назад
Рад, что мои видео полезны!
@romanbush5164
@romanbush5164 2 месяца назад
хотел узнать, что такое паттерн Service Template, прозвучал ли он в видео?
@ABarmin
@ABarmin 2 месяца назад
Шаблон проекта, по которому создаются новые сервисы. Ближайший аналог - Maven Archetype, из которого можно сразу создать проект с нужной структурой пакетов, заранее добавленными зависимостями и, например, сконфигурированными метриками.
@oleggye
@oleggye 2 месяца назад
Спасибо, Александр!
@ABarmin
@ABarmin 2 месяца назад
Всегда пожалуйста!
@dmytro0228
@dmytro0228 2 месяца назад
Александр, здравствуйте, я студент, изучаю Java. Написал простенькое CRUD приложение на Spring и подключил PostgreSQL, но хочу как можно скорее найти первую работу и с чистой совестью сказать, что я знаю Spring и могу что-то на нем написать. Что бы вы могли посоветовать, чтобы оптимизировать затраты времени и получить максимальный результат?
@ABarmin
@ABarmin 2 месяца назад
Отличный вопрос и на него нет простого совета. Если цель - сказать, что знаете Спринг, то однозначно рекомендую посмотреть видео Евгения Борисова, прямо все, какие сможете найти. Вторая рекомендация - повторить все, что рассказывает Евгений в своих видео - сделать небольшой пет-проект, сделать попробовать использовать стартеры, использовать внедрение зависимостей, разобраться, как работает MVC и Spring Data, попробовать написать свой стартер. Все эти рекомендации можно обобщить - попробуйте Спринг в деле, не только в теории. Мне кажется, так получится оптимизировать время обучения. Ах да, есть еще один трюк - попробуйте написать свой небольшой IoC/DI контейнер, маленький спринг такой. Коммерческой ценности в этом нет, зато однозначно поможет разобраться как многие вещи работают под капотом.
@dmytro0228
@dmytro0228 2 месяца назад
@@ABarmin Спасибо большое за ответ!
@user-cm2vr5ss4z
@user-cm2vr5ss4z 2 месяца назад
Спасибо за видео. Лайк!
@ABarmin
@ABarmin 2 месяца назад
Рад, что нравится
@oleggye
@oleggye 2 месяца назад
Спасибо, Александр! Очень познавательно и полезно 😊
@ABarmin
@ABarmin 2 месяца назад
Очень рад, что нравится!