JavaRush /Java блог /Random UA /Хитрі питання щодо Java, які часто ставлять на співбесіда...

Хитрі питання щодо Java, які часто ставлять на співбесідах

Стаття з групи Random UA
Якщо ви хоч раз готувалися до співбесіди на посаду Java-програміста або складали будь-який іспит (не обов'язково з програмування) для отримання сертифікату, то, швидше за все, вже встигли помітити, що питання, які там ставлять, дуже специфічні. Багато хто з них змушує подумати над архітектурою мови, деякі розраховані на глибокі знання. Є й ті, що більше схожі на головоломки чи стосуються нюансів, які відчути без практики дуже важко. У цій статті розробник Саранс Сінг (Saraans Singh) наводить кілька таких питань щодо Java. З відповідями, зрозуміло. Хитрі питання з Java, які часто ставлять на співбесідах - 11. Що станеться, якщо помістити оператор return або System.exit() у блок try/catch? Це дуже популярне питання "на засипку" з Java. Хитрість його в тому, що багато програмістів вважають, що блок finallyвиконається у будь-якому випадку. Дане питання ставить цю концепцію під сумнів шляхом розміщення оператора returnв блок try/catchабо виклику з блоку try/catchоператора System.exit (). Відповідь на це каверзне питання: блок finallyбуде виконуватися при поміщенні оператора returnв блок try/catchі не буде виконуватися при виклику з блоку try/catchоператора System.exit (). 2. Чи підтримує мова Java множинне спадкування? Це дуже хитре питання. Інтерв'юери часто говорять: якщо мова C++ може підтримувати безпосереднє успадкування, то чому Java не може? Відповідьдещо складніший, ніж може здатися, оскільки Java підтримує множинне успадкування типів, адже інтерфейс у ньому може розширювати інші інтерфейси. Але множинне спадкування реалізацій мова Java не підтримує. 3. У разі, коли метод генерує виняток NullPointerExceptionу батьківському класі, чи можна його перевизначити методом, що генерує RuntimeException? Ще одне каверзне питання, пов'язане з концепціями навантаження та перевизначення. Відповідь: у перевизначеному методі можна спокійно генерувати батьківський клас виключення NullPointerException – RuntimeException, але не можна зробити те саме з виключенням типу, що перевіряється Exception. 4. Як гарантувати можливість звернення Nниток до Nресурсів без взаємного блокування? Якщо ви не надто добре знаєтеся на написанні багатопоточного коду, це питання буде для вас по-справжньому каверзним. Він може виявитися непростим навіть для досвідченого програміста, який не мав справи із взаємними блокуваннями та станами гонки. Весь трюк тут упорядкований: запобігти взаємному блокуванню можна завдяки звільненню ресурсів у порядку, зворотному порядку їх отримання. 5. У чому різниця між класами StringBufferта StringBuilderв мові Java? Класичне питання мови Java, яку деякі розробники вважають хитрим, а інші – дуже простим. Клас StringBuilderз'явився в JDK 1.5 і єдина відмінність між ними полягає в тому, що методи класу StringBuffer, наприклад, length()або capacity()синхронізовані append(), в той час як відповідні методи класуStringBuilder- Ні. З огляду на цю фундаментальну відмінність, конкатенація рядків за допомогою StringBuilderвиконується швидше, ніж за допомогою StringBuffer. Насправді, використовувати StringBufferне рекомендується, оскільки в 99% сценаріїв використання конкатенація рядків проводиться в тій же нитці. 6. Що поверне вираз 1.0/0.0? Чи призведе воно до генерації виключення чи помилки під час компіляції? Ще одне каверзне питання щодо класу Double. Хоча розробники Java знають про існування простого типу даних double і класу Double, при виконанні операцій з плаваючою точкою вони не приділяють достатньої уваги Double.INFINITY, NaNі -0.0правилам, яким підпорядковуються пов'язані з ними арифметичні обчислення. Відповідь на це питання проста: генерації виняткуArithmeticExceptionне станеться, буде повернено значення Double.INFINITY. 7. Що буде, якщо спробувати вставити в ключовий об'єкт, що вже є в ній? Це каверзне питання – частина іншого питання, що часто ставиться: як працюють у мові Java? – популярна тема для заплутаних та каверзних питань з мови Java. Відповідь така: якщо спробувати повторно вставити ключ у , він замінить старий, оскільки клас не допускає ключів, що дублюються. А той самий ключ означає такий самий хеш-код, тому він потрапить у те саме місце в хеш-сегменті. За матеріалами QuoraHashMapHashMapHashMapHashMapHashMap
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