Java Guru 🤓
13.4K subscribers
939 photos
15 videos
793 links
Канал с вопросами и задачами с собеседований!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrSQZ

Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Что будет выведено на экран?
👍72🔥2
🔥9👍53😁1
Что выведет фрагмент код?
👍74🔥2
Что выведет фрагмент код?
Anonymous Quiz
8%
Weekend
27%
Midweek
46%
Weekday
19%
Ошибка компиляции
👍143🔥3🌚1
Как найти любой элемент в списке, который начинается с буквы "b"?
Anonymous Quiz
13%
list. filter(s -> s.startsWith("b")).findAny().ifPresent(System.out::println);
5%
list.stream().filter().findFirst().ifPresent(System.out::println);
25%
list.stream().findAny(s-> s.startsWith("b")).ifPresent(System.out::println);
50%
list.stream().filter(s -> s.startsWith("b")).findAny().ifPresent(System.out::println);
7%
list.stream().map(s-> s.startsWith("b")).findAny().ifPresent(System.out::println);
👍14🔥31🥰1👏1
Как часто выполняется метод scheduledTask()?
👍4🔥2
Какой интерфейс коллекций гарантирует отсутствие дубликатов?
Anonymous Quiz
1%
List
2%
Deque
87%
Set
8%
Мар
2%
Queue
11👍7🔥3
Что выведет этот фрагмент кода?
3🔥2👏2
Что выведет этот фрагмент кода?
Anonymous Quiz
9%
Ничего не выведет
1%
4
62%
24
4%
10
20%
Произойдет ошибка
3%
12
👍8🔥2
Что будет выведено для запроса /api/hello?name=Spring
👍6🔥3🎉3
Что будет выведено для запроса /api/hello?name=Spring
Anonymous Quiz
3%
Hello, name
16%
Hello, World
69%
Hello, Spring
11%
400 Bad Request
👍12🎉6🔥3🥱2
Выберите верный формат, чтобы получить дату: 04-02-2025 12:15
👍5🔥3😁3👏1
Выберите верный формат, чтобы получить дату: 04-02-2025 12:15
Anonymous Quiz
13%
dd-mm-yyyyhh:mm
1%
d-m-y h:m
1%
d-M-y HH:mm
83%
dd-MM-yyyу HH:mm
1%
d-M-yyyy H:mm
👍10🥱5🔥3
Что выведет код?
👍5🤨4🔥3🥰1
Что выведет код?
Anonymous Quiz
6%
100
74%
1
18%
Compiler error
2%
Runtime error
🤨26👍8🔥2
Как нельзя называть переменные?

Этот вопрос подразумевает ответ из двух частей. Нужно указать, какие есть технические ограничения, и какие стилистические. Стиль – слишком большая тема, не специфичная только для Java, не будем на ней останавливаться.

Технически компилятор налагает одинаковые ограничения на имена как переменных, так и классов, методов, и всего остального. Эти имена обобщенно называются идентификаторы.

Ограничений всего три:
1. Имя целиком не должно совпадать с зарезервированным словом;
2. Первый символ должен проходить проверку методом Character.isJavaIdentifierStart();
3. Остальные символы должны проходить проверку Character.isJavaIdentifierPart().

На практике проверки означают, что имя должно состоять из таких символов Unicode, как:
• Буквы (разных языков)
• Символы валют (такие как $)
• Соединительные символы (такие как _)
• Диакритика (combining mark, non-spacing mark)
• Методы, проходящие Character.isIdentifierIgnorable() (непечатаемые символы, в идентификаторе игнорируются компилятором)
• Цифры, числовые символы (такие как римские числа)

Последний пункт недопустим для первого символа имени. Тип конкретного символа можно узнать методом Character.getType().

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


@javatasks #java
👍195🔥1🎉1
Какая из функций может указать JVM на необходимость запуска сборщика мусора?
Anonymous Quiz
9%
Runtime.gc()
51%
System.gc()
16%
Обе функции System.gc() и Runtime.gc()
24%
Ни одна из вышеуказанных
🤨11👍51
Что выведет код?
👍5🔥1👏1
Что выведет код?
Anonymous Quiz
9%
abc
66%
ABC
9%
Runtime Error
16%
Compiler Error
👍12🔥2🌚2
❗️Как работает ConcurrentHashMap под капотом?

ConcurrentHashMap – это высокопроизводительная реализация Map, специально разработанная для многопоточной среды. Она гарантирует безопасность данных при одновременном доступе и минимизирует использование блокировок.

💡 Основные механизмы:

🟡 Сегментация данных (до 8 java): Данные разделялись на сегменты, и блокировка происходила на уровне сегмента, а не всей карты. Это обеспечивало параллельный доступ к разным частям карты.

🟡 Кассовые таблицы (Java 8+): Вместо сегментов используется структура на основе Node[] – массив узлов. Это сделало структуру более гибкой. Вместо сегментации применяется механизм Fine-Grained Locking и Compare-And-Swap:
- Compare-And-Swap используется для операций записи, что позволяет избегать блокировок для большинства операций. Операции с разными бакетами могут выполняться параллельно, поскольку локальная блокировка применяется только к отдельному узлу или бакету.
- Fine-Grained Locking минимизирует область блокировок. Например, если требуется масштабирование (resize) или обработка коллизий, потоки могут продолжать работу с другими бакетами, даже если один из них временно заблокирован.
- synchronized применяется только для случаев, когда CAS не справляется (например, при реорганизации данных или сложных операциях). Это помогает поддерживать баланс между безопасностью и производительностью.

🟡 Масштабируемый массив (Resizable Array): Масштабирование в ConcurrentHashMap происходит градуально, чтобы избежать блокировки всей структуры. Новый массив создаётся с увеличенным размером, и данные переносятся постепенно, по частям. Во время переноса используется специальный узел ForwardingNode, который перенаправляет операции к новому массиву, обеспечивая корректную работу всех потоков.

📚 Основные методы:

🔘 get(Object key):
Легковесная операция, не требует блокировок. Ключ хэшируется, затем вычисляется индекс сегмента. Если в сегменте есть соответствующий узел, он возвращается.

🔘 put(K key, V value):
- Сначала используется CAS для вставки нового элемента.
- Если CAS не срабатывает (например, при наличии коллизии), включается локальная блокировка на соответствующей корзине.

🔘computeIfAbsent/compute:
Более сложные операции, которые комбинируют вычисления с модификацией. Используются короткие локи для минимизации блокировки других потоков.

⚠️ Особенности:

- ConcurrentHashMap не допускает хранения null для ключей и значений. Это связано с невозможностью различать отсутствие значения и реальное хранение null.
- Итерации по карте предоставляют "слабо согласованные" данные, что означает, что изменения, происходящие параллельно, могут быть частично видны.

Документация

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥41