Java Mentor – Telegram
Java Mentor
294 subscribers
173 photos
48 videos
1 file
79 links
Download Telegram
В Java есть Checked и Unchecked исключения.

У Checked Exceptions есть свои 👍 и :

👍 Преимущества:
1️⃣ Принудительная обработка исключений: Разработчик обрабатывает или объявляет исключения в коде, предотвращая игнорирование ошибок и обеспечивая надежное ПО.
2️⃣ Улучшение читаемости кода: Объявление Checked Exceptions в методе дает информацию о возможных исключениях, упрощая понимание вызовов метода.

Недостатки:
1️⃣ Избыточность кода: Обработка Checked Exceptions может привести к повторяющемуся коду, усложняющему чтение и поддержку программы.
2️⃣ Ограничение гибкости: Checked Exceptions требуют обработки в каждом вызывающем коде, ограничивая гибкость и повторное использование кода.

И один из вопросов с собеседований звучит так:
А нужны ли Checked Exceptions в принципе? И если да, то зачем?

За годы практики я сталкивался с адептами разных верований. Одни верили, что нужны только Checked исключения, другие же использовали только Runtime Exceptions.

А что думаете вы? Поделитесь в комментах
3🤔2
Ребята, мне нужна ваша помощь. Я придумал слоган для своего наставничества. Звучит он так: "Не надо дохера знать, надо дохера уметь". Что думаете?
Anonymous Poll
50%
Слоган - огонь!
17%
Слоган - дерьмо!
33%
Какой слоган? Запили видос про работу с файлами
Ребят, я пару дней ниче не постил, отдыхал, выходные ведь. Но думаю, что стоит поделиться планами.

Но сначала скажу спасибо всем, кто проголосовал в опросе выше. Теперь у нас есть слоган 😁

Ранее я выложил задачку, и получил уже целых 4 ссылки на решение. Это очень круто, я прям горжусь собой за то, что заставил вас кодить, и вами за то что вы взяли и сделали. Вы очень крутые🦾

Ближайшие планы теперь такие.
Запишу видосы на которых сделаю ревью кода и выложу тут. В видео получится наиболее полно дать фидбек. Я ленивый и в тексте не осилю 😅

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

Ближайшие планы такие, всем желаю хорошо отдохнуть перед новой неделей и кайфануть от нее)
👍103🔥1💯1
Итак, друзья, я сделал всем ревью.
Все молодцы! Понял, что пока читал ваш код на камеру мало хвалил вас. Но знайте, что вы учитесь, и делать неправильно - часть процесса обучения.
В самом ревью я делал акцент на какие-то общие вещи, сильно в детали не смотрел.
Рекомендации могу дать такие:

1. Разбивайте логику на обособленные функциональные блоки. В контексте данной задачи сделать это можно примерно так:
Пользователь ввел строку - вызвался парсер. Парсер распарсил команду - она уже валидная. Далее эта команда передалась в некоторый сервис, задача которого вызывать тот или иной метод хранилища.

2. Закрывайте ресурсы. Почитайте про интерфейс Closable, Autoclosble, про try-with-resources и блок finaly

3. Практически у всех папка .idea попала в git. Это не комильфо. Смотрите на свой репозиторий на github. Видите в нем папку .idea или папку target - гуглите про gitignore, про то как в него добавить папку.

Остальное увидите в видосах, которые щас появятся.
Продолжайте в том-же духе.

Должен сказать, что пока не могу обещать что разберу ваши исправления - это все-таки занимает много моего времени. Но обещаю подумать как можно было бы организовать все иначе без потери качества.
👍11🔥1
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