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

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

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

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

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

В связи с этими своими мыслями, вспомнила историю одного сеньёра об одном своем помощнике - джуне, который только через месяц работы немного успокоился и перестал бояться, что его уволят не сегодня / завтра. 😁
🔥171
Всем привет!

Подумала, что не рассказала еще здесь о своем небольшом приключении на выходных. Началось все с того, что в первый свой рабочий день, у меня на компьютере вылез «экран-смерти». Самое время, подумала я, умереть компьютеру. (Рабочий мне еще не пришел)

Сначала запустила по гайду из интернета команду, сканирующую и восстанавливающую поврежденные файлы системы. Думала, может поможет. Но в субботу снова он — синий экран с грустным смайлом и сообщением, что пора тебе покупать новый компьютер.

Решила попробовать откатить состояние к заводским настройкам, без удаления личных данных. Но на всякий случай сделала бэкап. В воскресенье запустила процесс. Посмотрела на список удаленных программ, вспомнила, что надо заново же и базу данных теперь устанавливать, да git, да докер. Немного было пала духом, но решила постепенно восстановить. Большую часть программ решила не устанавливать. Всякие Dbeaver и Insomnia, которые устанавливали во время курса в практикуме.

В общем, восстановление прошло пока в основном безболезненно. Данные не потеряла. По причине «экрана» думаю на докер, что когда устанавливала его весной, сделала не всё правильно. Тут когда на стажировке запускала в нем 7 образов одновременно, через докер-композ, он часто зависал, отказывался работать, запускаться, закрываться. В этот раз, когда устанавливала, сделала более внимательно по документации. Надеюсь, что все будет работать нормально. Завтра-послезавтра потестирую его как следует :)
👍10
Всем привет!

В среду посмотрела интересный митап. Особенно понравился второй доклад на тему «Приложение от проекта до релиза: этапы реализации».

Всего было три доклада, но, честно говоря, мне не хватает пока знаний для первого и третьего докладов. В первом было про BeanPostProcessor-ы, там очень хитрую инициализацию объектов докладчики провернули, что по ощущениям, в комментариях чата очень мало, кто понял как и зачем они это сделали. А в третьем докладе была тема «JMX (Java Management Extension) в 2023». Это протокол мониторинга и менеджмента для JVM (из описания).

Во втором докладе было про последовательность этапов разработки на старте проекта и про реализации новых фич, про архитектуру в целом. Очень бодрый доклад, интересная дискуссия после него. Рекомендую посмотреть, кому интересно.
🔥7👍1
Всем привет!

Вчера интересовалась дженериками. В одной статье на хабре в комментариях попалась ссылка на интересное видео по дженерикам. В нем доклад от 2016 года с конференции JPoint. Очень понравился, до этого не знала разницу между записями <? extends Number> от <? super Number>.

Докладчик рассказал, что однажды задал вопрос, что можно добавить в такой список:

List<? extends Number> numbers = new ArrayList<>();


А что можно добавить в такой список:

List<? super Number> numbers = new ArrayList<Object>();


В обоих случаях, правильно ответили 15% людей, я до его объяснения также ответила неправильно. Мне казалось, что в первый список можно положить любой тип, который наследуется от Number, а во второй список - Object и Number.

А оказалось, что правильный ответ был, что в первый список безопасно можно положить только null, а во второй список можно положить любой тип, который наследуется от Number, но нельзя класть обычный Object.

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

После этого видео, стала смотреть другие видео на канале и узнала еще много интересного про Pageable, оказывается он бьет по перформансу, если его неправильно использовать.

Потом, на том же канале, мне попалось видео по компетенциям и грейдам IT-специалистов и меня порадовало, что из графы сеньера мне осталось только научиться работать с ExecutorService и дело, как говорится, в шляпе 😁
🔥11
Всем привет!

На днях занималась подключением Liquibase в одном из своих проектов и запуском ее с базой данных в docker-compose. Снова, как и в первый раз на стажировке, у меня возникли сложности с этим. Информации в интернете не так и много на эту тему (мне мало попадалось). Поэтому я решила написать здесь небольшой гайд на эту тему.

