- ООП
- Java Core
- Java Collections Framework
- Java 8
- Потоки ввода-вывода в Java
- Сериализация
- Многопоточность
- Шаблоны проектирования
- Журналирование
- XML
- [Design principles] (#design-principles)
- [Git] (#git)
- [TestNG] (#testng)
- [Appium] (#appium)
- [Jenkins] (#jenkins)
- [Maven / Gradle] (#maven-gradle)
- Что такое ООП?
- Назовите основные принципы ООП.
- Что такое «инкапсуляция»?
- Что такое «наследование»?
- Что такое «полиморфизм»?
- Что такое «абстракция»?
- Что представляет собой «обмен сообщениями»?
- Расскажите про основные понятия ООП: «класс», «объект», «интерфейс».
- В чем заключаются преимущества и недостатки объектно-ориентированного подхода в программировании?
- Что подразумевают в плане принципов ООП выражения «является» и «имеет»?
- В чем разница между композицией и агрегацией?
- Что такое статическое и динамическое связывание?
- Чем различаются JRE, JVM и JDK?
- Какие существуют модификаторы доступа?
- О чем говорит ключевое слово
final? - Какими значениями инициализируются переменные по умолчанию?
- Что вы знаете о функции
main()? - Какие логические операции и операторы вы знаете?
- Что такое тернарный оператор выбора?
- Какие побитовые операции вы знаете?
- Где и для чего используется модификатор
abstract? - Дайте определение понятию «интерфейс». Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
- Чем абстрактный класс отличается от интерфейса? В каких случаях следует использовать абстрактный класс, а в каких интерфейс?
- Почему в некоторых интерфейсах вообще не определяют методов?
- Почему нельзя объявить метод интерфейса с модификатором
final? - Что имеет более высокий уровень абстракции - класс, абстрактный класс или интерфейс?
- Может ли объект получить доступ к
private-переменной класса? Если, да, то каким образом? - Каков порядок вызова конструкторов и блоков инициализации с учётом иерархии классов?
- Зачем нужны и какие бывают блоки инициализации?
- К каким конструкциям Java применим модификатор
static? - Для чего в Java используются статические блоки инициализации?
- Что произойдёт, если в блоке инициализации возникнет исключительная ситуация?
- Какое исключение выбрасывается при возникновении ошибки в блоке инициализации класса?
- Может ли статический метод быть переопределён или перегружен?
- Могут ли нестатические методы перегрузить статические?
- Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
- Возможно ли при переопределении метода изменить: модификатор доступа; возвращаемый тип; тип аргумента или их количество; имена аргументов или их порядок, убирать, добавлять, изменять порядок следования элементов секции
throws? - Как получить доступ к переопределенным методам родительского класса?
- Можно ли объявить метод абстрактным и статическим одновременно?
- В чем разница между членом экземпляра класса и статическим членом класса?
- Где разрешена инициализация статических/нестатических полей?
- Какие типы классов бывают в java?
- Расскажите про вложенные классы. В каких случаях они применяются?
- Что такое «статический класс»?
- Какие существуют особенности использования вложенных классов: статических и внутренних? В чем заключается разница между ними?
- Что такое «локальный класс»? Каковы его особенности?
- Что такое «анонимные классы»? Где они применяются?
- Каким образом из вложенного класса получить доступ к полю внешнего класса?
- Для чего используется оператор
assert? - Для чего нужен сборщик мусора?
- Как работает сборщик мусора?
- Какие разновидности сборщиков мусора реализованы в виртуальной машине HotSpot?
- Опишите алгоритм работы какого-нибудь сборщика мусора реализованного в виртуальной машине HotSpot.
- Что такое
finalize()? Зачем он нужен? - Что произойдет со сборщиком мусора, если выполнение метода
finalize()требует ощутимо много времени, или в процессе выполнения будет выброшено исключение? - Чем отличаются
final,finallyиfinalize()? - Что такое Heap и Stack память в Java? Какая разница между ними?
- Верно ли утверждение, что примитивные типы данных всегда хранятся в стеке, а экземпляры ссылочных типов данных в куче?
- Каким образом передаются переменные в методы, по значению или по ссылке?
- Расскажите про приведение типов. Что такое понижение и повышение типа?
- Когда в приложении может быть выброшено исключение
ClassCastException? - Что такое литералы?
- Что такое autoboxing («автоупаковка») в Java и каковы правила упаковки примитивных типов в классы-обертки?
- Какие есть особенности класса
String? - Что такое «пул строк»?
- Почему
Stringнеизменяемый и финализированный класс? - Почему
char[]предпочтительнееStringдля хранения пароля? - Почему строка является популярным ключом в
HashMapв Java? - Что делает метод
intern()в классеString?. - Можно ли использовать строки в конструкции
switch? - Какая основная разница между
String,StringBuffer,StringBuilder? - Что такое класс
Object? Какие в нем есть методы? - Расскажите про клонирование объектов.
- В чем отличие между поверхностным и глубоким клонированием?
- Какой способ клонирования предпочтительней?
- Почему метод
clone()объявлен в классеObject, а не в интерфейсеCloneable? - Дайте определение понятию «конструктор».
- Что такое «конструктор по умолчанию»?
- Чем отличаются конструкторы по-умолчанию, копирования и конструктор с параметрами?
- Где и как вы можете использовать закрытый конструктор?
- Расскажите про классы-загрузчики и про динамическую загрузку классов.
- Что такое Reflection?
- Зачем нужен
equals(). Чем он отличается от операции==? equals()порождает отношение эквивалентности. Какими свойствами обладает такое отношение?- Если вы хотите переопределить
equals(), какие условия должны удовлетворяться для переопределенного метода? - Правила переопределения метода
Object.equals(). - Какая связь между
hashCode()иequals()? - Если
equals()переопределен, есть ли какие-либо другие методы, которые следует переопределить? - Что будет, если переопределить
equals()не переопределяяhashCode()? Какие могут возникнуть проблемы? - Каким образом реализованы методы
hashCode()иequals()в классеObject? - Для чего нужен метод
hashCode()? - Правила переопределения метода
Object.hashCode(). - Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете
hashCode()? - Могут ли у разных объектов быть одинаковые
hashCode()? - Если у класса
Point{int x, y;}реализовать методequals(Object that) {(return this.x == that.x && this.y == that.y)}, но сделать хэш-код в видеint hashCode() {return x;}, то будут ли корректно такие точки помещаться и извлекаться изHashSet? - Могут ли у разных объектов
(ref0 != ref1)бытьref0.equals(ref1) == true? - Могут ли у разных ссылок на один объект
(ref0 == ref1)бытьref0.equals(ref1) == false? - Можно ли так реализовать метод
equals(Object that) {return this.hashCode() == that.hashCode()}? - В
equals()требуется проверять, что аргументequals(Object that)такого же типа что и сам объект. В чем разница междуthis.getClass() == that.getClass()иthat instanceof MyClass? - Можно ли реализовать метод
equals()классаMyClassвот так:class MyClass {public boolean equals(MyClass that) {return this == that;}}? - Есть класс
Point{int x, y;}. Почему хэш-код в виде31 * x + yпредпочтительнее чемx + y? - Опишите иерархию исключений.
- Какие виды исключений в Java вы знаете, чем они отличаются?
- Что такое checked и unchecked exception?
- Какой оператор позволяет принудительно выбросить исключение?
- О чем говорит ключевое слово
throws? - Как написать собственное («пользовательское») исключение?
- Какие существуют unchecked exception?
- Что такое
Error? - Что вы знаете о
OutOfMemoryError? - Опишите работу блока try-catch-finally.
- Что такое механизм try-with-resources?
- Возможно ли использование блока try-finally (без
catch)? - Может ли один блок
catchотлавливать сразу несколько исключений? - Всегда ли исполняется блок
finally? - Существуют ли ситуации, когда блок
finallyне будет выполнен? - Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
- Предположим, есть метод, который может выбросить
IOExceptionиFileNotFoundExceptionв какой последовательности должны идти блокиcatch? Сколько блоковcatchбудет выполнено? - Что такое generics?
- Что такое «интернационализация», «локализация»?
- Что такое «коллекция»?
- Назовите основные интерфейсы JCF и их реализации.
- Расположите в виде иерархии следующие интерфейсы:
List,Set,Map,SortedSet,SortedMap,Collection,Iterable,Iterator,NavigableSet,NavigableMap. - Почему
Map— это неCollection, в то время какListиSetявляютсяCollection? - В чем разница между классами
java.util.Collectionиjava.util.Collections? - Что такое «fail-fast поведение»?
- Какая разница между fail-fast и fail-safe?
- Приведите примеры итераторов реализующих поведение fail-safe
- Чем различаются
EnumerationиIterator. - Как между собой связаны
IterableиIterator? - Как между собой связаны
Iterable,Iteratorи «for-each»? - Сравните
IteratorиListIterator. - Что произойдет при вызове
Iterator.next()без предварительного вызоваIterator.hasNext()? - Сколько элементов будет пропущено, если
Iterator.next()будет вызван после 10-ти вызововIterator.hasNext()? - Как поведёт себя коллекция, если вызвать
iterator.remove()? - Как поведёт себя уже инстанциированный итератор для
collection, если вызватьcollection.remove()? - Как избежать
ConcurrentModificationExceptionво время перебора коллекции? - Какая коллекция реализует дисциплину обслуживания FIFO?
- Какая коллекция реализует дисциплину обслуживания FILO?
- Чем отличается
ArrayListотVector? - Зачем добавили
ArrayList, если уже былVector? - Чем отличается
ArrayListотLinkedList? В каких случаях лучше использовать первый, а в каких второй? - Что работает быстрее
ArrayListилиLinkedList? - Какое худшее время работы метода
contains()для элемента, который есть вLinkedList? - Какое худшее время работы метода
contains()для элемента, который есть вArrayList? - Какое худшее время работы метода
add()дляLinkedList? - Какое худшее время работы метода
add()дляArrayList? - Необходимо добавить 1 млн. элементов, какую структуру вы используете?
- Как происходит удаление элементов из
ArrayList? Как меняется в этом случае размерArrayList? - Предложите эффективный алгоритм удаления нескольких рядом стоящих элементов из середины списка, реализуемого
ArrayList. - Сколько необходимо дополнительной памяти при вызове
ArrayList.add()? - Сколько выделяется дополнительно памяти при вызове
LinkedList.add()? - Оцените количество памяти на хранение одного примитива типа
byteвLinkedList? - Оцените количество памяти на хранение одного примитива типа
byteвArrayList? - Для
ArrayListили дляLinkedListоперация добавления элемента в середину (list.add(list.size()/2, newElement)) медленнее? - В реализации класса
ArrayListесть следующие поля:Object[] elementData,int size. Объясните, зачем хранить отдельноsize, если всегда можно взятьelementData.length? - Сравните интерфейсы
QueueиDeque. - Кто кого расширяет:
QueueрасширяетDeque, илиDequeрасширяетQueue? - Почему
LinkedListреализует иList, иDeque? LinkedList— это односвязный, двусвязный или четырехсвязный список?- Как перебрать элементы
LinkedListв обратном порядке, не используя медленныйget(index)? - Что позволяет сделать
PriorityQueue? Stackсчитается «устаревшим». Чем его рекомендуют заменять? Почему?- Зачем нужен
HashMap, если естьHashtable? - В чем разница между
HashMapиIdentityHashMap? Для чего нужнаIdentityHashMap? - В чем разница между
HashMapиWeakHashMap? Для чего используетсяWeakHashMap? - В
WeakHashMapиспользуются WeakReferences. А почему бы не создатьSoftHashMapна SoftReferences? - В
WeakHashMapиспользуются WeakReferences. А почему бы не создатьPhantomHashMapна PhantomReferences? LinkedHashMap- что в нем отLinkedList, а что отHashMap?- В чем проявляется «сортированность»
SortedMap, кроме того, чтоtoString()выводит все элементы по порядку? - Как устроен
HashMap? - Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресации и на основе метода цепочек. Как реализована
HashMap? Почему, по вашему мнению, была выбрана именно эта реализация? В чем плюсы и минусы каждого подхода? - Как работает
HashMapпри попытке сохранить в него два элемента по ключам с одинаковымhashCode(), но для которыхequals() == false? - Какое начальное количество корзин в
HashMap? - Какова оценка временной сложности операций над элементами из
HashMap? Гарантирует лиHashMapуказанную сложность выборки элемента? - Возможна ли ситуация, когда
HashMapвыродится в список даже с ключами имеющими разныеhashCode()? - В каком случае может быть потерян элемент в
HashMap? - Почему нельзя использовать
byte[]в качестве ключа вHashMap? - Какова роль
equals()иhashCode()вHashMap? - Каково максимальное число значений
hashCode()? - Какое худшее время работы метода get(key) для ключа, которого нет в
HashMap? - Какое худшее время работы метода get(key) для ключа, который есть в
HashMap? - Сколько переходов происходит в момент вызова
HashMap.get(key)по ключу, который есть в таблице? - Сколько создается новых объектов, когда вы добавляете новый элемент в
HashMap? - Как и когда происходит увеличение количества корзин в
HashMap? - Объясните смысл параметров в конструкторе
HashMap(int initialCapacity, float loadFactor). - Будет ли работать
HashMap, если все добавляемые ключи будут иметь одинаковыйhashCode()? - Как перебрать все ключи
Map? - Как перебрать все значения
Map? - Как перебрать все пары «ключ-значение» в
Map? - В чем отличия
TreeSetиHashSet? - Что будет, если добавлять элементы в
TreeSetпо возрастанию? - Чем
LinkedHashSetотличается отHashSet? - Для
Enumесть специальный классjava.util.EnumSet. Зачем? Чем авторов не устраивалHashSetилиTreeSet? - Какие существуют способы перебирать элементы списка?
- Каким образом можно получить синхронизированные объекты стандартных коллекций?
- Как получить коллекцию только для чтения?
- Напишите однопоточную программу, которая заставляет коллекцию выбросить
ConcurrentModificationException. - Приведите пример, когда какая-либо коллекция выбрасывает
UnsupportedOperationException. - Реализуйте симметрическую разность двух коллекций используя методы
Collection(addAll(...),removeAll(...),retainAll(...)). - Как, используя LinkedHashMap, сделать кэш c «invalidation policy»?
- Как одной строчкой скопировать элементы любой
collectionв массив? - Как одним вызовом из
ListполучитьListсо всеми элементами, кроме первых и последних 3-х? - Как одной строчкой преобразовать
HashSetвArrayList? - Как одной строчкой преобразовать
ArrayListвHashSet? - Сделайте
HashSetиз ключейHashMap. - Сделайте
HashMapизHashSet<Map.Entry<K, V>>.
- В чём заключается разница между IO и NIO?
- Какие особенности NIO вы знаете?
- Что такое «каналы»?
- Какие существуют виды потоков ввода/вывода?
- Назовите основные классы потоков ввода/вывода.
- В каких пакетах расположены классы потоков ввода/вывода?
- Какие подклассы класса
InputStreamвы знаете, для чего они предназначены? - Для чего используется
PushbackInputStream? - Для чего используется
SequenceInputStream? - Какой класс позволяет читать данные из входного байтового потока в формате примитивных типов данных?
- Какие подклассы класса
OutputStreamвы знаете, для чего они предназначены? - Какие подклассы класса
Readerвы знаете, для чего они предназначены? - Какие подклассы класса
Writerвы знаете, для чего они предназначены? - В чем отличие класса
PrintWriterотPrintStream? - Чем отличаются и что общего у
InputStream,OutputStream,Reader,Writer? - Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
- Какие классы позволяют ускорить чтение/запись за счет использования буфера?
- Какой класс предназначен для работы с элементами файловой системы?
- Какие методы класса
Fileвы знаете? - Что вы знаете об интерфейсе
FileFilter? - Как выбрать все элементы определенного каталога по критерию (например, с определенным расширением)?
- Что вы знаете о
RandomAccessFile? - Какие режимы доступа к файлу есть у
RandomAccessFile? - Какие классы поддерживают чтение и запись потоков в компрессированном формате?
- Существует ли возможность перенаправить потоки стандартного ввода/вывода?
- Какой символ является разделителем при указании пути в файловой системе?
- Что такое «абсолютный путь» и «относительный путь»?
- Что такое «символьная ссылка»?
- Что такое «сериализация»?
- Опишите процесс сериализации/десериализации с использованием
Serializable. - Как изменить стандартное поведение сериализации/десериализации?
- Как исключить поля из сериализации?
- Что обозначает ключевое слово
transient? - Какое влияние оказывают на сериализуемость модификаторы полей
staticиfinal - Как не допустить сериализацию?
- Как создать собственный протокол сериализации?
- Какая роль поля
serialVersionUIDв сериализации? - Когда стоит изменять значение поля
serialVersionUID? - В чем проблема сериализации Singleton?
- Какие существуют способы контроля за значениями десериализованного объекта
- Расскажите о модели памяти Java?
- Что такое «потокобезопасность»?
- В чём разница между «конкуренцией» и «параллелизмом»?
- Что такое «кооперативная многозадачность»? Какой тип многозадачности использует Java? Чем обусловлен этот выбор?
- Что такое ordering, as-if-serial semantics, sequential consistency, visibility, atomicity, happens-before, mutual exclusion, safe publication?
- Чем отличается процесс от потока?
- Что такое «зелёные потоки» и есть ли они в Java?
- Каким образом можно создать поток?
- Чем различаются
ThreadиRunnable? - В чём заключается разница между методами
start()иrun()? - Как принудительно запустить поток?
- Что такое «монитор» в Java?
- Дайте определение понятию «синхронизация».
- Какие существуют способы синхронизации в Java?
- В каких состояниях может находиться поток?
- Можно ли создавать новые экземпляры класса, пока выполняется
static synchronizedметод? - Зачем может быть нужен
privateмьютекс? - Как работают методы
wait()иnotify()/notifyAll()? - В чем разница между
notify()иnotifyAll()? - Почему методы
wait()иnotify()вызываются только в синхронизированном блоке? - Чем отличается работа метода
wait()с параметром и без параметра? - Чем отличаются методы
Thread.sleep()иThread.yield()? - Как работает метод
Thread.join()? - Что такое deadlock?
- Что такое livelock?
- Как проверить, удерживает ли поток монитор определённого ресурса?
- На каком объекте происходит синхронизация при вызове
static synchronizedметода? - Для чего используется ключевое слово
volatile,synchronized,transient,native? - В чём различия между
volatileи Atomic переменными? - В чём заключаются различия между
java.util.concurrent.Atomic*.compareAndSwap()иjava.util.concurrent.Atomic*.weakCompareAndSwap(). - Что значит «приоритет потока»?
- Что такое «потоки-демоны»?
- Можно ли сделать основной поток программы демоном?
- Что значит «усыпить» поток?
- Чем отличаются два интерфейса
RunnableиCallable? - Что такое
FutureTask? - В чем заключаются различия между
CyclicBarrierиCountDownLatch? - Что такое race condition?
- Существует ли способ решения проблемы race condition?
- Как остановить поток?
- Почему не рекомендуется использовать метод
Thread.stop()? - Что происходит, когда в потоке выбрасывается исключение?
- В чем разница между
interrupted()иisInterrupted()? - Что такое «пул потоков»?
- Какого размера должен быть пул потоков?
- Что будет, если очередь пула потоков уже заполнена, но подаётся новая задача?
- В чём заключается различие между методами
submit()иexecute()у пула потоков? - В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?
- Как поделиться данными между двумя потоками?
- Какой параметр запуска JVM используется для контроля размера стека потока?
- Как получить дамп потока?
- Что такое ThreadLocal-переменная?
- Назовите различия между
synchronizedиReentrantLock? - Что такое
ReadWriteLock? - Что такое «блокирующий метод»?
- Что такое «фреймворк Fork/Join»?
- Что такое
Semaphore? - Что такое double checked locking Singleton?
- Как создать потокобезопасный Singleton?
- Чем полезны неизменяемые объекты?
- Что такое busy spin?
- Перечислите принципы, которым вы следуете в многопоточном программировании?
- Какое из следующих утверждений о потоках неверно?
- Даны 3 потока Т1, Т2 и Т3? Как реализовать выполнение в последовательности Т1, Т2, Т3?
- Напишите минимальный неблокирующий стек (всего два метода —
push()иpop()). - Напишите минимальный неблокирующий стек (всего два метода —
push()иpop()) с использованиемSemaphore. - Напишите минимальный неблокирующий ArrayList (всего четыре метода —
add(),get(),remove(),size()). - Напишите потокобезопасную реализацию класса с неблокирующим методом
BigInteger next(), который возвращает элементы последовательности:[1, 2, 4, 8, 16, ...]. - Напишите простейший многопоточный ограниченный буфер с использованием
synchronized. - Напишите простейший многопоточный ограниченный буфер с использованием
ReentrantLock.
- Что такое XML?
- Что такое DTD?
- Чем well-formed XML отличается от valid XML?
- Что такое «пространство имен» в XML?
- Что такое XSD? В чём его преимущества перед XML DTD?
- Какие типы существуют в XSD?
- Какие вы знаете методы чтения XML? Опишите сильные и слабые стороны каждого метода.
- Когда следует использовать DOM, а когда SAX, StAX анализаторы??
- Какие вы знаете способы записи XML?
- Что такое JAXP?
- Что такое XSLT?
- Что такое «шаблон проектирования»?
- Назовите основные характеристики шаблонов.
- Типы шаблонов проектирования.
- Приведите примеры основных шаблонов проектирования.
- Приведите примеры порождающих шаблонов проектирования.
- Приведите примеры структурных шаблонов проектирования.
- Приведите примеры поведенческих шаблонов проектирования.
- Что такое «антипаттерн»? Какие антипаттерны вы знаете?
- Что такое Dependency Injection?