Что произойдет, если метод в классе объявлен с модификатором доступа private?
Anonymous Quiz
4%
Метод будет доступен только внутри того же пакета
6%
Метод будет доступен внутри того же пакета и для наследников
0%
Метод будет доступен отовсюду, даже за пределами пакета и наследников
88%
Метод будет доступен только внутри того же класса
1%
Посмотреть ответ
👍4✍3🎉2❤1
Паттерны проектирования в Java. Структурные. Часть 3.
Структурные паттерны:
Adapter (Адаптер) - это конвертер между двумя несовместимыми объектами. Используя паттерн адаптера, мы можем объединить два несовместимых интерфейса;
Proxy (Заместитель) - представляет функциональность другого класса;
Facade (Фасад) - обеспечивает простой интерфейс для клиента, и клиент использует интерфейс для взаимодействия с системой;
Bridge (Мост) - делает конкретные классы независимыми от классов реализации интерфейса;
Decorator (Декоратор) - добавляет новые функциональные возможности существующего объекта без привязки его структуры;
И др.
Старайтесь запомнить, будет отлично, если сможете рассказать это на собеседовании, хотя бы пару слов 🔥
👉 JavaStart. Подписаться
Структурные паттерны:
Adapter (Адаптер) - это конвертер между двумя несовместимыми объектами. Используя паттерн адаптера, мы можем объединить два несовместимых интерфейса;
Proxy (Заместитель) - представляет функциональность другого класса;
Facade (Фасад) - обеспечивает простой интерфейс для клиента, и клиент использует интерфейс для взаимодействия с системой;
Bridge (Мост) - делает конкретные классы независимыми от классов реализации интерфейса;
Decorator (Декоратор) - добавляет новые функциональные возможности существующего объекта без привязки его структуры;
И др.
Старайтесь запомнить, будет отлично, если сможете рассказать это на собеседовании, хотя бы пару слов 🔥
👉 JavaStart. Подписаться
✍8👍5❤2🔥1
Что произойдет, если объявить переменную с модификатором final?
Anonymous Quiz
9%
Значение переменной может быть изменено только один раз
3%
Переменная будет доступна только внутри класса
1%
Переменная будет удалена из памяти после первого использования
85%
Значение переменной не может быть изменено
1%
Значение переменной можно изменять сколько угодно раз
2%
Посмотреть ответ
👍5✍2🎉2🔥1👏1
Паттерны проектирования в Java. Поведенческие. Часть 4.
Поведенческие паттерны:
Template Method (Шаблонный метод) - определяющий основу алгоритма и позволяющий наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом;
Observer (Наблюдатель) - позволяет одним объектам следить и реагировать на события, происходящие в других объектах;
Strategy (Стратегия) - алгоритм стратегии может быть изменен во время выполнения программы;
И др.
А в одном из следующих постов разберем подробно уже ставший нам знакомым Singleton паттерн.
👉 JavaStart. Подписаться
Поведенческие паттерны:
Template Method (Шаблонный метод) - определяющий основу алгоритма и позволяющий наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом;
Observer (Наблюдатель) - позволяет одним объектам следить и реагировать на события, происходящие в других объектах;
Strategy (Стратегия) - алгоритм стратегии может быть изменен во время выполнения программы;
И др.
А в одном из следующих постов разберем подробно уже ставший нам знакомым Singleton паттерн.
👉 JavaStart. Подписаться
👍7✍2❤1👨💻1
Паттерны проектирования в Java. Singleton. Часть 5.
Как я уже говорил ранее, практически всегда, если вы собеседуетесь на позицию Junior Java разработчика или стажера, вас спросят о таком паттерне как Singleton. Давайте рассмотрим его подробно. Что это за зверь такой?
Синглтон — это один из самых простых шаблонов (паттернов) проектирования, который применяется к классу. Иногда говорят: “этот класс — синглтон”, подразумевая, что этот класс реализует паттерн проектирования синглтон.
Иногда необходимо написать класс, у которого можно будет создать только один объект. Например, класс, отвечающий за логирование или подключение к базе данных.
Шаблон проектирования синглтон описывает, как мы можем выполнить такую задачу.
Синглтон — это шаблон (паттерн) проектирования, который делает две вещи:
– Дает гарантию, что у класса будет всего один экземпляр класса;
– Предоставляет глобальную точку доступа к экземпляру данного класса.
Отсюда — две особенности, характерные для практически каждой реализации паттерна синглтон:
– Приватный конструктор. Ограничивает возможность создания объектов класса за пределами самого класса;
– Публичный статический метод, который возвращает экземпляр класса. Данный метод называют getInstance. Это глобальная точка доступа к экземпляру класса.
Давайте теперь рассмотрим одни из распространенных методов создания Синглтона. Рекомендую в них разобраться и запомнить, воспроизвести и объяснить этот код на собеседовании будет очень даже достаточно!
Первый пример на Картинке 1.
Закрытый конструктор вызывается один раз для инициализации поля INSTANCE. Открытых конструктор у класса нет, поэтому после инициализации класса будет существовать только один экземпляр Singleton.
Существует другой вариант (Картинка 2), когда вместо открытого статического поля создается открытый статический метод, а поле становится закрытым.
Второй способ удобен тем, что вы можете позже отказаться от синглтона, но вам не придется сильно переписывать код.
👉 JavaStart. Подписаться
Как я уже говорил ранее, практически всегда, если вы собеседуетесь на позицию Junior Java разработчика или стажера, вас спросят о таком паттерне как Singleton. Давайте рассмотрим его подробно. Что это за зверь такой?
Синглтон — это один из самых простых шаблонов (паттернов) проектирования, который применяется к классу. Иногда говорят: “этот класс — синглтон”, подразумевая, что этот класс реализует паттерн проектирования синглтон.
Иногда необходимо написать класс, у которого можно будет создать только один объект. Например, класс, отвечающий за логирование или подключение к базе данных.
Шаблон проектирования синглтон описывает, как мы можем выполнить такую задачу.
Синглтон — это шаблон (паттерн) проектирования, который делает две вещи:
– Дает гарантию, что у класса будет всего один экземпляр класса;
– Предоставляет глобальную точку доступа к экземпляру данного класса.
Отсюда — две особенности, характерные для практически каждой реализации паттерна синглтон:
– Приватный конструктор. Ограничивает возможность создания объектов класса за пределами самого класса;
– Публичный статический метод, который возвращает экземпляр класса. Данный метод называют getInstance. Это глобальная точка доступа к экземпляру класса.
Давайте теперь рассмотрим одни из распространенных методов создания Синглтона. Рекомендую в них разобраться и запомнить, воспроизвести и объяснить этот код на собеседовании будет очень даже достаточно!
Первый пример на Картинке 1.
Закрытый конструктор вызывается один раз для инициализации поля INSTANCE. Открытых конструктор у класса нет, поэтому после инициализации класса будет существовать только один экземпляр Singleton.
Существует другой вариант (Картинка 2), когда вместо открытого статического поля создается открытый статический метод, а поле становится закрытым.
Второй способ удобен тем, что вы можете позже отказаться от синглтона, но вам не придется сильно переписывать код.
👉 JavaStart. Подписаться
🔥7👍5❤2⚡1✍1
Какой интерфейс в Java используется для реализации множественного наследования?
Anonymous Quiz
2%
Runnable
10%
Serializable
9%
Cloneable
17%
Extendable
57%
Невозможно реализовать множественное наследование в Java
5%
Посмотреть ответ
👍7✍4❤2👏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. Подписаться
Наверняка вы когда-либо уже слышали слово лог / логи касательно разработки. Давайте разберемся, что же такое логи?
Логирование 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. Подписаться
👍6⚡1✍1❤1👨💻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. Подписаться
Мы выяснили, что такое логи и что такое логирование Java. Нетрудно догадаться, что если в лог-файл записывать все действия программы, то там будет большое количество различных сведений.
В некоторых ситуациях лог-файлы могут генерироваться очень быстро и в огромных размерах. В этом случае найти нужную информацию в логах будет очень нелегко. Поэтому, чтобы контролировать объемы записываемой информации, придумали различные уровни логирования.
Уровни логирования применяются в программах на различных языках программирования, в том числе и на Java. Различают несколько основных уровней (Картинка 1):
debug — выводится информация, которая пригодится для отладки программы;
info — обычные и стандартные сообщения, чаще всего информативные;
warning — нефатальное предупреждение;
error — записи ошибок;
fatal — фатальная ошибка;
off — сообщения не выводятся;
trace — информация для точной отладки;
all — выводится вся информация.
Чаще всего в коммерческой разработке используются уровни debug, info, warning, error и trace.
В конфигурационном файле нашего приложения в любой момент можно включить или выключить запись любого уровня логирования. Либо оставить несколько уровней, чтобы писались в лог, либо же оставить какой-то один уровень.
👉 JavaStart. Подписаться
👍8❤3✍2👨💻1
Библиотеки логирования Java.
Уровни логирования рассмотрели, теперь о библиотеках!
Библиотеки логирования Java — это набор инструментов, который применяют при логировании программ. Различают несколько популярных инструментов логирования:
– Apache log4j
Это первый набор инструментов для логирования Java, который появился еще в 1999-м году. Внутри себя имеет различные способы вывода логов, несколько форматов логирования и мн. др. Раньше данная библиотека активно применялась, но уже долгое время этот проект не развивается.
– JUL
Имеет множество уровней логирования, например, только для отладки у этого инструмента есть в арсенале 3 отладочных уровня вместо одного стандартного.
– SLF4J
Этот инструмент является оберткой над многими популярными логгерами, например: logback, log4j, jul и др.
– Logback
Был создан как альтернатива умирающему log4j, поэтому он вобрал в себя все лучшее из этого инструмента, при этом усовершенствовал некоторые показатели.
У меня на проекте, например, используется библиотека для логирования SLF4J.
👉 JavaStart. Подписаться
Уровни логирования рассмотрели, теперь о библиотеках!
Библиотеки логирования Java — это набор инструментов, который применяют при логировании программ. Различают несколько популярных инструментов логирования:
– Apache log4j
Это первый набор инструментов для логирования Java, который появился еще в 1999-м году. Внутри себя имеет различные способы вывода логов, несколько форматов логирования и мн. др. Раньше данная библиотека активно применялась, но уже долгое время этот проект не развивается.
– JUL
Имеет множество уровней логирования, например, только для отладки у этого инструмента есть в арсенале 3 отладочных уровня вместо одного стандартного.
– SLF4J
Этот инструмент является оберткой над многими популярными логгерами, например: logback, log4j, jul и др.
– Logback
Был создан как альтернатива умирающему log4j, поэтому он вобрал в себя все лучшее из этого инструмента, при этом усовершенствовал некоторые показатели.
У меня на проекте, например, используется библиотека для логирования SLF4J.
👉 JavaStart. Подписаться
👍7✍3🔥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. Подписаться
Очень частый вопрос, который задают джунам на собеседованиях - Расскажите про модификатор static в Java.
Давайте рассмотрим ключевое слово static: его применение к переменным, методам, блокам инициализации, вложенным классам (nested classes).
Сначала в общих чертах:
В языке программирования Java ключевым словом static помечают члены (поля или методы), которые принадлежат классу, а не экземпляру этого класса.
Это означает, что какое бы количество объектов вы не создали, всегда будет создан только один член, доступный для использования всеми экземплярами класса.
Ключевое слово static применимо к переменным, методам, блокам инициализации, импорту и вложенным классам (nested classes).
Дальше поговорим подробнее о каждом случае.
👉 JavaStart. Подписаться
👍12🔥3✍2🎉1
Модификатор доступа static в Java. Часть 2.
Вопрос про модификатор доступа static является действительно излюбленным на собеседованиях, поэтому продолжаем разбираться!
Статические поля (переменные класса).
В языке Java, если поле объявляется статическим (путем добавления модификатора static), то в независимости от количества созданных объектов класса — всегда будет существовать только один экземпляр статического поля. Значение такого поля будет единым и общим для всех объектов класса, содержащих это поле (Картинка 1).
С точки зрения используемой памяти, статические переменные размещаются в специальном пуле в памяти JVM, называемом Metaspace (до Java 8 он назывался Permanent Generation или PermGen, который был полностью удален и заменен на Metaspace).
Пример статического поля (Картинка 2).
Предположим, у нас есть класс Car с несколькими атрибутами (полями). Каждый экземпляр данного класса будет иметь свою, отличающуюся от других копию этих переменных экземпляра. Значения таких полей можно менять в объектах независимо друг от друга.
А теперь предположим, что нам требуется переменная-счетчик для хранения количества созданных объектов Car, которая являлась бы общей для всех его экземпляров. При этом необходимо, чтобы каждый из них имел к ней доступ и мог изменять.
Тут-то нам и пригодится статическая переменная (numberOfCars).
Теперь для каждого объекта этого класса будет увеличиваться один и тот же экземпляр переменной numberOfCars. Давайте это проверим, посмотрим на Картинку 3.
👉 JavaStart. Подписаться
Вопрос про модификатор доступа static является действительно излюбленным на собеседованиях, поэтому продолжаем разбираться!
Статические поля (переменные класса).
В языке Java, если поле объявляется статическим (путем добавления модификатора static), то в независимости от количества созданных объектов класса — всегда будет существовать только один экземпляр статического поля. Значение такого поля будет единым и общим для всех объектов класса, содержащих это поле (Картинка 1).
С точки зрения используемой памяти, статические переменные размещаются в специальном пуле в памяти JVM, называемом Metaspace (до Java 8 он назывался Permanent Generation или PermGen, который был полностью удален и заменен на Metaspace).
Пример статического поля (Картинка 2).
Предположим, у нас есть класс Car с несколькими атрибутами (полями). Каждый экземпляр данного класса будет иметь свою, отличающуюся от других копию этих переменных экземпляра. Значения таких полей можно менять в объектах независимо друг от друга.
А теперь предположим, что нам требуется переменная-счетчик для хранения количества созданных объектов Car, которая являлась бы общей для всех его экземпляров. При этом необходимо, чтобы каждый из них имел к ней доступ и мог изменять.
Тут-то нам и пригодится статическая переменная (numberOfCars).
Теперь для каждого объекта этого класса будет увеличиваться один и тот же экземпляр переменной numberOfCars. Давайте это проверим, посмотрим на Картинку 3.
👉 JavaStart. Подписаться
🔥8👍3❤2✍2