Java Backend | YeaHub
521 subscribers
115 photos
22 videos
2 files
234 links
Теория, подготовка к интервью и курсы для Java разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Собес
🤔В чем разница передачи параметров по ссылке и значению?

B Java параметры всегда передаются по значению, но для обьектов это значение - ссылка. Если метод изменяет объект, это изменение видно и за пределами метода. Однако переназначение ссылки внутри метода не влияет на исходную ссылку.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Когда стоит использовать примитивы, а когда объекты в Java?

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

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 609. Find Duplicate File in System

Получив список paths информации о каталоге, включающий путь к каталогу и все файлы с содержимым в этом каталоге, верните все дубликаты файлов в файловой системе по их путям. Вы можете вернуть ответ в любом порядке. Группа дубликатов состоит как минимум из двух файлов с одинаковым содержимым. Одна строка информации о каталоге во входном списке имеет следующий формат: "root/d1/d2/.../dm f1.txt(f1_content) f2.txt(f2_content) ... fn.txt(fn_content)" Это означает, что в каталоге "root/d1/d2/.../dm" имеется n файлов (f1.txt, f2.txt ... fn.txt) с содержимым (f1_content, f2_content ... fn_content) соответственно. Обратите внимание, что n >= 1 и m >= 0. Если m = 0, это означает, что каталог является только корневым. На выходе получается список групп дублирующихся путей к файлам. Для каждой группы он содержит все пути к файлам, которые имеют одинаковое содержимое. Путь к файлу - это строка, имеющая следующий формат: "каталог_путь/имя_файла.txt".

Пример:
Input: paths = ["root/a 1.txt(abcd) 2.txt(efgh)","root/c 3.txt(abcd)","root/c/d 4.txt(efgh)","root 4.txt(efgh)"]
Output: [["root/a/2.txt","root/c/d/4.txt","root/4.txt"],["root/a/1.txt","root/c/3.txt"]]


👨‍💻 Алгоритм:

1⃣Пройдите по списку путей, разберите каждый путь и соберите информацию о содержимом файлов и соответствующих им путях.

2⃣Используйте словарь для хранения списков путей файлов, сгруппированных по их содержимому.

3⃣Пройдите по словарю и соберите группы дубликатов, содержащие как минимум два пути.

😎 Решение:
import java.util.*;

public class Solution {
public List<List<String>> findDuplicate(String[] paths) {
Map<String, List<String>> contentToFilePaths = new HashMap<>();

for (String path : paths) {
String[] parts = path.split(" ");
String root = parts[0];

for (int i = 1; i < parts.length; i++) {
String[] fileParts = parts[i].split("\\(");
String fileName = fileParts[0];
String content = fileParts[1].substring(0, fileParts[1].length() - 1);

String filePath = root + "/" + fileName;
contentToFilePaths.computeIfAbsent(content, k -> new ArrayList<>()).add(filePath);
}
}

List<List<String>> result = new ArrayList<>();
for (List<String> filePaths : contentToFilePaths.values()) {
if (filePaths.size() > 1) {
result.add(filePaths);
}
}

return result;
}
}


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 GitIngest

Этот инструмент превращает любые репозитории GitHub в текст, удобный для использования в LLM-промптах. Просто вставляешь ссылку на репо — и получаешь готовую аналитику: структура файлов, размеры, форматирование под GPT

Либо вы также можете заменить "hub" на "ingest" в любом URL GitHub, чтобы получить соответствующее краткое содержание
Читать статью

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое JVM, JDK, JRE?

JVM (Java Virtual Machine) выполняет байткод, обеспечивая платформонезависимость Java. JDK (Java Development Kit) - это набор инструментов для разработки, включая компилятор и JRE. JRE (Java Runtime Environment) включает JVM и стандартные библиотеки, позволяя запускать Java-программы.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой интерфейс в Java используется для выполнения функции обратного вызова?
Anonymous Quiz
14%
ActionListener
18%
EventHandler
22%
Runnable
45%
Callable
#ЛитКод
Задача: 518. Coin Change II

Вам дан целочисленный массив coins, представляющий монеты разных номиналов, и целое число amount, представляющее общую сумму денег.

Верните количество комбинаций, которые составляют эту сумму. Если эту сумму нельзя составить никакой комбинацией монет, верните 0.

Предположим, что у вас есть бесконечное количество каждой монеты.

Ответ гарантированно вписывается в знаковое 32-битное целое число.

Пример:
Input: amount = 5, coins = [1,2,5]
Output: 4
Explanation: there are four ways to make up the amount:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1


👨‍💻 Алгоритм:

1⃣Создайте двумерный массив memo с n строками и amount + 1 столбцами. Инициализируйте значения -1, чтобы указать, что подзадача еще не решена. Реализуйте рекурсивный метод numberOfWays, который принимает два параметра: индекс i текущей рассматриваемой монеты и оставшуюся сумму, которую нужно составить. Он возвращает количество способов составить сумму, используя монеты, начиная с индекса i до последней монеты.

2⃣Если amount == 0, верните 1. Мы можем выбрать один способ, не выбирая ни одной монеты, чтобы составить сумму 0. Если i == n, у нас не осталось монет для составления суммы, верните 0. Если эта подзадача уже решена, т.е. memo[i][amount] != -1, верните memo[i][amount]. Если значение текущей монеты превышает сумму, мы не можем её использовать. Рекурсивно вызовите numberOfWays(i + 1, amount), присвойте результат memo[i][amount] и верните его.