Дисклеймер: Последний раз, когда подключала, узнала, что можно настроить Dockerfile для ликвибейз отдельно, в котором будут прописаны и команды, а в docker-compose уже запускать билд. Я пока не настраивала Dockerfile и все еще не знаю, как делать правильно — с ним или без него. Поэтому гайд не гайд, а орел.

Итак, гайд для многомодульного проекта, где ликвибейз подключается в отдельном модуле. Кратко о подключении: я делала в Maven, поэтому в pom.xml добавила необходимую зависимость для ликвибейз (liquibase-core), а также мавен-плагин (liquibase-maven-plugin), в котором прописала путь к файлу с настройками ликвибейз (тег propertyFile) и путь к главному файлу ченджлогов, в котором прописаны пути к мелким ченджлогам, (тег changeLogFile). После этого завела liquibase.properties, в котором также прописала путь к мастер ченджлогу (если все лежит по пути, который предлагается в документации по умолчанию, то там и будет происходить поиск мастер ченджлога).

Итак, docker-compose. Сначала настраиваем базу данных, ей обязательно добавляем healthcheck. Для постгрес я делала такой:

healthcheck:
test: ["CMD-SHELL", "pg_isready -U названиеБД"]
interval: 10s
timeout: 5s
retries: 3


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

liquibase:
image: liquibase/liquibase:4.19.1 #(есть и более новые версии)
container_name: liquibase
depends_on:
db: #(наименование сервиса БД из docker-compose)
condition: service_healthy
command:
- --url=jdbc:postgresql://db:5432/названиеБД?user=имяПользователя&password=пароль
- --changeLogFile=master.xml # master.yaml, расширение не влияет
- update
volumes:
# если мастер ченджлог лежит отдельно, то делаются две папки volumes, если мастер лежит в одной папке с остальными ченджлогами, то достаточно скопировать одну папку, где все лежит, иначе мастер файл задублируется и ликвибейз упадет с ошибкой.
- ./модуль с ликвибейз/src/main/resources/db/master.xml:/liquibase/master.xml
- ./модуль с ликвибейз/src/main/resources/db/changelog:/liquibase/changelog


Если docker-compose файл лежит в отдельной папке, то путь к файлу нужно начать с двух точек, чтобы подняться на папку вверх. Далее, после этой настройки, можно добавить в docker-compose наш микросервис, добавив условие для запуска — ликвибейз успешно завершила работу:

    depends_on:
liquibase:
condition: service_completed_successfully


P.S.: чтобы все остальные ченджлоги были найдены ликвибейз, необходимо в мастер файле добавить условие relativeToChangelogFile: true в yaml, либо relativeToChangelogFile="true" в xml формате.
👍81
Всем привет!

Сегодня знаменательный день в моём календаре - у меня сегодня день рождения 🥳

Я бы сказала, что мне исполнилось 18 лет, но в самом первом посте уже проспойлерила, что мне "после 30-ти"😅

Интересно, что первый спринт в Яндекс.Практикуме начался у меня тоже 5 декабря, в день рождения, год назад. Очень здорово, что в этот день рождения я уже получаю поздравления от коллег в новой профессии.

Также, спасибо всем вам, что подписались, поддерживаете реакциями и/или комментариями, это очень мотивирует! Если мне удается кого-то из вас также мотивировать, то это большая радость для меня 🤗
🎉173🔥2👏1
Всем привет!

Не очень давно я писала про динамические запросы с помощью Spring Data JPA. В выходные мне попалось видео с докладом на эту тему. Там докладчики убеждали, что этот метод составления запросов является антипаттерном. Они сказали, что базы от Oracle не оптимизируют такие запросы, PostgreSQL немного лучше с ними справляется, но в принципе тоже не очень рекомендуется делать такие запросы.

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

Докладчики предложили сделать кодогенерацию, где фразы “or :parameter is null” заменять на «1 = 1» либо «1 != 1» для случаев, когда parameter равен null или нет, соответственно. Но большого энтузиазма не вызвало их предложение у зрителей.

Такие дела. А я пока занялась активным изучением Kafka Streams, потому что они мне очень скоро понадобятся.
🔥8👍2
Всем привет!

