Собеседование по Core Java

Enterprise архитектор Yakov Fain предлагает 30 вопросов по Core Java.
|
|
Если Вы планируете быть востребованным на рынке труда, Вам, возможно, необходимо освежить некоторые моменты базовых знаний и техник по Java для подготовки к интервью. Предлагаю Вам несколько базовых вопросов по java, которые следует ожидать на собеседовании. На большинство вопросов я даю короткие ответы для того, чтобы Вы сами разобрались почему именно так, а не иначе. |
И так, 30 вопросов на собеседовании по Java.
*В1. Как сделать так, чтобы Java классы направляли программные сообщения в системную консоль, а сообщения об ошибках, скажем, в файл?
В классе System есть переменная out, которая представляет стандартный вывод, а есть переменная err, которая представляет стандартное устройство ошибок.
По умолчанию, они обе указывают на системную консоль.
Вот как можно перенаправить стандартный вывод:
*В2. В чем разница между интерфейсом и абстрактным классом?
Абстрактный класс может содержать код в телах методов, чего нельзя сделать в интерфейсе. Используя абстрактные классы, необходимо наследовать новые классы от них, а, как мы знаем, Java не поддерживает множественного наследования. С другой стороны, можно реализовать множество интерфейсов в своем классе.
*В3. Почему Вы будете использовать синхронизированный блок (synchronized block), а не синхронизированный метод (synchronized method)?
Синхронизированные блоки выставляют блокировки на более короткий период, чем синхронизированные методы.
*В4. Объясните значение ключевого слова transient?
Это ключевое слово сигнализирует о том, что значение переменной-члена класса не следует сериализовать вместе с объектом. Когда класс будет десериализован, эта переменная будет проинициализирована с использованием значением по умолчанию для этого типа данных (например, нулем для int).
*В5. Каким образом можно принудительно вызвать сборщик мусора (garbage collector)?
Вы не можете принудительно его вызывать, но можете послать запрос, используя
JVM не гарантирует, что сборщик мусора тут же начнет выполнять свою работу.
*В6. Откуда Вы знаете, нужно ли в данном случае явное приведение типов объектов?
Если Вы присваиваете объект суперкласса переменной типа подкласса, необходимо явно привести типы. Например:
Напротив, когда Вы присваиваете подкласс переменной типа суперкласса, приведение типов происходит автоматически.
*В7. В чем разница между методами sleep() и wait()?
Код введет поток в режим ожидания ровно на одну секунду.
А код введет поток в режим ожидания на время до одной секунды. Поток может прервать ожидание даже раньше, если он получит или . Метод wait() определен в классе Object, а метод sleep() определен в классе Thread.
*В8. Можете ли Вы написать Java класс, который будет использован и как апплет, и как приложение?
Да. Необходимо лишь добавить метод main() в апплет.
*В9. В чем разница между конструкторами и другими методами?
Конструкторы должны иметь такое же имя, как и имя класса, в котором они объявлены, а также они не должны возвращать никаких значений. Они вызываются лишь однажды, при создании объекта класса, а обычные методы могут быть вызваны множество раз.
*В10. Можно ли вызвать один конструктор из другого в том случае, если класс содержит несколько конструкторов?
Да, с использованием синтаксиса this().
*В11. Как по-вашему, что такое пакеты (packages) в Java?
Это методика организации файлов в проекте, когда имеется множество модулей. Также, пакеты помогают разрешать конфликты имен в тех случаях, когда различные пакеты имеют одноименные классы. Уровень доступа пакетов также позволяет Вам защитить данные от использования посторонними классами.
*В12. Предположим, что класс находится в пакете. Что Вам необходимо изменить в среде операционной системы для того, чтобы Вы могли его использовать?
Необходимо добавить папку или jar файл, который содержит пакет в переменную окружения CLASSPATH. Скажем, класс Employee принадлежит пакету com.xyz.hr и находится в файле C:\dev\com\xyz\hr\Employee.java. В этом случае, необходимо добавить c:\dev в переменную окружения CLASSPATH. Если этот класс содержит метод main(), можно тестировать его из командной строки следующим образом:
*В13. В чем разница между J2SDK 1.5 и J2SDK 5.0?
Нет никакой разницы, Sun Microsystems всего лишь поменяла стиль ведения версий.
*В14. Что Вы будете использовать для сравнения двух строковых значений: оператор == или метод equals()?
Я буду использовать метод equals() для сравнения значений строк, а == - для того, чтобы проверить, ссылаются ли две переменные на один и тот же объект String.
*В15. Имеет ли значение в каком порядке идут catch блоки для FileNotFoundException и IOException?
Да, конечно. FileNotFoundException унаследовано от IOException. Сперва должны быть отловлены подклассы класса Exception.
*В16. Может ли вложенный класс, объявленный внутри метода, иметь доступ к локальным переменным этого метода?
Это возможно только в том случае, если эти переменные будут объявлены как final.
*В17. Что может пойти не так, если заменить && на & в следующем коде:
Единичный амперсанд в данном случае вызовет NullPointerException.
*В18. В чем основное отличие между Vector и ArrayList?
Класс Vector внутренне синхронизирован, а ArrayList - нет.
*В19. Где может быть использован метод invokeLater()?
Этот метод используется для того, чтобы удостовериться, что компоненты Swing обновлены через event-dispatcher поток.
*В20. Каким образом подкласс может вызвать метод или конструктор, определенный в подклассе?
Необходимо использовать следующий синтаксис
*В21. В чем разница между очередью и стеком?
Стек работает по принципу last-in-first-out (LIFO) или последний вошел, первый вышел. Очереди работают по принципу FIFO - первый вошел первый вышел.
*В22. Вы можете создать абстрактный класс, который содержит лишь абстрактные методы. С другой стороны, Вы можете создать интерфейс, который объявляет те же методы. Вопрос: Можете ли Вы использовать абстрактные классы вместо интерфейсов?
Иногда. Но Ваш класс может быть потомком другого класса и в этом случае интерфейс - Ваш единственный выход.
*В23 Что Вам приходит на ум, когда Вы слышите о young generation?
Сборка мусора
*В24. Что Вам приходит на ум, когда кто-либо упоминает поверхностное копирование в Java?
Клонирование объектов
*В25. Если Вы переопределяете метод equals() в объекте, какой другой метод Вы захотели бы также переопределить?
hashCode()
*В26. Вы планируете сделать индексированный поиск в списке объектов. Какую из двух коллекций Вы бы выбрали: ArrayList или LinkedList?
ArrayList
*В27. Как можно сделать копию целого объекта с сохранением его состояния?
Необходимо реализовать в этом классе интерфейс Cloneable и вызвать его метод clone().
*В28. Как минимизировать использование сборки мусора и сделать использование памяти более эффективным?
Можно использовать пул объектов.
*В29. Есть два класса: А и B. Классу B необходимо оповестить класс A о том, что произошло важное событие. Какую технику Java Вы предпочли бы использовать?
Если эти классы являются потоками, я бы использовал метод notify() или notifyAll(). Для обычных классов можно использовать интерфейс Observer.
*В30. Какой уровень доступ необходимо указать в объявлении класса для того, чтобы убедиться, что к нему могут доступаться только те классы, которые находятся в той же директории?
Не надо ничего указывать. Java будет использовать пакетный уровень доступа по умолчанию.








