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

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

У меня на курсе закончился 2 спринт (по календарю только 1й). Но если вы подумаете, что это быстро, то я скажу, что, как минимум 1 человек, уже решает задачки 4го спринта. Многие на 3м были еще на прошлой неделе, но есть и те, кто "ползет", как я. Что меня немного успокаивает 😁

За последнюю неделю заметила несколько интересных вещей. Во-первых, очень многие теоретические моменты объясняются примерами из "Грокаем алгоритмы". Несколько задач я встретила с курса для олимпиадников (о нем рассказывала тут). Их решила легко по памяти, потому что идеи хорошо отложились.

Вторая мысль с этим связанная, что если есть самодисциплина на то, чтобы заниматься на leetcode, пожалуй "Грокаем алгоритмы" и задачи с leetcode будет вполне достаточно, чтобы хорошо освоить алгоритмы. У меня регулярно там решать задачи настолько не получалось, что выработался рефлекс - открывается страница leetcode - ноги поднимаются со стула и ведут меня куда-нибудь подальше😅

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

И последнее чем хотела поделиться - самое понятное объяснение, что такое стек. Обычно сравнивают со стопкой тарелок/документов/тетрадок на проверку. Но для меня это никогда не было чем-то финальным. Я очень много раз забирала вещи из середины стопки и видела, как учителя так делают с тетрадками, если они вдруг захотели что-то проверить вне очереди.

В курсе для олимпиадников сравнили стек с тубусом для теннисных мячей. Вот уж где точно не подлезешь ни в начало, ни в середину, не достав верхний мяч.🎾
🔥75👍2😁2
Всем привет!

Сегодня я дошла ровно до 50 процентов курса по алгоритмам (сдала финальные задачи 3го спринта).

Этот спринт стал ощутимо сложнее двух предыдущих, главными темами были рекурсия и сортировка.

Первый раз решала задачу с комбинациями через рекурсию, рабочее решение вышло чуть ли не в 3 строчки, но до этого метод был почти на 50 строк😅 По итогу этими задачами осталась довольна)

Одна задача на отрезки почти повергла меня в отчаяние🙈 Там нужно было вывести соединенные отрезки или, наоборот, непересекающиеся (например, если даны 2-3, 6-10, 7-8, 7-8, то правильный ответ 2-3 и 6-10). Так сказать геометрия и визуализация не самые мои лучшие друзья, чертила, рисовала, пыталась решить.

Не помню сколько над ней просидела, но реально приходили мысли в голову бросить всё и уйти в водители автобуса (шучу 😁). Когда ее решила был такой выброс дофамина, что потом пару дней вообще что-то перетрудилась решая задачи и в итоге, наконец, устала и решила немного таймаут взять до понедельника)

Но видели бы вы, конечно, мой код в процессе решения😁 Настоящий путь самурая на костылях)

А ещё на днях, 28 марта, у меня был день рождения канала) 2 года👶💪
🔥202
Всем привет!

На этой неделе углублялась в тему хешей и хеш-таблиц (тема 4го спринта на курсах по алгоритмам).

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

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

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

Но официально 5й спринт стартует аж 5 мая, так что пока дорешаю необязательные задачки)

На работе период относительно скучных задач, самое сложное в которых понять формулировки ТЗ 😁

А у вас как дела?)
🔥92👍2😁1
Всем привет!)

Всех с прошедшими праздниками, успели ли отдохнуть?🤗

У меня идет потихоньку курс по алгоритмам к концу, вчера закрыла 5й спринт по деревьям и начала 6й по графам. Осталось 3 спринта, вместе с 6.

Деревья приятно удивили, я что-то до этого не лезла внутрь смотреть, как они устроены и работают, теперь немного получше их понимаю. Думаю после курса еще немного потренирую разные темы, почитаю книжки/статьи с разборами. Может к следующим тренировкам по алгоритмам смогу их решать быстро)

Не рассказывала, но не очень давно проходила собеседование для тренировки. Говорят полезно периодически практиковать этот навык и вообще узнать, как сейчас на рынке труда обстоят дела)

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

В остальном, вопросы были вполне стандартные: ArrayList vs LinkedList, немного было вопросов с подвохом, где были кусочки кода и нужно было сказать, отработает или нет, что выведет на экран, немного на многопоточку было среди них.

Например, стандартный подвох на стримы:

List<Integer> list = Arrays.asList(0, 2, 4, 6, 8, 10);
list.stream().peek(System.out::println);


где подвох в том, что peek не терминальная операция и ничего не будет выведено на экран, так как стримы ленивые.
👍9🔥52
Всем привет!

Последние две недели осваиваю графы. Если с деревьями решала задачи, в основном, с помощью рекурсии, то задачи на графы решаю симуляцией рекурсии😀

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

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

