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

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

Сегодня практически дочитала "Head First. Паттерны проектирования" (остался Appendix с кратким описанием нескольких паттернов).

Мне очень тяжело давалась она в начале, после одного паттерна (Команда) даже отложила книгу в очень далекий ящик.

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

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

Особенно понравилось читать про Шаблонный метод, паттерн Состояния, Прокси и MVC (Model View Controller).

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

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

В общем, рекомендую! 🔥
🔥10👍1
Всем привет!

Сегодня расскажу про забавный случай кривых рук 👍

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

Код из примера по приложенной ссылке:

try(ZipInputStream zin = new ZipInputStream(new FileInputStream("output.zip"))) {
    ZipEntry entry;
    String name;
            while((entry=zin.getNextEntry())!=null){
// работа с архивом

Тестировала я его работу и всё-то у меня не попадало в цикл с получением nextEntry у класса, всё null да null у меня было.

Думаю, архив-то у меня валидный, открывается, называется красиво "test.zip".

Уже и погуглила и ИИ поспрашивала, какие могут быть причины, что архив с файлом есть, а ZipInputStream его читать не хочет.

Направил в нужную сторону меня ответ ИИ, что валидный zip всегда имеет признак - первые 2 буквы PK - и в байтах, это значение 50 и 4В, а у меня был 55 и дальше другие значения (это я проверяла дебаггером, что у меня возвращает file.getBytes()).

Решила я получить свой файл через эндпоинт и случайно забыла в постмане выбрать отправить и сохранить, и мне пришел ответ в разных не особо читаемых символах в теле ответа. Первые символы были "7z".

Тут я вспомнила как я создавала свой тестовый архив - я добавила файл к архиву, сохранила не глядя в 7z и подумала, что я расширение что-ли не сменю? И вручную поменяла 7z на zip. 🤦‍♀

Он, конечно, у меня отлично открывался и сохранялся в разных системах, только внутри он себя ассоцировал с 7z архивом, а не zip.

Мораль - не надо лениться😅
😁11
Всем привет!

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

Первым делом, написала небольшой сервис (product-service), который использует реактивную NoSQL базу данных (MongoDb).

Пока в нем обычный CRUD стандартных операций. Кому интересно, сделала открытый репозиторий на гитхабе.

Следующим шагом будет добавить второй модуль, это будет order-service, который будет работать с реактивной PostgreSQL.

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

Планирую тоже теоретическую часть почитать побольше, потому что индусы объясняют примерно так: "Это не будет работать, потому что нужно подписаться, и если я напишу вот так, то компилятор теперь счастлив, понятно? Двигаемся дальше" 😁

Третим шагом, я запланировала сделать gateway-service, который будет использовать Redis для кэширования сессии и не пропускать неавторизованных пользователей.
🔥11👍3👏1
Всем привет!

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

Где-то осенью со мной поделились ссылкой на бесплатный курс по алгоритмам от Яндекса, я до сих пор его не прошла.

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

Присоединяйтесь, кому тоже интересно, будем вместе потом обсуждать. 🤗

В тему, одной из самых запомнившихся задач, была задача написать рекурсивный алгоритм для проверки не является ли метод модифицирующим, если он помечен @Transactional(readOnly = true) (archunit тест).

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

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

Также, нужно, наконец, дочитать Designing Data-intensive applications (кабанчик).

А у вас какие планы на следующий год?

Всех с Наступающим!
👍6🔥3
Всем привет!

Всех с наступившим Новым годом! 🎄

Пусть все мечты сбываются!🎁

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

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

Поэтому курс не особо рекомендую, но сама постараюсь допройти и перейти потом к книжке Грокаем алгоритмическое собеседование.

Ещё в планах, скорее мечтах, написать что-нибудь по Spring Security с актуализацией на все изменения синтаксиса, на все возможные варианты - базовая, с токеном jwt и AOuth2. И оформить это в какой-то бесплатный курс на степике.

Эта идея у меня давно, я даже пыталась сделать здесь регулярную серию по Spring Security, но здесь не очень формат для этого подходит, легко по темам не перескочить, а хэштеги я никогда не добавляла) Поэтому думаю платформа Stepik для этого идеально подойдёт)
🔥10
Всем привет!)

Будущее потихоньку наступает? 🙃

В последнее время, много новостей по новым ИИ моделям или прогрессу старых. Что вольно-невольно появляется некоторое беспокойство к чему это всё приведёт.

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

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

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

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

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

А вы что про всё про это думаете? 🤗
🔥6👏1
Всем привет!

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

После "Гроккаем алгоритмы" объяснения хорошо ложаться, а сортировки я оказывается многие знаю (на джаве смогу написать 3 вида, а на питоне плюс ещё один вид), но на алгоритмическое собеседование в какой-нибудь Яндекс это даже не спросят😁 Возможно мне это для чего-то пригодится, конечно))

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

В прошлом году решила длинно, не сильно читаемо и по времени в статистике литкод среди меньшего количества за 3 ms, вместо более популярного решения за 2 ms.

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

Буду продолжать дальше, ещё бы кто-нибудь подпинывал делать регулярно, как делают курсы.)) Но бесплатный курс с Я.Практикума для этого не годится, возможно все-таки возьму их платную версию..
🔥13👍2
Всем привет!)

Всех причастных с праздником! 🥳

А я сегодня сдалась и записалась на платный курс по алгоритмам в Я. Практикум 🤓

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

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

Вчера, когда отдавала задачи на проверку, некоторые мои решения выпадали на 10-80 мс за лимит по времени выполнения. И было очень интересно думать, как можно ускорить решение.

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

Учеба у меня начнется с 6 марта, потом поделюсь впечатлениями)
🔥13
Всем привет!

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

Несколько людей там имеют опыт работы в разработке более 15 лет😱 Но есть также фронтендеры, автотестеры и люди из других смежных сфер.

Программу первого спринта (первые 2 недели курса) немного приоткрыли и стало немножко боязно 🫣 - там 24 урока плюс финальное задание, которое будет проверять ревьюер. Пока не представляю, как оно будет выглядеть)

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

А завтра, если ничего не поменяется, буду изучать Kotlin dsl на предмет возможности применения в проекте.
🔥12👍2
Всем привет!

Сегодня будет несколько новостей и щенячих восторгов) Во-первых, попрактиковала вчера интересный use case для ИИ. Сказала ему, что вот ты мой ментор, хочешь меня научить, сразу мне правильный ответ не говоришь, а подсказываешь, задаешь может быть наводящие вопросы.

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

И он таки подвел меня к решению) День-полтора у меня заняло, конечно, на осмысление его подсказок, пробовала и так и сяк, в конце концов решение прошло и я отправила его на ревью. Интересно будет посмотреть, как оно будет выглядеть.

Так что курс пока у меня идет в темпе предыдущего, на первой неделе спринта я сделала его финальное задание (2 задачи, одна из них не сложная). Оно пока не принято, но это не главное 😅 Ещё один из плюсов, тут оказалось можно идти вперёд, уроки не блокируются календарем, чего мне очень не хватало на джавистком курсе)

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

А у вас как дела?)
🔥10👏31
Всем привет!

У меня на курсе закончился 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