Вопросы, на которые должен уметь ответить каждый хороший разработчик Java / Java EE? [закрыто]


138

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

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

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

С нетерпением жду замечательных отзывов.

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


3
Почему этот вопрос не может получить аналогичный ответ на вопрос .Net?
Рэйчел

5
Господи :), вопрос .Net был задан год назад, а этому всего день, и вы сравниваете ответы.
zapping

1
Почему бы вам не отредактировать свой вопрос и не добавить предложение «Пожалуйста, ответьте на свой вопрос», чтобы люди даже могли узнать что-то (новое).
r3zn1k

9
«Какая сейчас аббревиатура Enterprise Edition»;)
Божо

17
Анекдот Альберта Эйнштейна ... Однажды один из коллег Эйнштейна спросил его номер телефона. Эйнштейн взял телефонный справочник и заглянул в него. "Вы не помните свой собственный номер?" - удивленно спросил мужчина. «Нет», - ответил Эйнштейн. «Зачем мне запоминать то, что так легко можно почерпнуть из книги?» Со всеми добираюсь;)? Да, я знаю, Эйнштейн не встречался с интервьюером ...
СБ.

Ответы:


83

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


Да, каждый разработчик должен хотя бы знать о проблемах, даже если вы не обязательно столкнетесь с ними на практике.
sleske 01

3
equals () и hashCode () в java @ technofundo.com/tech/java/equalhash.html
pramodc84

70

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

Меня до сих пор поражает, сколько людей не знают этого из телефонного интервью.


8
Конечно, но просмотр документации в сети («структура коллекций java» - это вопрос 20 секунд), поэтому многие стоящие люди могут не беспокоиться о том, чтобы хранить ее в памяти.
Manur

127
Нет, извините, не покупайте это, это базовые знания, которые должен знать каждый разработчик.
Джон

15
Я бы сказал, что любой, кто даже думает о работе в программном обеспечении, должен понимать не только это, но и различия между различными типами списков (ArrayList / LinkedList). Не обязательно лучшая реализация или даже обозначение O (n), но понимание того, когда что правильно использовать.
Преподобный Гонзо,

11
+1 @Jon: Я обычно придерживаюсь философии «не нужно запоминать детали», но если вы даже не знаете основных концептуальных различий между этими базовыми интерфейсами, то вы определенно не хороший Java-разработчик.
Joachim Sauer

13
@Joachim: вы можете убрать слово "Java" из своего утверждения. Наборы, карты и списки - это основные алгоритмические понятия.
CPerkins

44

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

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

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

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


Вчера я перепутал преподавателя C ++ с проблемой наследования алмаза, она вообще не знала об этом :)
Esko

2
Однажды мне задали этот вопрос, и я ответил «нет». Я думаю, это был стресс, плюс я ответил слишком быстро. всегда трудно узнать ответы на вопросы, которые ты никогда не использовал.
IAdapter

1
Я немного уточню в тексте. Ответить «нет» на самом деле нормально. Что приятно в этом вопросе, так это то, что это хороший способ вызвать обсуждение концепций объектно-ориентированного программирования и увидеть, как кандидат рассуждает. Если интервьюер просто хотел услышать «да», то это фактически бессмысленно. Множественное наследование интерфейсов действительно не так уж часто можно знать наизусть.
ewernli

3
Более сложная версия этого вопроса - «Поддерживает ли Java множественное наследование?» на который ответ «вроде как» только для интерфейсов
nsfyn55

23

Использование ключевого слова 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");
}


Мне бы очень хотелось узнать ответ на этот вопрос. Звучит очень интересно.
Рэйчел

@Rachel: Причина в том, что finalключевое слово применяется к Nameобъекту, а не к nameполю классаName
ryanprayogo

20
Итак, параметр nобъявлен как final, а это значит, что его нельзя переназначить в testтеле метода. Это не вызывает ошибки, потому что метод testне пытается переназначить параметр, он просто устанавливает свойство для параметра ... n = new Name("test");вызовет ошибку компиляции ...
rjohnston

7
Добавление к комментариям @ rjohnston: использование final для параметра метода не гарантирует неизменность экземпляра класса. Если есть необходимость в неизменности, класс (имя в данном случае) должен быть спроектирован таким образом (например, в данном случае не предоставлять сеттер)
сатиш