3⃣В противном случае, добавьте общее количество способов составить сумму, как выбирая текущую монету, так и игнорируя её. Сложите значения numberOfWays(i, amount - coins[i]) и numberOfWays(i + 1, amount), сохраните результат в memo[i][amount] и верните его. Верните numberOfWays(0, amount), ответ на исходную задачу.

😎 Решение:
class Solution {
public int change(int amount, int[] coins) {
int[][] memo = new int[coins.length][amount + 1];
for (int i = 0; i < coins.length; i++) {
Arrays.fill(memo[i], -1);
}

return numberOfWays(0, amount, coins, memo);
}

private int numberOfWays(int i, int amount, int[] coins, int[][] memo) {
if (amount == 0) {
return 1;
}
if (i == coins.length) {
return 0;
}
if (memo[i][amount] != -1) {
return memo[i][amount];
}

if (coins[i] > amount) {
memo[i][amount] = numberOfWays(i + 1, amount, coins, memo);
} else {
memo[i][amount] = numberOfWays(i, amount - coins[i], coins, memo) + numberOfWays(i + 1, amount, coins, memo);
}
return memo[i][amount];
}
}


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое bytecode?

Байткод - это промежуточный код, который создается после компиляции Java- программы. Он независим от конкретной платформы и выполняется JVM, которая интерпретирует его в машинный код.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 GitIngest

Этот инструмент превращает любые репозитории GitHub в текст, удобный для использования в LLM-промптах. Просто вставляешь ссылку на репо — и получаешь готовую аналитику: структура файлов, размеры, форматирование под GPT

Либо вы также можете заменить "hub" на "ingest" в любом URL GitHub, чтобы получить соответствующее краткое содержание
Читать статью

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#вакансии
👨‍💻 Java разработчик

Локация: Удаленно в РФ
Компания: WMT Group (аккредитованная IT компания-вендор)
ЗП: до 290 000 р. (ТК/ГПХ), до 340 000 р. (ИП/СЗ) на руки
Занятость: Полная

Требования: стаж от 3 лет, опыт работы с Oracle Utilities Framework (обязательно☝🏻)
также: Java ЕЕ, JMM, Hibernate, опыт работы с СУБД Oracle. SQL, PL/SQL, TDD, JUnit, Jenkins, Gitorious, Nexus, QDox, Ant, Maven, Eclipse / Idea, опыт профилирования Java и SQL кода.

Задача: разработка модификаций функциональности для Oracle Utilities (Oracle CC&B / MDM).

💬 Резюме отправлять: @MoiseevaWMT

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Какие признаки JavaBean?

JavaBean — это класс в Java с определенными стандартами, которые делают его удобным для использования в фреймворках. Признаки: он имеет конструктор без
параметров, предоставляет доступ к свойствам через геттеры и сеттеры, а также реализует интерфейс Serializable для поддержки сериализации.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 Генерация диаграмм

Вы можете сгенерировать UML-диаграмму для вашего кода, используя сочетание клавиш Ctrl+Alt+Shift+U (Windows/Linux)

Диаграммы помогут вам легче читать и понимать код

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое OutOfMemoryError?

OutOfMemoryError возникает, когда программа не может выделить достаточно памяти для выполнения операции. Это может произойти из-за утечек памяти, создания слишком большого количества объектов или ограничений JVM.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой метод интерфейса Map возвращает множество ключей?
Anonymous Quiz
41%
getKeys()
32%
keySet()
19%
keyList()
8%
keys()
#ЛитКод
Задача: 623. Add One Row to Tree

Учитывая корень бинарного дерева и два целых числа val и depth, добавьте ряд узлов со значением val на заданную глубину depth. Обратите внимание, что корневой узел находится на глубине 1. Правило добавления таково: учитывая целое число depth, для каждого ненулевого узла дерева cur на глубине depth - 1 создайте два узла дерева со значением val в качестве левого поддерева корня cur и правого поддерева корня.
Оригинальное левое поддерево cur должно быть левым поддеревом нового корня левого поддерева. Оригинальное правое поддерево cur должно быть правым поддеревом нового корня правого поддерева. Если глубина == 1, то есть глубина - 1 вообще не существует, создайте узел дерева со значением val как новый корень всего оригинального дерева, а оригинальное дерево - левое поддерево нового корня.

Пример:
Input: root = [4,2,6,3,1,5], val = 1, depth = 2
Output: [4,1,1,2,null,null,6,3,1,5]


👨‍💻 Алгоритм:

1⃣Если depth равна 1, создайте новый корень со значением val и сделайте текущий корень левым поддеревом нового корня.

2⃣Используйте обход в ширину (BFS) для поиска всех узлов на глубине depth - 1.

3⃣Для каждого узла на глубине depth - 1, вставьте новые узлы со значением val в качестве левого и правого поддеревьев, сохраняя исходные поддеревья.

😎 Решение:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}

public class Solution {
public TreeNode addOneRow(TreeNode root, int val, int depth) {
if (depth == 1) {
return new TreeNode(val, root, null);
}

Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int currentDepth = 1;

while (!queue.isEmpty()) {
if (currentDepth == depth - 1) {
for (TreeNode node : queue) {
node.left = new TreeNode(val, node.left, null);
node.right = new TreeNode(val, null, node.right);
}
break;
}
currentDepth++;
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
if (node.left != null) queue.add(node.left);
if (node.right != null) queue.add(node.right);
}
}

return root;
}
}


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM