Я просматривал вопросы, на которые должен уметь ответить каждый хороший разработчик .Net, и был очень впечатлен содержанием и подходом к этому вопросу, поэтому в том же духе я задаю этот вопрос для Java / Java EE Developer.
Как вы думаете, на какие вопросы должен уметь отвечать хороший программист Java / Java EE?
Я помечаю этот вопрос как вики сообщества, поскольку он не зависит от пользователя и направлен на обслуживание сообщества программистов в целом.
С нетерпением жду замечательных отзывов.
РЕДАКТИРОВАТЬ : Пожалуйста, ответьте также на вопросы, как это предлагается в комментариях, чтобы люди могли узнать что-то новое и о языке.
java
jakarta-ee
Рэйчел
источник
источник
Ответы:
Какая связь между hashCode () и equals ()? В чем значение этих методов? Какие требования к их реализации?
источник
В чем разница между Set, Map и List?
Меня до сих пор поражает, сколько людей не знают этого из телефонного интервью.
источник
Большинство людей отвечают «нет», потому что знают, что Java не имеет множественного наследования. Но интерфейс по-прежнему может расширять несколько интерфейсов (но класс не может расширять несколько классов). Это не приводит к проблеме с алмазом.
Если ответ «нет», то интервьюер должен спросить «почему бы это запрещено?». Затем вы начинаете думать об этом и должны понимать, что в этом нет проблем.
Итак, вы узнали что-то (самостоятельно) на собеседовании и показали интервьюеру, что вы способны рассуждать о классах, объектах, наследовании, полиморфизме и т. Д. Это на самом деле намного лучше, чем кандидат, который знает ответ наизусть, но не знает. понять почему
источник
Использование ключевого слова 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"); }
источник
final
ключевое слово применяется кName
объекту, а не кname
полю классаName
n
объявлен как final, а это значит, что его нельзя переназначить вtest
теле метода. Это не вызывает ошибки, потому что методtest
не пытается переназначить параметр, он просто устанавливает свойство для параметра ...n = new Name("test");
вызовет ошибку компиляции ...Один из них - сравнение строки. Разница между
источник
Вопрос с подвохом: какие параметры передаются по ссылке в Java?
Удивительно, сколько людей до сих пор повторяют мантру «примитивы передаются по значению, объекты передаются по ссылке».
источник
Вы сказали «Хорошо», «Разработчик». Вот и мои 2 цента .. :)
Для J2EE:
Я могу придумать еще много, много, еще много, но пока этого достаточно :)
источник
В чем разница между String, StringBuffer и StringBuilder?
источник
"Что такое дескриптор развертывания?"
Если кандидат непроизвольно вздрагивает, у него есть опыт работы с EJB до 3.0.
источник
Многие вопросы и интервью доступны на http://www.techinterviews.com/interview-questions/java, и я не вижу смысла в копировании / вставке некоторых из них.
Нет, вам решать, как создать свою собственную подборку вещей, которые вы считаете важными. Лично я всегда делаю два шага: сначала задаю несколько вопросов, чтобы получить общее представление об опыте и навыках, затем ситуация, связанная с решением проблемы. Я действительно не уверен, что способность отвечать на какие-либо известные вопросы делает вас хорошим или плохим решателем неизвестных проблем. Поэтому я предпочитаю просить людей решить данную проблему, дать им некоторые требования и попросить их написать код (но не на бумаге). Я даю им время вернуться ко мне и проверить, как они это сделали, их стиль кодирования, как они использовали предлагаемые API и т. Д.
При всем сказанном, мой любимый вопрос: "Что вам не нравится в Java?" (в духе этого ). Это действительно отличный вопрос, он дает вам немедленную обратную связь о том, насколько кандидат использовал Java и исследовал ее API, и религиозен ли он по этому поводу или нет (как написал OP).
Обновление: как было предложено CPerkins, лучше сформулировать вопрос, предложенный выше, может быть «Что бы вы больше всего хотели изменить в Java?». И действительно, я предпочитаю этот путь.
источник
Что такое System, out, println в System.out.println? Что происходит, когда вы вызываете «положить» на HashMap?
источник
источник
new
или^
или>>
,<<
и>>>
). Если бы я мог изменить что-то еще, это было бы добавление истинной семантики вызова по ссылке. Третье - добавитьunsigned
интегральные типы.источник
Если вы нанимаете выпускников с «опытом» Java, простой вопрос вроде « Напишите код, который вызовет выброс исключения NullPointerException», поможет определить, какие кандидаты использовали Java в последнее время, а не просто остановились, когда они закончили свой модуль / курс.
источник
Что будет напечатано?
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
источник
В чем разница между абстрактным классом и интерфейсом? Когда бы вы использовали каждый из них?
Многие разработчики Java этого не знают, я спрашивал большинство людей на моем курсе информатики в университете, и подавляющее большинство не могло ответить.
источник
Простые вопросы, например,
Хотя это очень простые вопросы, многие разработчики не знают ответов. Я предлагаю задавать их до запросов, связанных с кодом.
источник
5 основных вопросов J2EE / JEE
Список вопросов по промежуточному программному обеспечению J2EE / JEE, с которыми я столкнулся, исключительно длинный, но вот 5 основных вопросов, которые мне задавали и которые привели к хорошему обсуждению:
Этот вопрос обычно приводит к различным интересным дискуссиям о подозрительных сообщениях, очередях ошибок и т. Д.
Этот вопрос обычно позволяет мне обсудить, когда использовать постоянных подписчиков, когда использовать очереди и т. Д.
Это приводит к замечательным дискуссиям о ленивой загрузке, регидратации и т. Д. Это даже привело к сравнению и противопоставлению JPA и компонентов Entity. Я счел полезным быть подготовленным и иметь ясные концепции.
Любое решение, от простого веб-сервера до сложных решений SOAP / REST и любых промежуточных, должно быть достаточно хорошим. Кроме того, по словам интервьюера, иногда это приводит к очень интересным дискуссиям по таким темам, как некоторые идеи дизайна - сначала WSDL, стиль документации, посредники SOAP и т. Д. Это может привести к таким вопросам, как перечисление улучшений в JAX-WS по сравнению с JAX. -RPC или SOAP1.2 поверх SOAP1.1, ответы на которые обычно основываются на том, сколько я помню.
Этот вопрос задается разными способами, начиная с шаблона Service Locator и заканчивая
javax.naming.Context
вопросами.Еще один сложный вопрос, который меня беспокоит, но с которым я сталкивался много раз: как зависимые библиотеки упаковываются в архив?
или Видимость различных классов в связанном архиве.
Если обсуждение не приводит к иерархии загрузчиков классов различных серверов приложений, архивов ресурсов и т. Д., Лучше уйти в отставку и двигаться дальше.
5 основных вопросов по Java:
Это мать всех вопросов. Как только вы сможете эффективно направить интервьюера в эту область и если вы будете готовы, остальная часть интервью обычно остается здесь. Будьте уверены , зная
Set
,List
,Map
и о важностиObject.equals()
иObject.hashCode()
в каждой реализации этих интерфейсов.Это хорошо, если интервьюер непредвзято относится к делу. Если у интервьюера уже есть конкретное решение, а ваше не совпадает с его / ее, вы в значительной степени обречены. Лучше всего согласиться с ответом «Я понимаю, что возможны другие решения».
Это верный вопрос для многих интервьюеров. Как бы я ни ненавидел это, лучше быть готовым. По крайней мере, если вспомнить несколько человек, с которыми я работал, и вести дискуссию в другом направлении, это в значительной степени и эффективно позволяет избежать проблемы и решить ее.
Меня снова и снова просили указать на шаблон GoF в Java API. Лучше будьте готовы к этому.
источник
Разница между веб-сервером и веб-контейнером
источник
Что вам больше всего / меньше всего нравится в Java и почему?
источник
зачем вам переопределять метод toString ()?
источник
Более чистый вопрос Java:
В чем разница между сном и ожиданием? Не многие люди действительно понимают, как работает ожидание.
Как вам нужно обрабатывать InterruptedExceptions?
источник
Это вопрос, с которым я столкнулся в своем интервью.
Почему основной метод в Java называется public static void main (String [] args)?
Ответ:
1. main () должен быть объявлен общедоступным, поскольку он вызывается JVM всякий раз, когда запускается выполнение программы. JVM не принадлежит нашему программному пакету.
Чтобы получить доступ к main вне пакета, мы должны объявить его как общедоступный. Если мы объявляем его как что-то другое, кроме общедоступного, он показывает ошибку времени выполнения, но не ошибку времени компиляции
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, проверит аргументы командной строки и вызовет основной метод как Test.main ();
3. main () должен быть объявлен как void main (), потому что JVM не ожидает какого-либо значения от main (). Поэтому он должен быть объявлен как void.
Если предоставляется другой тип возвращаемого значения, это RunTimeError, то есть NoSuchMethodFoundError.
4. main () должен иметь аргументы String в виде массивов, потому что JVM вызывает основной метод, передав аргументы командной строки. Поскольку они хранятся в объекте массива строк, они передаются в качестве аргумента функции main ().
источник
public static void main(String... args)
если хотите :-) У него такая же подпись, что и[]
В чем разница между J2SE и J2EE (или JSE и JEE)?
Разработчик должен иметь возможность указать, что корпоративная версия - это в основном определение интерфейса (то есть спецификация), который может быть реализован поставщиками. В то время как стандартная редакция является самостоятельной реализацией
источник
Как
volatile
влияет на оптимизацию кода компилятором?источник
Как насчет того, что такое сеансовый компонент, и описать некоторые различия между сеансовыми компонентами без сохранения состояния и с сохранением состояния.
источник
Напишите программу, которая принимает два целых числа и выводит наибольшее из двух чисел в файл в любом месте по вашему выбору. Теперь опишите, что делает каждое утверждение.
Можно углубиться в детали, начиная со значения оператора импорта и заканчивая аварийным завершением.
источник
Ядро: 1. Какие есть отмеченные и непроверенные исключения? 2. При добавлении нового исключения в код, какой тип (отмечен / не отмечен) использовать, когда?
Сервлет: 1. В чем разница между response.sendRedirect () и request.forward ()?
источник
Как
threads
работать? Что естьsynchronized
? Еслиsynchronized
в классе два метода, могут ли они одновременно выполняться двумя потоками. Вы будете удивлены, услышав, что многие люди ответят утвердительно . Затем все вопросы, связанные с потоком, например, тупик , голод и т. Д.источник
thread
них запускает метод, никто другой неthread
сможет получить блокировку.Многие программисты на Java не знают, что строки неизменяемы, поэтому используйте StringBuilder или StringBuffer!
String s = ""; for(int i = 0; i < 100; i++) { s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint"; }
источник
s += "a" + "b" + "c"
вStringbuilder.append(...)
сценарий. Но это не оптимизируетfor
цикл. Код в этом ответе в конечном итоге создаст в общей сложности 201 String, 100 StringBuilders и (в зависимости от реализации) 300 различныхchar[]
s внутри этих StringBuilders и примерно 425k + символов. Изменение его на использование StringBuilder уменьшит это до 1 String, 1 StringBuilder и 13-15 внутреннихchar[]
s, используя только ~ 8k символов вместо того, как должно.