пʼятниця, 5 лютого 2010 р.


Прочитайте также мою новую статью
Многопоточность: задача о яйцах


Чтобы пройти собеседование на Java-программиста нужно всего две вещи:

1) Достойный уровень английского.
2) Правильно ответить на вопросы интервьюера.

Здесь не описано, как овладеть 1 (в общем, как и 2 :-) ). Здесь просто собраны вопросы, с которыми часто приходилось сталкиваться автору на собеседованиях. А прошел он их немало за 5 лет. Вопросы разделены на тематические группы.

I. ООП

  1. Назовите основные принципы ООП.
  2. Что такое наследование?
  3. Что такое полиморфизм? Какие проявления полиморфизма в Java Вы знаете?
  4. Что такое инкапсуляция?

II. Java core
  1. Опишите модификаторы доступа в Java.
  2. Что такое package level access. Приведите пример использования.
  3. Чем абстрактный клас отличается от интерфейса? В каких случаях Вы бы использовали абстрактный класс, а в каких интерфейс?
  4. Может ли объект получить доступ к private-переменной класса? Если, да, то каким образом?
  5. Какие существуют типы вложенных классов? Для чего они используются? Приведите пример использования вложенного статического класса.
  6. Опишите правила правила переопределения методов класса (overriding). Можно ли менять модификатор доступа метода, если да то каким образом? Можно ли менять возвращаемый тип, если да, то как? Можно ли менять тип передаваемых параметров?
  7. Что такое autoboxing?
  8. Что такое Generics?
  9. Каким образом передаются переменные в методы, по значению или по ссылке?
  10. Какие методы есть у класса Object? Какие методы можно переопределять, а какие нет?
  11. Правила переопределения метода Object.equals().
  12. Правила переопределения метода Object.hashCode().
  13. Правила переопределения метода Object.clone().
  14. Что такое конструктор по умолчанию?
  15. Опишите метод Object.finalize().
  16. Чем отличаются слова final, finally и finalize?
  17. Опишите иерархию исключений.
  18. Что такое checked и unchecked Exception?
  19. Как создать свой unchecked Exception?
  20. Что такое Error?
  21. Опишите работу блока try-catch-finally.

III. Collections framework
  1. Назовите основные интерфейсы коллекций и их имплементации.
  2. Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
  3. Чем отличается HashMap от Hashtable?
  4. Чем отличается ArrayList от Vector?
  5. Опишите, как работают HashSet, LinkedHashSet, TreeSet и обясните между ними отличия.
  6. Каким образом можно синхронизировать методы HashMap, ArrayList?
  7. Особенности интерфейса Set.
  8. Каким образом можно отсортировать коллекцию?
  9. Как правильно удалить элемент из коллекции при итерации в цикле?
  10. Как правильно удалить элемент из ArrayList (или другой коллекции) при поиске этого элемента в цикле?
  11. Какой алгоритм сортировки используется в методе Collections.sort()?

IV. Multithreading

  1. Каким образом можно создать поток?
  2. Какие способы синхронизации в Java?
  3. Как работают методы wait и notify/notifyAll?
  4. Чем отличается работа метода wait с параметром и без параметра?
  5. Как работает метод Thread.yield()? Чем отличаются методы Thread.sleep() и Thread.yield()?
  6. Чем отличаются методы Thread.sleep и Object.wait?
  7. Как работает метод Thread.join()?
  8. Что такое dead lock?
  9. Как правильно завершить работу потока? (Иногда говорять, убить поток).
  10. На каком объекте происходит синхронизация при вызове static synchronized метода?
  11. Для чего используется ключевое слово volatile?

V. Сериализация
  1. Для чего используется ключевое слово transient?
  2. Как изменить стандартное поведение сериализации/десериализации?

VI. Swing
  1. Что такое Event Dispatch Thread (поток обработки событий)? Как он работает?
  2. Как можно производить обработку событий клавиатуры в JTextField?
  3. Для чего исользуется класс SwingWorkers?

VII. JDBC
  1. Этапы работы с базой данных с использованием JDBC?
  2. Как создать Connection?
  3. Чем отличается Statement от PreparedStatement?
  4. Как вызвать хранимую процедуру?
  5. Как правильно закрыть Connection?

VIII. Object relational mapping (ORM), Hibernate
  1. Что такое lazy-initialization (в Hibernate)?
  2. Есть некая иерархия классов (вам могут нарисовать простую UML диаграмму этих классов). Какими способами можно замапить данную иерархию классов на реляционную базу данных (есть три способа). Расскажите о преимуществах и недостатках каждого способа
  3. Кэши в Hibernate, кэш первого уровня, кэш второго уровня.

IX. JSP, Servlets
  1. Чем отличается redirect от forward?
  2. Как сделать redirect незаметно для пользователя?
  3. Какие скоупы переменных существуют в JSP?
  4. Какие есть методы отправки данных с клиента на сервер? Чем они отличаются?
  5. Методы сервлета (обычно имеется ввиду HttpServlet).
  6. Чем статический include отличается от динамического? (вопрос по JSP).
X. Веб-сервисы.
  1. Что такое SOAP веб-сервис?
  2. Что такое REST веб-сервис?
XI. EJB
  1. Какие есть типы бинов?
  2. Какие есть типы session bean'ов?

XII. Базы данных
  1. Что такое нормализация.
  2. Какие есть типы связей в базе данных. Приведите пример.
  3. Что такое primary key (первичный ключ)?
  4. Что такое foreign key (внешний ключ)?
  5. Что такое индексы в базе данных? Для чего их используют? Чем они хороши и чем плохи?

XIII. SQL
  1. Какие есть типы JOIN'ов. Кратко опишите каждый из типов.
  2. Что такое LEFT JOIN, RIGHT JOIN? Чем они отличаются?
  3. Для чего используется слово HAVING?
  4. Задача: есть две сущности АВТОРЫ и КНИГИ, связь М-М (многие к многим). Создайте структуру таблиц для этих сущностей и напишите запрос, который выберет всех авторов, которые НЕ являются соавторами ни к одной из книг.
  5. Задача: Дана таблица с двумя столбцами ID (уникальное поле), Name (строка). Необходимо найти ID строк, в которых Name повторяется (то есть имеются две или более строки с одинаковым Name).
  6. Что такое транзакция. Опишите свойтва транзакции ACID.
  7. Опишите уровни изоляции транзакций.

XIV. Алгоритмы
  1. Реализуйте алгоритм изменения порядка элементов в связанном списке (reversing a linked list).
  2. Реализуйте алгоритм обхода бинарного дерева (binary tree traversal).
  3. Напишите метод на вход которого передается List<Integer> list и Integer sum и который возвращает boolean, который показывает есть ли в списке 2  элемента, сумма которых равна sum. Оцените сложность алгоритма. Предложите другой способ реализации.
  4. Напишите метод, который на вход принимает целое число и определяет, является ли число четным. Предложите еще 2 способа реализации.

XV. Тестирование
  1. Чем стаб (stub) отличается от мока (mock)?