Питання, яким повинен відповісти кожен хороший розробник Java / Java EE? [зачинено]


138

Я переглядав Питання кожен хороший .Net розробник повинен мати можливість відповісти і був дуже вражений змістом та підходом до цього питання, і тому в тому ж дусі я задаю це питання розробнику Java / Java EE.

На які питання , на вашу думку, повинен відповісти хороший програміст Java / Java EE?

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

З нетерпінням чекаю чудових відгуків

EDIT : Будь ласка, відповідайте на запитання, як це пропонується в коментарях, щоб люди також могли дізнатися щось нове щодо мови.


3
Чому це запитання не в змозі отримати подібну відповідь на запитання .Net?
Рейчел

5
Добрий Господи :), питання .Net було задано рік тому, і це лише день, і ви порівнюєте відповіді.
zapping

1
Чому б ви не редагували своє запитання і не додавали речення "Будь ласка, дайте відповідь на власне запитання", щоб люди навіть могли щось дізнатися (нове).
r3zn1k

9
"що таке абревіатура для Enterprise Edition";)
Божо

17
Анекдот Альберта Ейнштейна. Один із колег Ейнштейна один день попросив його номер телефону. Ейнштейн потягнувся до телефонного довідника і подивився. "Ви не пам’ятаєте свого власного номера?" - здивовано запитав чоловік. - Ні, - відповів Ейнштейн. "Чому я повинен запам’ятати щось, що можу так легко дістати з книги?" Чи досягаю всіх;)? Так, я знаю, Ейнштейн не стикався з інтерв'юером ...
SB.

Відповіді:


83

Який взаємозв'язок між hashCode () та дорівнює ()? Яке значення цих методів? Які вимоги щодо їх виконання?


Так, кожен диявол повинен хоча б бути обізнаним з проблемами, навіть якщо вам не обов’язково стикатися з ними на практиці.
sleske

3
дорівнює () та hashCode () в java @ technofundo.com/tech/java/equalhash.html
pramodc84

70

Яка різниця між набором, картою та списком?

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


8
Зрозуміло, але справа в 20 секундах дивиться на документи в мережі ("рамки колекцій java"), тому багато людей, що достойно, можуть не заважати зберігати це в пам'яті.
Манур

127
Не шкода, не купуйте цього, це основні знання, які повинен знати кожен розробник.
Джон

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

11
+1 @Jon: Я зазвичай підписуюся на школу думок "не потрібно запам’ятовувати деталі", але якщо ти навіть не знаєш основних концептуальних відмінностей між цими базовими інтерфейсами, то ти точно не хороший розробник Java.
Йоахім Зауер

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

44

Чи може інтерфейс розширювати кілька інтерфейсів?

Більшість людей відповідають "ні", оскільки вони знають, що Java не має багаторазового успадкування. Але інтерфейс все ще може розширювати декілька інтерфейсів (але клас не може поширювати кілька класів). Це не призводить до проблеми з алмазами.

Якщо відповідь «ні», то інтерв'юер повинен запитати «чому б це заборонено?». Тоді ви починаєте думати про це, і вам слід зрозуміти, що з цим проблеми немає.

Таким чином, ви дізналися щось (власноруч) в інтерв'ю, і ви показали інтерв'юеру, що ви можете міркувати про класи, предмети, спадщину, поліморфізм і т. Д. Це насправді набагато краще, ніж кандидат, який знає відповідь напам'ять, але не робить зрозуміти, чому


Я вчора переплутав лектора C ++ із проблемою успадкування алмазів, вона про це зовсім не знала :)
Есько,

2
Мені одного разу було задано це питання, і я відповів "ні". Я думаю, що це був стрес плюс я відповів занадто швидко. завжди важко знати відповіді на речі, які ти ніколи не використовуєш.
IAdapter

1
Я детальніше деталізую текст. Відповісти "ні" - це насправді нормально. Що приємно з цим питанням, це те, що це хороший спосіб запустити дискусію щодо концепцій ОО і побачити, як кандидати міркують. Якщо інтерв'юер, який ви просто хотіли почути «так», це фактично безглуздо. Багатократне успадкування інтерфейсів насправді не таке спільне, щоб знати напам'ять.
ewernli

3
Більш хитра версія цього питання "Чи підтримує java багаторазове успадкування?" на що відповідь "свого роду" лише для інтерфейсів
nsfyn55

