Тру-Джава
137 subscribers
31 photos
79 links
блог начинающего Java-программиста

Чат: https://t.me/trujavachat
Download Telegram
Всем привет!

Сегодня дочитала Clean Architecture. Ничто так сильно не мотивировало меня читать, как надпись в приложении, что книга доступна в подписке до конца недели😅

В книге много полезных идей, сделала себе много пометок и заметок.

Много про SOLID, очень подробно про архитектурные идеи, связанные с принципами SOLID, но с другими названиями.

Из минусов, много повторяющихся историй из 60-70х годов. Какая-то идея, сказанная и обоснованная в начале, обязательно встретится в середине и конце книги. Под конец уже чувство, что читаешь одно и тоже снова и снова.

Понравилась идея про (микро)сервисы (читала в оригинале, поэтому перевод от официального может отличаться):

Архитектура системы определяется границами, отделяющими высокоуровневую логику от низкоуровневых деталей, и подчиняется Dependency Rule*. Сервисы, которые просто разделяют поведение приложений, представляют собой не более чем дорогостоящие вызовы функций и не обязательно имеют архитектурное значение


В тему приводился пример, когда добавляется, условно говоря, поле в ДТО и мы из-за этого должны в 3х сервисах делать изменения - это говорит о тесной связанности сервисов и возможно эти сервисы были разделены зря. Возможно какое-то действие нужно вынести в отдельный компонент системы, который будет работать с этим ДТО, а не связывать несколько сервисов, только усложняя разработку.

У нас кстати на проекте есть такое, но я вам этого не говорила😁

*Dependency Rule вместо Dependency Inversion из SOLID, но в целом о том же, только на уровне приложения.
🔥41👍1😁1
Всем привет!

Прошло две недели с того, как закончились курсы по алгоритмам и я поймала себя на мысли, что хочу снова на какой-нибудь курс😅

В выходные пассивно выбирала, листая разные курсы по CI/CD и Kubernetes, но пока не выбрала)

Еще с середины августа планирую прочитать Designing Data-Intensive Applications, до этого уже несколько раз начинала ее читать и дальше середины не доходила. В этот раз планирую начать с начала и за месяц ее прочитать.

Так сложилось, что у меня появится она в аудио-формате примерно в середине августа и я смогу читать в любимом режиме (под аудиокнигу).

А в остальном, потихоньку прохожу задачки из Top Interview 150, пока решила 13)

А у вас как дела?🤗
🔥7👍21
Всем привет!

Решила составить оглавление для своего канала по темам.

Технические посты с гайдами и теорией:

Что такое Optional

Что такое сервлет

Знакомство с Vaadin

Что такое докер

Как устроена HashMap и HashSet

Знакомство с Kafka

Что такое Spring Security

Что такое Json Web Token

Что такое CORS

Что такое OAuth 2

Что такое проблема "n + 1" и как ее решать

Интересный факт о Hibernate и аннотации Lob

О дженериках

Настраиваем запуск Liquibase в docker-compose

Уровни кэша в Hibernate

Настраиваем Github Actions

Применение паттерна Стратегия при чтении данных с Excel

Особенности Hibernate 6 в сравнении с предыдущей версией

Разбиваем SQL запросы с WHERE .. IN (..) на партиции

Ограничиваем память java heap в тестах через Maven plugin


Рубрика под названием "Делаем кривыми руками":

Настраиваем Feign клиент

Покоряем @EmbeddedId

Используем ZipInputStream


Рекомендации / отзывы / полезное:

Бесплатный курс со stepik, Java Middle от МТС

Правильное использование @Transactional

Spring Security in Action

Курсы по Кубернетису

Design Patterns от Head First

Designing Data-Intensive Applications


Мотивационные:

Что меня мотивирует

Оценка личной производительности


Разные события:

День рождения канала

Пост на окончание курса Java-разработчик

Комикс о моем обучении на курсе Java-разработчик

*Будет дополняться
🔥11❤‍🔥33
Тру-Джава pinned «Всем привет! Решила составить оглавление для своего канала по темам. Технические посты с гайдами и теорией: Что такое Optional Что такое сервлет Знакомство с Vaadin Что такое докер Как устроена HashMap и HashSet Знакомство с Kafka Что такое Spring…»
Всем привет!

Сегодня расскажу про несколько планируемых активностей.

Во-первых, появилась идея создать свой курс для джавистов уровня стажёров (не зря же у меня 2 педагогических образования😁).

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

Думаю практическим заданием будет разработка проекта, в котором будет реализация не простого CRUD, а какой-нибудь нетривиальной бизнес логики. Уже есть идеи на импорт и экспорт из/в Excel, поиск с кучей фильтров, подключение Keycloak, Liquibase и ещё много всего нужного🧑‍🎓

Дело не быстрое, пока знакомлюсь с платформой, составляю план и скоро приступлю к реализации. 🧑‍💻

Вторая активность начнётся с конца следующей недели - начну читать Data-Intensive Applications, хочу прочитать ее примерно за месяц. Без сроков у меня часто технические книжки откладываются и потом тяжело вливаться в контекст.📖

