Java Developer – Telegram
Java Developer
15.7K subscribers
1.87K photos
140 videos
2 files
2.09K links
Авторский канал действующего разработчика — интересные заметки, новые технологии, библиотеки и фреймворки

Сотрудничество: @bape_ads
Прайс: @bape_media

РКН: https://clck.ru/3GHfTK

Реклама на бирже: https://telega.in/c/java_tg
Download Telegram
👩‍💻 Разница между классами java.util.Collection и java.util.Collections

java.util.Collections — набор статических методов для работы с коллекциями.

java.util.Collection — один из основных интерфейсов Java Collections Framework.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Метод substring

Метод substring() используется для извлечения подстроки из строки и не изменяет исходную строку, а возвращает новую подстроку. Метод имеет две формы:

substring(int beginIndex) — извлекает подстроку от beginIndex до конца строки;

substring(int beginIndex, int endIndex) — извлекает подстроку от beginIndex до endIndex.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Основные принципы Stream API

Stream API — это функциональный интерфейс в Java 8, который позволяет работать с коллекциями объектов с помощью функциональных операций.

Основные принципы Stream API включают в себя:

Stream API не выполняет операции над элементами коллекции до тех пор, пока не будет вызван терминальный метод;

Stream API представляет собой поток данных, который можно обрабатывать с помощью функциональных операций;

Stream API предоставляет множество функциональных операций, таких как filter(), map(), reduce() и т. д., которые позволяют обрабатывать элементы потока данных;

Stream API не изменяет исходную коллекцию, а создает новый поток данных на основе исходной коллекции;

Stream API позволяет обрабатывать элементы потока данных параллельно, что может ускорить выполнение операций над большими коллекциями;

Stream API требует вызова терминальной операции, такой как forEach(), collect() или reduce(), чтобы выполнить операции над элементами потока данных и получить результат.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Узнаем количество цифр в строке

В примере на картинке мы объявляем строку str и устанавливаем ее значение на "abc123def456". Затем мы создаем переменную count, которая будет использоваться для подсчета количества цифр в строке.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос с собеседования

К каким конструкциям Java применим модификатор static?

Ответ: полям, методам, вложенным классам, членам секции import.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️Добавили комментарии

Что ещё хотели бы видеть на канале? Жду ваши предложения!

🧑‍💻Всем продуктивного дня, работаем!
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Метод interrupt()

interrupt() используется для прерывания потока исполнения. Этот метод является частью класса Thread и позволяет прервать поток, вызывая исключение InterruptedException, если поток находится в состоянии ожидания или блокировки. Если поток не находится в таком состоянии, метод interrupt() устанавливает флаг прерывания, который можно проверить с помощью метода isInterrupted().

Метод interrupt() может применяться в различных ситуациях, например, когда необходимо остановить поток по запросу пользователя или когда поток должен завершиться по достижении определенного условия.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Что имеет более высокий уровень абстракции?
Anonymous Quiz
11%
Класс
35%
Абстрактный класс
54%
Интерфейс
1
👩‍💻 Java Bean

JavaBeans — это стандартный подход к созданию переносимых и повторно используемых компонентов. Они представляют собой классы, которые следуют определенным соглашениям и обеспечивают удобный способ управления состоянием и поведением объектов.

Основные характеристики JavaBeans:

Класс должен быть публичным и иметь открытый конструктор без аргументов;

Приватные поля класса должны быть доступны с помощью геттеров и сеттеров (getter и setter методы);

Класс должен быть сериализуемым, то есть должен реализовывать интерфейс Serializable.

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

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос с собеседования

Могут ли нестатические методы перегрузить статические?

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

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Статические поля

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

Статические поля объявляются с модификатором static и принадлежат классу, а не отдельным объектам. Доступ к ним осуществляется через имя класса.

Изменение статического поля в одном объекте отражается на всех объектах.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Блоки инициализации

Блоки инициализации используются для выполнения определенного кода при создании объекта. Их использование позволяет вынести логику инициализации полей объекта за пределы конструкторов.

Бывает два типа блоков инициализации:

Блоки инициализации экземпляра — выполняются при создании каждого нового экземпляра класса. Они объявляются с помощью ключевого слова instance и фигурных скобок.

Статические блоки инициализации — выполняются один раз при загрузке класса. Они объявляются с помощью ключевого слова static и фигурных скобок.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Как проверить, является ли строка палиндромом?