23

Використання кінцевого ключового слова у викликах методів. Наприклад, чому тест методу в наведеному нижче коді не дає жодної помилки компіляції, незважаючи на використання кінцевого класифікатора для параметра методу.

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оголошується як остаточний, а значить, його не можна перепризначити в testтілі методу. Це не викликає помилки, оскільки метод testне намагається перепризначити параметр, він просто встановлює властивість параметру ... n = new Name("test");спричинить помилку компіляції ...
rjohnston,

7
Додаючи до коментарів @ rjohnston: використання final для параметра методу не забезпечує незмінність екземпляра класу. Якщо є необхідність у незміненості, клас (Ім'я в даному випадку) повинен бути розроблений таким чином (наприклад, у цьому випадку не вказуйте сетера)
sateesh

Дякую всім за те, що поділилися цінною інформацією Я дуже ціную ваші дані щодо цього.
Рейчел

19

Одне впевнене - порівняння рядків. Різниця між

String helloWorld = "Hello World";
helloWorld == "Hello World";
"Hello World" .eqals (helloWorld);


14
Досить впевнений, що вам потрібно буде зробити щось на кшталт нової String ("Hello World"). Чи не струнні константи витягнуті з пулу, як і ефект intern (), тому зробить обидва твердження правдивими?
Стівен Шланскер


17

Хитрі питання: Які параметри передаються посиланням на Java?

Дивовижно, скільки людей досі папугають: "примітиви передаються за значенням, об'єкти передаються за посиланням" мантра.


4
Цікаво, чи завжди правильну відповідь можна дати в інтерв'ю. У місці, в якому я брав інтерв'ю, інтерв'юер також папугував те саме.
МАК

2
Я помітив різницю між людьми, які вивчали C як першу мову, і людьми, які вивчали C ++ як першу мову, відповідаючи на це питання про Java. Можливо, тому, що користувачів C навчають, що передача вказівника на значення - це "пропуск за посиланням".
Урі

23
Це дурне запитання, оскільки "неправильна" відповідь, швидше за все, стане технічно правильною, якщо ви також запитаєте, "які наслідки мають посилання?" . Це лише питання визначення того, що пройти опорними засобами, і, таким чином, не має великої цінності у світі Java, оскільки існує лише один спосіб передачі об'єктів. Важливіше зрозуміти, що насправді відбувається, ніж використовувати атрибутивне визначення для пропуску посиланням так, як вам хочеться.
x4u

3
Це питання, принаймні, проблематичне, оскільки воно в основному залежить від точного визначення поняття "пройти за значенням" / "пройти за посиланням", яке часто використовується неправильно. Хоча я згоден, що хороший розробник повинен знати визначення, важливіше зрозуміти наслідки. Якщо ви розумієте фактичну поведінку Java, то знання правильної назви для поняття не має сенсу, оскільки це не те, що ви обговорюєте на практиці, оскільки воно ніколи не змінюється.
sleske

3
Емм, об'єкти будуть передані по посиланню в Java. Ви не можете передавати об'єкт за значенням; крім усього іншого, об'єкти ніколи не існують на стеці. Довідники передаються за значенням, звичайно.
Шон Оуен

17

Ви сказали «Добре», «Розробник». Ось мої 2 копійки теж .. :)

  • Що означає "перевірений виняток"?
  • Який із них краще використовувати та коли: Затвердження чи винятки для вирішення несподіваних умов?
  • Чому клас String є остаточним? (чи ні?;))
  • чи є методи очікування, сповіщення та повідомленняВсі методи в класі Object?
  • Чому клас "Нитка" не є остаточним? Навіщо мені колись подовжувати нитку?
  • Чому існує два класи Дати; один у пакунку java.util та інший у java.sql?
  • Що станеться, якщо виняток буде кинуто в остаточний блок? Чи залишилися остаточно виконані чи ні?
  • Збір сміття добре, але тоді в програмах Java повністю відсутня витік пам'яті? Якщо ні, то як?

Для J2EE:

  • Чи добре мати в сервлеті змінні екземпляри / статичні? Чому ні? Тоді де ви зберігаєте «державу»?
  • продовжуючи вищезазначене питання: що і де "стан" для (веб) програми?
  • Що станеться, якщо я почав створювати / закривати з'єднання БД у "JSP"?
  • Які способи поводження з винятками JSP? приміряти? Хммм .. є ще щось?

