Java Developer – Telegram
Java Developer
15.7K subscribers
1.86K 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
31%
Ошибка компиляции
43%
[5, 0]
7%
[5, 1]
15%
[0, 5]
4%
[5, 5]
📌 Решение задачи c LeetCode (Contains Duplicate)

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

Метод containsDuplicate() принимает в качестве аргумента массив nums и возвращает true, если в массиве есть дубликаты, и false — если нет. HashSet<Integer> служит для хранения уникальных значений.

Цикл for проходит по каждому элементу массива nums:

На каждой итерации проверяется, содержится ли текущий элемент в множестве set с помощью метода contains(). Если элемент уже присутствует в множестве, значит дубликат уже есть и функция немедленно возвращает true;

Если элемент не найден, он добавляется в множество set с помощью метода add;

Если метод не обнаружит дубликатов, то вернет false.

Эта задача на LeetCode — КЛИК

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Преобразование массива в строку

В этом примере мы используем Stream API, представленный в JDK 8. Arrays.strеam() принимает массив. Метод collect() возвращает результат после выполнения указанной операции над каждым элементом массива.

Здесь мы выполняем операцию Collectors.joining() над элементами массива, которая собирает элементы и объединяет их для возврата в виде целой строки.

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

Внутри цикла for значение текущего элемента сохраняется в переменной temp. Затем текущий элемент заменяется на тот, который находится симметрично относительно середины массива — array.length - 1 - i, где i — индекс текущего элемента.

После завершения цикла, результирующий массив выводится на экран с помощью метода Arrays.toString(array).

Объяснение в формате видео на YouTube — КЛИК

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код сверху?
Anonymous Quiz
40%
Equal
48%
Not equal
12%
Ошибка компиляции
📌 Решение задачи c LeetCode (Move Zeroes)

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

Метод moveZeroes() перемещает все нулевые элементы в конец массива, а ненулевые оставляет на своих местах, без изменения порядка.

Переменная index используется для отслеживания позиции, на которую нужно вставить следующий не нулевой элемент;

Внутри цикла for проверяется текущий элемент. Если он не равен 0, значит его нужно переместить на позицию index в массиве, а затем index увеличивается на 1;

Цикл while заполняет оставшуюся часть массива нулями, начиная с позиции index до конца массива.

Эта задача на LeetCode — КЛИК

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
📌 Решение задачи c собеседования в Amazon

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

Наиболее быстрое решение задачи в комментариях!

subarraySum() — метод для нахождения количества дней до наступления более теплой температуры для каждого дня.

Массив result используется для хранения результатов;

Внешний цикл for проходит по каждому элементу temperatures, начиная с первого и до предпоследнего, а внутренний цикл for проходит по элементам, начиная со следующего после текущего элемента и до конца массива;

Во внутреннем цикле проверяется условие if (temperatures[j] > temperatures[i]), которое сравнивает температуры текущего и следующего дня. Если следующая температура выше текущей, то result[i] присваивается разница между индексами следующего и текущего дня, обозначающая количество дней до наступления более теплой температуры. После этого цикл прерывается с помощью оператора break, чтобы двигаться к следующему дню;

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

Эта задача на LeetCode — КЛИК

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

Какими способами можно реализовать «внедрение зависимостей» в Java?

Ответ: Через конструктор, через getter/setter, с помощью механизмов рефлексии.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Решение задачи c LeetCode (Matrix Diagonal Sum)

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

Метод diagonalSum() находит суммы элементов на главной и побочной диагоналях квадратной матрицы.

Переменная sum инициализируется нулем, а переменная n получает значение длины матрицы.

В цикле от 0 до n - 1 происходит обход матрицы по диагоналям. На каждом шаге цикла к сумме прибавляется текущий элемент на главной диагонали matrix[i][i] и элемент на побочной диагонали matrix[i][n - i - 1];

Если размер матрицы нечетный, из суммы вычитается элемент в центре матрицы matrix[n / 2][n / 2];

Возвращается полученная сумма.

Эта задача на LeetCode — КЛИК

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Локальный класс (Local inner class)

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

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

В примере на картинке внутри метода main() объявлен локальный класс LocalClass. В нем определен метод printMessage(). Далее создается экземпляр LocalClass и вызывается его метод.

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

В чем разница между notify() и notifyAll()?

Ответ: Метод notify() пробуждает только один поток в пуле ожидания, в то время как метод notifyAll() пробуждает все потоки.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
1
📌 Решение задачи c собеседования в Google

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

longestValidParentheses() — метод для поиска самой длинной последовательности правильных скобочных выражений в строке.

Сначала создается stack типа Integer. В стеке будут храниться индексы открывающих скобок '(';

Переменная max будет хранить длину самой длинной последовательности;

Цикл for перебирает все символы в строке. Если текущий символ — открывающая скобка '(', то мы добавляем его индекс в stack. Если текущий символ — закрывающая скобка ')', то извлекаем последний индекс из стека, соответствующий последней открытой скобке;

Проверяем, если stack не пуст, то считаем разницу между текущим индексом и индексом последней открытой скобки. Если значение этой разницы больше текущего max, то обновляем max;

Если stack пуст, значит скобки до этого были закрыты и не образовали последовательность. В этом случае добавляем индекс текущей закрывающей скобки в stack;

После окончания цикла возвращаем max.

Эта задача на LeetCode (Hard) — КЛИК

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
📚 Книги для Java-разработчика

Начинающий разработчик:
«Изучаем Java» — Берт Бейтс, Кэти Сьерра

Средний разработчик:
«Философия Java» — Брюс Эккель;
«Грокаем алгоритмы» — Бхаргава Адитья;


Опытный разработчик:
«Java Эффективное программирование» — Джошуа Блох;
«Чистый код» — Роберт Мартин;
«Структуры данных и алгоритмы на Java» — Роберт Лафоре;


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

Как одной строчкой преобразовать ArrayList в HashSet? (ответ на картинке)

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Быстрая сортировка (Quick Sort)

Быстрая сортировка, также известная как Quick Sort или сортировка Хоара, является одним их самых эффективных алгоритмов. Она включает в себя три этапа:

Из массива выбирается опорный элемент, чаще всего посередине массива;

Другие элементы массива распределяются таким образом, чтобы меньшие размещались до него, а большие — после;

Далее первые шаги рекурсивно применяются к подмассивам, которые разделились опорным элементом на две части — слева и справа от него.

Наш канал об английском языке для программиста — КЛИК

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