Java Mentor – Telegram
Java Mentor
294 subscribers
173 photos
48 videos
1 file
79 links
Download Telegram
Java Mentor
Video
@vlad0O_O0 - Это твоё)
Java Mentor
Video
@Logoti456 - принимай)
Java Mentor
Video
@GenesizAnt - Это ваше)
Java Mentor
Video
@MikhailSumarokov ты успел на ревью)
Сори за спам. Сегодня это последнее сообщение.

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

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

Также я буду крайне признателен, если вы порекомендуете данный канал своим друзьям 😊
14🔥7
Хочу поговорить о try-with-resources. Это важная тема, как показало ревью.

Если не закрывать ресурсы после работы с ними - могут возникнуть утечки памяти.

try-with-resources - удобная конструкция для работы с ресурсами, гарантирующая их корректное закрытие.

Обратите внимание на конструкцию try (..) { .. }. Внутри круглых скобок мы создаем объекты, которые реализуют интерфейс AutoCloseable. В нашем случае это BufferedReader, который оборачивает FileReader. Важно отметить, что все эти объекты будут автоматически закрыты по окончании блока try.

Помимо работы с файлами, try-with-resources также применяется для работы с другими ресурсами (сетевые соединения, БД). Главное убедиться, что используемые объекты реализуют интерфейс AutoCloseable.

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

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

Удачи в кодинге!
👍164
Привет, друзья!

Уже традиционно - планы на неделю.

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

🔜 У StringCrudDatabase проекта будет продолжение:

1️⃣ Ждите видос, где я запилю задачку в режиме лайв-кодинга. Тем из вас кто сделал задачку будет крайне полезно. Также оставлю ссылку на гит репозиторий, чтобы вы могли скачать код и все потыкать самостоятельно

2️⃣Появятся новые требования. Задача станет сложнее и интереснее. После этого я дам вам недельку на то, чтобы вы все закодили. Затем, также в режиме лайв-кодинга, я выложу свое решение, чтобы вы могли сравнить свое решение с моим и отрефакторить при необходимости свой код.

Мы будем повторять итерацию несколько раз и из нашего консольного приложения получится полноценный пет-проект на боевом стеке!

Я настоятельно рекомендую всем, кто еще не брался за выполнение задачи взяться за нее. Я считаю что это очень крутая возможность:
Прокачать навык решения задачи
Прокачать навык организации и структурирования кода
Запилить пет-проект с поддержкой Senior разработчика

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

Итого на этой неделе нас ждут:
▶️посты по теории (7шт)
▶️ видос от меня по решению задачи (1шт)
▶️ новые требования для задачи (1шт)
🔥103
А начнем мы с immutable objects.

На собеседованиях часто спрашивают:

Что такое неизменяемый объект?
Зачем нужны неизменяемые объекты?
Как создать неизменяемый объект?

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

Преимущества immutable objects:

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

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

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

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

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

Создание immutable object:

▪️ Объявить все поля как private final:
private final String name;
private final int age;


▪️ Не предоставлять методы для изменения полей (сеттеры). Вместо этого, инициализировать значения полей через конструктор класса:
public ImmutablePerson(String name, int age) {
this.name = name;
this.age = age;
}


▪️Не возвращать изменяемые объекты, такие как коллекции, массивы или другие объекты. Вместо этого, возвращать их защищенные копии:
public List<String> getNames() {
return Collections.unmodifiableList(names);
}
👍8🔥4
Привет, друзья!

Вопрос "Какие методы есть у класса Object" довольно часто встречается на собеседованиях.

Давайте взглянем как можно на него ответить:

equals(Object obj): сравнивает объекты на равенство. Можно переопределить для сравнения по значению

hashCode(): возвращает уникальный идентификатор объекта. Используется с коллекциями

toString(): возвращает строковое представление объекта. Переопределите для более информативного вывода

getClass(): возвращает объект Class, представляющий класс объекта

