TGViewer
Channel Public Channel
Java Learning

Java Learning

@java_per_month

№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Subscribers
16.6K
Photos
1.6K
Videos
1
Links
1K

Showing posts older than #3257 · Back to latest

Older Posts 20 shown
Post #3255 2.99K
🚫 Антипаттерн недели: Использование String вместо StringBuilder при конкатенации в цикле

В Java строки (String) неизменяемы. При каждой конкатенации через + создаётся новый объект, что приводит к избыточным затратам памяти и снижает производительность, особенно в циклах.

✔️ Используйте StringBuilder, который изменяем и работает быстрее при частых операциях с текстом.

Java Learning 👩‍💻
  • 👍 21
  • 🎄 1
Post #3253 2.5K
❓ Вопрос на собеседовании

Как работает JVM String Deduplication, и как оно оптимизирует использование памяти?

Ответ ⬇️
JVM String Deduplication — это механизм, появившийся в Java 8 (с G1 GC), который позволяет JVM автоматически находить и переиспользовать одинаковые строки в памяти. Это особенно полезно в приложениях с большим количеством повторяющихся строк, таких как веб-серверы или системы логирования.

Обычно, даже если строки идентичны, они хранятся как отдельные объекты в куче. Deduplication позволяет JVM находить дубликаты и заменять их ссылками на уже существующие строки, уменьшая потребление памяти.


Пример использования ⚙️
import java.util.ArrayList;
import java.util.List;

public class StringDeduplicationExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();

for (int i = 0; i < 1_000_000; i++) {
list.add(("String_" + (i % 100)).intern()); // Используем String.intern() для принудительного объединения
}

System.out.println("Генерация завершена");
}
}


Java Learning 👩‍💻
  • 👍 10
  • 🔥 1
Post #3252 2.7K
⚙️ ByteArrayOutputStream.writeTo()

Метод ByteArrayOutputStream.writeTo() позволяет записывать содержимое байтового массива (ByteArrayOutputStream) напрямую в другой выходной поток (OutputStream). Это удобно, когда нужно перенаправить данные, например, в файл или сетевой сокет, без промежуточного копирования.

Java Learning 👩‍💻
  • 👍 11
Post #3249 2.67K
⌛ Что будет выведено при выполнении кода?

Пояснение
⬇️
В HashMap ключи уникальны. При добавлении нового значения с тем же ключом ("a"), старое значение (1) заменяется на новое (3). Поэтому map.get("a") возвращает 3, а map.get("b") возвращает 2. Код компилируется и выполняется корректно.


Java Learning 👩‍💻
  • 👍 5
Post #3248 2.55K
⚙️ Pattern Matching for switch

Pattern Matching for switch из позволяет использовать шаблоны для более гибкого и читаемого сопоставления значений в операторе switch. Это значительно упрощает работу с различными типами данных и структурами.

Java Learning 👩‍💻
  • 👍 15
  • 😢 1
  • 🎄 1
Post #3247 2.66K
⚙️ ManagementFactory.getRuntimeMXBean()

Метод ManagementFactory.getRuntimeMXBean() предоставляет доступ к информации о времени выполнения Java-программы, включая аргументы командной строки, идентификатор процесса (PID) и время запуска. Это полезно для мониторинга и диагностики приложений.

Java Learning 👩‍💻
  • 👍 6
Post #3244 2.78K
⚙️ MethodHandles.privateLookupIn

Метод MethodHandles.privateLookupIn позволяет получить доступ к приватным методам, полям и конструкторам класса через MethodHandle. Это мощный и редкий инструмент для работы с закрытыми членами классов.

Java Learning 👩‍💻
  • 👍 6
Post #3242 2.58K
❓ Вопрос на собеседовании

Как работают захваты переменных (variable capture) в лямбда-выражениях Java, и какие ограничения на них накладываются?

Ответ ⬇️
В Java лямбда-выражения могут использовать переменные из окружающего контекста, но только если они являются effectively final (фактически финализированными). Это значит, что переменная должна быть объявлена как final или её значение не должно изменяться после инициализации.

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


