Java Lastige Sollicitatievragen

Soms geleden schreef ik een artikel over Top 50 Java Programmeervragen. Onze lezers vonden het erg leuk. Dus vandaag zullen we eens kijken naar een aantal lastige interviewvragen in Java.

Java Lastige Interviewvragen

Dit zijn programmeervragen, maar tenzij je een diepgaand begrip van Java hebt, zal het moeilijk zijn om de uitvoer te raden en uit te leggen.

1. Null als Argument

We hebben overlappende functies en we geven null door. Welke functie zal worden aangeroepen en wat zal de uitvoer van het programma zijn?

public class Test {
	public static void main(String[] args) {
		foo(null);
	}
	public static void foo(Object o) {
		System.out.println("Object argument");
	}
	public static void foo(String s) {
		System.out.println("String argument");
	}
}

2. Gebruik “L” voor long

Kun je de uitvoer raden van de onderstaande statements?

long longWithL = 1000*60*60*24*365L;
long longWithoutL = 1000*60*60*24*365;
System.out.println(longWithL);
System.out.println(longWithoutL);

Uitleg van de Lastige Vraag over Null Argument

Volgens de specificaties van Java kiest de compiler, in geval van overbelasting, de meest specifieke functie. Overduidelijk is de String-klasse specifieker dan de Object-klasse, daarom wordt “String-argument” afgedrukt. Maar wat als we een andere methode in de klasse hebben, zoals hieronder.

public static void foo(StringBuffer i){
	System.out.println("StringBuffer impl");
}

In dit geval zal de Java-compiler een fout genereren met de melding “De methode foo(String) is dubbelzinnig voor het type Test”. String en StringBuffer hebben geen overervinghiërarchie. Dus geen van beide is specifieker dan de ander. Een methode is specifieker dan een andere als elke oproep die door de eerste methode wordt afgehandeld, kan worden doorgegeven aan de andere zonder een compileerfout van het type. We kunnen een String als parameter doorgeven aan een methode met een Object-argument en een methode met een String-argument, maar niet aan een methode met een StringBuffer-argument.

Uitleg voor Lange Variabele

De uitvoer van het codefragment zal zijn:

31536000000
1471228928

We stellen expliciet de eerste variabele in als lang door een “L”-achtervoegsel toe te voegen. Zo zal de compiler het als lang behandelen en het toewijzen aan de eerste variabele. Voor de tweede instructie zal de compiler de berekening uitvoeren en het behandelen als een 32-bits integer. Aangezien de uitvoer buiten het bereik van de maximale integerwaarde (2147483647) ligt, zal de compiler de meest significante bits inkorten en deze vervolgens toewijzen aan de variabele. De binaire equivalent van 1000*60*60*24*365L = 011101010111101100010010110000000000 (36 bits). Na het verwijderen van de 4 meest significante bits om in een 32-bits int te passen, wordt de nieuwe waarde = 01010111101100010010110000000000 (32 bits). Dit komt overeen met 1471228928 en dus de uitvoer. Onlangs heb ik een YouTube-videoserie gemaakt over lastige Java-programma’s.

Je kunt meer Java-voorbeeldprogramma’s bekijken op onze GitHub Repository.

Source:
https://www.digitalocean.com/community/tutorials/java-tricky-interview-questions