...

понедельник, 4 августа 2014 г.

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: GolovachCourses

email: GolovachCourses@gmail.com


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий