Domande
Le risposte sono in fondo alla pagina
1. Quale delle seguenti affermazioni sugli array è vera?
- Un array può contenere solo primitivi
- Un array può contenere tipi primitivi ed oggetti
- Gli array non possono essere iterati con il nuovo ciclo for (java 5)
- Gli array non possono contenere riferimenti ad oggetti
2. Che cosa è esattamente la signature di un metodo?
- Il nome del metodo
- Il nome del metodo, più la lista dei parametri
- Il nome del metodo, più la lista dei parametri, più il tipo di ritorno
- Il nome del metodo, più la lista dei parametri, più le eccezioni sollevate
- Il nome del metodo, più la lista dei parametri, più il tipo di ritorno, più le eccezioni sollevate
3.Quale delle seguenti affermazioni riguardanti i costruttori è vera
- I costruttori sono metodi
- I costruttori sono metodi statici
- Una classe eredita anche i costruttori dalla sua superclasse
- I costruttori possono essere overloaded
4.Il codice che segue è corretto?
interface Bar {
void doIt();
}public class Foo {
public Bar getBar() {
return new Bar() {
public void doIt() {
System.out.println("Hello, World");
}
};
}
}
- No, perché è possibile avere delle 'inner class' ma non delle 'inner interface'
- No, perché non si possono istanziare direttamente delle interfacce, ma solo oggetti appartenenti ad una classe che le implementi
- No, ma lo sarebbe se il metodo doIt() fosse final
- Si
5.Quale è l'output del seguente codice?
public class LiteralStrings {
public static void main(String[] args) {
String a = "Test";
String b = "Test";
a.toUpperCase();
if (a==b){
System.out.println("Equal");
}
else {
System.out.println("Not Equal");
}
}
}
- Non compila
- Equal
- Not Equal
6.I costruttori possono essere synchronized?
- No
- Si
- Solo i 'no-args constructor'
- Solo i costruttori di classi che non siano nested
7.Il codice nel riquadro è corretto?
1 public class Foo {
2 public synchronized void doThis() {}
3 }4 public class FooBar extends Foo {
5 public synchronized void doThis() {
6 System.out.println(this + “calling doThis”);
7 super.doThis();
8 }
9 }
- Si, perchè i lock sono rientranti
- No, c'è un deadlock alla riga 7
- No, c'è un deadlock alla riga 2
- Si, ma solo per Java 5 in cui è stato revisionato il Memory Model
8.Cos'è un ThreadLocal?
- Un oggetto che raggruppa diversi thread
- Un oggetto che implementa la tecnica del Thread Confinement, ossia dell'associazione di particolari dati a particolari thread: in alcune situazioni permette di evitare la sincronizzazione esplicita
- Una classe helper per gestire thread
- Un oggetto che permette il passaggio di valori fra thread
9.Il codice nel riquadro rappresenta un buon esempio di incapsulamento?
public class Foo { public Bar getIt() {
return bar;
} public void putIt(Bar bar) {
this.bar = bar;
} private Bar bar = new Bar();
}
- Si
- No
- Dipende da come è implementata la classe Bar
10.Il codice nel riquadro è corretto?
1 public class Foo {2 protected String toString() {
3 return super.toString();
4 }5 }
- Si
- No, errore a runtime
- No, poiché la riga 2 non compila
- No, poiché la riga 3 non compila
11.Quale delle seguenti affermazioni è vera?
- Il tipo di ritorno di un metodo può essere covariante (per JDK >= 1.5)
- Il tipo di ritorno di un metodo può essere controvariante (per JDK >= 1.5)
- Le eccezioni sollevate da un metodo sono controvarianti
12.E' possibile ottenere dei “memory leaks” in Java?
- Non più, poiché la revisione del Memory Model effettuata con Java 5 lo impedisce
- No, per via della Garbage Collection
- Si, ma solo con alcuni particolari algoritmi di Garbage Collection
- Si, tutti i linguaggi dotati di Garbage Collection possono comunque soffrire del problema degli “unintentional object references”
13.Il codice nel riquadro è corretto?
public class Indecisa {
public static void main(String[] args) {
System.out.println(decisione());
} static boolean decisione() {
try {
return true;
} finally {
return false;
}
}
}
- No, non compila
- No, errore a runtime
- Si, stampa truefalse
- Si, stampa true
- Si, stampa false
14.Il codice nel riquadro è corretto?
import java.io.IOException;
public class TestJug {
public static void main(String[] args) {
try {
System.out.println("Ciao, JUG Roma!");
} catch (IOException e) {
System.out.println("Ma le println falliscono!?!?!?!");
}
}
}
- No, non compila
- No, errore a runtime
- Si, stampa ambedue le stringhe
- Si, stampa “Ciao, JUG Roma!”
15.Qual'è l'output del seguente codice?
class Counter {
private static int count;
public static void increment() { count++; }
public static int getCount() { return count; }
}class Dog extends Counter {
public Dog() { }
public void bau() { increment(); }
}class Cat extends Counter {
public Cat() { }
public void miao() { increment(); }
}public class Test {
public static void main(String[] args) { Dog dogs[] = { new Dog(), new Dog() };
for (Dog d: dogs) {
d.bau();
}
Cat cats[] = { new Cat(), new Cat(), new Cat() };
for (Cat c: cats) {
c.miao();
}
System.out.print(Dog.getCount() + " Bau e ");
System.out.println(Cat.getCount() + " Miao");
}
}
- 5 Bau e 5 Miao
- 2 Bau e 3 Miao
- 3 Bau e 2 Miao
- 10 Bau e 10 Miao
- Non compila
16.Qual'è l'output del seguente codice?
1 class Base {
2 public String className = "Base";
3 }4 class Derivata extends Base {
5 private String className = "Derivata";
6 }7 public class QuestioniPrivate {
8 public static void main(String[] args) {
9 System.out.println(new Derivata().className);
}
}
- Errore di compilazione alla riga 9
- Errore di compilazione alla riga 5
- Stampa “Base”
- Stampa “Derivata”
- Errore a runtime
17.Qual'è l'output del seguente codice?
public class Multicast {
public static void main(String[] args) {
System.out.println((int) (char) (byte) -1);
}
}
- -1
- 65535
- 255
- 1
18.Qual'è il problema di questa Servlet?
public class Fattorizzatore implements Servlet {
private long count = 0; public long getCount() { return count; } public void service(ServletRequest req, ServletResponse resp) {
BigInteger i = extractFromRequest(req);
BigInteger[] factors = factor(i);
++count;
encodeIntoResponse(resp, factors);
}}
- Nessuno, la manderei subito in produzione!
- Bisognava fare l'override di doGet() o doPost() e non di service()
- Non è thread-safe
- E' impossibile fattorizzare un numero primo
- Fattorizzare un numero è operazione troppo dispendiosa, si rischia un TCP timeout
19.Qual'è il possibile output di questo codice?
public class Infame {
static int x = 0, y = 0;
static int a = 0, b = 0; public static void main(String[] args) throws InterruptedException { Thread uno = new Thread(new Runnable() {
public void run() {
a = 1;
x = b;
}
}); Thread due = new Thread(new Runnable() {
public void run() {
b = 1;
y = a;
}
}); uno.start();
due.start();
uno.join();
due.join();
System.out.println("( "+ x + "," + y + ")");
}
}
- (1,0) oppure (0,1)
- (1,0) oppure (0,1) oppure (1,1)
- (1,0) oppure (0,1) oppure (1,1) oppure (0,0)
- Non compila
- Nessun output, non termina mai
20.Qual'è il problema di questo codice?
public class MioThread extends Thread {
private boolean hofatto; public void fermati() {
hofatto = true;
} public void run() {
while (!hofatto) {
// fai qualcosa…
}
}}
- Nessuno, anzi è il modo corretto di fermare un Thread poiché stop() è stato deprecato ormai dalla 1.0
- Potrebbe non fermarsi mai, nessuno assicura che che il ciclo veda il valore di 'hofatto'
- Nessuno, ma nella classe Thread c'è già implementato il metodo stop() per cui è inutile
21.I due metodi nell'esempio sono fra loro sincronizzati?
public class Esempio { public synchronized static void metodo1() {
//…
} public synchronized void metodo2() {
//…
}
}
- No, perchè il primo usa il lock dell'istanza, il secondo il lock dell'oggetto Esempio.class
- Si
- No, i metodi statici non possono essere sincronizzati perchè non hanno il this
- Si, ma è una cattiva pratica perchè i metodi statici usano uno qualsiasi dei lock delle istanze create
22.Quale delle seguenti affermazioni è vera?
- Le asserzioni sono un meccanismo sostitutivo per gestire le eccezioni, presente da java 1.4
- Le asserzioni sono utili per testare gli invarianti (condizioni che devono essere vere)
- Le asserzioni sono una novità di Java 5
23.Quale delle seguenti affermazioni è vera?
- I deadlock in Java non sono possibili perchè la gestione è in time-slicing
- La gestione dei Thread è dipendendente dalla piattaforma
- Per usare i Thread è obbligatoria la classe java.util.Thread
24.Quale delle seguenti affermazioni su HashMap è vera?
- Non permette chiavi nulle
- Non permette valori nulli
- Registra informazioni come coppie (chiave, valore)
- Gli elementi sono tornati nello stesso rodine in cui sono inseriti
25.Quale delle seguenti istruzioni assicura l'esecuzione del Garbage Collector?
- System.gc()
- Object.gc()
- Runtime.gc()
- System.free()
- Nessuna
26.Quale delle seguenti affermazioni su hashCode() ed equals() è vera?
- hashCode() deve restituire lo stesso valore di equals()
- se due oggetti hanno lo stesso hashCode(), equals() deve restituire true
- se per due oggetti equals()==true, allora devono avere lo stesso hashCode
- hashCode() ed equals() non hanno nessuna relazione
27.Come è possibile evitare la serializzazione di alcuni campi di un oggetto?
- Tramite la parola chiave synchronized
- Tramite la parola chiave volatile</risposta>
- Tramite la parola chiave transient
- Non è possibile
Risposte
Domanda 1
• La risposta esatta è la n. 2
Domanda 2
• La risposta esatta è la n. 2
Domanda 3
• La risposta esatta è la n. 4
Domanda 4
• La risposta esatta è la n. 4
Domanda 5
• La risposta esatta è la n. 2
Domanda 6
• La risposta esatta è la n. 1
Domanda 7
• La risposta esatta è la n. 1
Domanda 8
• La risposta esatta è la n. 2
Domanda 9
• La risposta esatta è la n. 2
Domanda 10
• La risposta esatta è la n. 3
Domanda 11
• La risposta esatta è la n. 1
Domanda 12
• La risposta esatta è la n. 4
Domanda 13
• La risposta esatta è la n. 5
Domanda 14
• La risposta esatta è la n. 1
Domanda 15
• La risposta esatta è la n. 1
Domanda 16
• La risposta esatta è la n. 1
Domanda 17
• La risposta esatta è la n. 2
Domanda 18
• La risposta esatta è la n. 3
Domanda 19
• La risposta esatta è la n. 3
Domanda 20
• La risposta esatta è la n. 2
Domanda 21
• La risposta esatta è la n. 1
Domanda 22
• La risposta esatta è la n. 2
Domanda 23
• La risposta esatta è la n. 2
Domanda 24
• La risposta esatta è la n. 3
Domanda 25
• La risposta esatta è la n. 5
Domanda 26
• La risposta esatta è la n. 3
Domanda 27
• La risposta esatta è la n. 3