Спасибо всем за то, что поделились ценной информацией. Я очень ценю ваш вклад в это.
Рэйчел

19

Один из них - сравнение строки. Разница между

Строка helloWorld = "Hello World";
helloWorld == "Привет, мир";
«Привет, мир» .equals (helloWorld);


14
Совершенно уверен, что вам нужно будет сделать что-то вроде new String («Hello World»). Разве строковые константы не извлекаются из пула, как это было бы с эффектом intern (), что делает оба утверждения истинными?
Стивен Шланскер


17

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

Удивительно, сколько людей до сих пор повторяют мантру «примитивы передаются по значению, объекты передаются по ссылке».


4
Интересно, всегда ли на собеседовании дают правильный ответ? В месте, где я проводил собеседование, интервьюер повторил то же самое.
MAK

2
Я заметил разницу между людьми, изучавшими C как первым языком, и людьми, которые изучали C ++ как первый язык, при ответе на этот вопрос о Java. Вероятно, потому, что пользователей C учат, что передача указателя на значение является «передачей по ссылке».
Uri

23
Это глупый вопрос, поскольку «неправильный» ответ, скорее всего, станет технически правильным, если вы также спросите «какие последствия имеет передача по ссылке?» . Это просто вопрос определения того, что означает передача по ссылке, и поэтому не имеет большого значения в мире Java, поскольку существует только один способ передачи объектов. Более важно понять, что происходит на самом деле, чем использовать произвольное определение для передачи по ссылке так, как вы хотите.
x4u

3
Этот вопрос, по крайней мере, проблематичен, потому что он в основном зависит от точного определения «передача по значению» / «передача по ссылке», которое часто используется неправильно. Хотя я согласен с тем, что хороший разработчик должен знать определения, гораздо важнее понимать последствия. Если вы понимаете реальное поведение Java, то знание правильного названия концепции не имеет большого значения, потому что это не то, что вы обсуждаете на практике, поскольку оно никогда не меняется.
sleske 01

3
Эмм, объекты будут переданы по ссылке в Java. Вы не можете передать объект по значению; среди прочего, объекты никогда не существуют в стеке. Ссылки передаются по значению, конечно.
Шон Оуэн,

17

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

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

Для J2EE:

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

Я могу придумать еще много, много, еще много, но пока этого достаточно :)


8
Ответы были бы хороши, я не знаю ответа на некоторые из них.
MAK

Проверенные исключения - это те исключения, которые программа должна иметь план обработки в случае их возникновения. Если вокруг того, что вызывает проверенное исключение, нет блока try / catch, программа не будет компилироваться. wait, notify и notifyAll предназначены для синхронизации потоков, а в Java можно синхронизировать все объекты. Я бы расширил Thread (в отличие от реализации Runnable), если концептуально класс требует своего собственного потока, то есть он должен выполнять некоторое управление и не представляет задачу, которая может быть запущена в другом рабочем потоке.
ZoFreX

Если исключение выбрасывается в блоке finally, остальная часть его не запускается. В «чистой» Java-программе канонических утечек памяти не существует. Однако память все равно может использоваться, чего не должно быть, если структуры данных содержат ссылки на объекты, которые больше не нужны. При использовании собственных библиотек может потребоваться управление их ресурсами, например, в SWT важно вызвать .dispose () для определенных ресурсов, чтобы убедиться, что они не протекают.
ZoFreX

2
Используйте утверждения для ошибок типа «Это никогда не должно происходить», с которыми необходимо работать в процессе разработки. Используйте исключения для ошибок, которые действительно могут произойти во время выполнения, и программе нужно будет каким-то образом с ними справиться.
MatrixFrog

16

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


5
String - неизменяемый класс, представляющий строку. StringBuffer - шаблон построителя, представленный в более старых версиях Java, который синхронизируется при каждой операции (или большинстве из них), чтобы использовать ее для построения String. StringBuilder - представленный в Java 5 (JDK 1.5) класс, который использует API StringBuffer для создания строки, которая не синхронизируется при каждой операции (или большинстве из них). Поскольку создание Strings обычно происходит в одном потоке, StringBuilder предпочтительнее для этой цели в средах выполнения Java / JDK, которые его поддерживают.
MetroidFan2002

