- Видео 137
- Просмотров 115 465
Александр Бармин
Великобритания
Добавлен 12 май 2008
Привет, это Александр Бармин и я рад вас видеть на своем RUclips канале. Здесь я делаю видео про Java & Spring Framework.
Если вы желаете помочь проекту в дальнейшем развитии, буду рад, если вы подпишетесь на ежемесячную поддержку:
* Patreon (если вы не в России): www.patreon.com/abarmin
* Boosty (если вы в России): boosty.to/abarmin
Если вы желаете помочь проекту в дальнейшем развитии, буду рад, если вы подпишетесь на ежемесячную поддержку:
* Patreon (если вы не в России): www.patreon.com/abarmin
* Boosty (если вы в России): boosty.to/abarmin
Wildcard Matching - [LEET] Code with me #43
Еще одна сложная задача на написание собственного ограниченного движка регулярных выражений. Сначала попробуем применить наиболее логичный подход - класс Pattern, затем реализуем тривиальное решение, а затем решение на базе динамического программирования.
Ссылка на задачу - leetcode.com/problems/wildcard-matching/
-----
Сообщество Java Weekly в Telegram: t.me/java_weekly
-----
Поддержать автора:
* Patreon (если вы не в России): www.patreon.com/abarmin
* Boosty (если вы в России): boosty.to/abarmin
Ссылка на задачу - leetcode.com/problems/wildcard-matching/
-----
Сообщество Java Weekly в Telegram: t.me/java_weekly
-----
Поддержать автора:
* Patreon (если вы не в России): www.patreon.com/abarmin
* Boosty (если вы в России): boosty.to/abarmin
Просмотров: 0
Видео
Multiply Strings - [LEET] Code with me #42
Просмотров 12114 часов назад
Следующая задачка уже среднего уровня сложности на длинную арифметику - нужно умножить два числа представленные в виде строк. Применим метод, известный каждому еще со школы - умножение столбиком. Ссылка на задачу - leetcode.com/problems/multiply-strings/ Сообщество Java Weekly в Telegram: t.me/java_weekly Поддержать автора: * Patreon (если вы не в России): www.patreon.com/abarmin * Boosty (если...
Trapping Rain Water - [LEET] Code with me #41
Просмотров 92День назад
Задачка уровня Hard на вычисление количества воды, которую можно налить на поверхность нестабильной высоты. Задача выглядит сложной, но, по факту, два указателя и вычисление локального минимума. Ссылка на задачу - leetcode.com/problems/trapping-rain-water/ Сообщество Java Weekly в Telegram: t.me/java_weekly Поддержать автора: * Patreon (если вы не в России): www.patreon.com/abarmin * Boosty (ес...
First Missing Positive - [LEET] Code with me #40
Просмотров 6914 дней назад
Задачка уровня Hard на поиск первого положительного пропуска в массиве. Рассмотрим два решения - очевидное и оптимальное, используем циклическую сортировку. Ссылка на задачу - leetcode.com/problems/first-missing-positive/ Сообщество Java Weekly в Telegram: t.me/java_weekly Поддержать автора: * Patreon (если вы не в России): www.patreon.com/abarmin * Boosty (если вы в России): boosty.to/abarmin
Combination Sum II - [LEET] Code with me #39
Просмотров 5121 день назад
Очень похоже на задачку, которую мы решали в прошлый раз, на Combination Sum. Основная сложность этой задачи состоит в том, что теперь исходные данные могут содержать дубликаты, а в результатах дубликатов быть не должно. Можем использовать структуры данных вроде множеств, который позволяют от дубликатов избавиться, либо отсортируем входные данные и будем пропускать дубликаты. Ссылка на задачу -...
Combination Sum - [LEET] Code with me #38
Просмотров 65Месяц назад
Очередная задачка на backtracking - выбрать из массива элементы, которые в сумме дают заданное число. Если представить, что ищем сумму двух элементов, которые вместе дают target, то нужно зафиксировать один элемент, допустим, А, то нужно найти второй, который равен (target - A). С тремя элементами так же - зафиксируем один элемент (А) и будем искать теперь два других, которые в сумме дают (targ...
Count and Say - [LEET] Code with me #37
Просмотров 122Месяц назад
Несложная задачка с очень сложным описанием - реализуем алгоритм RLE (run-length encoding) или кодирование длин серий. Разберемся с условием и реализуем. Ссылка на задачу - leetcode.com/problems/count-and-say/ Сообщество Java Weekly в Telegram: t.me/java_weekly Поддержать автора: * Patreon (если вы не в России): www.patreon.com/abarmin * Boosty (если вы в России): boosty.to/abarmin
Sudoku Solver - [LEET] Code with me #36
Просмотров 101Месяц назад
В прошлый раз проверяли судоку на валидность, в этот раз будем решать с использованием алгоритма backtracking. Ссылка на задачу - leetcode.com/problems/sudoku-solver/ Сообщество Java Weekly в Telegram: t.me/java_weekly Поддержать автора: * Patreon (если вы не в России): www.patreon.com/abarmin * Boosty (если вы в России): boosty.to/abarmin
Valid Sudoku - [LEET] Code with me #35
Просмотров 110Месяц назад
Проверяем судоку на валидность. Есть решать задачку в лоб, ровно так, как написано в условии, то добиться высоких результатов, ожидаемо, не получится. Подход без использования вспомогательных структур данных позволяет получить 100% результат и именно его будем реализовывать. Ссылка на задачу - leetcode.com/problems/valid-sudoku/ Сообщество Java Weekly в Telegram: t.me/java_weekly Поддержать авт...
Работа с Zip-архивами - Weekly Tips #20 (#livecoding #java)
Просмотров 161Месяц назад
🧑💻 Лайвкодинг - работа с Zip-архивами в Java. Удивительно, но API для работы с ними есть в Java начиная с версии 1.1 и сегодня я покажу как создать архив, получить список файлов и извлечь файл из архива. Постепенно готовлю новый более сложный выпуск, а пока повторяем Java core. 💻 Код примера доступен на GitHub - github.com/aabarmin/ab-examples Сообщество Java Weekly в Telegram: t.me/java_weekl...
Find Insert Position - [LEET] Code with me #34
Просмотров 692 месяца назад
Еще одна задачка на бинарный поиск. Точнее, по совокупности маркеров в задании удалось это быстро обнаружить и решить сразу подходящим алгоритмом. Отличие от обычного поиска состоит в том, что если значение в массиве не нашлось, то возвращаем позицию, где оно могло бы быть, а не -1 как обычно. Ссылка на задачу - leetcode.com/problems/search-insert-position/description/ Сообщество Java Weekly в ...
System Design Interview - Designing Google Docs
Просмотров 4352 месяца назад
An old friend of mine Vladimir Ivanov from the @architectureweekly channel asked me join the system design session and come up with an idea on how to make a new Google Docs. I think the session was fruitful and interesting, due to the limited time we didn't manage to discuss all the topics but still I think the session was useful. Vladimir's channel - @architectureweekly Сообщество Java Weekly ...
Find First and Last Position of Element in Sorted Array - [LEET] Code with me #33
Просмотров 802 месяца назад
В описании задачи явно упоминается, что сложность алгоритма должна быть O(log n). Те, кто смотрят канал давно, сразу могут догадаться, что речь идет про бинарный поиск. Так как нужно найти одновременно индексы первого и последнего повторяющегося элемента, стандартный бинарный поиск придется немного модифицировать. Именно этим и займемся. Ссылка на задачу - leetcode.com/problems/find-first-and-l...
JWT and Spring Authorization Server - Weekly Tips #19 (#livecoding #springframework #springboot)
Просмотров 3542 месяца назад
🧑💻 Лайвкодинг - второе видео про JWT. В этот раз будем создавать JWT через Spring Authorization Server, посмотрим как используется JWKS для проверки подписей токенов и как можно сделать multitenancy для разных issuer-ов. 💻 Код примера доступен на GitHub - github.com/aabarmin/ab-examples Сообщество Java Weekly в Telegram: t.me/java_weekly Поддержать автора: * Patreon (если вы не в России): www....
Search in rotated sorted array - [LEET] Code with me #32
Просмотров 1002 месяца назад
Search in rotated sorted array очень похоже на "сон для усталых взрослых людей", так как задачка не сложная - обычный бинарный поиск с дополнительной проверкой на излом массива. Ссылка на задачу - leetcode.com/problems/search-in-rotated-sorted-array/description/ Сообщество Java Weekly в Telegram: t.me/java_weekly Поддержать автора: * Patreon (если вы не в России): www.patreon.com/abarmin * Boos...
JWT and Spring Security - Weekly Tips #18 (#livecoding #springframework #springboot)
Просмотров 5032 месяца назад
JWT and Spring Security - Weekly Tips #18 (#livecoding #springframework #springboot)
Longest valid Parentheses - [LEET] Code with me #31
Просмотров 602 месяца назад
Longest valid Parentheses - [LEET] Code with me #31
Next Permutation - [LEET] Code with me #30
Просмотров 642 месяца назад
Next Permutation - [LEET] Code with me #30
Substring with concatenation of all words - [LEET] Code with me #29
Просмотров 732 месяца назад
Substring with concatenation of all words - [LEET] Code with me #29
Divide two Integers - [LEET] Code with me #28
Просмотров 863 месяца назад
Divide two Integers - [LEET] Code with me #28
Find a First occurrence in a String - [LEET] Code with me #27
Просмотров 933 месяца назад
Find a First occurrence in a String - [LEET] Code with me #27
Google Login and Spring Security - Weekly Tips #17 (#livecoding #springframework #springboot)
Просмотров 2683 месяца назад
Google Login and Spring Security - Weekly Tips #17 (#livecoding #springframework #springboot)
Remove Duplicates from Sorted Array - [LEET] Code with me #26
Просмотров 803 месяца назад
Remove Duplicates from Sorted Array - [LEET] Code with me #26
Spring Security Authorisation - Weekly Tips #16 (#livecoding #spring #springframework #springboot)
Просмотров 7963 месяца назад
Spring Security Authorisation - Weekly Tips #16 (#livecoding #spring #springframework #springboot)
Swap Nodes in k-Groups - [LEET] Code with me #25
Просмотров 863 месяца назад
Swap Nodes in k-Groups - [LEET] Code with me #25
Spring Security Basics - Weekly Tips #15 (#livecoding #spring #springframework #springboot)
Просмотров 5773 месяца назад
Spring Security Basics - Weekly Tips #15 (#livecoding #spring #springframework #springboot)
Swap Nodes in Pairs - [LEET] Code with me #24
Просмотров 1403 месяца назад
Swap Nodes in Pairs - [LEET] Code with me #24
Spring Boot Observability - Weekly Tips #14 (#livecoding #spring #springframework #springboot)
Просмотров 5523 месяца назад
Spring Boot Observability - Weekly Tips #14 (#livecoding #spring #springframework #springboot)
Merge K Sorted Lists - [LEET] Code with me #23
Просмотров 2304 месяца назад
Merge K Sorted Lists - [LEET] Code with me #23
Spring Boot Test - Weekly Tips #13 (#livecoding #spring #springframework #springboot)
Просмотров 3184 месяца назад
Spring Boot Test - Weekly Tips #13 (#livecoding #spring #springframework #springboot)
Спасибо
Вот этот момент где все набивают шишки от микросервисной архитектуры всегда прикольно слушать, т.е. находишь где то монолит прогоняешь телегу что нам ну очень нужно на микросервисы а потом *пук пук среньк среньк* извините бизнес нефига не работает, ну я пошел.
Да, это частая ситуация с микросервисами - вроде в большом монолите все работало, но сложность выросла настолько, что решили разделить. И тут сложность выросла еще больше!
Есть подход, который для понимания немного проще, когда создается фейковая нода начальная, к которой цепляются другие ноды при объединении. И еще хотелось бы слышать чем именно плох первый подход в завязке на сложность, ибо завязка на рантайм в реальном интервью с задачей по типу литкода вряд ли будет интересна интервьюеру.
На самом деле сомнительная оптимизация, если посчитать сложность. Понятно, что тут константа по сути, т.к. размер ограничен и известен. Но на реальном интервью скорее всего важно будет продемонстрировать понимание алгоритмической сложности, а не времени исполнения на литкоде.
Спасибо
Спасибо
После слов что у микросервиса обязательно должен быть api и клиент, слушать его как то перехотелось... Ну и послушав еще немного, убедился, что первое впечатление не обмануло)
Призрачный экзаминатор был из-за того, что эврика иногда отображает в панели инфу об "умерших" сервисах.
очень полезно, спасибо
Спасибо!
Большое спасибо за Ваш труд! очень полезно
С чего Требования: Функциональные - системные операции Не функциональные - качества Что должна делать система? Понять, какие внешние операции будут? Разделить приложение на отдельные сервисы. (2 стратегии) По бизнес функциям (Внутри больших б.ф ест функции меньше.) Взглянув на функцию управления курьерами, мы понимаем, что она большая. Одна функция свапится на о дельный серфис/приложения. Какие гаицы сервиса и агрегаты. 1 прил - 1 бизнес функция. и по дизайну доменов Начинаем с пректирования ддд. Смотрим какие функции мапятся на большие функции. 3. Определение операций между сервисами. (Между собой обмениватся ?) (Модель запросов и ответов request/response) Запрос - синхронно и ответ ассинхронно. Клиент отправил множество запросов Как понять к какому пришёл ответ? Идентификатор к вопросу и к ответу Ассинхронное взаимодействие. Если есть несколько клиентов и взаимодействие с ними ассинхронно. Publish subscribe У ассинхронного и синхронного взаимодействия... И клиент и сервер должны быть доступны. Если они не доступны - такой запрос не обработать. Каждая система отвечает ассинхронно. Надёжность: Как вызывать сервисы? Бизнес логика - порт. Прокси. Проблемы сильной связи. И через сервисный Удаленный вызов. Месседжинг Не надо из бизнес логики Корреляционный айди. И Приёмник сообщений. Архитектура с брокером или без? Корреляция - триггер и Брокер - прмежуточное хранилище. Записывать обработанные идентификаторы сообщений в промеждуточную таблицу Дублирующиеся сообщения. У каждого серфиса есть приежуточныц буфер, куда он сохр. Сообщения перед отправкой. Чем больше серфисов в обработке запроса - тем меньше надежность системы. Избавиться от асинхронного взаимодействия. И добавляем очередь У него есть промежуточные состояния и хранилища. Если система не требует синхронного ответа. Если требует. Нет ли каких-то данных, кот. Нужны этому серфису входному? Нет и таких у зависимых сервисов? Репликация данных (подход) Какие-то запросы этот сервис может синхронно обрабатывать. Нет единого верного решения. Мы смотрим на варианты. Что мы можем сделать?
Благодарю. Как раз было неясно как правильно тестировать контроллеры. Законспектировал.
C этими префиксами у спринга какая-то беда прям. Где-то требуются, где-то не требуются (фреймворк сам добавляет). Почему не привели данный аспект к единому формату - мне так и осталось неясным.
Как понимаю, вы использовали принцип динамического программирования или я ошибаюсь
Не, никакого динамического программирования, результаты с предыдущих шагов не используются. Выигрыш достигается только за счет того, что не создаются дополнительные структуры данных
@@ABarmin тоже потом догнал, спасибо за ответ
Спасибо
Очень интересный опыт и практика! А что Вы можете порекомендовать для создания PDF-файлов? Это довольно частый вариант для генерации квитанций. И довольно специфический вопрос: какие паттерны проектирования Вы чаще всего используете в разработке (не считая "подкапотных" паттернов Spring)? Это больше для понимания, в какие из них стоит углубиться больше всего. Спасибо!
Я использовал Apache PDFBox для работы с PDF. Более-менее удобный инструмент, развивается, поддерживается. По поводу паттернов - здесь тяжело прям назвать конкретные, поэтому назову группы. GoF паттерны обнаруживаются тут и там, часто используются enterprise integration patterns, описанные в одноименной книге. Часто использую тактические паттерны DDD и все чаще стратегические. Мои личные фавориты среди паттернов - composer & chain of responsibility.
Спасибо за очередной выпуск! Nio апи действительно сильно упрощает многие вещи.
Это правда. Несмотря на все модные новые фишки вроде object storage-ей, работа с файлами все равно встречается часто.
Отличный выпуск, спасибо, Александр!
Спасибо!
Доклад очень интересный, одно так и не понял зачем эврика в k8s
Вроде как там рассказывается о постепенном переходе с эврики на k8s сервисы.
Благодарю за море полезной информации 🤝
Пожалуйста!
Без обид, чисто замечания как слушателя. Названия паттернов произносится невнятно и тихо , а ведь это главное. Не хватило перевода слайда, как только я перевел текст на слайдах сразу всё становится понятно. Многие термины с англ на русский вооще не правильно перведены и донесены. Причмокивания, кашли, глотания воды, шмыгания тоже придали щепотку отвращения. Ну и самых важных паттернов микросервисов, которые спрашиваются на собезе не было показано и объяснено. Но за работу лайк.
Спасибо за замечания. Надеюсь, более новые видео более хорошего качества.
Спасибо за Ваш труд. Все четко и понятно! Не останавливайтесь!
Добрый день! Появится ли код примера на гитхабе? Не увидел в репозитории кода этого урока
Все есть, уже на гихабе.
о это прям красота !
Мы старались! Рад, что понравилось
Please zoom in
Will do next time, thank you for pointing it out.
Спасибо
Пожалуйста ^_^
Спасибо за ролик!
Пожалуйста ^_^
Смотрю на код и ничего не понимаю. Какой-то тяжелый понедельник.
У меня так же. Хорошо, что я ролик записал еще на прошлой неделе.
Очень круто! Спасибо за видео
Пожалуйста!
Спасибо за детальный разбор!
Пожалуйста, рад, что нравится.
Спасибо большое за видео!
Пожалуйста!
Было бы интересно послушать про интеграцию с keycloak и spring gateway
Александр, спасибо большое за вторую часть!
Рад, что нравится. Пожалуйста!
Спасибо, как всегда интересно :)
Рад, что нравится. Пожалуйста!
достаточно понятно и интересно, спасибо 👍. но лично мое мнение подход Борисова к объяснению с написанием кода с нуля себя оправдывает, этого не хватает немного.
получается же что второе решение работает не за O(log N) а за O(N) странно что оно бьет 100% по времени выполнения :)
Именно так, поэтому и странно.
Александр, большое спасибо вам за ваш труд. Каждый раз кайфую от ваших объяснений!
Спасибо, очень стараюсь, чтобы было интересно.
Урааа, спасибо большое!
Рад, что нравится =)
Черт, Шарий программировать взялся
Спасибо за очередной детальный разбор! У меня возник вопрос по взаимодействию между микросервисами. Суть в следующем: если авторизация и аутентификация происходят в бфф или апи шлюзе, и нужно передать данные о текущем пользователе сервисам ниже, какой подход считается бест практис с точки зрения безопасности? Нужно ли снова шифровать данные или можно открыто передать в хэдэрах/параметрах/теле запроса?
И простого ответа, как обычно, нет, но есть варианты: 1) Токен переправляется в другие сервисы в хедере как есть. 2) Делаем token exchange и получаем новый токен для межсервисного взаимодействия, который содержит значения из исходного токена. Второй способ более надежный и используется, когда есть необходимость разделить сервисы на публичные и внутренние, а также, когда нужно интегрировать новую систему с уже существующей. Про шифрование данных - здесь зависит. Обычно, шифрование данные это не задача сервиса и здесь спасает SSL/TLS или sidecar контейнер с прокси, например, с nginx или envoy.
@@ABarmin Спасибо за ответ!
Спасибо вам за работу, невероятно полезно))
Спасибо, что смотрите.
Спасибо за видео! Второй вариант решения достаточно неочевиден, мне взяло какое-то время, чтобы понять, почему работает так.
Согласен, у меня тоже заняло какое-то время, чтобы до этого дойти. Я прям был удивлен, что вполне логичное решение с подсчетом расстояния между ошибками работает не так хорошо.
Спасибо. Большой объём базы.
Рад, что нравится
Спасибо, полезно!
Очень рад, что нравится
Хотелось бы еще для полноты картины, хотя бы сказать про KMP подход, который позволяет решить за линейное время это задачу
Спасибо за идею, думаю, это даже отдельного видео заслуживает.
Александр, спасибо большое за труд! Ждём jwt!
Скоро будет. Я сейчас в отпуске, сделаю выпуск сразу как только вернусь
@@ABarmin отлично! Хорошо отдохнуть)
Александр, спасибо за труд!
Рад, что нравится
Александр, спасибо за Ваш контент. Если это важно для будущих поисков, в названии видео ошибки с номером задачи, 28, а не 29.
У меня был выпуск, в котором одновременно разобрал сразу две задачи, поэтому один номер пропущен. Спасибо за рекомендацию.
У Лаурентия появился конкурент) На 19:05 - только не authentication provider выбирает провайдера, а authentication manager (он же provider manager в виде более частного случая). Но это для слушателей ремарка)
Спасибо за точность)