
- •Что такое ооп?
- •Что такое «абстракция»?
- •Расскажите про основные понятия ооп: «класс», «объект», «интерфейс».
- •Чем различаются jre, jvm и jdk?
- •Какие существуют модификаторы доступа?
- •О чем говорит ключевое слово final?
- •Что вы знаете о функции main()?
- •Какие логические операции и операторы вы знаете?
- •Что такое тернарный оператор выбора?
- •Где и для чего используется модификатор abstract?
- •Дайте определение понятию «интерфейс». Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
- •Чем абстрактный класс отличается от интерфейса? в каких случаях следует использовать абстрактный класс, а в каких интерфейс?
- •Зачем нужны и какие бывают блоки инициализации?
- •Могут ли нестатические методы перегрузить статические?
- •Как получить доступ к переопределенным методам родительского класса?
- •Можно ли объявить метод абстрактным и статическим одновременно?
- •В чем разница между членом экземпляра класса и статическим членом класса?
- •Где разрешена инициализация статических/нестатических полей?
- •Какие типы классов бывают в java?
- •Расскажите про вложенные классы. В каких случаях они применяются?
- •Что такое «статический класс»?
- •Какие существуют особенности использования вложенных классов: статических и внутренних? в чем заключается разница между ними?
- •Что такое «локальный класс»? Каковы его особенности?
- •Что такое «анонимные классы»? Где они применяются?
- •Как работает сборщик мусора?
- •Что такое «пул строк»?
- •Что такое finalize()? Зачем он нужен?
- •Что произойдет со сборщиком мусора, если выполнение метода finalize() требует ощутимо много времени, или в процессе выполнения будет выброшено исключение?
- •Чем отличаются final, finally и finalize()?
- •Расскажите про приведение типов. Что такое понижение и повышение типа?
- •Почему строка является популярным ключом в HashMap в Java?
- •Можно ли использовать строки в конструкции switch?
- •Какая основная разница между String, StringBuffer, StringBuilder?
- •Что такое класс Object? Какие в нем есть методы?
- •Какими свойствами обладает порождаемое equals() отношение эквивалентности?
- •Правила переопределения метода Object.Equals().
- •Могут ли у разных объектов быть одинаковые hashCode()?
- •Опишите иерархию исключений.
- •Какие виды исключений в Java вы знаете, чем они отличаются?
- •Какой оператор позволяет принудительно выбросить исключение?
- •О чем говорит ключевое слово throws?
- •Как написать собственное («пользовательское») исключение?
- •Опишите работу блока try-catch-finally.
- •В чем разница между классами java.Util.Collection и java.Util.Collections?
- •Как поведёт себя коллекция, если вызвать iterator.Remove()?
- •Чем отличается ArrayList от LinkedList? в каких случаях лучше использовать первый, а в каких второй?
- •Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
- •LinkedList — это односвязный, двусвязный или четырехсвязный список?
- •Как устроен HashMap?
- •Что будет, если добавлять элементы в TreeSet по возрастанию?
- •Расскажите о модели памяти Java?
- •Что такое «потокобезопасность»?
- •Чем отличается процесс от потока?
- •Что такое «зелёные потоки» и есть ли они в Java?
- •Каким образом можно создать поток?
- •Чем различаются Thread и Runnable?
- •В чём заключается разница между методами start() и run()?
- •Как принудительно запустить поток?
- •Что такое «монитор» в Java?
- •Дайте определение понятию «синхронизация».
- •Какие существуют способы синхронизации в Java?
- •В каких состояниях может находиться поток?
- •Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?
- •Зачем может быть нужен private мьютекс?
- •Как работают методы wait() и notify()/notifyAll()?
- •В чем разница между notify() и notifyAll()?
- •Для чего используется ключевое слово volatile, synchronized, transient, native?
- •Что значит «приоритет потока»?
- •Почему не рекомендуется использовать метод Thread.Stop()?
- •Что происходит, когда в потоке выбрасывается исключение?
- •Что такое «пул потоков»?
- •Что будет, если очередь пула потоков уже заполнена, но подаётся новая задача?
- •В чём заключается различие между методами submit() и execute() у пула потоков?
- •В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?
- •Чем полезны неизменяемые объекты?
- •Даны 3 потока т1, т2 и т3? Как реализовать выполнение в последовательности т1, т2, т3?
- •Что такое «шаблон проектирования»?
- •Назовите основные характеристики шаблонов.
- •Типы шаблонов проектирования.
- •Приведите примеры основных шаблонов проектирования.
- •Приведите примеры порождающих шаблонов проектирования.
- •Приведите примеры структурных шаблонов проектирования.
- •Приведите примеры поведенческих шаблонов проектирования.
- •Что такое «антипаттерн»? Какие антипаттерны вы знаете?
Какие типы классов бывают в java?
Top level class (Обычный класс):
Abstract class (Абстрактный класс);
Final class (Финализированный класс).
Interfaces (Интерфейс).
Nested class (Вложенный класс):
Static nested class (Статический вложенный класс);
Member inner class (Простой внутренний класс);
Local inner class (Локальный класс);
Anonymous inner class (Анонимный класс).
Расскажите про вложенные классы. В каких случаях они применяются?
Класс называется вложенным (Nested class), если он определен внутри другого класса. Вложенный класс должен создаваться только для того, чтобы обслуживать обрамляющий его класс. Если вложенный класс оказывается полезен в каком-либо ином контексте, он должен стать классом верхнего уровня. Вложенные классы имеют доступ ко всем (в том числе приватным) полям и методам внешнего класса, но не наоборот. Из-за этого разрешения использование вложенных классов приводит к некоторому нарушению инкапсуляции.
Существуют четыре категории вложенных классов:
Статический вложенный класс;
Простой внутренний класс;
Локальный класс;
Анонимный класс.
Такие категории классов, за исключением первого, также называют внутренними (Inner class). Внутренние классы ассоциируются не с внешним классом, а с экземпляром внешнего.
Каждая из категорий имеет рекомендации по своему применению. Если вложенный класс должен быть виден за пределами одного метода или он слишком длинный для того, чтобы его можно было удобно разместить в границах одного метода и если каждому экземпляру такого класса необходима ссылка на включающий его экземпляр, то используется нестатический внутренний класс. В случае, если ссылка на обрамляющий класс не требуется - лучше сделать такой класс статическим. Если класс необходим только внутри какого-то метода и требуется создавать экземпляры этого класса только в этом методе, то используется локальный класс. А, если к тому же применение класса сводится к использованию лишь в одном месте и уже существует тип, характеризующий этот класс, то рекомендуется делать его анонимным классом.
Что такое «статический класс»?
Это вложенный класс, объявленный с использованием ключевого слова static. К классам верхнего уровня модификатор static неприменим.
Какие существуют особенности использования вложенных классов: статических и внутренних? в чем заключается разница между ними?
Вложенные классы могут обращаться ко всем членам обрамляющего класса, в том числе и приватным;
Для создания объекта статического вложенного класса объект внешнего класса не требуется;
Из объекта статического вложенного класса нельзя обращаться к не статическим членам обрамляющего класса напрямую, а только через ссылку на экземпляр внешнего класса.
Обычные вложенные классы не могут содержать статических методов, блоков инициализации и классов. Статические вложенные классы - могут.
В объекте обычного вложенного класса хранится ссылка на объект внешнего класса. Внутри статической такой ссылки нет. Доступ к экземпляру обрамляющего класса осуществляется через указание .this после его имени. Например: Outer.this.