13

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

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


сделать его «непроизвольно вздрагивает + сильно потеет + падает замертво после повторения этого вопроса еще 2 раза», я иногда чувствую, что это «единственная и единственная» причина, по которой они добавили / поддержали всю эту штуку с аннотациями! :)
Элистер

12

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

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

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

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


Мне не нравится вопрос «что тебе не нравится в Java?», Я бы солгал, потому что он звучит как «почему ты покинул свою последнюю компанию?». плюс они могут подумать - «если вы ненавидите java, мы не будем предлагать вам работу».
IAdapter

@ 01 Это ваше право, но я не согласен с вами и думаю, что вы упустили суть вопроса.
Паскаль Тивент

1
Я обычно видел, что это больше похоже на: «Что бы вы больше всего хотели изменить в Java», а не «не нравится».
CPerkins

@CPerkins Это действительно лучшая формулировка, лучше, чем «не нравится», и намного лучше, чем «ненавидеть» (в ссылке). Спасибо.
Паскаль Тивент

11

Что такое System, out, println в System.out.println? Что происходит, когда вы вызываете «положить» на HashMap?


каков ответ ?? я никогда не задумывался о каком системном классе !! Интересно узнать ответ :)
palAlaa

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

3
Если бы я мог изменить только одну вещь, я бы добавил в язык перегрузку операторов, возможно, с ограниченным набором перегружаемых операторов (то есть без перегрузки newили ^или >>, <<и >>>). Если бы я мог изменить что-то еще, это было бы добавление истинной семантики вызова по ссылке. Третье - добавить unsignedинтегральные типы.
Chinmay Kanchi

1
делегаты и замыкания и, возможно, лямбда-выражение, но на самом деле это не обязательно. Методы расширения тоже были бы великолепны. Они действительно могут очистить код при правильном использовании.
Джоэл

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

9

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


16
Правильный ли ответ "выбросить новое исключение NullPointerException ()"?
Торбьёрн Равн Андерсен

1
Что ж, решать интервьюеру. Если бы они показали пример тестирования переменной и выдачи NPE с полезным сообщением, я был бы счастлив. Если бы я думал, что они использовали этот ответ, потому что не смогли придумать какой-то код, который законно бросал бы NPE, я бы волновался.
Дэвид

9

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

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


первый код указывает, что finally всегда выполняется, даже если оператор return был доступен в блоке try, но я не получил второй код ?? что произошло, когда построитель операторов = null; бывает ??
palAlaa

3
@Alaa, это почти как временное значение, установленное для построителя, построитель имеет значение null в блоке finally, а затем временное значение - это то, что возвращается.
Dedeb

1
@VextoR, да, Алаа дал хорошее описание. Этот код проверяет, как интервьюируемый понимает блок try ... finally с return внутри и область действия переменных в целом, обработка переменных
zaletniy

4
Оператор return возвращает ссылку на объект StringBuilder. Изменение ссылки в finally ничего не делает с фактически возвращенной ссылкой. Однако изменение содержимого объекта влияет на то, что возвращается, как в первом примере.
Дерек Литц

8

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

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


Единственная разница в том, что абстрактный класс может содержать не абстрактные методы.
TBH

1
Это ответ, который вы бы получили, если бы прочитали книгу по Java. Хотя тогда вы также можете добавить, что они также могут содержать переменные-члены: P Но разница в том, когда их использовать и почему, еще более интересна.
ZoFreX

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

@TBH - не забывайте, что в модели одиночного наследования, которую в настоящее время использует Java, вы можете расширить только один абстрактный класс для одного набора функций, но вы можете объединить несколько интерфейсов в одном классе для реализации нескольких функций без единой ограничение наследования.
MetroidFan2002

8

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

  • Что такое JRE и JDK?
  • Почему Java заявляет о совместимости?

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


Не знаю о части JDK / JRE. Например, на Mac такого различия нет. Так что, как Java-разработчику на Mac, на самом деле нет необходимости знать об этом.
Fabian Steeg,

Я думаю, что это хороший вопрос, и тем лучше, если он поможет разоблачить людей, которые достаточно заблуждаются, чтобы попытаться серьезно разработать Java на Mac. Серьезно, если вы утверждаете, что являетесь разработчиком Java, но не знаете, по какой ссылке для скачивания перейти на java.sun.com, тогда возникает проблема.
Mark B

Что ж, будучи java-разработчиком, не нужно вообще беспокоиться о платформе, на которой он / она работает. Понимание java-инструментов кажется основным требованием. По крайней мере, я так считаю. Я ничего не знаю о Mac OS. Тем не менее я не сильно беспокоюсь про ОС, в которой я работаю.
Ravisha

@mbaird Это звучит как довольно злобный комментарий. Хотя я разрабатываю на Mac и знаю, что такое JRE / JDK, давайте будем честными, действительно ли это имеет значение в реальной разработке? Java-разработчик должен знать, как использовать язык больше, чем что-либо еще, особенно с IDE, которые заставляют использовать командную строку в прошлом.
Alexis King

6

5 основных вопросов J2EE / JEE

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

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

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

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

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


5

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



4

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

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

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


4

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

Почему основной метод в 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)если хотите :-) У него такая же подпись, что и[]
corsiKa 01

3

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

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


4
Неужели способность сохранять ясную маркетинговую терминологию действительно так важна в конце концов?
Лоуренс Гонсалвес,

@Laurence - это смешно. Есть реальная разница между двумя вещами, и вы будете удивлены, сколько якобы опытных разработчиков просто не понимают
oxbow_lakes

Я хочу сказать, что если кто-то хороший программист, мне наплевать, знает ли он разницу между J2SE и J2EE.
Лоуренс Гонсалвес,

Я прочитал вопрос как «материал, который должен знать разработчик JEE + JSE», и в этом случае я думаю, что понимание разницы между двумя технологиями важно.
oxbow_lakes

4
@ Thorbjørn Ravn Andersen Я сомневаюсь, что большинство Java-кодеров, в том числе и хороших, хорошо осведомлены об указанном выше различии: «Корпоративная версия - это в основном определение интерфейса ... В то время как стандартная версия - это самостоятельная реализация». Для большинства хороших Java-программистов разница в том, какие API доступны. например: сервлеты являются частью EE и т. д. В любом случае, так же, как я думаю, что более важно найти хороших программистов, чем хороших программистов на языке X, я думаю, что более важно найти хороших программистов Java, чем хороших программистов JSE / JEE.
Лоуренс Гонсалвес,

3

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


3
Эта запись тоже должна содержать правильный ответ.
Thorbjørn Ravn Andersen

Я не помню полного ответа, посмотрите эту лекцию youtube.com/…, чтобы получить хорошее объяснение. В двух словах: предположим, что в какой-то момент метод использует изменчивую переменную. Тогда компилятор не оптимизирует код этого метода после этого момента.
Роман

2

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


2

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

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


2

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

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


не могли бы вы ответить на эти вопросы? Я впервые знаю о "отмеченных и непроверенных исключениях" !!
palAlaa

Простой поиск в Google может привести вас к ответам: google.co.in/…
YoK,

1

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


2
Это потому, что ответ «да» ...
Fortega

@Fortega - Как такое может быть? Каждый метод имеет блокировку объекта. Если один из threadних запускает метод, никто другой не threadсможет получить блокировку.
fastcodejava

1
Если у вас есть два объекта одного типа, вы можете одновременно вызвать первый метод для первого объекта и второй метод для второго объекта. Если конечно методы не статичны.
Fortega,

2
Если вы не понимаете, как происходит блокировка, это не проблема. Кроме того, хотя это может быть и ежу понятно, это не значит, что мой ответ был неправильным :-)
Fortega

1
Ответ может ввести в заблуждение программистов, которые не использовали потоки в своей работе, но я думаю, что это хороший
ответ

1

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

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

И числа, такие как Integer, Long и т. Д.
Артур Рональд

С точки зрения производительности больше нет разницы между объединением неизменяемых строк и использованием StringBuilder. Это связано с тем, что современные компиляторы java оптимизируют конкатенацию: java.sun.com/docs/books/jls/third_edition/html/… Лучше использовать любой метод, более читаемый.
Brent Wilson

1
@BrentWilson, на что вы ссылаетесь, не будет делать то, что вы думаете. Это превратится 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 символов вместо того, как должно.
corsiKa 01
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.