Список вопросов с ответами для собеседования по Java
Этот раздел посвящён вопросам, которые могут быть заданы при прохождении интервью на позицию Java программиста.
Цель — собрать не только вопросы (что-то их очень много в интернете), но и ответы на них в одном месте.
По поводу указания авторства читайте на главной странице раздела Interview
Оглавление:
- Типы данных, переменные, операторы, циклы, массивы
- ООП
- Исключения
- Коллекции
- Строки
- Потоки ввода/вывода
- Потоки выполнения/многопоточность
Java Enterprise Edition: Перейти в раздел вопросы и ответы для интервью по Java EE.
1. Типы данных, переменные, операторы, циклы, массивы (перейти в раздел)
- Сколько ключевых слов зарезервировано языком, что это за слова, какие из них не используются?
- Из каких символов может состоять имя переменной (корректный идентификатор)?
- Что значит слово “инициализация”?
- На какие основные группы можно поделить типы данных?
- Какие примитивные типы вы знаете?
- Что вы знаете о преобразовании примитивных типов данных, есть ли потеря данных, можно ли преобразовать логический тип?
- Какими значениями инициализируются переменные по умолчанию?
- Как передается значение переменной (по ссылке/значению)?
- Что вы знаете о функции main, какие обязательные условия ее определения?
- Какие логические операции и операторы вы знаете?
- В чем разница краткой и полной схемы записи логических операторов?
- Что такое таблица истинности?
- Что такое тернарный оператор выбора?
- Какие унарные и бинарные арифметические операции вы знаете?
- Какие побитовые операции вы знаете?
- Какова роль и правила написания оператора выбора (switch)?
- Какие циклы вы знаете, в чем их отличия?
- Что такое “итерация цикла”?
- Какие параметры имеет цикл for, можно ли их не задать?
- Какой оператор используется для немедленной остановки цикла?
- Какой оператор используется для перехода к следующей итерации цикла?
- Что такое массив?
- Какие виды массивов вы знаете?
- Что вы знаете о классах оболочках?
- Что такое автоупаковка (boxing/unboxing)?
к оглавлению
2. ООП (перейти в раздел)
- Назовите принципы ООП и расскажите о каждом.
- Дайте определение понятию “класс”.
- Что такое поле/атрибут класса?
- Как правильно организовать доступ к полям класса?
- Дайте определение понятию “конструктор”.
- Чем отличаются конструкторы по умолчанию, копирования и конструктор с параметрами?
- Какие модификации уровня доступа вы знаете, расскажите про каждый из них.
- Расскажите об особенностях класса с единственным закрытым (private) конструктором.
- О чем говорят ключевые слова “this”, “super”, где и как их можно использовать?
- Дайте определение понятию “метод”.
- Что такое сигнатура метода?
- Какие методы называются перегруженными?
- Могут ли нестатические методы перегрузить статические?
- Расскажите про переопределение методов.
- Может ли метод принимать разное количество параметров (аргументы переменной длины)?
- Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
- Как получить доступ к переопределенным методам родительского класса?
- Какие преобразования называются нисходящими и восходящими?
- Чем отличается переопределение от перегрузки?
- Где можно инициализировать статические/нестатические поля?
- Зачем нужен оператор instanceof?
- Зачем нужны и какие бывают блоки инициализации?
- Каков порядок вызова конструкторов и блоков инициализации двух классов: потомка и его предка?
- Где и для чего используется модификатор abstract?
- Можно ли объявить метод абстрактным и статическим одновременно?
- Что означает ключевое слово static?
- К каким конструкциям Java применим модификатор static?
- Что будет, если в static блоке кода возникнет исключительная ситуация?
- Можно ли перегрузить static метод?
- Что такое статический класс, какие особенности его использования?
- Какие особенности инициализации final static переменных?
- Как влияет модификатор static на класс/метод/поле?
- О чем говорит ключевое слово final?
- Дайте определение понятию “интерфейс”.
- Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
- Почему нельзя объявить метод интерфейса с модификатором final или static?
- Какие типы классов бывают в java (вложенные… и.т.д.)
- Какие особенности создания вложенных классов: простых и статических.
- Что вы знаете о вложенных классах, зачем они используются? Классификация, варианты использования, о нарушении инкапсуляции.
- В чем разница вложенных и внутренних классов?
- Какие классы называются анонимными?
- Каким образом из вложенного класса получить доступ к полю внешнего класса?
- Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
- Как связан любой пользовательский класс с классом Object?
- Расскажите про каждый из методов класса Object.
- Что такое метод equals(). Чем он отличается от операции ==.
- Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
- Если equals() переопределен, есть ли какие-либо другие методы, которые следует переопределить?
- В чем особенность работы методов hashCode и equals? Каким образом реализованы методы hashCode и equals в классе Object? Какие правила и соглашения существуют для реализации этих методов? Когда они применяются?
- Какой метод возвращает строковое представление объекта?
- Что будет, если переопределить equals не переопределяя hashCode? Какие могут возникнуть проблемы?
- Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode?
- Как вы думаете, будут ли какие-то проблемы, если у объекта, который используется в качестве ключа в hashMap изменится поле, которое участвует в определении hashCode?
- Чем отличается абстрактный класс от интерфейса, в каких случаях что вы будете использовать?
- Можно ли получить доступ к private переменным класса и если да, то каким образом?
- Что такое volatile и transient? Для чего и в каких случаях можно было бы использовать default?
- Расширение модификаторов при наследовании, переопределении и сокрытии методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость? А если protected? А сузить видимость?
- Имеет ли смысл объявлять метод private final?
- Какие особенности инициализации final переменных?
- Что будет, если единственный конструктор класса объявлен как final?
- Что такое finalize? Зачем он нужен? Что Вы можете рассказать о сборщике мусора и алгоритмах его работы.
- Почему метод clone объявлен как protected? Что необходимо для реализации клонирования?
- Знакомы ли Вам какие-либо паттерны проектирования?
- Напишите Singleton… А с ленивой загрузкой. А если он должен быть потоко-безопасным? А в каких случаях ленивая загрузка хуже?
- Что можете сказать про MVC? Нарисуйте диаграмму и объясните, как MVC работает.
- Напишите функцию вычисления факториала.
- Дана функция вычисления чисел Фибоначчи, известно, что она работает. Найдите логическую ошибку. Оцените сложность получившегося алгоритма.
к оглавлению
3. Исключения (перейти в раздел)
- Дайте определение понятию “исключение”
- Какова иерархия исключений.
- Можно/нужно ли обрабатывать ошибки jvm?
- Какие существуют способы обработки исключений?
- О чем говорит ключевое слово throws?
- В чем особенность блока finally? Всегда ли он исполняется?
- Может ли не быть ни одного блока catch при отлавливании исключений?
- Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
- Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?
- Что вы знаете об обрабатываемых и не обрабатываемых (checked/unchecked) исключениях?
- В чем особенность RuntimeException?
- Как написать собственное (“пользовательское”) исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?
- Какой оператор позволяет принудительно выбросить исключение?
- Есть ли дополнительные условия к методу, который потенциально может выбросить исключение?
- Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
- Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”?
- Что вы знаете о OutOfMemoryError?
- Что вы знаете о SQLException? К какому типу checked или unchecked оно относится, почему?
- Что такое Error? В каком случае используется Error. Приведите пример Error’а.
- Какая конструкция используется в Java для обработки исключений?
- Предположим, есть блок try-finally. В блоке try возникло исключение и выполнение переместилось в блок finally. В блоке finally тоже возникло исключение. Какое из двух исключений “выпадет” из блока try-finally? Что случится со вторым исключением?
- Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
к оглавлению
4. Коллекции (перейти в раздел)
- Дайте определение понятию “коллекция”.
- Назовите преимущества использования коллекций.
- Какие данные могут хранить коллекции?
- Какова иерархия коллекций?
- Что вы знаете о коллекциях типа List?
- Что вы знаете о коллекциях типа Set?
- Что вы знаете о коллекциях типа Queue?
- Что вы знаете о коллекциях типа Map, в чем их принципиальное отличие?
- Назовите основные реализации List, Set, Map.
- Какие реализации SortedSet вы знаете и в чем их особенность?
- В чем отличия/сходства List и Set?
- Что разного/общего у классов ArrayList и LinkedList, когда лучше использовать ArrayList, а когда LinkedList?
- В каких случаях разумно использовать массив, а не ArrayList?
- Чем отличается ArrayList от Vector?
- Что вы знаете о реализации классов HashSet и TreeSet?
- Чем отличаются HashMap и TreeMap? Как они устроены и работают? Что со временем доступа к объектам, какие зависимости?
- Что такое Hashtable, чем она отличается от HashMap? На сегодняшний день она deprecated, как все-таки использовать нужную функциональность?
- Что будет, если в Map положить два значения с одинаковым ключом?
- Как задается порядок следования объектов в коллекции, как отсортировать коллекцию?
- Дайте определение понятию “итератор”.
- Какую функциональность представляет класс Collections?
- Как получить не модифицируемую коллекцию?
- Какие коллекции синхронизированы?
- Как получить синхронизированную коллекцию из не синхронизированной?
- Как получить коллекцию только для чтения?
- Почему Map не наследуется от Collection?
- В чем разница между Iterator и Enumeration?
- Как реализован цикл foreach?
- Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?
- Почему в классе iterator нет метода для получения следующего элемента без передвижения курсора?
- В чем разница между Iterator и ListIterator?
- Какие есть способы перебора всех элементов List?
- В чем разница между fail-safe и fail-fast свойствами?
- Что делать, чтобы не возникло исключение ConcurrentModificationException?
- Что такое стек и очередь, расскажите в чем их отличия?
- В чем разница между интерфейсами Comparable и Comparator?
- Почему коллекции не наследуют интерфейсы Cloneable и Serializable?
к оглавлению
5. Строки (перейти в раздел)
- Какие “строковые” классы вы знаете?
- Какие основные свойства “строковых” классов (их особенности)?
- Можно ли наследовать строковый тип, почему?
- Дайте определение понятию конкатенация строк.
- Как преобразовать строку в число?
- Как сравнить значение двух строк?
- Как перевернуть строку?
- Как работает сравнение двух строк?
- Как обрезать пробелы в конце строки?
- Как заменить символ в строке?
- Как получить часть строки?
- Дайте определение понятию “пул строк”.
- Какой метод позволяет выделить подстроку в строке?
- Как разбить строку на подстроки по заданному разделителю?
- Какой метод вызывается для преобразования переменной в строку?
- Как узнать значение конкретного символа строки, зная его порядковый номер в строке?
- Как найти необходимый символ в строке?
- Можно ли синхронизировать доступ к строке?
- Что делает метод intern()?
- Чем отличаются и что общего у классов String, StringBuffer и StringBuilder?
- Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?
- Почему строка неизменная и финализированная в Java?
- Почему массив символов предпочтительнее строки для хранения пароля?
- Почему строка является популярным ключом в HashMap в Java?
- Напишите метод удаления данного символа из строки.
к оглавлению
6. Потоки ввода/вывода (перейти в раздел)
- Какие существуют виды потоков ввода/вывода?
- Назовите основные предки потоков ввода/вывода.
- Что общего и чем отличаются следующие потоки: InputStream, OutputStream, Reader, Writer?
- Что вы знаете о RandomAccessFile?
- Какие есть режимы доступа к файлу?
- В каких пакетах лежат классы-потоки?
- Что вы знаете о классах-надстройках?
- Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
- Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
- Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
- Какой класс предназначен для работы с элементами файловой системы (ЭФС)?
- Какой символ является разделителем при указании пути к ЭФС?
- Как выбрать все ЭФС определенного каталога по критерию (например, с определенным расширением)?
- Что вы знаете об интерфейсе FilenameFilter?
- Что такое сериализация?
- Какие условия “благополучной” сериализации объекта?
- Какие классы позволяют архивировать объекты?
к оглавлению
7. Потоки выполнения/многопоточность (перейти в раздел)
- Дайте определение понятию “процесс”.
- Дайте определение понятию “поток”.
- Дайте определение понятию “синхронизация потоков”.
- Как взаимодействуют программы, процессы и потоки?
- В каких случаях целесообразно создавать несколько потоков?
- Что может произойти если два потока будут выполнять один и тот же код в программе?
- Что вы знаете о главном потоке программы?
- Какие есть способы создания и запуска потоков?
- Какой метод запускает поток на выполнение?
- Какой метод описывает действие потока во время выполнения?
- Когда поток завершает свое выполнение?
- Как синхронизировать метод?
- Как принудительно остановить поток?
- Дайте определение понятию “поток-демон”.
- Как создать поток-демон?
- Как получить текущий поток?
- Дайте определение понятию “монитор”.
- Как приостановить выполнение потока?
- В каких состояниях может пребывать поток?
- Что является монитором при вызове нестатического и статического метода?
- Что является монитором при выполнении участка кода метода?
- Какие методы позволяют синхронизировать выполнение потоков?
- Какой метод переводит поток в режим ожидания?
- Какова функциональность методов notify и notifyAll?
- Что позволяет сделать метод join?
- Каковы условия вызова метода wait/notify?
- Дайте определение понятию “взаимная блокировка”.
- Чем отличаются методы interrupt, interrupted, isInterrupted?
- В каком случае будет выброшено исключение InterruptedException, какие методы могут его выбросить?
- Модификаторы volatile и метод yield().
- Пакет java.util.concurrent
- Есть некоторый метод, который исполняет операцию i++. Переменная i типа int. Предполагается, что код будет исполнятся в многопоточной среде. Следует ли синхронизировать блок?
- Что используется в качестве mutex, если метод объявлен static synchronized? Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?
- Предположим в методе run возник RuntimeException, который не был пойман. Что случится с потоком? Есть ли способ узнать о том, что Exception произошел (не заключая все тело run в блок try-catch)? Есть ли способ восстановить работу потока после того как это произошло?
- Какие стандартные инструменты Java вы бы использовали для реализации пула потоков?
- Что такое ThreadGroup и зачем он нужен?
- Что такое ThreadPool и зачем он нужен?
- Что такое ThreadPoolExecutor и зачем он нужен?
- Что такое «атомарные типы» в Java?
- Зачем нужен класс ThreadLocal?
- Что такое Executor?
- Что такое ExecutorService?
- Зачем нужен ScheduledExecutorService?
к оглавлению
Этот список из 300+ вопросов (без ответов) был найден на сайте http://becomejavasenior.com/ . Там же указаны другие авторы.
225 246454 Total Views 15 Views Today