это примерно на джуниора вопросы?)
Ну, в принципе, да. Хотя, думаю, на некоторых конторах и на мидла сошло бы...
Я не профи в Джаве, но опыт порграммирования 15 лет. Могу сказать одно, что на такие вопросы как правило хорошо отвечают либо очень опытные либо "вечные студенты". "Вечный студент" "ловит оргазмы " от таких вопросиков и большую часть времени занят их изучением. Они взяхлёб перечисляют все эти тонкости и без ума от себя самих.Но попроси его написать что-то серьёзное и объемное у них проявляется "импотенция" - им становится скучно и они становятся агресивными. И зачастую они просто меняют работу, ведь обладая такой эрудицией и умением оперировать терминами, он с лёгкостью докажет свою проффесиональность любому работодателю.
Достаточно интересная подборка на junior java developer, можно еще добавить вопросы по реализациям (например как реализован ArrayList и в каких случаях он эффективнее LinkedList и наоборот, и почему, и т.д. и т.п.).
Здесь элементарные базовые вопросы....Какие очень опытные программисты, не смешите мои тапочки
Я изучаю Java (да и вообще ООП) в вузе только 2 месяца, и то около на 2/3 вопросов знал ответы. Почти во всех остальных хотя бы примерно понял о чём речь. По-моему тоже, вполне базовые вопросы. Спасибо, интересно.
Я изучаю Java (да и вообще ООП) в вузе только 2 месяца, и то около на 2/3 вопросов знал ответы. Почти во всех остальных хотя бы примерно понял о чём речь. По-моему тоже, вполне базовые вопросы. Спасибо, интересно.
Отправить комментарий