А про третью активность расскажу чуть позже, когда уже можно будет сказать получилось или нет и тогда порефлексировать над ошибками)
🔥1275👍4❤‍🔥1
Всем привет!

Последние пару недель не получилось особо начать ни один из планов поста выше, так что нечем было поделиться🫣

Зато сегодня пришло приглашение на митап по Keycloak, может кому тоже будет интересно.

Я правда буду смотреть в записи (там есть возможность попросить запись).

На работе у нас планируется два параллельных воркшопа. Один по Kubernetes, другой по применению RAG. Очень жду) Возможно поделюсь какими-то общими вещами на тестовых примерах здесь, если можно будет по NDA.😉
👍5🔥3❤‍🔥22🤝1
Всем привет!

Вам приходилось специально убавлять память (Java heap) для тестов при запуске через Maven? Чтобы, например, отловить какой-нибудь непроизводительный тест?

Если вы, как и я до сегодняшнего дня, не знали, как это можно сделать, сейчас поделюсь.

У нас случился пятничный коллапс на gitlab, падали сборки с OutOfMemory при тестах, а локально всё по классике работало.

Поэтому пришла идея локально ограничить память, чтобы найти виновника.

Для этого нужно добавить в плагин maven-surefire-plugin в тег configuration строку:

<argLine>-Xmx256m<argLine>


Это будет означать что будет выдано 256 мегабайт памяти. Таким образом, локально получилось воспроизвести и найти виновника🤓
🔥7👍62❤‍🔥1
Всем привет!

Вам бывает сложно начать что-то делать?)

Практически месяц назад я написала о том, что запланировала сделать свой курс на Stepik. И только сегодня, я, наконец, его начала.

Поделюсь, что помогает мне, а вы делитесь в комментариях, кому что помогает 🙏

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

Самый частый случай у меня бывает со скучными задачами. Их бывает очень сложно начать. Для меня просто ни в какую не хочется делать задачу, если знаешь, что там будет нудно или скучно.

Кстати, самые скучные задачи для меня копипастные или около того. Где надо сделать что-то, что было уже сделано, по образцу - копировать, вставить, заменив пару строк различий.

Дело на пятнадцать минут, собраться это сделать может занять пару часов 🫣

Что мне помогает:

* Прочитать задание / описание (мозг волей неволей начинает обдумывать и продумывать решение)

* Включить в фоне видео (что-то что можно слушать, больше чем смотреть), либо музыку (очень подходит, например, такое радио)

* Написать первую строку, что-то для выполнения. Создать ли новый класс или найти нужный метод.

Ведь самое сложное в этом случае начать, а уже потом всё не так страшно и уже и не так скучно ☺️

А у вас есть лайфхаки? ✍️
❤‍🔥54👍3🔥3
Всем привет!

С воскресенья проходила квест по тому, чтобы добавить видео в курс на Stepik, и вот сегодня спустя 5 дней, видео, длиною в 7 минут, наконец, загрузилось и отображается без ошибок! 🥳

Уже словила демотивацию и думала бросить эту гиблую затею, но после 5 попыток, все получилось. Можно продолжать делать курс дальше👨‍💻

Но теперь думаю, что возможно видео записей будет меньше, чем я изначально планировала😅 Но посмотрим, может быть и останется по задумке.

Книгу по Data-Intensive Applications опять забросила, опять на том же месте - 5-6 главы с очень подробным разбором как работают партиции, лидеры, подписчики. Не знаю, что-то не идет и все тут. Внимание моментально рассеивается и мысли уходят в разные стороны) Пока отложила.

Думаю прочитать может теперь DevOps Handbook, чтобы поглубже погрузиться в настройку пайплайнов) В тему, сегодня на работе выпросила задачу (как я думала), чтобы встроить одну джобу в пайплайн, но оказалось, что мою идею поняли чуть по-другому и надо теперь сделать то, что возможно вообще никогда никому не пригодится😅

А у вас как дела?🤗
6🔥4👍3
Всем привет!

Последние пару недель было много интересных событий по работе, но они, к сожалению, попадают под NDA🙊

Из того, что можно рассказать - продолжаю делать курс и заниматься всем и сразу, как обычно мало чего успевая😅

Например, сейчас начались тренировки по алгоритмам от яндекса и была уже первая вводная лекция и домашка до понедельника. Я ее пока не начала, но есть же ещё завтра 😁

Написала небольшой проект, используя GraphQL - интересная вещь, необычно решает проблему n + 1 и облегчает взаимодействие фронта и бэка. Статья на хабре со сравнением GraphQL и REST.

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

А ещё, я пишу художественную книжку, начала, наверное, после курса по алгоритмам. Надо, наверное, новый курс какой-то начать, чтобы справиться с потоком энергии 😁
🔥8❤‍🔥44👏1
Всем привет!

Вовсю занимаюсь написанием курса, пока готов 1 модуль (практически), самые простые вещи, даже еще пока нет базы данных. Это все начнется во втором модуле.

Кстати, забавный факт. Знаете сколько дублей у меня ушло на запись первого видео, где просто добавлялся проект со Spring Initializr? Правильно, 17 (я же перфекционист 😁).

