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
Что имеет более высокий уровень абстракции?
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
📌 Решение задачи c собеседования в Google и Amazon

Описание, условие и объяснение алгоритма решения задачи на YouTubeКЛИК

searchMatrix() — метод, который определяет, содержит ли двумерный массив «matrix» заданное значение «k».

При помощи оператора if происходит проверка, является ли массив null или имеет ли он нулевую длину. Если это так, то метод вернёт false.

Переменные m и n хранят количество строк и столбцов, а переменные i и j используются для перебора элементов массива.

Внутри цикла while проверяется текущий элемент matrix[i][j]:

Если он равен k, метод вернёт true;

Если он больше k, тогда j уменьшается на 1 и переходит к следующему элементу в строке;

Если он меньше k, тогда i увеличивается на 1 и переходит к следующей стооке;

Если метод не вернёт true до окончания цикла, значит число k не найдено и метод вернёт false.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Является ли допустимым отсутствие декларации package в исходном коде?
Anonymous Quiz
54%
Да
46%
Нет
👩‍💻 Задачи Spring Data

Spring Data упрощает работу с системами доступа к данным: реляционными и нереляционными базами данных, map-reduce фреймворками и облачными хранилищами. Центральная концепция Spring Data — репозитории из предметно-ориентированного дизайна (Domain-driven design, DDD).

Spring Data состоит из множества отдельных библиотек для разных случаев жизни. Вот самые популярные из них:

Spring Data JPA – адаптер для реализаций Java Persistence API, таких как Hibernate;

Spring Data JDBC – более простой и ограниченный чем JPA адаптер для JDBC-драйверов.

Spring Data REST – создание готовых hypermedia-driven RESTful сервисов на основе репозиториев;

Spring Data KeyValue – работа с хранилищами типа ключ-значение;

Библиотеки поддержки конкретных реализаций хранилищ: MongoDB, Redis, Cassandra, LDAP, и других.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Сколько способов выделения комментариев существует в Java?
Anonymous Quiz
7%
Один
59%
Два
34%
Три
📱 Как стать Java Junior с нуля / Как стать программистом с нуля / Полный план

Смотреть видео

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

Что такое Local Variable?

Ответ: это переменная, которая определена внутри метода и существует вплоть до того момента, пока выполняется этот метод. Как только выполнение закончится, локальная переменная перестанет существовать.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Переименовываем файл

Переименовать файл можно, переместив содержимое первого файла в новый файл и удалив предыдущий файл. Java обрабатывает эту операцию, используя метод resolveSibiling(). Он используется для разрешения данного пути относительно родительского пути этого пути.

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