Я можу подумати про багато, багато, багато інших з них, але це зараз робитиму :)


8
Відповіді були б непогані, я не знаю відповіді на деякі з них.
МАК

Перевірені винятки - це ті, що програма повинна мати план обробки в разі їх виникнення. Якщо навколо спроби / лову блоку немає чогось, що кидає перевірений виняток, програма не буде компілюватися. зачекайте, сповістіть і сповістітьУсі синхронізовані потоки, і на Java всі об'єкти можна синхронізувати. Я б розширив Thread (на відміну від реалізації Runnable), якщо концептуально клас вимагає власного потоку, тобто йому потрібно виконати деяке управління, і не представляє завдання, яке може бути запущене в іншій робочій нитці.
ZoFreX

Якщо виняток буде кинуто в остаточний блок, то решта його не буде працювати. У "чистій" програмі Java канонічних витоків пам'яті не існує. Однак пам'ять все-таки може звикнути, що не повинно, якщо структури даних містять посилання на об'єкти, які більше не потрібні. Якщо ви користуєтесь власними бібліотеками, можливо, їх ресурсами потрібно буде керувати, наприклад, у SWT важливо викликати .dispose () на певні ресурси, щоб переконатися, що вони не протікають.
ZoFreX

2
Використовуйте твердження для помилок "Це ніколи не трапляється ніколи", які мають бути вирішені при розробці. Використовуйте винятки для помилок, які можуть насправді трапитися під час виконання програми, і програмі потрібно буде якось боротися з ними.
MatrixFrog

16

У чому різниця між String, StringBuffer і StringBuilder?


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

13

"Що таке дескриптор розгортання?"

Якщо кандидат здригається недоброзичливо, у нього є досвід роботи з EJB до 3.0.


зробіть це "мимоволі здригаються + потужно пасеться + краплі мертві після повторення цього питання ще два рази", я іноді відчуваю його "єдину і єдину" причину, коли вони додали / підтримали всю річ Анотацій! :)
Elister

12

Багато питань та інтерв'ю доступні на веб- сайті http://www.techinterviews.com/interview-questions/java, і я не бачу цінності в копіюванні / вставці їх підбору.

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

Попри все, моє улюблене питання - "що вам не подобається в Java?" (в дусі цього ). Це справді відмінне запитання, воно дає вам негайний відгук про те, наскільки кандидат використовував Java та досліджував її API і чи просто він релігійний про це чи ні (як написала ОП).

Оновлення: Як запропонував CPerkins, кращою формулюванням для запропонованого вище питання може бути "Що б ви найбільше хотіли побачити зміни на Java?". І справді, я віддаю перевагу саме такому.


Мені не подобається питання "що вам не подобається в Java?", Я б брехав, тому що це звучить як "чому ви покинули останню компанію?". плюс вони можуть подумати - "якщо ти ненавидиш Java, ми не запропонуємо тобі роботу".
IAdapter

@ 01 Це ваше право, але я не згоден з вами, і я думаю, що ви пропустили суть цього питання.
Паскаль Thivent

1
Я зазвичай бачив, як це було більше, як: "Що б ви найбільше хотіли побачити, що змінилося на Java", а не "не подобається".
CPerkins

@CPerkins Це краще формулювання, краще, ніж "не подобається" і набагато краще, ніж "ненависть" (у посиланні). Дякую.
Паскаль Thivent

11

Що таке "System", "out", "println" у System.out.println? Що станеться, коли ви зателефонуєте на "HashMap"?


що відповідь ?? я ніколи не думаю про те, який системний клас !! мені цікаво дізнатися asnwer :)
palAlaa

10
  1. Поясніть різні модифікатори доступу, які використовуються в Java. У мене багато людей бореться з цим, особливо доступ за замовчуванням.
  2. Якби ви могли змінити одне про мову або платформу Java, що б це було? Хороші розробники знайдуть відповідь, тоді як тим, хто насправді не зацікавлений у розвитку, напевно, це не хвилює.
  3. Якщо їхнє резюме говорить щось подібне, вони використовують EJB2.1, то запитайте про EJB3, щоб дізнатися, що вони про нього знають. Найкращі розробники будуть в курсі останніх розробок, навіть якщо вони не використовують новіші версії.

3
Якби я міг змінити лише одне , я б додав до мови перевантаження оператора, ймовірно, лише з обмеженим набором операторів, що завантажуються (тобто відсутність перевантаження newабо ^або >>, <<і >>>). Якби я міг змінити іншу річ, це було б додати справжню семантику виклику за посиланням. Третьою справою було б додати unsignedцілісні типи.
Chinmay Kanchi

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

10
  • Що таке загальний контракт, коли перевагу дорівнює?
  • Чи кращий варіант віддає перевагу спискам або масивам?
  • Які загальноприйняті угоди про іменування?
  • Як працює серіалізація?
  • Як реалізувати порівнянне?
  • Які переваги використання готових звітів JDBC?
  • Що таке Java EE?
  • Що таке контейнер і які послуги він надає?

9

Якщо ви наймаєте випускників з «досвідом» Java, просте запитання, наприклад, Напишіть якийсь код, який спричинить закидання NullPointerException, може розрізнити, які кандидати використовували Java нещодавно, а не зупинився, коли вони закінчили свою одиницю / курс.


16
Чи правильна відповідь "кинути новий NullPointerException ()"?
Thorbjørn Ravn Andersen

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


перший код вказує, що, нарешті, завжди виправдовується, навіть якщо оператор return був доступний у блоці спробу, але я не отримав другий код ?? що сталося, коли конструктор висловлювань = null; трапляється ??
palAlaa

3
@Alaa, це майже як тимчасове значення, встановлене для будівельника, конструктор встановлюється на нульовий результат остаточно блоком, і тоді тимчасове значення - те, що повертається.
відмовитись

1
@VextoR, так Alaa дав хороший опис. Цей код перевіряє, як опитуваний розуміє спробу ... нарешті заблокуйте з поверненням всередину, а область змінних загалом - обробка змінних
zaletniy

4
Заява return повертає посилання на об'єкт StringBuilder. Зміна посилання, нарешті, нічого не робить із посиланням, яке фактично повертається. Однак зміна вмісту об'єкта впливає на те, що повертається, як у першому прикладі.
Дерек Ліц

8

Чим відрізняється абстрактний клас від інтерфейсу? Коли ви використовували б кожен із них?

Багато розробників Java цього не знають, я запитав більшість людей на моєму курсі інформатики в університеті, і переважна більшість не змогла відповісти на це.


Єдина відмінність полягає в тому, що абстрактний клас може містити не абстрактні методи.
TBH

1
Це відповідь, яка б ви, звичайно, читали книгу Java. Хоча тоді ви також можете додати, що вони можуть містити також змінні учасників: P Але різниця в тому, коли їх використовувати, і чому, ще цікавіша.
ZoFreX

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

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

8

Прості запитання, такі як,

  • Що таке JRE та JDK?
  • Чому java вимагає сумісності?

Хоча це дуже просто, багато розробників не знають відповідей. Я пропоную запитати їх перед запитами, що стосуються коду.


Не знаю про частину JDK / JRE. Наприклад, на Mac не існує такого розрізнення. Тож як розробнику Java на Mac, насправді про це взагалі не потрібно знати.
Фабіан Стіг

Я думаю, що це прекрасне питання, і якщо це допоможе викрити людей, які є досить неправильними, щоб спробувати серйозну розробку Java на Mac, тим більше. Якщо серйозно, якщо ви претендуєте на розробник Java, але не знаєте, яке посилання для завантаження натисніть на java.sun.com, тоді є проблема.
Марк Б

Добре будучи розробником Java, не потрібно взагалі турбуватися про платформу, яку він / вона працює. Розуміння інструментів Java здається основною вимогою. Найкраще я вважаю, що я. Я не знаю про Mac OS.still, я не m = хвилююся багато про ОС, в якій я працюю.
Равіша

@mbaird Це виходить як досить сумний коментар. Хоча я розробляюсь на Mac, і я знаю, що таке JRE / JDK, будьмо чесними, в реальній розробці це дійсно має значення? Особливо з IDE, які змушують командний рядок використовувати минуле, Java-розробник повинен знати, як використовувати мову більше за все.
Олексій Король

6

Топ-5 запитань щодо J2EE / JEE

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

  1. Що відбувається, коли MDB стикається з винятком, з яким він не може впоратися?
    Зазвичай це запитання призводить до різних цікавих дискусій про повідомлення про отруту, черги помилок тощо,
  2. З огляду на тему JMS та кількох споживачів різних JVM, запитання щодо різних сценаріїв із довготривалими споживачами та без них.
    Зазвичай це запитання дозволяє мені обговорити питання про те, коли користуватися довговічними абонентами, коли використовувати черги тощо,
  3. Якщо застрягти в ситуації, коли доступ до вмісту POJO в режимі Hibernate / JPA призводить до винятків, як це вирішити?
    Це призводить до чудових дискусій щодо ледачого навантаження, повторного зволоження тощо. Це навіть призвело до порівняння та протиставлення JPA з бабами Entity. Мені здається корисним бути готовим та бути зрозумілим у поняттях.
  4. Як можна надати просту веб-службу?
    Будь-яке рішення з простого веб-сервера, заснованого на складних рішеннях SOAP / REST, і будь-яке між ними, повинно бути досить хорошим. Також, спираючись на інтерв'юера, іноді це призводить до дуже цікавих дискусій на такі теми, як деякі ідеї дизайну - спочатку WSDL, стиль doc, посередники 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
    Час від часу мене попросили вказати на шаблон Java в API Java. Краще будьте готові до цього.




4

Більш чисте питання Java:

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

Як потрібно обробляти InterruptExceptions?


4

Це питання, з яким я стикався в своєму інтерв’ю.

Чому основний метод на Java називається загальнодоступним статичним недійсним main (String [] args)?

Відповідь:

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

Не маючи доступу до основного за межами пакету, ми повинні оголосити його як загальнодоступне. Якщо ми оголосимо його як інше, ніж публічне, воно показує помилку виконання, але не помилку часу компіляції

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

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

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

Спершу JVM завантажить тестовий клас та перевірить аргументи Commandline та закликає основний метод як Test.main ();

3. main () повинен бути оголошений недійсним main (), оскільки JVM не очікує жодного значення від main (). Отже, він повинен бути оголошений недійсним.

Якщо надано інший тип повернення, це RunTimeError, тобто; NoSuchMethodFoundError.

4. main () повинен мати аргументи String як масиви, оскільки JVM викликає основний метод шляхом передачі аргументації командного рядка. Оскільки вони зберігаються в об'єкті рядкового масиву, він передається як аргумент main ().


Ви можете використовувати, public static void main(String... args)якщо ви так схильні :-) Він має такий же підпис, як[]
corsiKa

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/…
1010 р.

1

Як threadsпрацювати? Що таке synchronized? Якщо synchronizedв класі є два способи, чи можна їх одночасно виконувати двома потоками. Ви будете здивовані, почувши, що багато людей відповідають " так" . Потім усі питання, пов'язані з нитками, наприклад, тупик , голодування тощо.


2
Це тому, що відповідь "так" ...
Fortega

@Fortega - Як це може бути? Кожен метод має блокування на об’єкті. Якщо один threadіз методів працює, жоден інший не threadможе отримати замок.
fastcodejava

1
Якщо у вас є два об'єкти одного типу, ви можете викликати перший метод на першому об'єкті, а другий метод на другому об'єкті одночасно. Якщо тільки методи не є статичними, звичайно.
Фортега

2
Якщо ви не розумієте належним чином, як відбувається блокування, це насправді не манер. Крім того, хоча це може бути і без розуму, це не означає, що моя відповідь була неправильною :-)
Fortega

1
Відповідь могла б заплутатися у прогрмерів, які не використовували теми у своїй роботі, але я думаю, що це добре :)
palAlaa

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/… Найкраще використовувати будь-який метод, який можна читати.
Брент Вілсон

1
@BrentWilson те, що ви посилаєте, не буде робити те, що ви думаєте. Це перетвориться s += "a" + "b" + "c"на Stringbuilder.append(...)сценарій. Але це не оптимізує forцикл. Код у цій відповіді в результаті створить загальну кількість 201 рядків, 100 StringBuilders і (залежно від реалізації) 300 різних char[]s у цих StringBuilders і приблизно 425k + символів. Якщо змінити його безпосередньо на використання StringBuilder, це зменшить його до 1 String, 1 StringBuilder та 13-15 внутрішніх char[]s, використовуючи лише ~ 8k символів замість цього, як слід.
corsiKa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.