Ако някога сте се подготвяли за интервю за позиция Java програмист or сте издържали сертификационен изпит (не непременно за програмиране), тогава вероятно вече сте забелязали, че въпросите, задавани там, са много специфични. Много от тях ви карат да мислите за дизайна на езика. Някои са предназначени да изследват дълбочината на вашите знания. Има въпроси, които прorчат повече на пъзели, отколкото на нещо друго, докато други са свързани с нюанси на езика, които са много трудни за възприемане без практика. В тази статия разработчикът Sarans Sing представя няколко такива въпроса за Java. С отговори, разбира се.
1. Какво се случва, ако поставя оператор за връщане or System.exit() в блок try/catch? Това е много популярен и фин въпрос за Java. Номерът е, че много програмисти вярват, че блокът

finally
винаги се изпълнява. Чрез поставяне на return
изявление в try/catch
блок or извикване System.exit()
от вътрешността на try/catch
блок, въпросът поставя под съмнение това убеждение. Отговорът на този труден въпрос е: блокът finally
ще бъде изпълнен, когато return
оператор е поставен в try/catch
блок, но няма да бъде изпълнен, когато System.exit()
е извикан от try/catch
блок. 2. Java поддържа ли множествено наследяване? Това е много труден въпрос. Интервюиращите често питат: "Ако C ++ поддържа директно множествено наследяване, тогава защо Java не може?" Отговорът _е малко по-сложно, отколкото може да изглежда, тъй като Java поддържа множествено наследяване на типове. В крайна сметка един Java интерфейс може да разшири други интерфейси. Въпреки това Java не поддържа множествено наследяване на реализации. 3. Ако метод в родителски клас хвърля NullPointerException
s, може ли да бъде заменен от метод, който хвърля RuntimeException
s? Това е друг труден въпрос, свързан с претоварването и отмяната. Отговор: Подменен метод може безопасно да хвърли NullPointerException
родителския клас на 's — RuntimeException, но не можете да направите същото с проверен тип изключение като Exception
. 4. Как гарантирате, че N
нишките могат да имат достъп до N
ресурси без блокиране? Ако писането на многонишков code не е вашата силна страна, може наистина да се спънете по този въпрос. Може да бъде трудно дори за опитен програмист, който не се е сблъсквал с безизходици и състезателни условия. Целият трик тук е в реда: можете да предотвратите задънени блокировки, като освободите ресурси в обратния ред, в който са бor придобити. 5. Каква е разликата между класовете StringBuffer
и StringBuilder
в Java? Това е въпрос на класически език Java, който някои разработчици намират за труден, а други – за много прост. Класът StringBuilder
се появи в JDK 1.5. Единствената разлика между тези класове е, че StringBuffer
методите на , като length()
, capacity()
и append()
, са синхронизирани, докато съответните методи вStringBuilder
не са. Тази фундаментална разлика означава, че конкатенацията на низове е по-бърза с StringBuilder
отколкото с StringBuffer
. Всъщност използването StringBuffer
не се препоръчва, тъй като конкатенацията на низове се извършва в една и съща нишка 99% от времето. 6. Какъв е резултатът от изчисляването на израза 1.0/0.0? Ще произведе ли изключение or грешка при компилация? Това е още един труден въпрос за класа. Разработчиците на Java са наясно със съществуването на примитивен двоен тип данни и клас , но когато извършват операции с плаваща запетая, те не обръщат достатъчно внимание на , , и правилата, управляващи свързаните аритметични изчисления. Отговорът на този въпрос е прост: а
Double
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
няма да се хвърлят; изразът се оценява на Double.POSITIVE_INFINITY
. 7. Какво се случва, ако се опитате да вмъкнете ключ в, HashMap
който вече съдържа този ключ? Този труден въпрос е част от друг често задаван въпрос: How HashMap
работи в Java? HashMap
е популярен източник на объркващи и трудни въпроси за Java. Ето отговора: ако се опитате да вмъкнете отново ключ в HashMap
, старият ключ ще бъде заменен, тъй като HashMap
класът не позволява дублиращи се ключове. И същият ключ ще получи същия хеш code, което означава, че ще се окаже на същото място в хеш контейнера. Въз основа на материали на Quora
GO TO FULL VERSION