13937
Обучающий канал по Java Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6 По всем вопросам @valentin_mascarov Реклама на бирже - https://telega.in/c/Java_per_month
⚙️ ProcessHandle.children()ProcessHandle.children() возвращает поток (Stream<ProcessHandle>) дочерних процессов текущего процесса. Это полезно для мониторинга запущенных подпроцессов и управления ими.
Java Learning 👩💻
⚙️ Thread.yield()
Метод Thread.yield() сообщает планировщику потоков, что текущий поток готов уступить процессор другим потокам того же приоритета. Это полезно для управления многопоточными задачами без блокировок.
Java Learning 👩💻
🚫 Антипаттерн недели: Использование == для сравнения строк
В Java строки (String) — это объекты, а оператор == сравнивает ссылки, а не их содержимое. Это может привести к неожиданным ошибкам при сравнении строк, особенно если строки создаются динамически.
✔️ Используйте метод equals(), который сравнивает содержимое строк, а не ссылки.
Java Learning 👩💻
⚙️ ProcessHandle.onExit()
Метод ProcessHandle.onExit() позволяет отслеживать завершение внешнего процесса в асинхронном режиме. Это полезно для управления запущенными процессами и выполнения действий после их завершения.
Java Learning 👩💻
⚙️ StackWalker.walk()
Метод StackWalker.walk() позволяет динамически получать информацию о текущем стеке вызовов, фильтровать его и анализировать. Это полезно для логирования, отладки и мониторинга исполнения кода.
Java Learning 👩💻
⚙️ MethodHandles.arrayElementVarHandle()
Метод MethodHandles.arrayElementVarHandle() создаёт VarHandle для работы с элементами массива, позволяя выполнять атомарные операции без блокировки.
Java Learning 👩💻
🔥 Самые нужные каналы для Java разработчика, чтобы расти в доходе 💸
• Java | Вопросы собесов
• Java | Вакансии с удаленкой
• Java | LeetCode
• Java | Тесты
Подпишись, чтобы не потерять ☝️
⚙️ Files.mismatch()
Метод Files.mismatch(), добавленный в Java 12, позволяет сравнить два файла и найти позицию первого несовпадающего байта. Если файлы идентичны, метод возвращает -1. Это полезно для проверки целостности данных или сравнения файлов.
Java Learning 👩💻
⚙️ ProcessHandle.info()
Метод ProcessHandle.info() позволяет получать информацию о запущенных процессах в системе, таких как аргументы командной строки, время запуска и использование ресурсов. Это полезно для мониторинга процессов в Java-приложениях.
Java Learning 👩💻
🚫 Антипаттерн недели: Использование String вместо StringBuilder при конкатенации в цикле
В Java строки (String) неизменяемы. При каждой конкатенации через + создаётся новый объект, что приводит к избыточным затратам памяти и снижает производительность, особенно в циклах.
✔️ Используйте StringBuilder, который изменяем и работает быстрее при частых операциях с текстом.
Java Learning 👩💻
❓ Вопрос на собеседовании
Как работает 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("Генерация завершена");
}
}
Если бы вы купили TRUMP coin на старте на 1000$, то уже сейчас у вас бы было 130.000$
Только вдумайтесь: Утром покупаете монет на 1000$, а уже через день 1000$ превратилась в 130.000$. Неплохо, правда?
Чтобы быть в тренде – достаточно читать Максима Гусева
Там рассказывают кейсы, как с 1000$ колотят состояние, а не просирают все.
Если хотите разбираться в мире крипты, вам сюда: /channel/+fxR-tkBeKItjZjM6
⚙️ Pattern Matching for switch
Pattern Matching for switch из позволяет использовать шаблоны для более гибкого и читаемого сопоставления значений в операторе switch. Это значительно упрощает работу с различными типами данных и структурами.
Java Learning 👩💻
Как я пишу open source игру на Java
Смотреть статью
Java Learning 👩💻
Стань JAVA-разработчиком с EdMe: 6-8 месяцев, гарантия трудоустройства, оплата обучения после выхода на работу
Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих с нуля и для тех, кто стремится улучшить свои навыки. Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6-8 месяцев вы сможете достичь уровня middle-разработчика, для этого нужно уделять обучению от 20 часов в неделю.
Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, мотивировать и помогать готовиться к собеседованиям.
🚩Плюсы курса:
➕Гарантированное трудоустройство с зарплатой от 140 000 рублей.
➕Оплата после выхода на работу: вы платите только 20% от зарплаты в течение 18 месяцев.
➕Карьерная поддержка даже после окончания курса.
➕Если по каким-то причинам вы не сможете завершить обучение, это можно сделать без оплаты.
Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, с которыми вы столкнетесь на реальных проектах.
🚩Программа курса включает:
▪️ Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git.
▪️ Проект.
▪️ Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований).
▪️ Прохождение реальных собеседований.
🖋 Узнать подробности и записаться на курс «JAVA-разработчик» можно на EdMe.pro
Отбор включает несложное тестовое задание, которое под силу выполнить человеку без опыта, и собеседование.
Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2Vtzqv75CPV
❓ Вопрос на собеседовании
Что такое ThreadLocal в Java, и зачем он нужен?
Ответ ⬇️
ThreadLocal — это механизм, который позволяет каждому потоку хранить своё собственное значение переменной, изолированное от других потоков. Это полезно для управления состоянием в многопоточных приложениях, например, при хранении информации о текущем пользователе в веб-приложениях.
Пример использования ⚙️
public class ThreadLocalExample {
private static final ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0);
public static void main(String[] args) {
Runnable task = () -> {
threadLocal.set((int) (Math.random() * 100));
System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());
};
new Thread(task).start();
new Thread(task).start();
}
}
⚙️ java.util.Timer()
Метод java.util.Timer() позволяет создавать таймеры, которые выполняют определенные задачи через заданные интервалы времени. Это полезно для планирования и отложенного выполнения задач без блокировки основного потока.
Java Learning 👩💻
❓ Вопрос на собеседовании
Как работает Virtual Threads (виртуальные потоки) в Java, и чем они отличаются от обычных потоков (Thread)?
Ответ ⬇️
Виртуальные потоки (Virtual Threads) появились в Java 21 и позволяют создавать тысячи потоков без значительных накладных расходов. В отличие от классических потоков (Thread), которые привязаны к системным потокам ОС, виртуальные потоки управляются самой JVM и не блокируют системные ресурсы.
Использование виртуальных потоков значительно улучшает производительность приложений, выполняющих множество операций ввода-вывода (например, сетевые запросы).
Пример использования ⚙️
public class VirtualThreadsExample {
public static void main(String[] args) {
try (var executor = java.util.concurrent.Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10; i++) {
executor.submit(() -> {
System.out.println(Thread.currentThread());
});
}
}
}
}
⚙️ Thread.onSpinWait()
Метод Thread.onSpinWait() сообщает процессору, что поток ожидает без выполнения полезной работы. Это позволяет улучшить производительность в многопоточных приложениях, уменьшая нагрузку на процессор во время активного ожидания.
Java Learning 👩💻
Уже завтра собеседование на Middle Java с разработчиком из Oracle
5 февраля (уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
1. Алексей Ушаровский ведущий Java-разработчик c опытом работы в Oracle и Сбере будет задавать реальные вопросы и задачи разработчику-добровольцу
2. Алексей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Алексею
Что узнаешь на прямом эфире от ШОРТКАТ:
• Чего ждут от кандидатов на Middle позиции в Java-разработке
• Какие вопросы задают на интервью и зачем
• Как подготовиться к собесу, чтобы получить оффер
Это бесплатно? Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzquayvzQ
JarFileJarFile — это класс в Java, который используется для чтения содержимого JAR-файла. JAR-файл (Java ARchive) — это формат архива, который используется для объединения нескольких файлов Java (.class), а также других ресурсов, таких как изображения, звуки и текстовые файлы, в один файл.
Создание объекта JarFile
Для создания объекта JarFile необходимо использовать его конструктор, который принимает путь к JAR-файлу в качестве параметра.
Java Learning 👩💻
⚙️ LockSupport.park()
Метод LockSupport.park() позволяет приостановить выполнение потока без использования synchronized или wait(). Это полезно для низкоуровневой синхронизации потоков.
Java Learning 👩💻
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
Абстрактный класс Animal содержит абстрактный метод makeSound() и обычный метод sleep(). Класс Dog наследует Animal и реализует makeSound(). При вызове myDog.makeSound(), выполняется переопределённый метод Woof, а затем вызывается унаследованный метод sleep(), который выводит Sleeping.... Код компилируется и выполняется корректно.
⚙️ Pattern.asMatchPredicate()
Метод Pattern.asMatchPredicate(), добавленный в Java 11, позволяет преобразовать регулярное выражение в предикат, который можно использовать для фильтрации потоков или проверки строк на полное совпадение с шаблоном.
Java Learning 👩💻
Стань JAVA-разработчиком с EdMe: 6-8 месяцев, гарантия трудоустройства, оплата обучения после выхода на работу
Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих с нуля и для тех, кто стремится улучшить свои навыки. Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6-8 месяцев вы сможете достичь уровня middle-разработчика, для этого нужно уделять обучению от 20 часов в неделю.
Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, мотивировать и помогать готовиться к собеседованиям.
🚩Плюсы курса:
➕Гарантированное трудоустройство с зарплатой от 140 000 рублей.
➕Оплата после выхода на работу: вы платите только 20% от зарплаты в течение 18 месяцев.
➕Карьерная поддержка даже после окончания курса.
➕Если по каким-то причинам вы не сможете завершить обучение, это можно сделать без оплаты.
Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, с которыми вы столкнетесь на реальных проектах.
🚩Программа курса включает:
▪️ Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git.
▪️ Проект.
▪️ Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований).
▪️ Прохождение реальных собеседований.
🖋 Узнать подробности и записаться на курс «JAVA-разработчик» можно на EdMe.pro
Отбор включает несложное тестовое задание, которое под силу выполнить человеку без опыта, и собеседование.
Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2Vtzqv75CPV
⚙️ ByteArrayOutputStream.writeTo()
Метод ByteArrayOutputStream.writeTo() позволяет записывать содержимое байтового массива (ByteArrayOutputStream) напрямую в другой выходной поток (OutputStream). Это удобно, когда нужно перенаправить данные, например, в файл или сетевой сокет, без промежуточного копирования.
Java Learning 👩💻
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
В HashMap ключи уникальны. При добавлении нового значения с тем же ключом ("a"), старое значение (1) заменяется на новое (3). Поэтому map.get("a") возвращает 3, а map.get("b") возвращает 2. Код компилируется и выполняется корректно.
⚙️ ManagementFactory.getRuntimeMXBean()
Метод ManagementFactory.getRuntimeMXBean() предоставляет доступ к информации о времени выполнения Java-программы, включая аргументы командной строки, идентификатор процесса (PID) и время запуска. Это полезно для мониторинга и диагностики приложений.
Java Learning 👩💻
⚙️ MethodHandles.privateLookupIn
Метод MethodHandles.privateLookupIn позволяет получить доступ к приватным методам, полям и конструкторам класса через MethodHandle. Это мощный и редкий инструмент для работы с закрытыми членами классов.
Java Learning 👩💻
❓ Вопрос на собеседовании
Как работают захваты переменных (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
}
}