Якщо ви хоч раз готувалися до співбесіди на посаду Java-програміста або складали будь-який іспит (не обов'язково з програмування) для отримання сертифікату, то, швидше за все, вже встигли помітити, що питання, які там ставлять, дуже специфічні. Багато хто з них змушує подумати над архітектурою мови, деякі розраховані на глибокі знання. Є й ті, що більше схожі на головоломки чи стосуються нюансів, які відчути без практики дуже важко. У цій статті розробник Саранс Сінг (Saraans Singh) наводить кілька таких питань щодо Java. З відповідями, зрозуміло. 1. Що станеться, якщо помістити оператор 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. Відповідь така: якщо спробувати повторно вставити ключ у , він замінить старий, оскільки клас не допускає ключів, що дублюються. А той самий ключ означає такий самий хеш-код, тому він потрапить у те саме місце в хеш-сегменті. За матеріалами QuoraHashMap
HashMap
HashMap
HashMap
HashMap
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