JavaStart
910 subscribers
910 photos
28 videos
620 links
Учи Java вместе с нами!
Наша платформа с курсом - https://javastart.tech
Ютуб с обучающими видео - https://www.youtube.com/@javastart_tech
Download Telegram
😁26👍211🔥1
Паттерны проектирования в Java. Часть 1.

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

Также попросят рассказать о самом распространенном паттерне Singleton. Давайте разбираться.

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

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

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

И так, типы паттернов бывают:

– Порождающие.
Порождающие паттерны предоставляют механизмы инициализации, позволяя создавать объекты удобным способом.

– Структурные.
Структурные паттерны определяют отношения между классами и объектами, позволяя им работать совместно.

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

В следующих постах поговорим о представителях каждого типа паттернов проектирования.

👉 JavaStart. Подписаться
👍1641🔥1
Паттерны проектирования в Java. Порождающие. Часть 2.

Порождающие паттерны:

Singleton (Одиночка) - ограничивает создание одного экземпляра класса, обеспечивает доступ к его единственному объекту;

Factory (Фабрика) - используется, когда у нас есть суперкласс с несколькими подклассами и на основе ввода, нам нужно вернуть один из подкласса;

Builder (Строитель) - используется для создания сложного объекта с использованием простых объектов. Постепенно он создает больший объект от малого и простого объекта;

Prototype (Прототип) - помогает создать дублированный объект с лучшей производительностью, вместо нового создается возвращаемый клон существующего объекта;

И др.

К Синглтону ещё вернёмся. Как я уже говорил, о нем почти всегда спрашивают на собеседованиях 🤓

👉 JavaStart. Подписаться
👍6🔥621
Паттерны проектирования в Java. Структурные. Часть 3.

Структурные паттерны:

Adapter (Адаптер) - это конвертер между двумя несовместимыми объектами. Используя паттерн адаптера, мы можем объединить два несовместимых интерфейса;

Proxy (Заместитель) - представляет функциональность другого класса;

Facade (Фасад) - обеспечивает простой интерфейс для клиента, и клиент использует интерфейс для взаимодействия с системой;

Bridge (Мост) - делает конкретные классы независимыми от классов реализации интерфейса;

Decorator (Декоратор) - добавляет новые функциональные возможности существующего объекта без привязки его структуры;

И др.

Старайтесь запомнить, будет отлично, если сможете рассказать это на собеседовании, хотя бы пару слов 🔥

👉 JavaStart. Подписаться
8👍52🔥1
👍8😁722
Паттерны проектирования в Java. Поведенческие. Часть 4.

Поведенческие паттерны:

Template Method (Шаблонный метод) - определяющий основу алгоритма и позволяющий наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом;

Observer (Наблюдатель) - позволяет одним объектам следить и реагировать на события, происходящие в других объектах;

Strategy (Стратегия) - алгоритм стратегии может быть изменен во время выполнения программы;

И др.

А в одном из следующих постов разберем подробно уже ставший нам знакомым Singleton паттерн.

👉 JavaStart. Подписаться
👍721👨‍💻1
Паттерны проектирования в Java. Singleton. Часть 5.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

👉 JavaStart. Подписаться
🔥7👍5211
Какой интерфейс в Java используется для реализации множественного наследования?
Anonymous Quiz
2%
Runnable
10%
Serializable
9%
Cloneable
17%
Extendable
57%
Невозможно реализовать множественное наследование в Java
5%
Посмотреть ответ
👍742👏1🎉1
🔥5👍1👨‍💻1
Что такое логирование и логи в Java?

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

Логирование 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. Подписаться
👍6111👨‍💻1
😁1221👍1
Какая команда SQL используется для выборки данных из таблицы?
Anonymous Quiz
1%
UPDATE
0%
DELETE
7%
INSERT
88%
SELECT
1%
TRUNCATE
3%
Посмотреть ответ
🤓5👍2😁2🎉2👏1
Уровни логирования в Java.

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

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

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

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

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

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

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

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

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

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

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

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

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

👉 JavaStart. Подписаться
👍832👨‍💻1
Библиотеки логирования Java.

Уровни логирования рассмотрели, теперь о библиотеках!

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

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

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

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

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

У меня на проекте, например, используется библиотека для логирования SLF4J.

👉 JavaStart. Подписаться
👍73🔥1
Какая из следующих коллекций в Java представляет собой неизменяемый список элементов?
Anonymous Quiz
9%
ArrayList
14%
HashSet
8%
LinkedList
65%
ImmutableList
5%
Посмотреть ответ
👍6🤓3😁2🎉2👏1👨‍💻1
Модификатор доступа static в Java. Часть 1.

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

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

Сначала в общих чертах:

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

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

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

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

👉 JavaStart. Подписаться
👍12🔥32🎉1