107 вопросов
Практика
Как ты можешь пометить массив как volatile в Java, и какие это имеет последствия в многопоточной среде?
Можешь объяснить, для чего нужен ScheduledExecutorService и как он работает? Типа, как он расширяет ExecutorService и какие там возможности по планированию задач?
Что происходит, когда ты вызываешь метод `submit()` у экземпляра `ExecutorService`, если его очередь задач уже переполнена?
Что такое техника splitting lock'ов и как она помогает снизить争夺за блокировки в многопоточных приложениях? Actually, let me correct that: Что такое техника splitting lock'ов и как она помогает снизить争夺 за блокировки в многопоточных приложениях? Let me provide the proper translation: Что такое техника разделения блокировок и как она помогает снизить конкуренцию за блокировки в многопоточных приложениях?
Какие два метода в Java доступны, чтобы проверить, был ли поток прерван?
Как можно прервать или остановить поток в Java во время его выполнения, и какой самый обычный способ это сделать с помощью волатильной переменной?
Какие шаги можно предпринять, чтобы выявить deadlock в запущенном приложении?
Какими способами можно безопасно делиться объектом между несколькими потоками в Java?
Чем отличается процесс от потока в Java?
Какова цель ключевого слова volatile в Java и как оно влияет на видимость памяти и синхронизацию потоков?
Какие стандартные способы снять дамп потока в Java приложении на разных операционных системах?
Какая главная разница между классами CyclicBarrier и CountDownLatch в Java, и как их переиспользуемость влияет на то, как их использовать?
Можешь объяснить, в чём основные разницы между методами sleep() и wait() в Java? Особенно насчёт того, где их использовать и как они работают с блокировками потоков?
Что такое thread-local переменная в Java и как её использовать, чтобы обеспечить потокобезопасность и избежать утечек памяти?
Оператор инкремента (++) в Java потокобезопасен?
Как ты можешь убедиться, что несколько потоков смогут безопасно получать доступ к нескольким ресурсам без риска deadlock'а?
Как ты можешь убедиться, что два потока, T1 и T2, выполняются в определённом порядке — сначала T1, потом T2 — в Java?
Какие есть разные способы сгенерить thread dump в Java приложении, и чем они отличаются в зависимости от операционной системы?
Как работают стек и heap в многопоточном Java приложении, и какие моменты нужно учитывать при управлении общими данными между потоками?
Какие есть способы создать thread в Java и как они работают?
В чём главное отличие между классами RecursiveTask и RecursiveAction в фреймворке ForkJoin?
В каких ситуациях Fork/Join фреймворк используется лучше всего и как он помогает реализовывать алгоритмы "разделяй и властвуй"?
Какие ключевые различия между CountDownLatch и CyclicBarrier, и в каких ситуациях каждый из них лучше всего использовать?
Что такое CountDownLatch в Java и как он помогает синхронизировать потоки?
Можешь объяснить, для чего нужен класс Semaphore в Java и как он работает? Как он управляет доступом потоков к ресурсам и что делают методы acquire и release?
Зачем нужен интерфейс Future в Java и какие у него основные методы и функциональность?
В чём основная разница между интерфейсами Runnable и Callable в Java?
Как ты можешь создать thread pool, используя Java Executors framework?
Какая связь между интерфейсами Executor и ExecutorService, и чем их функциональность отличается?
Как техники оптимизации производительности, которые эффективны в однопоточных приложениях, могут привести к снижению производительности в многопоточной среде?
Объект-пулинг всегда улучшает производительность в многопоточном приложении?
Какие Java классы используют Compare-and-Swap (CAS) операции и зачем они нужны в многопоточном программировании?
Что такое операция Compare-And-Swap (CAS) и как она работает в качестве альтернативы традиционным механизмам синхронизации в конкурентном программировании?
Что такое lock striping и чем это отличается от использования одного лока для всей структуры данных с точки зрения производительности и конкурентности?
Какой механизм использует класс ReadWriteLock, чтобы снизить конкуренцию за блокировку между потоками?
Почему не рекомендуется останавливать поток, вызывая его метод stop()?
Какую технику можно применить, чтобы снизить lock contention в этом коде, и как бы ты оптимизировал synchronization block, чтобы минимизировать время удержания lock'а?
Какие основные техники помогают снизить lock contention в concurrent programming?
Что такое lock contention в многопоточности и как правильное использование локов помогает её минимизировать?
Как бы ты определил теоретический максимальный прирост производительности, который можно получить, используя несколько процессоров для приложения, на основе закона Амдала?
Как мультипоточность может улучшить производительность приложения, и можешь ли ты привести пример, чтобы это пояснить?
В каких ситуациях класс ThreadLocal наиболее подходит использовать, и какие есть типичные примеры его применения в приложении?
Зачем нужен класс ThreadLocal в Java и как он позволяет каждому потоку хранить свою отдельную копию переменной?
Какое главное, что нужно учитывать, когда ты передаёшь объект между потоками в многопоточной среде?
Можешь объяснить, что такое thread в Java, описать, как он работает внутри Java Virtual Machine, и рассказать, в чём ключевые отличия между thread и process?
Зачем нужен метод yield() в классе Thread, и в каких ситуациях он может быть полезен?
Как ты можешь определить, держит ли поток сейчас монитор-лок на конкретном объекте в Java?
Разбери потокобезопасность вот такого кода, который вытаскивает целое число из Queue. Найди проблемы с конкурентностью, которые могут возникнуть, когда несколько потоков одновременно обращаются к методу getNextInt(), особенно учитывая то, что synchronized блоки разделены отдельно, и potential race conditions, которые могут произойти во время последовательности wait-and-poll.
Как JVM определяет, какой поток разбудить, когда вызывается метод `notify()`?
Какие два метода из класса Object обычно используют для координации между потоком производителя и потоком потребителя в сценарии производитель-потребитель?
Что такое fair lock в многопоточности и чем он отличается от non-fair lock с точки зрения планирования потоков и производительности?
Что такое race condition и как она может возникнуть в многопоточной среде?
Как использование synchronized блоков в Java может привести к голоданию потока?
Что такое thread starvation и как это происходит в системе scheduling'а на основе приоритетов?
Что такое livelock, и чем он отличается от deadlock с точки зрения поведения потоков и прогресса системы?
Как ты можешь обнаружить deadlock в Java приложении, и какой рекомендуемый подход с использованием ThreadMXBean API?
Как предотвратить deadlock'и в многопоточной среде?
Какие основные условия должны быть выполнены, чтобы в программе произошла deadlock?
Так, оцени потокобезопасность вот этой реализации Singleton с двойной проверкой блокировки и объясни, какие проблемы могут возникнуть из-за оптимизаций компилятора и переупорядочивания инструкций. Ещё расскажи, какой механизм можно использовать, чтобы гарантировать потокобезопасную инициализацию переменной instance.
Можешь объяснить, какие atomic операции есть в Java и к каким типам переменных они применяются?
А `i++` в Java — это атомарная операция?
Ты можешь объяснить, что такое atomic operation и описать её основные характеристики в контексте многопоточного программирования?
Встроенные блокировки в Java можно переполучить одному и тому же потоку, и какие последствия у такого поведения?
Можно ли использовать примитивные типы данных как встроенные блокировки в Java?
Можно ли в Java отметить конструктор как synchronized?
Какую внутреннюю блокировку захватывает синхронизированный метод в Java и как он управляет этой блокировкой во время выполнения метода и в случае исключения?
Как ты можешь убедиться, что родительский поток дождётся, пока дочерний поток завершит свою работу?
Как можно прервать или разбудить поток, который находится в спящем состоянии, вызванном методом Thread.sleep()?
Thread.sleep() в Java подходит для real-time приложений?
Какие эффективные стратегии избежать busy waiting в Java, и как можно использовать метод Thread.sleep() для этого?
Что такое busy waiting в контексте многопоточности и почему это обычно считается антипаттерном?
Как получить доступ к текущему потоку внутри Java программы?
Можешь объяснить, что такое ThreadGroup в Java и как он работает? Типа, как он позволяет управлять сразу несколькими потоками в одной группе?
Как в Java установить приоритет потока?
Можешь описать разные состояния, в которых может находиться поток во время его жизненного цикла в Java, и вкратце объяснить, что означает каждое состояние?
Какие ключевые свойства связаны с Java потоком, и какие у них типы данных и назначение?
Какое минимальное количество потоков может быть в Java приложении и почему?
Зачем нужен scheduler в вычислениях и что он делает?
В чём разница между процессом и потоком в контексте Java?
Какая основная разница между процессом и потоком, и как их связь с памятью и ресурсами влияет на производительность и использование?
Что означает термин "concurrency" в программировании и как это улучшает производительность программы в системах с несколькими ядрами или процессорами?
Что такое deadlock и как он обычно возникает в многопоточной среде?
Что такое статическая синхронизация в Java и чем она отличается от синхронизации экземпляра с точки зрения поведения блокировок?
Зачем вообще нужны синхронизированные блоки в Java, когда речь идет о многопоточности? И какие у них вообще плюсы?
Что такое синхронизация в Java и как она помогает управлять доступом к общим ресурсам в многопоточной среде?
Можно ли в Java запустить один и тот же поток больше одного раза?
Можно ли преобразовать обычный поток в daemon поток после того, как он уже запустился, и к чему это приведёт, если ты попробуешь это сделать?
Как обычный тред превратить в daemon thread в Java?
Что такое daemon thread в Java, и можешь дать пример?
В чём разница между методом `notify()` и методом `notifyAll()` в Java?
В Java можно заблокировать объект, чтобы гарантировать исключительный доступ только одного потока?
В каких ситуациях нормально прервать тред и зачем это вообще нужно?
Можно ли в Java запустить один поток больше одного раза?
Как преобразовать пользовательский поток в daemon-поток после того, как он уже запустился, и какие будут последствия, если ты попытаешься это сделать?
Что происходит, если ты прямо вызовешь метод run() потока вместо того, чтобы использовать метод start() в Java?
Какие основные различия между вытесняющим алгоритмом планирования и алгоритмом планирования с временными квантами?
Какую роль приоритет потока играет в процессе планирования?
Как Java создаёт и управляет потоками, когда программа запускается?
Какие потенциальные минусы или сложности связаны с использованием многопоточности в разработке программ?
Какие основные плюсы использования многопоточности в разработке софта?
Можешь объяснить, как многопоточность реализуется в Java и описать основные методы для управления и контроля потоков?
В чем разница в поведении, когда ты напрямую вызываешь метод run() у объекта потока в Java, в отличие от использования метода start()?
В чем ключевая разница между методами `wait()` и `sleep()` в Java, и как их поведение влияет на синхронизацию потоков и блокировку ресурсов?
Какая цель у метода `join()` в классе `Thread`, и как он влияет на выполнение потоков в Java?
Какие три уровня приоритета можно назначить потоку в Java и что они означают?
Какой приоритет по умолчанию назначается потоку при его создании в Java?
Какая роль приоритета потока в механизме планирования Java и как это влияет на порядок выполнения потоков?