- •Что такое ооп?
- •Что такое «абстракция»?
- •Расскажите про основные понятия ооп: «класс», «объект», «интерфейс».
- •Чем различаются 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?
- •Что такое «шаблон проектирования»?
- •Назовите основные характеристики шаблонов.
- •Типы шаблонов проектирования.
- •Приведите примеры основных шаблонов проектирования.
- •Приведите примеры порождающих шаблонов проектирования.
- •Приведите примеры структурных шаблонов проектирования.
- •Приведите примеры поведенческих шаблонов проектирования.
- •Что такое «антипаттерн»? Какие антипаттерны вы знаете?
Какие существуют модификаторы доступа?
Для описания ограничений доступа используются ключевые слова public , private , protected . Они являются опциональными описателями и дают нам три варианта ограничений доступа плюс четвертый вариант, если не указан не один из этих описателей.
public — означает, что данный элемент доступен без каких-либо ограничений;
private — доступ разрешен только из данного класса;
protected — доступ разрешен из данного класса и из всех классов-потомков, а также из всех классов данного пакета.
без описателя — доступ разрешен из всех классов данного пакета.
Для классов применим только один описатель — public. Кроме того, классы могут не иметь никакого описателя ограничения доступа.
Для полей и методов применимы все 4 варианта ограничения доступа.
О чем говорит ключевое слово final?
В Java есть ключевое слово final - описатель полей, переменных, параметров и методов, которое означает, что их значение не может быть изменено. Поле или переменная с описателем final должны получить значение при описании, параметр просто не может быть изменен внутри тела метода. Также, это слово может применяться к классам. Это означает, что данный класс не может быть унаследован другим классом.
final double pi = 3.14;
Описатель final в сочетании с описателем static позволяют создать константы, т.е. поля, неизменные во всей программе. Так pi логичнее было бы описать так.
static final double pi = 3.14;
Что вы знаете о функции main()?
Метод main() — точка входа в программу. В приложении может быть несколько таких методов. Если метод отсутствует, то компиляция возможна, но при запуске будет получена ошибка `Error: Main method not found`.
public static void main(String[] args) {}
Какие логические операции и операторы вы знаете?
&: Логическое AND (И);
&&: Сокращённое AND;
|: Логическое OR (ИЛИ);
||: Сокращённое OR;
^: Логическое XOR (исключающее OR (ИЛИ));
!: Логическое унарное NOT (НЕ);
&=: AND с присваиванием;
|=: OR с присваиванием;
^=: XOR с присваиванием;
==: Равно;
!=: Не равно;
?:: Тернарный (троичный) условный оператор.
Что такое тернарный оператор выбора?
Тернарный условный оператор ?: - оператор, которым можно заменить некоторые конструкции операторов if-then-else.
Выражение записывается в следующей форме:
условие ? выражение1 : выражение2
Если условие выполняется, то вычисляется выражение1 и его результат становится результатом выполнения всего оператора. Если же условие равно false, то вычисляется выражение2 и его значение становится результатом работы оператора. Оба операнда выражение1 и выражение2 должны возвращать значение одинакового (или совместимого) типа.
Где и для чего используется модификатор abstract?
Класс может представлять собой как бы заготовку или шаблон, в которой часть методов реализована, а часть — нет. В этом случае в описании класса перед словом class должен стоять описатель abstract. Наследниками абстрактного класса могут быть как другие абстрактные классы, так и классы, допускающие создание объектов. Абстрактный класс не может использоваться непосредственно для порождения объектов. Для этого необходимо, используя этот класс как базовый, породить другой класс, в котором нужно определить все абстрактные методы. Тогда можно будет создавать объекты.
Метод тоже может быть абстрактным. Если мы хотим, чтобы класс содержал конкретный метод, но желаем, чтобы фактическая реализация этого метода определялась дочерними классами, вы можете объявить метод в родительском классе как абстрактный.
Пример: В программе для обслуживания банковских операций есть три класса: Person, который описывает человека, Employee, который описывает банковского служащего, и класс Client, который представляет клиента банка. Классы Employee и Client будут производными от класса Person, так как оба класса имеют некоторые общие поля и методы. И так как все объекты будут представлять либо сотрудника, либо клиента банка, то напрямую мы от класса Person создавать объекты не будем. Поэтому имеет смысл сделать его абстрактным.