Хотя, конечно, перерисовав дерево можно было отследить ход алгоритма, но все-таки, в цикле мне намного понятнее отслеживать что происходит. Ощущение, что я полностью контролирую процесс, а не программа сама что-то себе придумывает 😁

Графы закончу и останется всего 2 спринта, динамическое программирование и алгоритмы на строки. Мне почему-то кажется, что на строки будут самые легкие задачи.

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

А у вас что нового? 🤗
🔥12👍32
Всем привет!

С началом лета! 🌞

Я все ещё прохожу курс по алгоритмам и сижу на финальных двух задачках 6го спринта. Первую решала всю прошлую неделю, теперь начала вторую решать. Что-то сложно 😅

Был на прошлой неделе созвон однокурсников с наставником, что-то в стиле ретро, где обсуждали у кого как идет, какие сложности и тому подобное.

Я поделилась, что немного побаиваюсь следующего спринта, там будет тема динамическое программирование.

На это наставник меня утешил и сказал: "Ты знаешь, динамика она либо дается, либо нет", мол, что ты переживаешь в самом деле, ну😂 Только мне кажется, что я больше ко вторым отношусь)

Последние полтора месяца мне осталось, потом уж не буду тут частить про алгоритмы 😁

Мысленно выбираю следующую жертву для погружения и изучения, думаю в сторону system design или углубиться ли в CI/CD, потренировать строить всякие пайплайны на гитлабе, а то я только на гитхабе это делала и уже относительно много времени прошло с последнего эксперимента, надо освежить в памяти)
🔥8👍32😁21
Всем привет!

Сегодня решила поделиться тем, что мне поднадоели алгоритмы 😁

Так как я уже почти прошла этот курс (осталось уже меньше месяца), могу поделиться впечатлениями о курсе в целом.

Мой вердикт: слишком интенсивно.

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

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

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

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

В целом курс рекомендую, но думаю, что некоторые сложные спринты бы хорошо было растянуть на 3 недели. Потому что усталость накапливается и сейчас уже хочется в отпуск после этого курса 😅 (хорошо что он у меня скоро😁) Из плюсов, разобралась в темах, которые до этого сильно отпугивали (например, графы и деревья).

Еще из плюсов, должен быть под конец курса тренировочный собес на алгоритмы. Думаю скоро у меня уже будет, тогда поделюсь как все пройдет.
🔥12👏62👍1😁1
Всем привет!

Осталась я в двух задачах до конца курса по алгоритмам 🥳

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

И знаете, что самое первое нам сказали, после почти 4х месяцев обучения?

Необходимо приводить строки к одному регистру перед сравнением! 😱


Но под конец они добавили, конечно, сложных задач, которые объясняли всякими запутанными сочетаниями, в стиле:

каждая подстрока является суффиксом некоторого префикса


После чего мозг немного сопротивлялся воспринимать информацию. 😁

Но ничего, осталось две финальные задачки и тестовый алго-собес и можно будет переключиться на другую тему. Думаю побольше углубиться в System Design. Попробую действовать по этой рекомендации и начну с Clean Architecture.

Так уж получилось, что в алгоритмы я начала вкатываться примерно по совету с того же канала (начала с "Грокаем алгоритмы", потом курс по алгоритмам, теперь в планах "Cracking coding interview" и натаскивание отдельных тем на Leetcode, но уже в спокойном режиме).

Поэтому думаю и в System Design буду погружаться тоже по его совету. Оставлю ссылки здесь, если кому-то это тоже интересно🤗
🔥144👍4
Всем привет!

Сегодня завершила курс по алгоритмам🥳

А в понедельник у меня будет тестовый алгоритмический собес! Отпишусь потом как все пройдёт.

Вчера начала читать Clean Architecture, как книжку для начинающих в теме system design.

Кстати, есть один интересный репозиторий с разными заметками, теорией по разным темам. Есть там также и по system design.

Вот, например, подготовка к собеседованию по этой теме.

Сама ещё не полностью прочитала эту статью/заметку, пока таких собеседований не планируется на горизонте, но начало понравилось 👍
🔥10🎉6🍾4👍2
Всем привет!

Сегодня у меня прошло тестовое алгоритмическое собеседование🧑‍💻

Мне дали решать одну задачу уровня hard. Вот она на Leetcode.

За время собеседования я ее не решила, точнее итоговое решение при проверке в IDE не отработало. 🫠

Потом нашла ошибки и исправила, уже после собеседования, но осадочек остался, как говорится 😁

Начала там на Leetcode учебный план "150 задач с собеседований", поставила цель решать 1 в день. Буду продолжать оттачивать навыки, но уже в спокойном режиме
🔥13👍98
Всем привет!

Сегодня дочитала 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