JavaStart
942 subscribers
874 photos
26 videos
585 links
Учи Java вместе с нами!
Наша платформа с курсом - https://javastart.tech
Ютуб с обучающими видео - https://www.youtube.com/@javastart_tech
Download Telegram
Паттерны проектирования в Java. Singleton. Часть 5.

Практически всегда, если вы собеседуетесь на позицию Junior Java разработчика или стажера, вас спросят о таком паттерне как Singleton. Давайте рассмотрим его подробно.

Синглтон — это один из самых простых шаблонов (паттернов) проектирования, который применяется к классу. Иногда говорят: “этот класс — синглтон”, подразумевая, что этот класс реализует паттерн проектирования синглтон.

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

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

Синглтон — это шаблон (паттерн) проектирования, который делает две вещи:

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

Отсюда — две особенности, характерные для практически каждой реализации паттерна синглтон:

– Приватный конструктор. Ограничивает возможность создания объектов класса за пределами самого класса;

– Публичный статический метод, который возвращает экземпляр класса. Данный метод называют getInstance. Это глобальная точка доступа к экземпляру класса.

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

Первый пример на Картинке 1.

Закрытый конструктор вызывается один раз для инициализации поля INSTANCE. Публичного конструктора у класса нет, поэтому после инициализации класса будет существовать только один экземпляр Singleton.

Существует другой вариант (Картинка 2), когда вместо открытого статического поля создается открытый статический метод, а поле становится закрытым.

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

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Логирование в Java. Часть 1.

Что такое логирование и логи?

Наверняка вы когда-либо уже слышали слово лог / логи касательно разработки. Давайте разберемся, что же такое логи?

Логирование Java — это процесс, при котором программа записывает сведения о своем исполнении в консоль, или некий файл, или базу данных. Логирование дает возможность отслеживать ход исполнения программы и конкретно кода.

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

Логирование Java напоминает процесс работы «черного ящика» в самолете — в случае возникновения критических ситуаций оно способно «рассказать», что не так работает и на что обратить внимание.

В разработке лог — это специальный файл, который выполняет функцию «бортового журнала» программы. Именно в этот файл, а точнее в лог, программа производит записи о своей работе. Лог-файлы программа может создавать самостоятельно, чтобы вносить туда текстовые пометки.

Если мы с вами посмотрим на Картинку 1, то увидим так называемые логи:

Сначала записаны строки с текстом сообщения “Что-то не важное”
Затем строка с текстом “Состояние объекта”
Далее выводится сообщение “Какая-то информация”
“Предупреждение”
“Ошибка!”
И наш привычный System.out.println(“Hello world!”);
Далее снова строки логирования.

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

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

log.info("Saving data for user #{}", userId);
// Пусть userId у нас равен 123
someRepository.save(user);

И в лог файле непосредственно перед вызовом метода сохранения мы получим строку:

Saving data for user #123

Обратите внимание, что на Картинке 1 сообщения логирования различаются цветом. Это потому что существуют разные уровни логирования. О них в следующем посте!

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Пользуемся

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Логирование в Java. Часть 2.

Уровни логирования.

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

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

Уровни логирования применяются в программах на различных языках программирования, в том числе и на Java. Различают несколько основных уровней (Картинка 1):

debug — выводится информация, которая пригодится для отладки программы;

info — обычные и стандартные сообщения, чаще всего информативные;

warning — нефатальное предупреждение;

error — записи ошибок;

fatal — фатальная ошибка;

off — сообщения не выводятся;

trace — информация для точной отладки;

all — выводится вся информация.

Чаще всего в коммерческой разработке используются уровни debug, info, warning, error и trace.

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

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача на логику:

Каждый третий рыбак — работает на заводе, а каждый четвертый работник на заводе — рыбак. Кого больше, рыбаков или работников на заводе?

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ к задаче про рыбаков и работников на заводе:

🔍 Условия:

Каждый третий рыбак работает на заводе.
Каждый четвертый работник на заводе — рыбак.
📊 Если обозначить количество рыбаков как X, а работников на заводе как Y, то:

Рыбаки, работающие на заводе: X/3.
Работники завода, которые являются рыбаками: Y/4.
Так как это одно и то же количество, у нас получается уравнение: X/3 = Y/4

🙌 Тогда: 4X = 3Y

💡 Это значит, что: X/Y = 3/4

А это уже говорит о том, что работников на заводе в 1.33 раза больше, чем рыбаков!

🛥 Вывод: Работников на заводе больше, чем рыбаков!

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Логирование в Java. Часть 3.

Библиотеки логирования.

Библиотеки логирования Java — это набор инструментов, который применяют при логировании программ. Различают несколько популярных инструментов логирования:

– Apache log4j
Это первый набор инструментов для логирования Java, который появился еще в 1999-м году. Внутри себя имеет различные способы вывода логов, несколько форматов логирования и мн. др. Раньше данная библиотека активно применялась, но уже долгое время этот проект не развивается.

– JUL
Имеет множество уровней логирования, например, только для отладки у этого инструмента есть в арсенале 3 отладочных уровня вместо одного стандартного.

– SLF4J
Этот инструмент является оберткой над многими популярными логгерами, например: logback, log4j, jul и др.

– Logback
Был создан как альтернатива умирающему log4j, поэтому он вобрал в себя все лучшее из этого инструмента, при этом усовершенствовал некоторые показатели.

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Какова типичная длительность спринта в Scrum?
Anonymous Quiz
1%
От 12 до 18 месяцев
83%
От 1 до 4 недель
4%
1 день
3%
6 месяцев
9%
Посмотреть ответ
Please open Telegram to view this post
VIEW IN TELEGRAM
Модификатор доступа static в Java. Часть 1.

Очень частый вопрос, который задают джунам на собеседованиях - Расскажите про модификатор static в Java.

Давайте рассмотрим ключевое слово static: его применение к переменным, методам, блокам инициализации, вложенным классам (nested classes).

В общих чертах и простыми словами:

В языке программирования Java ключевым словом static помечают члены класса (поля или методы), которые принадлежат классу, а не экземпляру этого класса.

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

Ключевое слово static применимо к переменным, методам, блокам инициализации, импорту и вложенным классам (nested classes).

Дальше подробнее о каждом случае.

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM