JavaRush /Java блог /Random UA /10 найскладніших питань на співбесідах з Java.
theGrass
24 рівень
Саратов

10 найскладніших питань на співбесідах з Java.

Стаття з групи Random UA
10 найскладніших питань на співбесідах з Java.
Складні питання щодо Java та відповіді на них     Що таке складні питання щодо Java на співбесідах? Чому люди вивчають їх, перш ніж вирушити на співбесіду? Ну, це цілком природно, що люди готуються до складних питань навіть якщо вони не очікують, що їм будуть ставити складні питання з Java . Якщо ви підготуєтеся до складних і хитрих питань , це додасть вам впевненості у собі та допоможе відповісти на будь-які інші питання. З іншого боку, якщо ви не підготуєтеся до складних питань – їхня поява під час інтерв'ю чи письмового тесту буде для вас неприємним сюрпризом. Але визначення що вважати складним питанням не є універсальним, одне й те саме питання може бути складним для одного програміста і простим для іншого. Так що, краще підготуйте ваш особистий список складних питань, перш ніж заявитися на співбесіду з Java . У цій статті я поділюся з вами моїм власним списком із десяти складних питань, які можуть допомогти. 10 складних питань на співбесідах з Java та відповіді на них     Як я вже писав, тут зараз буде список з 10 складних питань з каверзою, які можуть вам зустрітися на співбесідах. Ці питання стосуються лише ядра Java , і не торкаються J2EE . Як я вже казав, для вас ці питання можуть виявитися простими і ви вже знаєте відповідь. Але на співбесідах вони трапляються і я особисто знаю людей які не змогли на них відповісти. Чому методи wait() та notify() оголошені в класі Object, а не Thread?     З одного боку, адже це не ви розробляли мову Java , звідки ви можете знати чому воно зроблено так а не інакше? Але якщо застосувати здоровий глузд і глибокі знання в програмуванні під Java , то цілком можна знайти відповідь. Почитайте цей пост - чому wait() і notify() оголошені в класі Object , а не Thread . Чому множинне спадкування не підтримується в Java?     Складність цього питання насамперед у тому, що ваша відповідь може не задовольнити запитувача. У більшості випадків, потрібні конкретні приклади, і якщо ви перерахуєте їх, то людина, що співбесідує вас, буде щасливою. І знову я дам вам посилання на свій блог - чому в Java не підтримується множинне успадкування для відповіді на це питання. Чому Java не підтримує навантаження операторів?     Ще одне складне питання щодо Java з тієї ж категорії. C++ підтримує навантаження операторів, чому цього немає в Java ? Цей і аналогічні аргументи вам можуть привести, і іноді навіть сказати, що оператор + перевантажений в Java для злиття рядків, але не дайте себе обдурити. Почитайте чому перевантаження операторів не підтримується Java для докладної відповіді на це хитре питання. Чому Java рядки незмінні?     Моє улюблене питання на співбесідах, воно складне і з каверзою, але при цьому дуже корисне. Також вас можуть запитати чому рядки в Java оголошені final . Почитайте тут чому рядки в Java є final і незмінними . Чому масив символів кращий за рядок для зберігання паролів у Java?     І ще одне хитре питання про рядки, і повірте мені, дуже мало програмістів Java можуть на нього відповісти. Це реально складне питання про ядро ​​Java і для відповіді на нього потрібне повне знання класу String . Почитайте чому масив символів краще ніж рядок для зберігання паролів, щоб дізнатися відповідь. Як створити потокобезпечний синглтон в Java, використовуючи блокування, що двічі перевіряється?     Інше формулювання цього питання - що таке потокобезпечний синглтон і як його створити . До Java 5 єдиним способом створити потокобезпечний синглтон було подвійне блокування, інакше якщо кілька потоків одночасно намагаються звернутися до синглтона, вони отримують кожен свій екземпляр. Починаючи з Java 5 ця проблема стала вирішуватися за допомогою Enum . Але якщо людина, що співбесідує вас, наполягатиме, напишіть їй цей код. Тільки не забудьте поставити volatile . Більш докладно тут 10 питань щодо синглтонів в Java Напишіть програму на Java, що створює взаємне блокування, і виправте її.     Одне з класичних, проте складних питань, відповіді який потрібен досвід написання многопоточных додатків. Почитайте як створити або запобігти взаємним блокуванням в Java Що трапиться якщо ваш Serializable клас містить поле не Serializable. Як це виправити?     Будь - які спроби серіалізувати такий клас викличуть NotSerializableException , і найпростіший спосіб виправити - оголосити таке поле transient . Почитайте 10 найважливіших питань із серіалізації, якщо вам потрібні подробиці. Чому wait і notify викликаються з синхронізованих методів Java?     І ще одне питання щодо ядра Java . Викликаються вони із синхронізованих методів або синхронізованого блоку , тому що wait() і notify() потрібно м'ютекс на тому об'єкті, у якого вони викликані. Ну а повну відповідь ви можете почитати тут - чому wait() і notify() потрібно викликати у synchronized контексті . Чи можете ви перевизначити статичний метод Java? Якщо я створю метод із таким же ім'ям у класі-нащадку, чи це викличе помилку компіляції?     Ні, ви не можете перевизначати статичні методи Java . Але якщо ви в класі-нащадку створите статичний метод з таким же ім'ям, як у предку, це не викликає помилки компіляції. Це так зване приховування методу. Більше розгорнуту відповідь ви можете прочитати тут ви можете перевизначити статичний метод в Java     Ось це і був мій список складних питань по Javaта відповідей до них. Для досвідчених програмістів деякі з них не виглядають такими вже складними, але вони в них є хитрощі і відповісти на них програмісту-початківцю буде не так просто. Якщо вам зустрінуться якісь складні питання щодо Java , будь ласка, поділіться з нами. Оригінал статті
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