clone(): создает и возвращает копию объекта. Можно переопределить для глубокого копирования

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

Это лишь некоторые методы Object. Они предоставляют базовую функциональность, настраиваемую по вашим потребностям.

И если вас спросят, есть ли еще какие-либо методы у Object, можно будет рассказать о методах notify и wait, которые мы рассмотрим в след посте
11🔥6👍1
Методы класса Object, продолжение

notify(): метод используется для возобновления выполнения потока, ожидающего монитор объекта с помощью метода wait(). Обычно используется в контексте многопоточности.

notifyAll(): аналогично методу notify(), но возобновляет выполнение всех потоков, ожидающих монитор объекта.

wait(): приостанавливает выполнение потока до тех пор, пока другой поток не вызовет метод notify() или notifyAll() на том же объекте.

wait(long timeout): аналогично методу wait(), но добавляет временное ограничение на ожидание, указанное в миллисекундах.

wait(long timeout, int nanos): аналогично методу wait(long timeout), но позволяет указать временное ограничение с точностью до наносекунд.

Эти методы связаны с концепцией мониторов и синхронизации потоков выполнения в Java. Они используются для координации работы потоков и обеспечения безопасного доступа к ресурсам в многопоточной среде.

Имейте в виду, что методы notify(), notifyAll() и wait() вызываются только внутри синхронизированного блока кода или метода, который синхронизирован с использованием ключевого слова synchronized.

Учтите, что в большинстве случаев вам не понадобится использовать эти методы напрямую, так как существуют более современные и удобные механизмы для работы с многопоточностью в Java, такие как классы из пакета java.util.concurrent.
👍113
This media is not supported in your browser
VIEW IN TELEGRAM
👍13👏2
Делаю для вас видос. Делаю столько же ошибок сколько и новичок в коде)

Если плохой код - это говнокод, то неудачные дубли это…

Продолжите в комментах)
12😁3👍1
Так, ребята, не успеваю запилить видос ко времени, к которому хотелось бы, а оставлять вас без дела тоже не хочу.

Поэтому вот вам задание на следующий этап.

Изучите формат JSON

Вам необходимо научиться парсить JSON строки. Для этого:
💠 Подтяните к себе в проект библиотеку jackson. В pom.xml в блоке dependencies укажите такую зависимость (скрин того как надо укажу в комментах)

💠 Обновите зависимости проекта. Для этого в IDEA клацаете ПКМ внутри pom.xml -> maven -> reload project

💠 Для сериализации объектов в json строки и дессериализации json строк в объекты вам нужно использовать класс ObjectMapper из библиотеки jackson, которую вы подтяните шагом ранее.

💠 Просто введите в коде ObjectMapper, и если вы все сделали правильно с зависимостями, IDEA предложит импортировать данный класс.

💠 Почитайте о работе с данным классом. В основном, вам потребуется всего два метода: readValue и writeValueAsString. В комментах выложу примеры кода по работе с данным классом.

И когда вы все это сделаете, вы будете готовы к выполнению самого задания на следующий этап)

А оно вот такое:

Заведите класс Person с полями:
name - String,
age - Integer


Теперь вместо строк, вы должны сохранять объекты класса Person.

API останется тем же. Только теперь вместо простой строки, необходимо вводить конкретного person-a в json формате. Например так: { "name": "bob", "age": 25 }

Ставь лайк, если зачесались руки 🤩
17😍2
Media is too big
VIEW IN TELEGRAM
Привет, друзья!

Надо объяснить куда я пропал.

Мне хотелось сделать большой и классный видос на youtube про свое решение нашей String CRUD задачки. Но увы, я уперся и дальше что-то никак не идет. Отнимает много внутренних ресурсов, а результата ноль. И к тому же, ничего другого постить не могу, так как "не закончил ведь видос снимать".

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

Вы можете скачать мое решение отсюда: https://github.com/yourjm/project1/tree/string_crud

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

А я пока подумаю, как нам дальше двигаться вперед 😎
👍131