Последние несколько дней борюсь с синдромом самозванца :) Чувствую себя пока самым бесполезным членом команды🙃

Сначала как-то просто приуныла, глядя на схему коммерческого проекта, с мыслью "разве я смогу в нем разобраться?"

Все выходные провела изучая новые для меня Kafka Streams и читая код. Примеры в туториалах, конечно, выглядят не сложно, в теории тоже звучит классно. Но, наверное, пока не напишу несколько рабочих вариантов сама, не придёт уверенность.

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

И сейчас на работе мне начинает казаться, что все вокруг больше меня знают, а я так мало. В общем, я понимаю, что всё начнёт улучшаться с первыми успешно-выполненными задачами, а пока стараюсь не падать духом и продолжать учиться 👩‍💻
🔥82👏1👨‍💻1
Всем привет!

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

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

Также начинает появляться свободное время и силы делать что-то дополнительное. Но пока не решила что. Хочется чего-то полезного.

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

А то я обычно делала что-то для портфолио, а теперь можно и для себя что-то сделать 🤔
🔥93👏1
Всем привет!

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

Но пока до реализации дело у меня не дошло, потому что в выходные занесло меня опять в интернет на разные бесплатные курсы, только в этот раз я набрала в поиске “advanced java” и вышла на несколько курсов на coursera. Один уже можно сказать прошла, но там он очень короткий, всего 4-5 видео лекции и два-три проверочных теста, всё посвящено сервлетам. Посмотрю потом, что в остальных.

Еще успела сделать телеграм-бота. Пока он у меня самый простецкий, умеет только повторять всё, что ему напишешь (моему сыну очень понравилось с ним «разговаривать» 😁). Думаю добавить в него действия, которые бы дергали API какого-нибудь искусственного интеллекта (аналога chatGPT). Хочу задействовать его для «категоризации», чтобы потом использовать это в своих злостных целях сортировках.

Еще из новостей — сегодня мне доверили самостоятельно разобраться с багом и у меня получилось 💃
🔥151
Всем привет!

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

Нашла хорошую статью-гайд как подключить его к spring boot приложению. Делюсь ссылкой. Может кому-нибудь тоже будет интересно посмотреть и поэкспериментировать.

Еще в выходные попалась интересная статья про тенденции в IT-мире за последние 3 года, что хотят соискатели и работодатели.
👍10
Всем привет!

Были тут небольшие сомнения можно ли написать в канале на такую-то или такую-то тему, интересно это будет кому-то или нет.

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

Так что, сегодня буду писать перевод аналогии о том, что такое OAuth2 и приложу перевод схемки из книги Spring Security in Action (Laurentiu Spilca), в которой мне осталось совсем немного до конца книги.

Итак, перевод аналогии что такое OAuth2:

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

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

(всё, теперь могу продолжать читать эту книжку со спокойной душой :))
🔥9👍4
Всем привет!

Поздравляю всех с Наступающим Новым Годом! 🎄🍾🎉🎊

Желаю всем, кто в поисках, найти любимую работу, кто уже работает, повышения в должности или зарплаты (или и то и то😁), также желаю вам всем крепкого здоровья и исполнения всех желаний!

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

Увидимся в Новом году! 🎊🎉🍾
19🎄2
Всем привет и еще раз всех с Новым Годом!

Есть ли учеба после устройства на работу?

Да, но она меняет свой, привычный для меня, вид. За время обучения в Я.Практикуме, я прошла много курсов со Stepik. Поэтому привычный для меня способ обучения — это начать какой-нибудь курс и идти по нему, изучая что-то новое на относительно поверхностном уровне, редко в курсе есть объяснение Spring Security, например, с приведением примера не базовой авторизации.

Второй привычный способ — это просмотр различных туториалов. Где объяснение чего-либо идет через разного рода “Hello world!” примеров. Прочитала на выходных идею, что для того, чтобы стать старше уровня джуна, нужно углубляться в разные темы, можно по очереди, можно по своим предпочтениям в какую-то конкретную тему.

Как это предлагается делать?

1. С помощью прочитывания технической литературы «от корки до корки».
2. Чтения кода какой-то библиотеки или фреймворка
3. Продолжать вести полезные пет-проекты