Самое смешное, что оно не получилось идеальным, потому что я все же выбрала неверное расширение, но, волевым усилием, решила не перезаписывать)

На днях смонтировала второе видео с выполнением первого задания на выполнение CRUD, там уже не было именно дублей, но были отвлекающие моменты, что нужно было отойти. Например, самый внимательный сможет увидеть, что начала писать я тесты для API днем, а продолжила уже вечером)

Но в целом занятие увлекательное. Мне понравилось, преподавательская жилка во мне торжествует))

Еще интересный опыт получаю на этой неделе - начала участвовать в одном небольшом проекте на питоне. Но пока я только на стадии знакомства с проектом, научилась пока только запускать тесты😁 Но интересно, разница с проектами на java очень сильная.

Кстати, недавно ходила на конференцию IT GORKY и выиграла мерч, теперь у меня очень жизненные лозунги на рабочем столе (фото в комментариях)
🔥6👍3❤‍🔥2
Всем привет!

Чем дольше не пишешь пост, тем сложнее начать))

Наконец-то прочитала Designing data intensive applications (кабанчика)🥳

Тут как-то писала, что решила ее было отложить. Но желание закончить книгу не отпускало, и так стала читать по 15-30 минут ее не каждый день.

Рассказывается в ней о тонкостях работы баз данных, транзакциях, брокерах, партициях, лидерах и последователей, как достигается согласованность данных между отдельными частями приложения (нодами) и какие проблемы возникают при нагрузке.

Читается / воспринимается порой очень сложно, поэтому делала конспекты для "пост-обработки", чтобы закрепить прочитанное.

Книга очень понравилась, чем ближе к концу, тем легче ее было психологически читать, потому что она объемная и, когда читаешь по чуть-чуть, кажется как будто никогда ее не завершишь)

Ее рекомендую, но после Clean Architecture и базового представления что такое нода, ACID, проблемы изоляции транзакций, и за что отвечают лидеры и последователи на уровне брокеров сообщений и нескольких нод базы данных.

Пока думаю, какую следующую техническую книжку буду читать.

Вы бы что порекомендовали?🤗
🔥74👍3
Всем привет!

Вчера столкнулась с интересной проблемой с Feign клиентами.

Проблема заключается в следующем. Если мы захотим отправить MultipartFile и список каких-нибудь объектов через feign клиент, то под капотом подставится feign.form.multipart.SingleParameterWriter, в котором используется хард-код для заголовка content-type, со значением "text/plain".

Таким образом получается, если у нас в контроллере прописано что-то в стиле:

    @RequestMapping(
        method = RequestMethod.POST,
        value = "/v1/files/bulk",
        produces = { "application/json" },
        consumes = "multipart/form-data"
    )
    ResponseEntity<Files> saveFiles(
        @Parameter(name = "metadata", description = "Array of file attributes", required = true) @Valid @RequestPart(value = "metadata", required = true) List<@Valid Metadata> metadata,
        @Parameter(name = "files", description = "Array of Files") @RequestPart(value = "files", required = false) List<MultipartFile> files
    );


То мы получим ошибку 500 от сервера с сообщением, что он не принимает text/plain, а ожидает application/json, как и прописано в контроллере.

Такой вот баг на высоком уровне) Автор открытого issue, предложил пока в качестве решения создавать кастомный JsonFormWriter и SpringFormEncoder. Подробнее можно посмотреть по ссылке.

Попробовала сегодня, вещь рабочая, так что если кто столкнется, можно пользоваться 👍
🔥8👍1
Всем привет!)

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

Но к сожалению, этого пока не случилось 😅 Дизайн приложения (структуру базы данных) придумывала только неделю.

Сейчас вовсю пишу 2й модуль, в нем по плану у меня теория про транзакции (ACID и уровни изоляции), подключение к базе данных, настройка миграции и дальше поиск по фильтрам с использованием Criteria API.

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

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

При подключении базы данных, например, на автомате добавила зависимость spring-data-jpa последней версии и возник конфликт версий, потому что spring-boot-parent оказался зависимостью ниже. Пришлось смотреть дерево зависимостей в Maven и искать виновника конфликта🔎

Не помогает и что на работе начался завал, поэтому пока не уверена, что и к Новому году его допишу, но пока целюсь к этому времени 🐾
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥8👍5
Всем привет!

С наступающим всех Новым годом!
Желаю вам исполнения всех желаний и всего самого хорошего в новом году!

Хочу порекомендовать интересную книгу, которую начала недавно читать - Building Microservices, автор Sam Newman (русский вариант). Очень нравится, здесь про грамотное разделение монолита на микросервисы и в целом, как лучше организовать их взаимодействие.

Свой курс доделала до середины примерно, так что скоро наверняка смогу поделиться тем, что получилось.

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

Еще начала онлайн курс от Гарварда по Computer Science, чтобы разложить некоторые базовые вещи по полочкам. Знаю, что есть в переводе на ютюбе, так что можно поискать и посмотреть, если есть интерес.

Еще раз всех с Наступающим и до встречи в Новом году! 😘🎄
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥7👍5🎄2