Пример использования ⚙️
import java.util.function.Consumer;

public class Main {
public static void main(String[] args) {
int base = 10;

Consumer<Integer> multiplier = value -> {
System.out.println(value * base); // Использование захваченной переменной
};

multiplier.accept(5); // Вывод: 50

// base = 20; // Ошибка компиляции: переменная должна быть effectively final
}
}


Java Learning 👩‍💻
  • 👍 6
  • 🎄 1
Post #3241 2.88K
⚙️ Stream.generate()

Метод Stream.generate() используется для создания бесконечного потока элементов, генерируемых функцией. Это полезно для создания потоков случайных данных, шаблонов или повторяющихся значений.

Java Learning 👩‍💻
  • 👍 10
Post #3240 2.81K
⚙️ MethodHandle.invokeExact()

Метод MethodHandle.invokeExact() из пакета java.lang.invoke позволяет вызывать метод или конструктор через ссылку MethodHandle. Это мощный инструмент для динамического вызова методов с высокой производительностью.

Java Learning 👩‍💻
  • 👍 6
Post #3239 3.24K
🚫 Антипаттерн недели: Использование списков для проверки на принадлежность

Использование списка List для проверки наличия элемента приводит к линейной сложности O(n), что делает такую операцию медленной для больших наборов данных.

✔️ Используйте Set, который обеспечивает время выполнения O(1) для операций поиска.

Java Learning 👩‍💻
  • 👍 30
  • 🔥 1
Post #3238 2.91K
  • 👍 6
  • 🎄 3
Post #3237 2.9K
⌛ Что будет выведено при выполнении кода?

Пояснение
⬇️
Когда класс реализует два интерфейса с одинаковыми default методами, требуется явное указание, какой метод вызывать. В данном коде в методе show() вызываются A.super.show() и B.super.show(), поэтому выполняются оба метода. Код компилируется и корректно выводит A's show и B's show.


Java Learning 👩‍💻
  • 👍 5
Post #3235 2.61K
⚙️ Collectors.teeing

Метод Collectors.teeing, представленный в Java 12, позволяет объединять результаты двух различных коллекторов в одном Stream. Это делает его полезным для выполнения нескольких операций над потоком данных одновременно.

Java Learning 👩‍💻
  • 👍 13
Post #3234 2.63K
⚙️ Collectors.partitioningBy

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

Java Learning 👩‍💻
  • 👍 18
  • 🔥 4
Post #3233 2.7K
⚙️ Instant.now()

Метод Instant.now() из пакета java.time возвращает текущее время в UTC с высокой точностью. Это полезно для работы с временными метками в приложениях, где важна точность времени.

Java Learning 👩‍💻
  • 👍 11
  • 🤔 1
Post #3230 2.37K
⚙️ Stream.iterate()

Метод Stream.iterate() используется для создания бесконечного или конечного потока, начиная с начального значения и применяя к нему функцию обновления. Это полезно для генерации последовательностей или потоков данных.

Java Learning 👩‍💻
  • 👍 12
  • 🔥 1
  • 🎄 1
Post #3229 2.74K
❓ Вопрос на собеседовании

Что такое эффективная финализация (Effective Finality) в Java и как она связана с анонимными классами и лямбда-выражениями?

Ответ ⬇️
Эффективная финализация означает, что переменные, используемые внутри анонимных классов или лямбда-выражений, должны быть либо явно объявлены как final, либо эффективно финализированными — то есть не изменяться после своей инициализации. Это необходимо, чтобы гарантировать, что значение переменной не изменится, пока анонимный класс или лямбда-выражение её использует.

Пример использования ⚙️
import java.util.function.Consumer;

public class Main {
public static void main(String[] args) {
int number = 10;

Consumer<Integer> consumer = value -> {
System.out.println(value + number); // Использование effectively final переменной
};

consumer.accept(5); // Вывод: 15

// number = 20; // Ошибка: переменная number должна быть эффективно финализированной
}
}


Java Learning 👩‍💻
  • 👍 12
  • 🔥 1
  • 🎄 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →