Ты не поверишь, какой ценный материал мне частенько подкидывают начинающие разработчики.
Один из таких — огромный список вопросов по Java, которые можно услышать на собеседовании, причем для всех уровней, Junior/Middle/Senior. Подтверждаю — мне частенько задавали эти вопросы, да и я сам, в роли интервьюера, их задавал.
Так как я часто о похожем списке говорил, то решил поделиться с тобой. Вряд ли ты на просторах рунета найдешь более полный и подробный вариант.
Большое спасибо моему ученику @Alexander Metelchenko за предоставленный список.
Кстати, приличную часть этих вопросов покрывает email-курс JavaRanger и JavaEEHunter. Так же, это отличный инструмент проверить свои знания по JavaSE/EE, SQL и web.
Знаешь чем можно расширить этот список? Пиши в комментариях — я добавлю.
Интенсив Современная Java с Senior Разработчиками в эту субботу 28 января. Регистрируйся.
Оглавление:
- Типы данных, переменные, операторы, циклы, массивы
- ООП
- Исключения
- Коллекции
- Строки
- Потоки ввода/вывода
- Потоки выполнения
- SQL, JDBC
- JSP
- Servlet
- Web
Типы данных, переменные, операторы, циклы, массивы
- Сколько ключевых слов зарезервировано языком, что это за слова, какие из них не используются?
- Из каких символов может состоять имя переменной (корректный идентификатор)?
- Что значит слово «инициализация»?
- На какие основные группы можно поделить типы данных?
- Какие примитивные типы вы знаете? Назовите размерность в байтах для каждого типа.
- Что вы знаете о преобразовании примитивных типов данных, есть ли потеря данных, можно ли преобразовать логический тип?
- Какими значениями инициализируются переменные по умолчанию?
- Как передается значение переменной (по ссылке/значению)?
- Что вы знаете о функции main, какие обязательные условия ее определения?
- Какие логические операции и операторы вы знаете?
- В чем разница краткой и полной схемы записи логических операторов?
- Что такое таблица истинности?
- Что такое тернарный оператор выбора?
- Какие унарные операции вы знаете?
- Какая арифметическая операция выполняется при побитовом сдвиге вправо/влево?
- Какова роль и правила написания оператора выбора?
- Какие циклы вы знаете, в чем их отличия?
- Что такое «итерация цикла»?
- Какие параметры имеет цикл for, можно ли их не задать?
- Какой оператор используется для немедленной остановки цикла?
- Какой оператор используется для перехода к следующей итерации цикла?
- Что такое массив?
- Какие виды массивов вы знаете?
- Что вы знаете о классах оболочках?
- Что такое автоупаковка (boxing/unboxing)?
ООП (оглавление)
- Назовите принципы ООП и расскажите о каждом.
- Дайте определение понятию «класс».
- Что такое поле/атрибут класса?
- Как правильно организовать доступ к полям класса?
- Дайте определение понятию «конструктор».
- Чем отличаются конструкторы по-умолчанию, копирования и конструктор с параметрами?
- Какие модификации уровня доступа вы знаете, расскажите про каждый из них.
- Расскажите об особенностях класса с единственным закрытым (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?
- Контексты использования модификаторов (класс/поле/метод)
- Какой из модификаторов более строгий: protected или package-private?
- Расширение модификаторов при наследовании, переопределение и сокрытие методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость? А если protected? А сузить видимость?
- Модификатор abstract и final для классов/методов
- Имеет ли смысл объявлять метод private final?
- Какие особенности инициализации final переменных?
- Что будет, если единственный конструктор класса объявлен как final?
- Расширение/сужение типов в аргументах переопределяемых методов в случае, если бы в Java список формальных параметров не входил бы в сигнатуру метода.
- Что такое finalize? Зачем он нужен? Что Вы можете рассказать о сборщике мусора и алгоритмах его работы.
- Почему метод clone объявлен как protected? Что необходимо для реализации клонирования?
- Знакомы ли Вам какие-либо паттерны проектирования?
- Напишите Singleton… А с ленивой загрузкой. А если он должен быть потоко-безопасным? А в каких случаях ленивая загрузка хуже?
- Что можете сказать про MVC? Нарисуйте диаграмму и объясните, как MVC работает.
- Напишите функцию вычисления факториала.
- Дана функция вычисления чисел Фибоначчи, известно, что она работает. Найдите логическую ошибку. Оцените сложность получившегося алгоритма.
Исключения (оглавление)
- Дайте определение понятию «исключение»
- Какова иерархия исключений.
- Можно/нужно ли обрабатывать ошибки jvm?
- Какие существуют способы обработки исключений?
- О чем говорит ключевое слово throws?
- В чем особенность блока finally? Всегда ли он исполняется?
- Может ли не быть ни одного блока catch при отлавливании исключений?
- Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
- Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?
- Что вы знаете об обрабатываемых и не обрабатываемых (catched/uncatched) исключениях?
- В чем особенность RuntimeException?
- Как написать собственное («пользовательское») исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?
- Какой оператор позволяет принудительно выбросить исключение?
- Есть ли дополнительные условия к методу, который потенциально может выбросить исключение?
- Может ли метод main выбровить исключение во вне и если да, то где будет происходить обработка данного исключения?
- Если оператор return содержится и в блоке catch и в finally, какой из них «главнее»?
- OutOfMemoryError
- SQLException и поинтересоваться, оно chekced или unchecked и нормально ли это по мнению кандидата.
- Что такое Error? В каком случае используется Error. Приведите пример Error’а.
- Какая конструкция используется в Java для обработки исключений?
- Возможно ли использование блока try-finally (без catch)?
- Предположим, есть блок try-finally. В блоке try возникло исключение и выполнение переместилось в блок finally. В блоке finally тоже возникло исключение. Какое из двух исключений “выпадет” из блока try-finally? Что случится со вторым исключением?
- Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой оследовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
Коллекции (оглавление)
- Дайте определение понятию «коллекция».
- Назовите преимущества использования коллекций.
- Какие данные могут хранить коллекции?
- Какова иерархия коллекций?
- Что вы знаете о коллекциях типа 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?
- В чем разница между HashMap и HashTable?
- Какой предок у класса HashTable?
- Как получить не модифицируемую коллекцию?
- Какие коллекции синхронизированы?
- Как получить синхронизированную коллекцию из не синхронизированной?
- Как получить коллекцию только для чтения?
- Почему Map не наследуется от Collection?
- В чем разница между Iterator и Enumeration?
- Как реализован цикл foreach?
- Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?
- Почему в классе iterator нет метода для получения следующего элемента без передвижения курсора?
- В чем разница между Iterator и ListIterator?
- Какие естьспособы перебора всех элементов List?
- В чем разница между fail-safe и fail-fast свойствами?
- В каких случаях может быть выброшено ConcurrentModificationException?
- Что такое стек и очередь, расскажите в чем их отличия?
- В чем разница между интерфейсами Comparable и Comparator?
- Почему коллекции не наследуют интерфейсы Cloneable и Serializable?
- Какие алгоритмы сортировки Вам известны? Какие вообще знаете алгоритмы?
- Алгоритмы. Методы сортировки: quick sort, merge sort, radix sort; hash map, linked list, binary search tree; semaphore, thread pool, blocking queue
- Как посчитать среднее массива?
- Что быстрее, HashMap или TreeMap?
Строки (оглавление)
- Какие «строковые» классы вы знаете?
- Какие основные свойства «строковых» классов (их особенности)?
- Можно ли наследовать строковый тип, почему?
- Дайте определение понятию конкатенация строк.
- Как преобразовать строку в число?
- Как сравнить значение двух строк?
- Как перевернуть строку?
- Как работает сравнение двух строк?
- Как обрезать пробелы в конце строки?
- Как заменить символ в строке?
- Как получить часть строки?
- Дайте определение понятию «пул строк».
- Какой метод позволяет выделить подстроку в строке?
- Как разбить строку на подстроки по заданному разделителю?
- Какой метод вызывается для преобразования переменной в строку?
- Как узнать значение конкретного символа строки, знаю его порядковый номер в строке?
- Как найти необходимый символ в строке?
- Можно ли синхронизировать доступ к строке?
- Что делает метод intern()?
- Чем отличаются и что общего у классов String, StringBuffer и StringBuilder?
- Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?
Потоки ввода/вывода (оглавление)
- Какие существуют виды потоков ввода/вывода?
- Назовите основные предки потоков ввода/вывода.
- Что общего и чем отличаются следующие потоки: InputStream, OutputStream, Reader, Writer?
- Что вы знаете о RandomAccessFile?
- Какие есть режимы доступа к файлу?
- В каких пакетах лежат классы-потоки?
- Что вы знаете о классах-надстройках?
- Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
- Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
- Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
- Какой класс предназначен для работы с элементами файловой системы (ЭФС)?
- Какой символ является разделителем при указании пути к ЭФС?
- Как выбрать все ЭФС определенного каталога по критерию (например, с определенным расширением)?
- Что вы знаете об интерфейсе FileFilter?
- Что такое сериализация?
- Какие условия «благополучной» сериализации объекта?
- Какие классы позволяют архивировать объекты?
Потоки выполнения/многопоточность (оглавление)
- Дайте определение понятию «процесс».
- Дайте определение понятию «поток».
- Дайте определение понятию «синхронизация потоков».
- Как взаимодействуют программы, процессы и потоки?
- В каких случаях целесообразно создавать несколько потоков?
- Что может произойти если два потока будут выполнять один и тот же код в программе?
- Что вы знаете о главном потоке программы?
- Какие есть способы создания и запуска потоков?
- Какой метод запускает поток на выполнение?
- Какой метод описывает действие потока во время выполнения?
- Когда поток завершает свое выполнение?
- Как синхронизировать метод?
- Как принудительно остановить поток?
- Дайте определение понятию «поток-демон».
- Как создать поток-демон?
- Как получить текущий поток?
- Дайте определение понятию «монитор».
- Как приостановить выполнение потока?
- В каких состояниях может прибыватьпоток?
- Что является монитором при вызове нестатического и статического метода?
- Что является монитором при выполнении участка кода метода?
- Какие методы позволяют синхронизировать выполнение потоков?
- Какой метод переводит поток в режим ожидания?
- Какова функциональность методов notify и notifyAll?
- Что позволяет сделать метод join?
- Каковы условия вызова метода wait/notify?
- Дайте определение понятию «взаимная блокировка».
- Чем отличаются методы interrupt, interrupted, isInterrupted?
- В каком случае будет выброшено исключение InterruptedException, какие методы могут его выбросить?
- Модификаторы synchronized и volatile
- Пакет java.util.concurrent
- Какие вы знаете способы запустить некоторое действие в отдельном потоке?
- Какие вы знаете способы прекратить выполнение потока?
- Какие ключевые слова Java, связанные с многопоточностью Вы знаете?
- Есть некоторый метод, который исполняет операцию i++. Переменная i типа int. Предполагается, что код будет исполнятся в многопоточной среде. Следует ли синхронизировать блок?
- Что служит в качестве mutex, если метод объявлен synchronized?
- Можно ли вызвать в разных потоках два synchronized метода одного и того же объекта?
- Что используется в качестве mutex, если метод объявлен static synchronized? Можно ли создавать новые кземпляры класса, пока выполняется static synchronized метод?
- Объясните, что такое deadlock? Приведите пример кода, который демонстрирует deadlock.
- Какие особенности использования метода wait? При каких условиях поток может выйти из режима ожидания?
- Предположим в методе run возник RuntimeException, который не был пойман. Что случится с потоком? Есть ли способ узнать о том, что Exception произошел (не заключая все тело run в блок try-catch)? Есть ли способ восстановить работу потока после того как это произошло?
- Какие стандартные инструменты Java вы бы использовали для реализации пула потоков?
SQL, JDBC (оглавление)
- ANSI SQL
- Основные элементы баз данных — таблицы, процедуры, функции, констрейнты и т.д.
- Констрейнты: как вы понимаете null в базах данных.
- Агрегатные функции, как они работают с null. Не забудьте о group by и having
- JDBC: Connection, Statement, PreparedStatement, CallableStatement, ResulSet, зачем каждая из этих сущностей нужна. Чем они являются: абстрактными классамм, конкретными классами или интерфейсами и почему.
- Как создать соединение в JDBC?
- Каким образом лучше добавлять большое количество записей в таблицу?
- Транзакции и autocommit
- Что такое первая нормальная форма и процесс нормализации? Какие бывают нормальные формы?
- В чем смысл индекса СУБД, как они устроены, как хранятся? Как бы вы реализовали тот же функционал? Последний вопрос задают в случае, если нет четкого понимания индексов.
- Нарисуйте отношение Многие-ко-многим. Например: таблицы Авторы и Книги. У одного автора может быть несколько книг, и книга может быть написана несколькими авторами. Составьте SQL запрос на выборку книг определенного автора.
JSP (оглавление)
- Что такое jsp и зачем он нужен?
- Расскажите об этапах жизненного цикла jsp.
- Расскажите о методах жизненного цикла jsp.
- Как закомментировать код в jsp?
- Какие есть способы вставки java кода в jsp страницу?
- Почему не рекомендуется использовать скриптовые элементы в jsp?
- Какие неявные, внутренние объекты есть на jsp странице?
- Что вы знаете о PageContext?
- Как можно запретить использование скриптов и java кода на jsp странице?
- Что вы знаете о jsp тегах?
- Что вы знаете о языке выражений jsp (JSP Expression Language — EL)?
- Назовите неявные, внутренние объекты JSP EL и их отличия от объектов jsp.
- Как узнать http метод использую JSP EL?
- Что такое JSTL (Jsp Standard tag library)?
- На какие категории можно разделить JSTL теги, приведите примеры.
- Что вы знаете о написании пользовательских jsp тегов?
- Как можно обработать ошибки jsp страниц?
- Как происходит обработка ошибок с помощью jstl?
- Как деактивировать использование EL на JSP?
- Можно ли использовать javascript на jsp странице?
- Всегда ли создается объект сессии на jsp странице, можно ли отключить его создание?
- Как можно расширить функциональность jsp?
Servlet (оглавление)
- Какова структура веб-проекта?
- Что такое сервлет?
- Что такое контейнер сервлетов?
- Каковы задачи, функциональность контейнера сервлетов?
- Что вы знаете о сервлет фильтрах?
- Зачем нужны слушатели в сервлетах?
- Когда вы будете использовать фильтры а когда слушатели?
- Как обработать исключения, выброшенные другим сервлетом в приложении?
- Что такое дискриптор развертывания?
- Как реализовать запуск сервлета с запуском приложения?
- Что представляет собой объект ServletConfig?
- Что представляет собой объект ServletContext?
- В чем отличия ServletContext и ServletConfig?
- Что такое Request Dispatcher?
- Как можно создать блокировку (deadlock) в сервлете?
- Как получить адрес сервлета на сервере?
- Как получить информацию о сервере с сервлета?
- Как получить ip адрес клиента на сервере?
- Что вы знаете о классах обертках (wrapper) для сервлетов?
- Каков жизненный цикл сервлета и когда какие методы вызываются?
- Какие методы необходимо определить при создании сервлетов?
- В каком случае вы будете переопределять метод service()?
- Есть ли смысл определить конструктор для сервлета, как лучше инициализировать данные?
- В чем отличия GenericServlet и HttpServlet?
- Как вызватьиз сервлета другой сервлет этого же и другого приложения?
- Что вы знаете и в чем отличия методов forward() и sendRedirect()?
- Стоит ли волноваться о «многопоточной безопасности» работая с сервлетами?
- Что такое servlet scope (область видимости — время жизни) и какие вы знаете?
- Что вы знаете и зачем нужны методы java.net.URLEncoder.encode() и decode()?
- Зачем нужны и чем отличаются методы encodeUrl() и encodeRedirectUrl()?
Web (оглавление)
- Что такое www?
- Что такое w3c?
- Что такое TCP/IP?
- Что такое ftp?
- Чем отличаются http и https?
- Что такое протокол передачи данных, какие вы знаете?
- Что такое web server?
- Что такое web приложение?
- Что такое application server?
- Чем отличаются web server и application server?
- Какие методы передачи данных вы знаете?
- Чем отличаются методы get и post?
- Что такое html?
- Что такое xml?
- Что такое css?
- Что такое MIME type?
- Что такое cookies?
- Что такое сессия?
- Дайте определение понятиям «авторизация» и «аутентификация», в чем их различия?
- Что такое Ajax? Как принципиально устроена эта технология?
- Что такое ORM, как это перевести и как это должно работать?
А ты знаешь ответы на все вопросы для Java Interview?
Смотри видео записи с online-интенсива подготовки к «Java Interview»
Источники:
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Pingback: О почти безвредном хобби | Мой сайт()
Pingback: Interview questions. JSE. Part 1 | annhv()
Pingback: Практический online-интенсив на тему «Подготовка к Java Interview»()