100+ вопросов на собеседование по Java Concurrency
Cобрал небольшую подборку вопросов. Возможно кому-то она будет полезна.Общие вопросы— В чем разница между потоком и процессом? — Что такое кооперативная многозадачность и она ли в Java. Если да, то какие преимущества. Если нет, то какая тогда в Java? — Сравните кооперативную и вытесняющую многозадачности.— Что такое «зеленый потоки» и они ли в Java (в HotSpot JVM 7)? — Когда началась «Multicore Era»? — Что такое — Планировщик потоков? Предположите алгоритм работы.— Какие выигрыши может дать многопоточность на одноядерной машине? «Железо» — Что такое Flynn’s taxonomy, SISD/MISD/SIMD/MIMD? К какому классу относятся CPU? GPU? — Расскажите про иерархию кэшей L1/L2/L3? Что вызвало ее появление? — Что такое Memory wall? — Что такое Memory Hierarchy? — Что такое Cache line? В виде каких эффектов проявляется? — Что такое False sharing? Плохо это или хорошо? Как с этим бороться? — Что такое Memory padding? — Что такое Cache pollution? Плохо это или хорошо? Как с этим бороться? — Что такое Cache miss? Плохо это или хорошо? Как с этим бороться? — В чем разница между SMP и NUMA? Как это сказывается на программах? — В чем разница между Multicore и Multisocket? — Что такое Thread affinity? Можно ли сделать в Java? — Что такое Inter Thread Parallelism? Task Parallelism? — Что такое Branch Prediction? — Что такое Speculative Execution? — Сравните с точки зрения программиста — машину с четырехядерным процессором и двумя двухядерными процессорами.— Напишите программу, которая демонстрирует False sharing.— Напишите программу, которая демонстрирует размер кэша L1.— Напишите программу, которая демонстрирует размер кэша L2.Java Memory Model — Что такое частичный порядок? — Что такое отношение happens-before? — Почему happens-before — это частичный порядок? — Что такое data-race? — Какие гарантии на работу с volatile? — Какие гарантии на работу с final? — Вычисление hashCode у java.lang.String имеет data race — Вас это не пугает? — Объясните смысл выражения «data race free программа является sequential consistent».— В классе String все поля финальные. Можно ли убрать ключевое слово финал? Ведь сеттеров все равно нет — следовательно поля нельзя переустановить.— Что такое ordering, visibility, atomicity, happend-before, mutual exclusion на примере volatile.— Что такое ordering, visibility, atomicity, happend-before, mutual exclusion на примере synchronize.— Что такое ordering, visibility, atomicity, happend-before, mutual exclusion на примере AtomicInteger.— атомарно ли ++ для volatile переменной? Базовое API, примитивы/конструкции — Thread.getState () возвращает экземпляр Thread.State. Какие возможны значения? — Отличие Thread.start () и Thread.run ()? — Что происходит при вызове Thread.interrupt ()? — Что происходит при вызове Thread.stop ()? — Почему Thread.stop ()/destroy ()/suspend ()/resume () — deprecated? — Перечислите все причины по которым может выскочить InterruptedException.— Что из данных вызовов создает happend-before: Thread.sleep (), Thread.join (), Thread.yield (), Thread.start (), Thread.run (), Thread.isAlive (), Thread.getState ()? — В чем разница между Thread.sleep () и Thread.yeild ()? — В чем проблема с Double Checked Locking? Как все-таки сделать потокозащищенный ленивый синглетон с дешевым доступом? — Что такое Safe Publishing? — Как сделать Safe Publishing используя volatile? — Как сделать Safe Publishing используя synchronized? — Как сделать Safe Publishing используя AtomicBoolean? — Что такое Монитор? — Расскажите о взаимодействии synchronized/Object.wait ()/.notify ()/.notifyAll ()? — Реализуйте ограниченную блокирующую очередь на synchronized/Object.wait ()/.notify ()/.notifyAll ()— Перечислите все сценарии попадания в blocking-set встроенного монитора— Перечислите все сценарии выхода из blocking-set встроенного монитора— Перечислите все сценарии попадания в wait-set встроенного монитора— Перечислите все сценарии выхода из wait-set встроенного монитора— Различия между Thread.isInterrupded () и Thread.interrupded ().— Расскажите о идиоме многопоточного проектирования Private mutex.— Расскажите о идиоме многопоточного проектирования Spin lock/Busy waiting.— Расскажите о идиоме многопоточного проектирования backoff protocol (expotential backoff).— Что это за свойство — «reentrancy»? — Что такое «poison message»? — Что такое «mutual exclusion»? Примеры как добиться в Java.— Что такое «condition waiting»? Примеры как добиться в Java.java.util.concurrent: Пулы потоков, Future — Различия в интерфейсах Runnable и Callable.— Преимущества SheduledThreadPool перед java.util.Timer.— Говорят, что Future/CompletableFuture — это монада. Что скажете? — В чем преимущество ForkJoinPool над ThreadPoolExecutor? — Какая функциональность появилась у SheduledThreadPool в сравнении с ThreadPoolExecutor? — В чем отличие методов sheduleAtFixedRate () от sheduleAtFixedDelay () класса SheduledThreadPool? — Реализуйте простейший пул потоков фиксированного размера.java.util.concurrent: Многопоточные коллекции — Расскажите о шаблоне многопоточного проектирования Producer/Consumer.— Расскажите о шаблоне многопоточного проектирования Master/Workers.— Расскажите о шаблоне многопоточного проектирования Pipes-and-Filters, SEDA.— Что в SynchronousQueue уникально для BlockingQueue.— Что такое «рандеву»? При помощи каких классов в Java его можно организовать? — Почему TransferQueue НЕ BlockingQueue? — Есть ли какие-то happens-before гарантии при работе с BlockingQueue? Между двумя put ()? Между put () и take ()? Между двумя take ()? — Есть ли какие-то happens-before гарантии при работе с ConcurrentMap? Между двумя put ()? Между put () и get ()? Между двумя get ()? — В чем отличия Collections.synchronizedMap (new HashMap ()) от new ConcurrentHashMap ()? — Интерфейс ConcurrentMap — наследник интерфейса Map, однако там добавлены новые методы. Какие? — Как реализован CopyOnWriteList? В чем преимущества/недостатки в сравнении с Collections.synchronizedList (new ArrayList ())? java.util.concurrent: «Синхронизаторы» — Расскажите о API класса CountDownLatch и возможный сценарий использования.— Расскажите о API класса CyclicBarrier и возможный сценарий использования.— Расскажите о API класса Semaphore и возможный сценарий использования.— Реализуйте свой вариант CountDownLatch используя Semaphore.— Реализуйте свой вариант CyclicBarrier используя Semaphore.— Реализуйте свой вариант монитора используя Semaphore.— В чем отличия CountDownLatch от CyclicBarrier? — Назовите отличия synchronize{} и ReentrantLock.— Что может Phaser? Fork/Join Framework (Java 7) — Расскажите о модели рекурсивного параллелизма в сравнении с итеративным параллелизмом.— Что такое Task stealing? Parallel Streams (Java 8) — Объясните, что такое Internal iteration и External iteration.— Как соотносятся свойства Stream-ов (immediate/terminal, lazy/eager, short-circuiting, ordered/unordered) с возможностью автоматического распараллеливания? — Как согласовать упорядоченность Stream-ов и возможность параллельной обработки элементов (filter, map, flatMap)? — Опишите как происходит параллельный reduce, если потоков много, а результат один? — Опишите как происходит параллельный collect, если потоков много, а результат один? Неблокирующий алгоритмы — В чем состоит критика архитектур с явным использованием потоков и блокировок с позиции неблокирующих алгоритмов? — Дайте определение и сравните Wait-freedom, Lock-freedom и Obstruction-freedom.— Объясните какие happens-before ребра образуются при работе с AtomicXYZ классами.— Реализуйте стек Трейбера.— Что такое ABA-проблема? — Как AtomicMarkableReference решает ABA-проблему? — Зачем нам AtomicIntegerArray если мы можем использовать AtomicInteger[]? — Зачем используется AtomicFieldUpdater если у нас есть AtomicReference? — Различия между java.util.concurrent.Atomic*.compareAndSwap () и java.util.concurrent.Atomic*.weakCompareAndSwap ().Архитектуры на основе передачи сообщений — Расскажите о противопоставлении архитектур на основе Mesage Passing и Shared Memory. В чем сильные и слабые стороны каждого из подходов? — Если акторы обмениваются сообщениями, а сообщения — это данные, то как решается проблема одновременного доступа к данным разными потоками? — Говорят, что акторы — это легковесные потоки и их можно создавать десятки и сотни тысяч. Как это реализуется на JVM? — Чем «занят» актор, когда нет входящих сообщений? Software Transactional Memory (?) — В чем суть архитектуры STM? — Какие преимущества STM над явным использованием блокировок? — Какие недостатки STM над явным использованием блокировок? Persistent Data Structures — В чем суть Persistent Data Structures? — Какие плюсы и минусы у Persistent Data Structures перед «классическими» структурами? — В чем различия между partially persistent, fully persistent и confluently persistent? — Реализуйте персистентный стек. К какому классу он относится (partially persistent, fully persistent или confluently persistent)? — Нарисуйте, как бы вы реализовывали Persistent Tree Map.Контакты Кратко о курсе «Multicore programming in Java»: стартует 1 сентября, ведется в режиме вебинаров дважды в неделю (понедельник + четверг) в 19.00–22.00 (по московскому времени), состоит из 16 лекций по 2.5 часа (=40 лекционных часов), рассчитан на Java Middle.Стоимость курса— при оплате до 9 августа — 375$— при оплате до 16 августа — 400$— при оплате до 23 августа — 425$— при оплате до 30 августа — 450$
Приходите ко мне на курс. Учить многопоточность веселее с единомышленниками!
Я занимаюсь онлайн обучением Java. Видеозаписи лекций в аудитории Вы можете увидеть на youtube-канале, возможно, видео канала лучше систематизировано в этой статье.
На все вопросы с удовольствием отвечу по следующим контактам (или в комментариях)skype: GolovachCoursesemail: GolovachCourses@gmail.com