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
👩‍💻 Прокси-объект

Прокси-объект (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
Что выведет код сверху?
Anonymous Quiz
37%
1 2 3 4
25%
1234
3%
0
35%
Ошибка
📌 Решение задачи c собеседования в Apple и Google

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

twoSum() — метод, который находит два числа в массиве, сумма которых равна заданному числу «k».

Цикл for перебирает все элементы массива. Для каждого элемента определяем число, которое необходимо найти, чтобы получить сумму k. Для этого из k вычитается текущий элемент nums[i].

Затем определяется два указателя — left и right. left указывает на следующий элемент после текущего, а right — на последний элемент массива.

Внутри цикла while выполняется бинарный поиск:

Каждая итерация считает средний индекс mid между left и right;

Если nums[mid] равно искомому числу (numberToFind), то возвращается массив с текущим элементом nums[i] и число nums[mid];

Если numberToFind < nums[mid], то right = mid - 1, чтобы продолжить поиск левее;

Если numberToFind > nums[mid], то left = mid + 1, чтобы продолжить поиск правее;

Если внутри цикла while не найдено равное число, то переходим к следующему элементу массива и повторяем процесс поиска. Если после перебора всех элементов не найдена пара чисел, возвращается пустой массив new int[0].

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код сверху?
Anonymous Quiz
11%
12345
78%
54321
11%
Ошибка
👩‍💻 Классы StringBuilder и StringBuffer

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

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

Основное различие между StringBuffer и StringBuilder в том, что методы StringBuilder не являются безопасными для потоков (несинхронизированные).

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

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

Какое худшее время работы метода contains() для элемента, который есть в LinkedList?

Ответ: O(N). Время поиска элемента линейно пропорционально количеству элементов в списке.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Telegram бот на Java за 60 секунд — разбор

Создание и описание бота показано здесьКЛИК
Ссылка на полный, закомментированный проект — КЛИК

Сервисы, которые использовались в видео:

BotFather

OpenWeatherMap API

Библиотеки:

<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>6.1.0</version>
</dependency>

<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20230227</version>
</dependency>

Бот написан за 20 минут, ваша задача — разобраться в коде и модернизировать его!

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