Для проверки, является ли строка палиндромом в Java, можно сравнить каждый символ строки с его зеркальным отражением.

В примере на картинке мы создаем метод isPalindrome, который принимает на вход строку str. В цикле for мы сравниваем символы строки str с их зеркальными отражениями. Если символы не совпадают, то строка не является палиндромом, и мы возвращаем значение false. Если же все символы совпадают, то строка является палиндромом, и мы возвращаем значение true.

В методе main мы создаем строку str со значением "level", вызываем метод isPalindrome, передавая ему эту строку в качестве аргумента, и выводим результат на экран.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Отличие агрегации от композиции

Агрегация и композиция — это два разных подхода к организации классов и объектов в объектно-ориентированном программировании.

Композиция — это отношение, при котором один объект состоит из других объектов. Объект, который содержит другие объекты, называется контейнером или композитом, а объекты, которые содержит контейнер, называются его компонентами. Композиция является частным случаем агрегации, где компоненты не могут существовать без контейнера и образуют с ним жесткую связь.

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

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

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Множественное наследование

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

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

Также в Java 8 было добавлено ключевое слово default. Оно позволяет определять методы с реализацией по умолчанию в интерфейсах. Это позволяет создавать общую реализацию методов, которые могут быть переопределены в классах, реализующих интерфейс.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Прокси-объект

Прокси-объект (Proxy Object) — это объект, который выступает в качестве заменителя другого объекта и контролирует доступ к нему. Прокси-объект может использоваться для передачи запросов к оригинальному объекту через промежуточный уровень, что позволяет выполнять дополнительную обработку или проверку перед выполнением запроса.

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

Примеры использования прокси-объектов в Java:

Кэширование данных: если мы хотим кэшировать результаты вызовов методов на объекте, мы можем создать прокси-объект, который будет хранить результаты предыдущих вызовов и возвращать их без вызова методов на оригинальном объекте.

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

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

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Immutable object

Immutable object (неизменяемый объект) — это объект, чье состояние не может быть изменено после создания. В Java неизменяемые объекты обычно реализуются путем объявления класса с final модификатором и установкой всех полей класса как final.

Неизменяемые объекты имеют следующие особенности:

Immutable object не может быть изменен после создания. Это означает, что все поля объектов должны быть устанавливаемыми только один раз в конструкторе объекта, а затем уже недоступны для модификации;

Из-за того, что неизменяемые объекты не могут быть изменены, они более безопасны и предсказуемы, чем изменяемые объекты;

Immutable object может использоваться в качестве ключа в Map, так как его хеш-код будет неизменным, что гарантирует корректную работу HashMap и других коллекций

В примере на картинке класс ImmutableClass является неизменяемым, потому что его поле value объявлено как final. После создания объекта этого класса значение value не может быть изменено.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос с собеседования

Можно ли использовать private или protected переменные в interface?

Ответ: В Java переменные, объявленные с модификаторами private или protected, не могут быть использованы непосредственно в интерфейсах (interfaces). Интерфейсы содержат только абстрактные методы, константы и методы по умолчанию (default methods), которые все являются public.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Ковариантность типов

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

В примере класс Dog наследует класс Animal. Метод reproduce() в классе Animal возвращает объект типа Animal, а в классе Dog этот же метод переопределен и возвращает объект типа Dog. Таким образом, тип возвращаемого значения стал ковариантным.

Ковариантность типов полезна, когда нужно работать с коллекциями. Например, можно объявить переменную типа List и добавлять в нее объекты типа Dog и других производных классов. Без ковариантности это было бы невозможно.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Run-Time Data Areas

Run-Time Data Areas — это области памяти, которые выделяются для хранения данных во время выполнения Java-программы. В Java существует несколько Run-Time Data Areas:

Method Area — область памяти, которая хранит описания классов, методов и других метаданных;

Heap — область памяти, которая хранит объекты, созданные во время выполнения программы;

Java Stack — область памяти, которая хранит данные локальных переменных и стек вызовов для каждого потока исполнения;

Native Method Stack — область памяти, которая хранит данные для вызова методов на языке, отличном от Java (например, C или C++);

PC Register — регистр, который содержит текущую инструкцию JVM для каждого потока исполнения;

Direct Memory — область памяти, которая используется для работы с прямой буферизацией данных.

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

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM