Вопросы, на которые должен отвечать каждый хороший Java/Java EE Developer?

Я проходил через Вопросы, которые каждый хороший разработчик .Net должен был ответить, и был очень впечатлен содержанием и подходом к этому вопросу, и поэтому в том же Я задаю этот вопрос для Java/Java EE Developer.

Какие вопросы, на ваш взгляд, должен отвечать хороший программист Java/Java EE?

Я отмечаю этот вопрос как вики сообщества, поскольку он не является специфичным для пользователя, и он нацелен на то, чтобы служить сообществу разработчиков в целом.

Ожидание замечательных ответов.

РЕДАКТИРОВАТЬ. Также ответьте на вопросы, как это предлагается в комментариях, чтобы люди могли узнать что-то новое в отношении языка.

Ответ 1

Какова связь между hashCode() и equals()? Каково значение этих методов? Каковы требования для их реализации?

Ответ 2

В чем разница между Set, Map и List?

Я все еще удивляюсь, как много людей не знают этого в телефонном интервью.

Ответ 3

Может ли интерфейс расширять несколько интерфейсы?

Большинство людей ответят "нет", потому что они знают, что java не имеет множественного наследования. Но интерфейс все еще может расширять несколько интерфейсов (но класс не может расширять несколько классов). Это не приводит к проблеме алмаза.

Если ответ "нет", интервьюер должен спросить "почему это было бы запрещено?". Затем вы начинаете думать об этом, и вы должны понимать, что с ним нет проблем.

Итак, вы узнали что-то (по себе) в интервью, и вы показали интервьюеру, что вы можете рассуждать о классах, предметах, наследовании, полиморфизме и т.д. Это на самом деле намного лучше, чем кандидат, который знает ответ наизусть, но не понимает, почему

Ответ 4

Использование ключевого слова final в вызовах методов. Например, почему метод test в приведенном ниже коде не дает компилируемой ошибки, несмотря на использование final квалификатора для параметра метода.

class Name {
    private String name;

    public Name (String s) {
        this.name = s;
    }

    public void setName(String s) {
        this.name = s;
    }
}

private void test (final Name n) {
    n.setName("test");
}

код >

Ответ 5

Конечно, это сравнение строки. Разница между

String helloWorld = "Hello World";
helloWorld == "Hello World";
" Привет мир".equals(helloWorld);

Ответ 6

Задайте вопрос: какие параметры передаются по ссылке в Java?

Удивительно, сколько людей по-прежнему попугают "примитивы передаются по значению, объекты передаются по ссылке" мантры.

Ответ 7

Вы сказали "Хорошо", "Разработчик". Вот мои 2 цента тоже..:)

  • Что означает "проверенное исключение"?
  • Какой из них лучше использовать и когда: Утверждения или Исключения для обработки неожиданных условий?
  • Почему класс String является окончательным? (или это не?;))
  • являются ожиданиями, уведомляют и уведомляют все методы класса Object?
  • Почему класс Thread не является окончательным? Почему я должен продлить Thread, когда-либо?
  • Почему есть два класса Date; один в пакете java.util и другой в java.sql?
  • Что произойдет, если в блоке finally будет создано исключение? Остальные окончательно выполнены или нет?
  • Есть сборщик мусора в порядке, но тогда утечка памяти полностью отсутствует в приложениях Java? Если нет, то как?

Для J2EE:

  • Хорошо ли иметь экземпляр/статические переменные в сервлет? Почему нет? Тогда где вы сохраняете "состояние"?
  • продолжая над вопросом: что и где есть "состояние" для (веб-приложения)?
  • Что произойдет, если я начну создавать/закрывать соединения DB в "JSP"?
  • Каковы способы обработки исключений JSP? попробуй поймать? Хм... есть что-нибудь еще?

Я могу думать о многих, многих и многих других, но это будет делать сейчас:)

Ответ 8

В чем разница между String, StringBuffer и StringBuilder?

Ответ 9

"Что такое дескриптор развертывания?"

Если кандидат непредсказуемо дрожит, у него есть опыт работы с пред-3.0 EJB.

Ответ 10

Многие вопросы и интервью доступны в http://www.techinterviews.com/interview-questions/java, и я действительно не вижу значения в копировании/вставке их.

Нет, вам важно создать собственную компиляцию вещей you. Лично я продолжаю всегда в два этапа: сначала несколько вопросов, чтобы получить базовое представление об опыте и навыках, а затем о ситуации с решением проблем. Я действительно не уверен, что возможность отвечать на любые известные вопросы делает вас хорошим или плохим неизвестным решателем проблем. Поэтому я предпочитаю просить людей решить заданную проблему, дать им некоторые требования и попросить их написать код (но не на бумаге). Я даю им некоторое время, чтобы вернуться ко мне и проверить, как они это сделали, стиль их кодирования, как они использовали предлагаемые API и т.д.

Что все сказано, мой любимый вопрос: "Что вам не нравится в Java?" (в духе этого). Это действительно отличный вопрос, он дает вам немедленную обратную связь о том, насколько кандидат использовал Java и изучил его API, и если он просто религиозен или нет (как писал OP).

Обновление: Как было предложено CPerkins, лучшей формулировкой для предложенного выше вопроса может быть "Что бы вы больше всего хотели увидеть в Java?". И действительно, я предпочитаю этот путь.

Ответ 11

Что такое 'System', 'out', 'println' в System.out.println? Что происходит, когда вы вызываете "put" на HashMap?

Ответ 12

  • Объясните различные модификаторы доступа, используемые в Java. У меня было много людей, борющихся с этим, особенно с доступом по умолчанию.
  • Если бы вы могли изменить одну вещь о языке Java или платформе, что бы это было? Хорошие разработчики получат ответ здесь, в то время как тем, кто действительно не интересуется развитием, пожалуй, все равно.
  • Если в их резюме написано что-то вроде EJB2.1, попросите EJB3 узнать, что они знают об этом. Лучшие разработчики будут не отставать от последних разработок, даже если они не используют более новые версии.

Ответ 13

  • Что такое общий договор при переопределении равных?
  • Лучший вариант предпочитает списки или массивы?
  • Каковы общепринятые соглашения об именах?
  • Как работает сериализация?
  • Как реализовать Comparable?
  • В чем преимущества использования подготовленных отчетов JDBC?
  • Что такое Java EE?
  • Что такое контейнер и какие службы он предоставляет?

Ответ 14

Если вы нанимаете выпускников с "опытом" Java, то простой вопрос, например "Напишите код, который вызовет исключение NullPointerException", может отличить, какие кандидаты использовали Java недавно, и не просто остановился, когда они закончили свой курс/курс.

Ответ 15

Что будет напечатано?

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder.append("+1");
    }
}

Ответ: CoolReturn + 1

Немного сложнее:

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder=null;  /* ;) */
    }
}

Ответ: CoolReturn

Ответ 16

Простые вопросы, такие как

  • Что такое JRE и JDK?
  • Почему Java-совместимость требует взаимодействия?

Хотя они очень просты, многие разработчики не знают ответов. Я предлагаю, чтобы они задавались перед запросами, связанными с кодом.

Ответ 17

В чем разница между абстрактным классом и интерфейсом? Когда вы будете использовать каждый из них?

Многие разработчики Java этого не знают, я спросил большинство людей на курсе по информатике в университете, и подавляющее большинство не смогли ответить на него.

Ответ 18

Топ-5 вопросов J2EE/JEE

Список вопросов промежуточного программного обеспечения J2EE/JEE, с которыми я столкнулся, исключительно длинен, но вот пятерка, о которой я просил, и привел к хорошим обсуждениям:

  • Что происходит, когда MDB встречает исключение, с которым он не может справиться?
    Этот вопрос обычно приводит к различным интересным дискуссиям о ядовитых сообщениях, очередях ошибок и т.д.,
  • Учитывая тему JMS и несколько потребителей на разных JVM, вопросы по различным сценариям с и без надежных потребителей.
    Этот вопрос обычно позволяет мне обсуждать с точки зрения использования длительных подписчиков, когда использовать очереди и т.д.,
  • Если вы застряли в ситуации, когда доступ к содержимому Hibernate/JPA POJO приводит к исключениям, как разрешить его?
    Это приводит к прекрасным дискуссиям о ленивой загрузке, регидратации и т.д. Это даже привело к сравнению и сопоставлению JPA с Entity beans. Я счел полезным быть готовым и быть понятным в понятиях.
  • Как можно обеспечить простой веб-сервис?
    Любое решение с простого веб-сервера, основанного на сложных решениях SOAP/REST, и все между ними должно быть достаточно хорошим. Кроме того, по словам интервьюера, иногда это приводит к очень интересным обсуждениям по таким темам, как некоторые дизайнерские идеи - сначала WSDL, doc-стиль, посредники SOAP и т.д. Это может привести к таким вопросам, как перечисление улучшений в JAX-WS поверх JAX -RPC или SOAP1.2 поверх SOAP1.1, ответы на которые обычно основаны на том, насколько я помню.
  • Внедрение ресурсов JEE 5
    Этот вопрос задается многими способами, начиная с шаблона Service Locator до вопросов javax.naming.Context.

Еще один сложный вопрос, который я нахожу тревожным, но сталкивался много раз, Как библиотеки зависимых библиотек упакованы в архив?
или Видимость различных классов в объединенном архиве.
Если обсуждение не приведет к иерархии загрузчиков классов для разных серверов приложений, архивов ресурсов и т.д., Лучше всего уйти в отставку и перейти.

Топ-5 основных вопросов Java:

  • Вопросы по java.util.collections
    Это мать всех вопросов. Как только вы сможете эффективно посадить интервьюера в этой области, и если вы готовы, остальная часть интервью обычно остается здесь. Обязательно знайте Set, List, Map и важность Object.equals() и Object.hashCode() в каждой реализации этих интерфейсов.
  • Вопросы рефакторинга
    Это хорошо, если у интервьюера есть открытый ум. Если у интервьюера уже есть конкретное решение, и ваш не соответствует его/ее, вы в значительной степени обречены. Лучше согласиться с ответом "Я понимаю, что возможны другие решения".
  • Вопросы по многопоточности в JDK5 по сравнению с более ранними версиями JDK Я нашел, что лучше всего подготовиться с помощью классов java.util.concurrent. В книге Дага Ли есть большинство ответов.
  • Что нового в JDK1.6/JDK1.7...?
    Это вопрос с уверенностью в вопросе со многими интервьюерами. Насколько я ненавижу это, лучше быть готовым. По крайней мере, вспоминая несколько, с которыми я работал, и ведущий дискуссию в каком-то другом направлении, во многом и эффективно уклоняется и решает проблему.
  • Шаблоны в API Java
    Снова и снова меня просили указать шаблон GoF в Java API. Лучше быть готовым к этому.

Ответ 19

Разница между веб-сервером и веб-контейнером

Ответ 20

Что вам больше всего нравится в Java и почему?

Ответ 21

почему вы переопределите метод toString()?

Ответ 22

Более чистый вопрос в Java:

В чем разница между сном и ожиданием? Немногие на самом деле понимают, как работает ожидание.

Как вам нужно обрабатывать InterruptedExceptions?

Ответ 23

Это вопрос, с которым я столкнулся в своем интервью.

Почему главный метод в Java называется public static void main (String [] args)?

Ответ:

1. main() должен быть объявлен общедоступным, поскольку он запускается JVM при запуске программы. JVM не принадлежит нашему пакету программы.

Чтобы получить доступ к главному за пределами пакета, мы должны объявить его общедоступным. Если мы объявим его как что-либо иное, кроме public, оно показывает Ошибка выполнения, но не Ошибка времени компиляции

2. main() должен быть объявлен как статический, потому что если метод объявлен как статический, то мы можем вызвать этот метод вне класса с помощью ClassName.methodName();

class Sample
{
     static void fun()
     {
           System.out.println("Hello");       
     }
}

class Test
{
      public static void main(String[] args)
      {
                Sample.fun();
      }
}

JVM сначала загрузит тестовый класс и проверит аргументы командной строки и вызовет основной метод как Test.main();

3. main() должен быть объявлен как void main(), потому что JVM не ожидает никакого значения из main(). Поэтому он должен быть объявлен как void.

Если предоставлен другой тип возвращаемого значения, это RunTimeError i.e; NoSuchMethodFoundError.

4. main() должен иметь аргументы String как массивы, потому что JVM вызывает основной метод, передавая аргумент командной строки. Поскольку они хранятся в объекте строкового массива, он передается как аргумент main().

Ответ 24

В чем разница между J2SE и J2EE (или JSE и JEE)?

Разработчик должен иметь возможность указать, что корпоративная версия - это в основном определение интерфейса (т.е. спецификация), которое может быть реализовано поставщиками. В то время как стандартное издание представляет собой реализацию в своем собственном виде

Ответ 25

Как volatile влияет на оптимизацию кода компилятором?

Ответ 26

Как насчет того, что представляет собой сеанс bean, и описываем некоторые различия между сеансом без состояния и состояниями beans.

Ответ 27

Напишите программу для принятия двух целых чисел и выведите наибольшее из двух чисел в файл в выбранном вами месте. Теперь опишите, что делает каждый оператор.

Возможно очень глубокое углубление, начиная с значимости оператора импорта, вплоть до аномального завершения

Ответ 28

Core: 1. Что такое проверенные и непроверенные исключения? 2. При добавлении нового исключения в код какого типа (проверено/не отмечено) для использования, когда?

Servlet: 1. В чем разница между response.sendRedirect() и request.forward()?

Ответ 29

Как работает threads? Что такое synchronized? Если в классе есть два метода synchronized, они могут выполняться одновременно двумя потоками. Вы будете удивлены, услышав, что многие люди отвечают да. Затем все вопросы, связанные с нитями, например. тупик, голод и т.д.

Ответ 30

Одна вещь, которую многие программисты Java не знают, это то, что строки являются неизменяемыми, поэтому используйте StringBuilder или StringBuffer!

String s = "";
for(int i = 0; i < 100; i++) {
  s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}