lunedì 11 novembre 2013

Q51

Given:

import java.util.*;

public class SearchText {
     public static void main(String[] args) {
          Object[] array1 = new Object[3];
          array1[0] = "foo";
          array1[0] = 1;
          array1[0] = 'a';
          int index = Arrays.binarySearch(array1, "bar");
          System.out.println(index);
     }
}

What is the result?
A.
‘ 1
B.
0
C.
2
D.
Compilation fails
E.
An exception is thrown at runtime

 

La risposta è E.
binarySearch effettua una scansione di tutti gli elementi dell’array facendo un confronto tra il valore dell’elemento e il valore in ingresso "bar". Questo confronto è effettuato tramite il metodo compare dell’interfaccia Comparator.
Il metodo non gestisce un confronto tra elementi nulli e in quel caso scatena una java.lang.NullPointerException .
L’array dell’esercizio viene definito di tre elementi array1[0] , array1[1]   , array1[2] , ma solo l’elemento [0] quando si arriva a fare il binarySearch è diverso da null. Perciò quando si fanno i confronti si scatena l’eccezione :
Exception in thread "main" java.lang.NullPointerException
     at java.util.Arrays.binarySearch0(Unknown Source)
     at java.util.Arrays.binarySearch(Unknown Source)
     at SearchText.main(SearchText.java:9)

Riferimenti:


venerdì 8 novembre 2013

Q50

Give:
public class Test {
     public static void main(String[] args) {
          String svar = "sports cars";
          svar.replace(svar, "convertibles");
          System.out.printf("There are %3$s %2$s and %d trucks.", 5, svar, 2 + 7);
     }
}


 
What is the result?
 
A.
There are 27 sports cars and 5 trucks
 
B.
There are 27 convertibles and 5 trucks
 
C.
There are 9 sports cars and 5 trucks
 
D.
There are 9 convertibles and 5 trucks
 
E.
IllegalFormatConversionException is thrown at runtime
 
 
La risposta è D
La risposta è C

svar viene inizializzato a "sports cars" ma il replace la sostituisce interamente con "convertibles"

svar viene inizializzato a "sports cars" . Il replace la sostituisce interamente con "convertibles" ma svar non viene modificata, quindi rimane uguale in valore a "sports cars".

printf() stampa la stringa sostituendo le parti che rispettano la sintassi , quindi :

%3$s è il terzo ingresso scritto come stringa quindi 2+7.
Prima della stampa viene eseguita la somma (+) e quindi
%3$s=9
          %2$s è il secondo igresso scritto come stringa e quindi è il valore di svar e cioè:
%2$s=convertibles
%2$s= sports cars

%d è il primo ingresso scritto come digit e quindi
%d=5

Perciò si stampa There are 9 sports cars and 5 trucks
 
Per vedere effettivamente la sostituzione di “sports cars” con “convertibles” questa riga di codice :
svar.replace(svar, "convertibles");
deve essere sostituita con
svar = svar.replace(svar, "convertibles");

Q49

Which two statements are true about Rowset subinterfaces?

A.
A JdbcRowSet object provides a JavaBean view of a result set.

B.
A cachedRowset provides a connected view of the database.

C.
A FilteredRowSet object filter can be modified at any time.

D.
A webRowset returns JSON-formatted data.

Risposta A e C

Un JdbcRowSet è un wrapper attorno ad un oggetto ResultSet che rende possibile utilizzare il ResultSet come un JavaBeansTM.

Un oggetto CachedRowSet è un contenitore per righe di dati che memorizza le righe in memoria e che permette di operare senza sempre essere collegato alla relativa origine dati . Inoltre , si tratta di un componente JavaBeansTM ed è scorrevole , aggiornabile , e serializzabile

L’interfaccia FilteredRowSet implementa l’interfaccia RowSet ed estende la classe CachedRowSetTM e cerca di fornire metodi di interrogazione delle righe senza la complessità di un vero linguaggio di interrogazione.

WebRowSet è l' interfaccia standard che tutte le implementazioni di un WebRowSet devono implementare . Un oggetto WebRowSet offre tutte le funzionalità di un oggetto CachedRowSet ma inoltre può scrivere se stesso come un documento XML e anche leggere un documento XML per ottenere un oggetto WebRowSet. In pratica risponde alle moderne esigenze di comunicazione in rete trasformando i dati letti da un database in un foglio XML .

http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/JdbcRowSet.html

http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet.html

http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/FilteredRowSet.html

http://www.ce.unipr.it/people/poggi/teaching/docs/javaSE7.0Tutorial/jdbc/basics/webrowset.html

 

Q48

Given two classes in separate files:

package a.b;
//import statement
public class Parent {
     Child c = new Child();
}

package a.b.c;
public class Child {
}

Which two import statements can make the a.b.parent class compliable?
 
A.
import a.b.c.Parent;

B.
import a.b.c.Child;

C.
import a.b.c.*;

D.
import a.b.*;

