Расскажите про клонирование объектов.
Использование оператора присваивания не создает нового объекта, а лишь копирует ссылку на объект. Таким образом, две ссылки указывают на одну и ту же область памяти, на один и тот же объект. Для создания нового объекта с таким же состоянием используется клонирование объекта.
Класс Object содержит protected метод clone(), осуществляющий побитовое копирование объекта производного класса. Однако сначала необходимо переопределить метод clone() как public для обеспечения возможности его вызова. В переопределенном методе следует вызвать базовую версию метода super.clone(), которая и выполняет собственно клонирование.
Чтобы окончательно сделать объект клонируемым, класс должен реализовать интерфейс Cloneable. Интерфейс Cloneable не содержит методов относится к маркерным интерфейсам, а его реализация гарантирует, что метод clone() класса Object возвратит точную копию вызвавшего его объекта с воспроизведением значений всех его полей. В противном случае метод генерирует исключение CloneNotSupportedException. Следует отметить, что при использовании этого механизма объект создается без вызова конструктора.
Это решение эффективно только в случае, если поля клонируемого объекта представляют собой значения базовых типов и их обёрток или неизменяемых (immutable) объектных типов. Если же поле клонируемого типа является изменяемым ссылочным типом, то для корректного клонирования требуется другой подход. Причина заключается в том, что при создании копии поля оригинал и копия представляют собой ссылку на один и тот же объект. В этой ситуации следует также клонировать и сам объект поля класса.
Такое клонирование возможно только в случае, если тип атрибута класса также реализует интерфейс Cloneable и переопределяет метод clone(). Так как, если это будет иначе вызов метода невозможен из-за его недоступности. Отсюда следует, что если класс имеет суперкласс, то для реализации механизма клонирования текущего класса-потомка необходимо наличие корректной реализации такого механизма в суперклассе. При этом следует отказаться от использования объявлений final для полей объектных типов по причине невозможности изменения их значений при реализации клонирования.
Помимо встроенного механизма клонирования в Java для клонирования объекта можно использовать:
• Специализированный конструктор копирования - в классе описывается конструктор, который принимает объект этого же класса и инициализирует поля создаваемого объекта значениями полей переданного.
• Фабричный метод - (Factory method), который представляет собой статический метод, возвращающий экземпляр своего класса.
• Механизм сериализации - сохранение и последующее восстановление объекта в/из потока байтов.
Использование оператора присваивания не создает нового объекта, а лишь копирует ссылку на объект. Таким образом, две ссылки указывают на одну и ту же область памяти, на один и тот же объект. Для создания нового объекта с таким же состоянием используется клонирование объекта.
Класс Object содержит protected метод clone(), осуществляющий побитовое копирование объекта производного класса. Однако сначала необходимо переопределить метод clone() как public для обеспечения возможности его вызова. В переопределенном методе следует вызвать базовую версию метода super.clone(), которая и выполняет собственно клонирование.
Чтобы окончательно сделать объект клонируемым, класс должен реализовать интерфейс Cloneable. Интерфейс Cloneable не содержит методов относится к маркерным интерфейсам, а его реализация гарантирует, что метод clone() класса Object возвратит точную копию вызвавшего его объекта с воспроизведением значений всех его полей. В противном случае метод генерирует исключение CloneNotSupportedException. Следует отметить, что при использовании этого механизма объект создается без вызова конструктора.
Это решение эффективно только в случае, если поля клонируемого объекта представляют собой значения базовых типов и их обёрток или неизменяемых (immutable) объектных типов. Если же поле клонируемого типа является изменяемым ссылочным типом, то для корректного клонирования требуется другой подход. Причина заключается в том, что при создании копии поля оригинал и копия представляют собой ссылку на один и тот же объект. В этой ситуации следует также клонировать и сам объект поля класса.
Такое клонирование возможно только в случае, если тип атрибута класса также реализует интерфейс Cloneable и переопределяет метод clone(). Так как, если это будет иначе вызов метода невозможен из-за его недоступности. Отсюда следует, что если класс имеет суперкласс, то для реализации механизма клонирования текущего класса-потомка необходимо наличие корректной реализации такого механизма в суперклассе. При этом следует отказаться от использования объявлений final для полей объектных типов по причине невозможности изменения их значений при реализации клонирования.
Помимо встроенного механизма клонирования в Java для клонирования объекта можно использовать:
• Специализированный конструктор копирования - в классе описывается конструктор, который принимает объект этого же класса и инициализирует поля создаваемого объекта значениями полей переданного.
• Фабричный метод - (Factory method), который представляет собой статический метод, возвращающий экземпляр своего класса.
• Механизм сериализации - сохранение и последующее восстановление объекта в/из потока байтов.
RabbitMQ + Spring boot + Docker. Отправляем и получаем сообщения через Producer и Consumer. Пошаговое руководство
Меня зовут Андрей Вербицкий и я столкнулся с тем, что мое знакомство с RabbitMQ, а в частности его запуск на локальной машине и отправка сообщений в очередь с помощью приложения на Spring Boot, вылилась в несколько дней поисков информации о том, как это вообще работает, какие есть сущности и как в итоге переслать это сообщение. Я решил собрать все это в одном месте и сделать из этого практическое руководство, которое поможет из ничего получить рабочий прототип и понять как это работает. Эта статья ориентированная на новичков, которые только хотят познакомиться с RabbitMQ. Целью я поставил максимально простыми словами и по шагам рассказать, как быстро и легко поднять все окружение локально, отправить и получить сообщения через очередь.
https://habr.com/ru/post/703352/
Меня зовут Андрей Вербицкий и я столкнулся с тем, что мое знакомство с RabbitMQ, а в частности его запуск на локальной машине и отправка сообщений в очередь с помощью приложения на Spring Boot, вылилась в несколько дней поисков информации о том, как это вообще работает, какие есть сущности и как в итоге переслать это сообщение. Я решил собрать все это в одном месте и сделать из этого практическое руководство, которое поможет из ничего получить рабочий прототип и понять как это работает. Эта статья ориентированная на новичков, которые только хотят познакомиться с RabbitMQ. Целью я поставил максимально простыми словами и по шагам рассказать, как быстро и легко поднять все окружение локально, отправить и получить сообщения через очередь.
https://habr.com/ru/post/703352/
Хабр
RabbitMQ + Spring boot + Docker. Отправляем и получаем сообщения через Producer и Consumer. Пошаговое руководство
Всем привет. Поскольку не смог найти полноценной статьи о том, как с нуля написать свой spring boot сервис с подключением к нему rabbitMQ, с конфигурацией всего это чуда через графический интерфейс и...
#вопросы_с_собеседований
Какой способ клонирования предпочтительней?
Наиболее безопасным и, следовательно, предпочтительным способом клонирования является использование специализированного конструктора копирования:
• Отсутствие ошибок наследования (не нужно беспокоиться, что у наследников появятся новые поля, которые не будут склонированы через метод
• Поля для клонирования указываются явно;
• Возможность клонировать даже
Какой способ клонирования предпочтительней?
Наиболее безопасным и, следовательно, предпочтительным способом клонирования является использование специализированного конструктора копирования:
• Отсутствие ошибок наследования (не нужно беспокоиться, что у наследников появятся новые поля, которые не будут склонированы через метод
clone()
);• Поля для клонирования указываются явно;
• Возможность клонировать даже
final
поля.Что нового в Java 20?
Версия Java 20 должна быть выпущена в марте 2023 года, и ожидается, что в ней появится целый ряд изменений и новых функциональных возможностей. Мы подготовили обзор, описывающий, какие JEP с наибольшей вероятностью будут приняты в JDK 20, и какие из них, как мы надеемся, будут приняты в ближайшей перспективе!
https://habr.com/ru/company/piter/blog/705478/
Версия Java 20 должна быть выпущена в марте 2023 года, и ожидается, что в ней появится целый ряд изменений и новых функциональных возможностей. Мы подготовили обзор, описывающий, какие JEP с наибольшей вероятностью будут приняты в JDK 20, и какие из них, как мы надеемся, будут приняты в ближайшей перспективе!
https://habr.com/ru/company/piter/blog/705478/
Хабр
Что нового в Java 20?
Версия Java 20 должна быть выпущена в марте 2023 года , и ожидается, что в ней появится целый ряд изменений и новых функциональных возможностей . Мы подготовили обзор, описывающий, какие JEP с...
JFreeChart
JFreeChart — это обширная бесплатная библиотека диаграмм для платформы Java(tm), которую можно использовать на стороне клиента (JavaFX и Swing) или на стороне сервера (с экспортом в несколько форматов, включая SVG, PNG и PDF).
Вся документация лежит здесь.
JFreeChart — это обширная бесплатная библиотека диаграмм для платформы Java(tm), которую можно использовать на стороне клиента (JavaFX и Swing) или на стороне сервера (с экспортом в несколько форматов, включая SVG, PNG и PDF).
Вся документация лежит здесь.
GitHub
GitHub - jfree/jfreechart: A 2D chart library for Java applications (JavaFX, Swing or server-side).
A 2D chart library for Java applications (JavaFX, Swing or server-side). - jfree/jfreechart
#вопросы_с_собеседований
Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
Метод
Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
Метод
clone()
объявлен в классе Object
с указанием модификатора native
, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected
, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable
является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone()
у не Cloneable
объекта вызовет выбрасывание CloneNotSupportedException
.🎄🎁 10 оригинальных подарков айтишнику на Новый год
Айтишники – практичные и неординарные люди, и подарки для них должны быть функциональными и нетривиальными. «Библиотека программиста» решила помочь вам в этом нелегком деле и подыскала несколько вариантов оригинальных презентов.
🔗 Основной сайт
🔗 Зеркало
Айтишники – практичные и неординарные люди, и подарки для них должны быть функциональными и нетривиальными. «Библиотека программиста» решила помочь вам в этом нелегком деле и подыскала несколько вариантов оригинальных презентов.
🔗 Основной сайт
🔗 Зеркало
#вопросы_с_собеседований
Для чего нужны функциональные интерфейсы UnaryOperator<T>, DoubleUnaryOperator, IntUnaryOperator и LongUnaryOperator?
UnaryOperator<T> (унарный оператор) принимает в качестве параметра объект типа T, выполняет над ними операции и возвращает результат операций в виде объекта типа T:
Для чего нужны функциональные интерфейсы UnaryOperator<T>, DoubleUnaryOperator, IntUnaryOperator и LongUnaryOperator?
UnaryOperator<T> (унарный оператор) принимает в качестве параметра объект типа T, выполняет над ними операции и возвращает результат операций в виде объекта типа T:
UnaryOperator<Integer> operator = x -> x * x;
System.out.println(operator.apply(5)); // 25
☕️ DoubleUnaryOperator
- унарный оператор, получающий на вход Double;☕️ IntUnaryOperator
- унарный оператор, получающий на вход Integer;☕️ LongUnaryOperator
- унарный оператор, получающий на вход Long.🐔 IT и реальный сектор экономики: как мы цифровизировали птицеводство и что из этого получилось
В то время как лопаются криптовалютные пузыри (история с FTX), мы развиваем сельское хозяйство, внедряя ERP-системы на птицефабриках, чтобы повысить показатели производства и снизить перекрестное заражение птиц.
🔗 Основной сайт
🔗 Зеркало
В то время как лопаются криптовалютные пузыри (история с FTX), мы развиваем сельское хозяйство, внедряя ERP-системы на птицефабриках, чтобы повысить показатели производства и снизить перекрестное заражение птиц.
🔗 Основной сайт
🔗 Зеркало
#вопросы_с_собеседований
Что такое «конструктор по умолчанию»?
Если у какого-либо класса не определить конструктор, то компилятор сгенерирует конструктор без аргументов - так называемый «конструктор по умолчанию».
public class ClassName() {}
Если у класса уже определен какой-либо конструктор, то конструктор по умолчанию создан не будет и, если он необходим, его нужно описывать явно.
Что такое «конструктор по умолчанию»?
Если у какого-либо класса не определить конструктор, то компилятор сгенерирует конструктор без аргументов - так называемый «конструктор по умолчанию».
public class ClassName() {}
Если у класса уже определен какой-либо конструктор, то конструктор по умолчанию создан не будет и, если он необходим, его нужно описывать явно.
JDK Flight Recorder (JFR) - это регистратор событий, встроенный в виртуальную машину Java. 🤓
В предложенном сегодня видео мы на практическом примере углубимся в JFR и рассмотрим события, настройки, типы контента, а также, научимся запускать и останавливать записи, читать файлы записей и д.р.
Опыт, приди!
В предложенном сегодня видео мы на практическом примере углубимся в JFR и рассмотрим события, настройки, типы контента, а также, научимся запускать и останавливать записи, читать файлы записей и д.р.
Опыт, приди!
YouTube
Programmer's Guide to JDK Flight Recorder (Old, see description)
For a more recent video on this subject, see here: https://youtu.be/AgFOJEkBVjg
JDK Flight Recorder (JFR) is a low-overhead profiling and troubleshooting framework built into the JVM. It comes with a powerful programming API that allows you to create application…
JDK Flight Recorder (JFR) is a low-overhead profiling and troubleshooting framework built into the JVM. It comes with a powerful programming API that allows you to create application…
#вопросы_с_собеседований
Чем отличаются конструктор по-умолчанию, конструктор копирования и конструктор с параметрами?
У конструктора по умолчанию отсутствуют какие-либо аргументы. Конструктор копирования принимает в качестве аргумента уже существующий объект класса для последующего создания его клона. Конструктор с параметрами имеет в своей сигнатуре аргументы (обычно необходимые для инициализации полей класса).
Чем отличаются конструктор по-умолчанию, конструктор копирования и конструктор с параметрами?
У конструктора по умолчанию отсутствуют какие-либо аргументы. Конструктор копирования принимает в качестве аргумента уже существующий объект класса для последующего создания его клона. Конструктор с параметрами имеет в своей сигнатуре аргументы (обычно необходимые для инициализации полей класса).
#вопросы_с_собеседований
Что такое «денормализация»? Для чего она применяется?
Денормализация базы данных — это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных, за счет увеличения избыточности данных.
Что такое «денормализация»? Для чего она применяется?
Денормализация базы данных — это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных, за счет увеличения избыточности данных.
#вопросы_с_собеседований
Где и как вы можете использовать приватный конструктор?
Приватный (помеченный ключевым словом
Где и как вы можете использовать приватный конструктор?
Приватный (помеченный ключевым словом
private
, скрытый) конструктор может использоваться публичным статическим методом генерации объектов данного класса. Также доступ к нему разрешён вложенным классам и может использоваться для их нужд.Шпаргалка: Java коллекции
Друзья, представляем вашему вниманию шпаргалку на тему коллекций в Java. 🤓
Хорошей памяти!
Читать статью
Друзья, представляем вашему вниманию шпаргалку на тему коллекций в Java. 🤓
Хорошей памяти!
Читать статью
Java Concept Of The Day
Java Collections Cheat Sheet
Java collections quick reference guide for interviews, Java collections cheat sheet, Java collections study materials for freshers...
#вопросы_с_собеседований
Как можно вывести на экран уникальные квадраты чисел используя метод map()?
Для этого можно использовать Stream. Ответ на картинке.
Как можно вывести на экран уникальные квадраты чисел используя метод map()?
Для этого можно использовать Stream. Ответ на картинке.
Зачем нужен equals(). Чем он отличается от операции ==?
Метод
При сравнении объектов с помощью
Метод
equals()
- определяет отношение эквивалентности объектов.При сравнении объектов с помощью
==
сравнение происходит лишь между ссылками. При сравнении по переопределённому разработчиком equals()
- по внутреннему состоянию объектов.Пишем плагин для IntelliJ IDEA. Ускоряем написание тестов на DTO
Когда пишешь тесты на обширную модель (DTO), ловишь себя на мысли, что сосредоточен не на тестовых данных, а на том, как ловчее избавить себя от написания boilerplate-кода.
Как это сделать? Поискать готовое решение (плагин).
А если его нет? Тогда – написать плагин.
А если не умеешь? Стоит хотя бы начать :)
Читать статью
Когда пишешь тесты на обширную модель (DTO), ловишь себя на мысли, что сосредоточен не на тестовых данных, а на том, как ловчее избавить себя от написания boilerplate-кода.
Как это сделать? Поискать готовое решение (плагин).
А если его нет? Тогда – написать плагин.
А если не умеешь? Стоит хотя бы начать :)
Читать статью
Хабр
Пишем плагин для IntelliJ IDEA. Ускоряем написание тестов на DTO
Кто я такой В Java я недавно. Работаю Java-разработчиком около года при общем 10-летнем стаже в АльфаСтрахование. Этому году предшествовали годы разработки на ABAP и полгода обучения на Javarush. Что...
🏄 50% скидка на все курсы Proglib academy!
Вжух и мы запускаем распродажу курсов до 10 января:
– Математика для Data Science
– Алгоритмы и структуры данных
– Как айтишнику устроиться в международную компанию
– Основы IT для непрограммистов
– Основы программирования на Python
– Frontend Basic: принцип работы современного веба
Выбрать курс вы можете по ссылке 🔗https://proglib.io/w/03f94f58
🔹На курсах мы делимся экспертизой вместе с ТОП- специалистами из Samsung, Revolut, Яндекс, Тинькофф и т.д;
🔹В процессе обучения вы не только прокачиваете скиллы, но и пополняете портфолио;
🔹Это не самообучение. Мы проводим индивидуальную проверку домашних заданий с разбором ошибок и рекомендаций.
🚀Начни год с прорыва!
Вжух и мы запускаем распродажу курсов до 10 января:
– Математика для Data Science
– Алгоритмы и структуры данных
– Как айтишнику устроиться в международную компанию
– Основы IT для непрограммистов
– Основы программирования на Python
– Frontend Basic: принцип работы современного веба
Выбрать курс вы можете по ссылке 🔗https://proglib.io/w/03f94f58
🔹На курсах мы делимся экспертизой вместе с ТОП- специалистами из Samsung, Revolut, Яндекс, Тинькофф и т.д;
🔹В процессе обучения вы не только прокачиваете скиллы, но и пополняете портфолио;
🔹Это не самообучение. Мы проводим индивидуальную проверку домашних заданий с разбором ошибок и рекомендаций.
🚀Начни год с прорыва!