На эту тему есть классный пост от техлида, специализирующегося на искусственном интеллекте
👍8
Всем привет!

Как у вас прошли выходные?

У меня очень сумбурно, пока всех родственников навестили, оглянулась, а уже 6 января))

Так что мало чего успела полезного сделать. Хотела хотя бы Spring Security in Action дочитать, но тоже не вышло, осталось буквально 100 страниц (pdf). Может быть получится на этой неделе. Хочется уже дочитать ее, тем более, что самая сложная часть (OAuth2) для понимания (для меня) закончилась.

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

Нашла RustDesk, если кому-то нужно и вдруг не слышал, то это аналог TeamViewer. Есть небольшая задержка в отклике, но в целом удобно пока. Временное решение, пока не заказала себе монитор.
👍6
Всем привет!

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

На днях подумала, что нужно это исправить. Сначала начала было читать классику — книгу от Банды Четырех. На следующий день гуглила примеры конкретного паттерна и случайно вышла на интересного преподавателя на youtube. Видео на английском, поэтому не всем возможно подойдет для просмотра. Но у кого хорошо с английским, прямо мега рекомендую.

Вот ссылка на плейлист, в нем 18 видео, поэтому возможно на какие-то паттерны он не записал видео. Но он же к классике, порекомендовал книгу Head First Design Patterns для новичков, потому что и примеры, говорит, запоминающиеся, живые, и код на джава, а в классике на С++ и Smalltalk, и в целом читается легче.
👍6🔥3
Всем привет!

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

Отбор прошла успешно, на следующей неделе уже, наверное, полностью перейду на этот проект.

Своего поделать практически ничего не успела, только немного поэкспериментировала с @Value и инжектиньем списка из application.yaml в Spring.

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

Получилось у меня это правда не за один вечер, потому что сначала делала неправильно.

На выходных попробую заняться своим приложением по организации закладок.

Возможно отвлекусь на решения всяких проблем с многопоточностью, в последнее время интересно стало заниматься странными вещами. В прошлые выходные, например, делала кастомный бин и реализовывала разные BeanPostProcessor и BeanFactoryPostProcessor))
👍8🔥5
Всем привет!

На этой неделе изучаю Elasticsearch. Хочу применить в своем проекте для поиска по закладкам. Изучаю по книжке Elasticsearch in Action, свежайшей от сентября 2023 года, но читаю на английском, перевод есть для другого издания от 2019 года.

В выходные еще попробовала подергать API у GigaChat (AI от Сбера), у них есть бесплатная подписка делать запросы на ограниченное количество символов (токенов) в месяц. Попробовала пока не через код, а постман и не все получилось пока)) Буду пробовать еще, пока не получится)

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

Пока его изучаю, фоном продумываю архитектуру своего проекта, пока всё достаточно нечетко. Надо будет попробовать сделать схему-план проекта для ориентира, а то бывает открываю свой проект и не знаю с чего начать, хотя скелет-заготовку уже сделала)
🔥9
Всем привет!

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

Хотела на выходных устроить совместное решение какой-нибудь задачи с leetcode здесь, но та задача, которая понравилась (про треугольник Паскаля - там красивая картинка в описании 😁), пока осталась мне не особо понятной, захотелось разобраться в теме. Пока в процессе. Может на этих выходных получится.

Вообще хочется немного потренироваться в решении задач, в прошлый раз, когда решала при отборе на другой проект, очень понравился процесс, хочется повторить в будущем. Но надо подкачать навык, пока у меня всего задач 15-20 решенных на литкоде, надо поставить какое-нибудь достижимое количество на этот год и попробовать выполнить.

Elasticsearch пока так и не опробовала и своим проектом пока не позанималась. Большой респект всем, кто закончил Я. П. совмещая с работой) После работы очень хочется отдыхать, но хорошо что бывают минуты днем что-то интересное поделать если нет задач (только т-с-с 😁).

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

Тут был один интересный баг, в одном маленьком символе было дело, полтора дня сидела в разных логах искала ошибку, но в конце концов нашла)
👍9🎉21🔥1
Channel photo updated