E.
import a.*;

 
Risposta : B e C
La A non ha senso perché siamo dentro la classe Parent.
Le risposte D ed E non sono giuste perché la sintassi:
import xxx.yyy.zzz.*;
importa tutte le classi del package zzz e solo di quello. Quindi
import a.b.*;        importa esclusivamente le classi del package b (e non di c)
import a.*;           importa esclusivamente le classi del package a (e non di c e di b)

Riferimenti

Q47

Given:

public class Customer {
private int id;
private String name;
public int getId() {}
public String getName () {}
public Boolean add(Customer new) {}
public void delete (int id) {}
public Customer find (int id) {}
public Boolean update (Customer cust) {}}


What two changes should you make to apply the DAO pattern to this class?

A.
Make the customer class abstract.  

B.
Make the customer class an interface.

C.
Move the add, delete, find, and update methods into their own implementation class.

D.
Create an interface that defines the signatures of the add, delete, find and update command.

E.
Make the add, delete, find, and update methods private for encapsulation.

F.
Make the getName and getId methods private for encapsulation.
 
 
Risposta C e D

Una modellizzazione DAO prevede di fare un’interfaccia e poi una classe che la implementa :
(in realtà il pattern DAO si può realizzare in altri modi, anche senza interfacce. )

Con questo modello in mente si possono considerare queste modifiche al codice :

·        creare un’interfaccia

·        farla implementare dalla classe Costumer

·        implementare i metodi dell’interfaccia dentro Costumer

Quindi plausibilmente le risposte possono essere C e D.

La A è scartabile perché o si realizza il pattern DAO subito con classe concreta oppure con interfaccia.

La B si scarta perché la domanda parla di applicare il pattern DAO a questa classe. Quindi si presuppone di lasciare Costumer una classe.

La E e la F non hanno molto senso. Rendere privati i metodi li rende irraggiungibili fuori dalla classe. Invece la filosofia del pattern DAO è proprio di fare le operazioni in modo trasparente e quindi di richiamare i metodi della classe DAO da altre parti del codice.

Q46

Which code fragment is required to load a JDBC 3.0 driver?

A.
DriverManager.loadDriver ("org.xyzdata.jdbc.NetworkDriver");

B.
Class.forName("org.xyzdata.jdbc-NetworkDriver");

C.
Connection con = Connection.getDriver
("jdbc:xyzdata://localhost:3306/EmployeeDB");

D.
Connection con = DriverManager.getConnection
("jdbc:xyzdata://localhost:3306/EmployeeDB");

 
La risposta è B
Java offre un'interfaccia standard per l'accesso ai database chiamata JDBC.
Il lavoro lo fa la classe java.sql.DriverManager che è responsabile del caricamento dei driver che consentono l'accesso ad un database.
La prima cosa da fare è
try {
Class.forName("drivername");
}
catch (Exception e) {
System.err.println("Class not found!");
}
il metodo forName consente di ottenere un oggetto della classe Class che descrive una classe il cui nome è fornito come stringa (da cui il try .. catch perché la classe potrebbe non esistere).
Questo codice inizializza la classe e questo provvede a registrare il driver presso il DriverManager.
Solo dopo questo possiamo connetterci al db :
String url = "jdbc:odbc:dbname";
Connection db = DriverManager.getConnection(url);
Quindi il programma è in grado di utilizzare un oggetto di una classe che neanche conosce (in questo caso il driver JDBC-ODBC). Questo è possibile grazie al fatto che l'oggetto implementa un'interfaccia (l'interfaccia Connection) conosciuta al programma.


Riferimenti:

giovedì 7 novembre 2013

Q45

Given :

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class CowArray extends Thread {
     static List<Integer> myList = new CopyOnWriteArrayList<Integer>();
     public static void main(String[] args) {
          myList.add(11);
          myList.add(22);
          myList.add(33);
          myList.add(44);
          new CowArray().start();
          for (Integer i : myList) {
                try {
                     Thread.sleep(1000);
                }
                catch (Exception e) {
                     System.out.print("e1 ");
                }
                System.out.print(" " + i);
          }
     }


     public void run() {
          try {
                Thread.sleep(500);
          }
          catch (Exception e) {
                System.out.print("e2 ");
          }
          myList.add(77);
          System.out.print("size: " + myList.size() + ", elements:");
     }
}

What is the most likely result?

A.
size: 4, elements: 11 22 33 44


B.
size: 5, elements: 11 22 33 44


C.
size: 4, elements: 11 22 33 44 77


D.
size: 5, elements: 11 22 33 44 77


E.
a ConcurrentModification Exception is thrown


Risposta B

Q44

Which two are true about Singletons?

A.
A Singleton must implement serializable.


B.
A Singleton has only the default constructor.         


C.
A Singleton implements a factory method.  


D.
A Singleton improves a class’s cohesion.     


E.
Singletons can be designed to be thread-safe.         


 

Risposta BE.


Riferimenti Q39