Sei sulla pagina 1di 27

Nel diagramma degli stati di un thread A in

java, la transizione tra lo stato di blocked allo Dal completamento di un’operazione di I/O o dal
stato ready da quali eventi può essere causata? rilascio del lock intrinseco dell’oggetto da parte di
1. Dal completamento di un’operazione di I/O o un altro thread che aveva causato il passaggio di A
dal rilascio del lock intrinseco dell’oggetto da da running a blocked
parte di un altro thread che aveva causato il
passaggio di A da running a blocked
2. Dal completamento di un’operazione di I/O
3. Dalla chiamata da parte di un altro thread
del metodo notifyAll all’interno di un metodo
dell’oggetto sul quale A si è messa in attesa
4. Dal rilascio del lock intrinseco dell’oggetto da
parte di un altro thread che aveva causato il
passaggio di A da running a blocked

Quando un thread A in un programma Java è


bloccato dopo aver provato ad eseguire un
metodo synchronized di un oggetto O mentre
un altro thread B stava già eseguendo .... dello
stesso oggetto, quale evento lo può far uscire
da questo stato?
1. il fatto che il thread B termini l'esecuzione il fatto che il thread B termini l'esecuzione del
del metodo synchronized metodo synchronized

2. il fatto che thread B chiami il metodo


notifyAll all’interno di un metodo dell’oggetto
O
3. il fatto che lo scheduler lo selezioni per
l’assegnazione del quanto di tempo

Nella piattaforma Node.js i programmi scritti


in Javascript:
1. sono di norma eseguiti in un unico thread di
controllo;
2. non potendo implementare diversi thread di
controllo sono inadatti a realizzare server e
applicazioni distribuite in generale;
Sono di norma eseguiti in un unico thread di
3. possono essere eseguiti in più thread di controllo.
controllo grazie al fatto che il linguaggio
contiene una classe thread e meccanismi
per la gestione della concorrenza;
4. se realizzano un server di qualche genere
devono adottare un approccio multithread,
con un thread per l’ascolto delle richieste e
un server per la gestione di ogni richiesta.

Il controllo dell’accesso di più thread Java a oltre alla specifica del qualificatore synchronized
diverse operazioni (tanto in lettura quanto in nei metodi per i quali si vuole forzare la mutua
scrittura) a metodi di risorse condivise in esclusione richiede un attenta definizione di
generale... condizioni per il blocco (messa in attesa) e
risveglio (notifica) dei thread;
1. richiede la specifica del qualificatore
synchronyzed per i metodi per i quali si
vuole forzare la mutua esclusione ma anche
la notifica del metodo notify da parte di chi
termina l’esecuzione del metodo in mutua
esclusione per svegliare chi è stato bloccato;
2. non è possibile con l’approccio a monitor
adottato da java ma richiede l’uso di
semafori;
3. richiede semplicemente synchronized per i
metodi per i quali si vuole forzare la mutua
esclusione;
4. oltre alla specifica del qualificatore
synchronized nei metodi per i quali si vuole
forzare la mutua esclusione richiede un
attenta definizione di condizioni per il blocco
(messa in attesa) e risveglio (notifica) dei
thread;

Un'istruzione in Java:
1. di norma non si deve considerare atomica
ma composta da operazioni base
interrompibili dallo scheduler;
di norma non si deve considerare atomica ma
2. può essere resa atomica mediante composta da operazioni base interrompibili dallo
synchronized; scheduler;
3. in alcuni casi, per esempio gli incrementi e
decrementi di variabile, è atomica;
4. in alcuni casi pur non essendo atomica è
composta da un numero talmente esiguo di
istruzioni da poter essere considerata tale;

Un thread A è bloccato perché ha provato ad


eseguire un metodo synchronized di un oggetto
O mentre un altro thread B stava già
eseguendo lo stesso metodo dello stesso
oggetto. Il thread B chiama il metodo wait. In
che stato passa il thread A? Ready
1. Ready
2. Running
3. Blocked
4. Waiting

Se scriviamo un algoritmo che occupa molto la Causiamo un lungo ritardo nella gestione degli
CPU in un programma node.js eventi che possono verificarsi dopo l’inizio della
1. È meglio associarlo a un thread di controllo gestione dell’algoritmo
creato con una libreria base del linguaggio JS
2. Lo scheduler interno allo scadere del tempo
metterà in stato di ready il task associato
all’algoritmo...
3. La piattaforma attiverà un altro thread del
pool che di norma gestisce l’IO per gestire...
4. Causiamo un lungo ritardo nella gestione
degli eventi che possono verificarsi dopo
l’inizio della gestione dell’algoritmo

A quali entità sono associati i Lock gestiti


automaticamente dalla macchina virtuale
Java?
1. Metodi
Oggetti
2. Interfacce
3. Oggetti
4. Classi

Quando un thread in un programma Java,


riceve una notifica attraverso il metodo
notifyAll, in quale stato viene spostato (in
riferimento al ciclo di vita dei thread)?
1. waiting Ready

2. ready
3. blocked
4. running

Quando un thread invoca il metodo wait()


succede che:
L’esecuzione viene sospesa a tempo
1. L’esecuzione viene sospesa a tempo
indeterminato e il lock rilasciato.
indeterminato e il lock rilasciato
2. [non abbiamo le altre opzioni]

In Java, l'esecuzione di un metodo 1. La terminazione del metodo (o l’invocazione


synchronized comporta l'acquisizione di un del metodo wait()).
lock associato all'oggetto su cui viene invocato 2. L'invocazione del metodo wait()
il metodo. QUALI eventi provocano il rilascio
del lock da parte della macchina virtuale?
(forse 2 risposte)
1. La terminazione del metodo (o l’invocazione
del metodo wait()).
2. La scadenza di un quanto di tempo
predeterminato. (forse la seconda risposta)
3. [non abbiamo le altre risposte]

Il quantificatore synchronized applicato ad un


blocco di codice Java significa che viene
eseguito in mutua esclusione rispetto:
Agli altri metodi o blocchi dello stesso oggetto.
1. Agli altri metodi o blocchi dello stesso
oggetto.
2. [non abbiamo le altre opzioni]

Db.query(“select x from table y”, function (result) {


doSomethingwith(result); //A
});

doSomethingwithoutResult(); //B

L’istruzione A viene eseguita (si supponga che Dopo B


la funzione doSomethingWithoutResult() non
abbia immediatamente un operazione di I/O)
1. prima di B;
2. prima o dopo B (dipende dallo scheduler);
3. in un altro thread di controllo;
4. dopo B;

Il ciclo di vita di un thread in Java è il seguente:


con l’istruzione new Thread() viene creato un
nuovo thread
l’invocazione del metodo start() porta il thread
Qual è il ciclo di vita di un thread? nello stato ready (o alive) e gli fa eseguire il
metodo run()
quando il metodo run() termina con un
comando return, il thread passa allo stato
terminato e non può più essere fatto ripartire.

Come si utilizzano i thread in Java? Ci sono più modi per creare thread in Java. Il primo
è quello di creare una sottoclasse di Thread,
usando la keyword extends:
class MyThread extends Thread {
public void run() {
// ...
}
}
per creare e far partire un oggetto Thread si
eseguono le istruzioni
Thread a = new MyThread();
a.start();
Il secondo è quello di estendere la classe
Runnable nei casi in cui abbiamo bisogno che una
classe erediti da più classi:
class MyThread implements Runnable {
public void run() {
// ...
}
}
Per creare un oggetto:
Thread b = new Thread(new Run());
b.start();

Per eseguire un metodo synchronized, un


thread, in un programma scritto in Java, deve
acquisire il lock associato all'oggetto su cui Il lock può essere rilasciato se il metodo
viene invocato il metodo. L'acquisizione è synchronized termina o se il thread si mette in
interamente gestita dalla macchina virtuale. wait aspettando una notify.
Spiegare quali eventi nel programma
provocano il rilascio del lock.

Il metodo wait() rilascia il lock sull’oggetto e


sospende il thread fino alla ricezione di un
segnale di notifica sull’oggetto stesso da parte di
un altro thread.
Che funzione hanno i metodi wait(), notify() e
Il metodo notify() risveglia un thread in maniera
notifyAll()?
non deterministica (a caso) tra quelli che si
erano messi in attesa con wait
notifyAll() risveglia tutti i thread e tutti iniziano
a contendersi il lock.

Sintassi per i blocchi di codice:


synchronized(oggetto) { // codice }
Spiegare il qualificatore "synchronized" per
metodi e blocchi di codice, e mostrare la Serve per garantire la mutua esclusione ai blocchi
sintassi per quest'ultimo. di codice. È obbligatorio usarlo per dichiarare
metodi che vogliono eseguire il lock su un
determinato oggetto.

Che cos'è un monitor in Java? Un monitor è un costrutto che consente di


1. avere mutua esclusione nell’accesso a
determinati blocchi di codice
2. poter bloccare un thread, in attesa del
verificarsi di una certa condizione
3. poter segnalare ai thread in attesa che le
condizioni bloccanti sono cambiate
In Java, un monitor è un qualunque oggetto dotato
di almeno un metodo synchronized.
Ogni monitor è dotato di una coda per i thread
bloccati dal meccanismo della mutua esclusione e
una per i thread in attesa per via di una wait().

Quale evento può fare uscire un thread dallo I metodi notify() e notifyAll() e poi passano allo
stato di waiting e in cosa passa poi? stato di ready.

È un concetto simile al deadlock. Un livelock si


verifica quando un gruppo di azioni (thread, ma
anche processi) giungono in un insieme di stati
dove non risultano bloccati ma ciononostante
Cosa si intende per livelock? Fare non possono progredire.
eventualmente riferimento a situazioni Se due thread devono “salutarsi” e hanno due
concrete non necessariamente di natura modi per farlo (inchinarsi o stringersi la mano) e se
informatica l’algoritmo prevede che provino ciclicamente un
modo o l’altro finché l’altro thread non saluta allo
stesso modo allora ci troviamo in un livelock. Per
evitare questa situazione si ha la necessità di una
sincronizzazione iniziale.

Situazione in cui, all’interno di un programma, non


tutti i thread riescono ad accedere alle risorse.

Che cosa vuol dire starvation? Esempio: nelle code per priorità se c’è un thread a
bassa priorità che arriva al tempo t0 esso non sarà
servito se in seguito arriveranno altri thread con
più alta priorità di lui.

Scrivere il codice del metodo preleva in modo public synchronized void preleva() {
da garantire il corretto coordinamento delle while (cont == 0) {
operazioni attraverso l'uso di wait e notify.
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}}
this.cont--;
notifyAll();
}

La situazione di deadlock si verifica quando ogni


membro di un gruppo di azioni (nel nostro caso i
thread, ma la cosa vale anche per i processi) è in
attesa che qualche altro membro rilasci un lock; in
Che cosa significa deadlock? Fare un esempio pratica si tratta di un’attesa circolare che non
termina mai.
Esempio: supponiamo di avere due thread t0 e t1
che chiamato join l'uno con l'altro, e quindi
entrano in un ciclo che non si completerà mai.

Nel contesto attuale delle tecnologie web, il


browser:
1. È semplicemente un sistema per la richiesta
di pagine HTML, contenuti multimediali
associati, e loro rendering sullo schermo
dell’utente
2. È un sistema per la richiesta di pagine HTML
e contenuti multimediali associati tramite
protocollo HTTP, che ne gestisce anche il
rendering sullo schermo dell’utente. Le
È un ambiente composto ed estensibile,
librerie per lo sviluppo di web application (ad
comprendente di norma un interprete JavaScript,
esempio DOM) sono presenti ma non attive
librerie che implementano API quali il DOM,
di default, per risparmiare memoria
funzionalità di supporto allo sviluppo di web
3. È un sistema modulare, con funzionalità application, oltre la semplice rendering delle
base comuni (rendering delle pagine HTML, pagine HTML.
anche comprendendo file CSS) e altre
funzionalità instabili su richiesta in stile
plugin (in particolare la libreria DOM per lo
sviluppo di web application
4. È un ambiente composto ed estensibile,
comprendente di norma un interprete
JavaScript, librerie che implementano API
quali il DOM, funzionalità di supporto allo
sviluppo di web application, oltre la semplice
rendering delle pagine HTML

Qual è la struttura di un elemento di base di un Un elemento base di un CSS è una regola che
CSS? specifica un selettore (una sorta di query per
1. Essendo un elemento minimo permette di identificare un tag o un insieme di tag nella
pagina) e una serie di coppie attributo-valore.
specificare che per un tag identificato da un
selettore vale un elemento stilistico (in
forma di coppia attributo-valore)
2. Ogni elemento base di un file CSS permette
di indicare uno stile (sotto forma di un
insieme coppie attributo-valore) da
associare a elementi specificate sulla base
della posizione nell’albero DOM
3. Un elemento base di un CSS è una regola
che associa a un tag (o un elenco di tag) un
insieme di elementi stilistici (nella forma di
coppie attributo-valore)
4. Un elemento base di un CSS è una regola
che specifica un selettore (una sorta di query
per identificare un tag o un insieme di tag
nella pagina) e una serie di coppie attributo-
valore

Una media query in un CSS permette:


1. Di specificare regole di adattività dei
contenuti (tanto in termini di stile che di
struttura del documento HTML) sulla base
delle caratteristiche del device usato per
visualizzare la pagina
2. Esclusivamente di cambiare la posizione e
dimensione di blocchi della pagina, in modo
da poter adattare la presentazione a
Di specificare regole di adattività dei contenuti
schermi più alti che larghi (come quelli degli
(tanto in termini di stile che di struttura del
smartphone).
documento HTML) sulla base delle caratteristiche
3. La definizione di regole statistiche (insiemi di del device usato per visualizzare la pagina
coppie attributo-valore) selezionate in base
alle caratteristiche del medium usato (che
può essere lo schermo del device, oppure
una stampante o altro)
4. Di adattare i contenuti alle caratteristiche
dello schermo del device usato, grazie alla
presenza di variabili che possono
considerare attributi come la larghezza dello
schermo.

Qual è, in estrema sintesi, il ruolo del


linguaggio HTML?
1. HTML, nella sua versione 5, è un linguaggio
per la programmazione di pagine web,
compreso lo stile estetico e la capacità di
reagire ad eventi generati dall'utente
2. HTML, nella sua versione 5, è un linguaggio
HTML, nella sua versione 5, è un linguaggio di
di markup per definire contenuti di una
markup per la specifica di contenuti e struttura di
pagina web e relativo stile di presentazione
pagine web
3. HTML, nella sua versione 5, permette la
specifica della struttura di contenuti web, tra
i quali elementi semantici il cui uso scorretto
viene identificato e segnalato dal browser
4. HTML, nella sua versione 5, è un linguaggio
di markup per la specifica di contenuti e
struttura di pagine web
JavaScript è:
1. Un linguaggio di scripting interpretato
derivante da una riduzione di Java adeguata
all’esecuzione di semplici script all’interno di
browser web
2. Un linguaggio di scripting interpretato e
dinamico pensato per scripting all’interno di
un browser web, ma oggi estendibile grazie
Un linguaggio di scripting interpretato, dinamico e
alla possibilità di importare librerie scritte in
debolmente tipizzato inizialmente pensato per
alti linguaggi
l’esecuzione di semplici script all’interno del
3. Un linguaggio di scripting interpretato, browser web
dinamico e debolmente tipizzato
esclusivamente usabile all’interno di browser
per realizzare applicazioni, oggi anche
piuttosto complicate
4. Un linguaggio di scripting interpretato,
dinamico e debolmente tipizzato
inizialmente pensato per l’esecuzione di
semplici script all’interno del browser web

In riferimento all’architettura AJAX, JavaScript


è usato:
1. Il tier di presentazione
2. Per il tier di presentazione ma può anche
Per il tier di presentazione ma può anche
realizzare almeno parte della logica
realizzare almeno parte della logica applicativa
applicativa
3. Solo per il tier di logica
4. Sempre sia per il tier di logica applicativa e di
presentazione

Dato l’oggetto JavaScript definito come segue:


var cat = {colour: “grey”, name: “Spot”, size: 46};
1. Per accedere al campo name si deve
indicare cat.name
2. La struttura dell’oggetto non è modificabile
dinamicamente Per accedere al campo name si deve indicare
cat.name
3. Il seguente assegnamento non è valido
perché comporterebbe un cambiamento di
tipo: cat.size = “Pippo”;
4. La dichiarazione è scorretta: un oggetto è
necessariamente istanza di una classe anche
in JavaScript

Dato l’array JavaScript definito come segue: var Per aggiungere un valore numerico 4 in coda un
myArr = {“Primo”, “Secondo”, “Terzo”}; comando adatto è myArr[myArr.length]=4
1. Per aggiungere un valore numerico 4 in coda
un comando adatto è
myArr[myArr.length]=4
2. per accedere all'ultimo elemento si deve
usare myarr[myarr.length];
3. il seguente assegnamento è valido
myarr[9]="decimo";
4. per aggiungere una stringa "zero" in testa
all'array, spostando automaticamente gli
elementi pre esistenti, il comando adatto è
myarr[0]="zero";
5. non è possibile inserire valori di tipo diverso
da stringa all'interno di questo array

Dato l’array JavaScript definito come segue: var


myArr = {“Primo”, “Secondo”, “Terzo”,
"Quarto"};
1. Per aggiungere un valore numerico 4 in coda
un comando adatto è
myArr[myArr.length]=4
2. per accedere all'ultimo elemento si deve
usare myarr[myarr.length]; Il seguente assegnamento è valido
3. il seguente assegnamento è valido myarr[9]="decimo";
myarr[9]="decimo";
4. per aggiungere una stringa "zero" in testa
all'array, spostando automaticamente gli
elementi pre esistenti, il comando adatto è
myarr[0]="zero";
5. non è possibile inserire valori di tipo diverso
da stringa all'interno di questo array

In Javascript è possibile modificare Si possono utilizzare funzioni Javascript di base


dinamicamente il contenuto e la struttura di offerte dal browser quali ad esempio
una pagina HTML, per selezionare un elemento document.getElement oppure funzionalità
della pagina... offerte da framework come ad esempio i selettori
di jQuery
1. è necessario l’utilizzo di framework quali
jQuery
2. non è possibile modificare il contenuto e la
struttura di una pagina HTML, al massimo si
possono rendere visibili o nascosti degli
elementi presenti nella pagina stessa
3. è necessario conoscere il percorso che porta
all’elemento da selezionare all’interno
dell’albero DOM
4. Si possono utilizzare funzioni Javascript di
base offerte dal browser quali ad esempio
document.getElement oppure funzionalità
offerte da framework come ad esempio i
selettori di jQuery
Quale affermazione è falsa? I documenti CSS
servono a…
1. Aggiungere contenuti extra in una pagina Aggiungere contenuti extra in una pagina web
web
2. [non abbiamo le altre opzioni]

Un menù di navigazione…
1. Richiede l’uso di JavaScript
2. Richiede l’uso del tag semantico nav definito
in HTML5
Tipicamente viene realizzato con una lista non
3. Richiede l’uso di un framework come jQuery,
che infatti è incluso nella maggior parte dei numerata (tag UL contenente voci indicatee con il
tal li) opportunamente associata a un certo stile
CMS sul mercato
estetico (ad esempio per fare apparire le voci non
4. Tipicamente viene realizzato con una lista come un elenco puntato) definito nel CSS
non numerata (tag UL contenente voci
indicatee con il tal li) opportunamente
associata a un certo stile estetico (ad
esempio per fare apparire le voci non come
un elenco puntato) definito nel CSS

function init() { var link =


document.getelementbyid(“foo”);
Settimeout(function changecolor(){
Link.style.color=”burlywood”; //A }, 1000); } Init();
L’istruzione indicata dal commento contenente
la lettera a quando viene eseguita?
Allo scadere di un timeout di circa 1 secondo a
1. Al passaggio del mouse sull’elemento DOM partire dal momento della chiamata della funzione
che abbia identificativo “foo” init
2. Allo scadere di un timeout di circa 1 secondo
a partire dal momento della chiamata della
funzione init
3. All’atto dell’inizializzazione della pagina
4. Ciclicamente a intervalli di circa 1 secondo a
partire dall’inizializzazione della pagina

function init() { Var link = Ad ogni click del mouse sull’elemento DOM che
document.getelementbyid(“foo”); abbia identificativo “foo”
Link.addeventlistener(“click”, function changecolor(){
Link.style.color=”burlywood”; //A ??? }); }
Init(); L’istruzione indicata dal commento con la
lettera A quando viene eseguita?
1. Ad ogni passaggio del mouse sull’elemento
DOM che abbia identificativo “foo”
2. All’atto dell’inizializzazione della pagina
3. Ad ogni click del mouse sull’elemento DOM
che abbia identificativo “foo”
4. Al primo click del mouse sull’elemento DOM
che abbia identificativo “foo”

Usando le API di Google Maps con JavaScript:


1. Si possono interrogare direttamente dei
servizi offerti da Google, senza importare
librerie e senza necessità di autenticarsi in
alcun modo
2. È necessario importare delle librerie e
indicare una chiave associata allo È necessario importare delle librerie e indicare una
sviluppatore per poter utilizzare le API di chiave associata allo sviluppatore per poter
Google Maps utilizzare le API di Google Maps
3. Non posso utilizzare mappe di Google da un
linguaggio di programmazione, ma solo
tramite interfaccia utente
4. Viene utilizzato il protocollo websocket per
evitare un elevato numero di messaggi HTTP
(in particolare di tipo GET)

Come gestisce il tipo di dato delle variabili


javascript?
Il tipo cambia in base a ogni assegnamento
1. Il tipo cambia in base a ogni assegnamento
2. [non abbiamo le altre opzioni]

I fogli di stile o CSS sono documenti che


permettono di dare una formattazione specifica
ad un documento HTML o XHTML. Grazie ai fogli
di stile è possibile la separazione tra il contenuto
di una pagina e il modo in cui il contenuto deve
essere presentato dal browser.
Cosa sono i fogli di stile o CSS e da cosa sono
formati?
Un foglio di stile CSS è formato da:
tag {attributo1: “valore1”; attributo2: “valore2”}

I CSS non servono ad aggiungere contenuti extra


in una pagina web.

Le applicazioni ibride sono da preferire alle più facili da mantenere


applicazioni native in Android perché (2
più portabili;
risposte)
1. interfacce omogenee
2. più facili da mantenere
3. più performanti
4. più portabili;

Per quali motivi l’architettura del sistema


operativo Android si basa su macchina
virtuale? (2 risposte)
1. aumenta il controllo sull’esecuzione dei
programmi; -aumenta il controllo sull’esecuzione dei
programmi;
2. sfrutta meglio le caratteristiche
dell’hardware ospitante; -disaccoppia il software dall’hardware ospitante;

3. migliora le performance di esecuzione;


4. disaccoppia il software dall’hardware
ospitante;

Le applicazioni native in Android sono scritte in


java e caricate dalla rete in file:
1. .apk
.apk
2. .dex
3. .jar
4. .class

Le applicazioni native in Android sono da


preferire alle applicazioni ibride perché:
1. interfacce omogenee
più performanti
2. più facili da mantenere
3. più performanti
4. più portabili;

Per poter effettuare delle query SPARQL a un È necessaria la presenza di un software che
insieme di triple RDF gestisca le triple RDF, come un DBMS gestisce una
base di dati relazionale;
1. è possibile solo effettuare query SPARQL a
DBPEDIA o altri server pubblicamente
accessibili via internet;
2. è necessario utilizzare il linguaggio JavaScript
e importare nella pagina delle librerie
proprietarie, scritte in altri linguaggi, che
gestiscano il file RDF ed elaborino la query
SPARQL;
3. è sufficiente avere a disposizione il file con le
triple RDF, Javascript è in grado di gestire
direttamente file RDF in formato JSON ed
effettuare query SPARQL;
4. è necessaria la presenza di un software che
gestisca le triple RDF, come un DBMS
gestisce una base di dati relazionale;

Un grafo derivante da un insieme di triple RDF


è caratterizzabile come:
1. in realtà si tratta di un albero; orientato ed etichettato
2. orientato ma non etichettato;
3. orientato ed etichettato;

Il risultato di una query SPARQL di tipo SELECT


è normalmente
1. Oggetti Javascript (formato JSON);
una tabella
2. in formato XML;
3. una tabella;
4. un insieme di triple RDF

Quale è l’unità informativa base di una base di


conoscenza RDF?
1. Una tripla (un soggetto, un predicato e un
oggetto, del quale il terzo può essere un tipo
di dato predefinito)
2. Una riga di una tabella dotata di un numero Una tripla (un soggetto, un predicato e un oggetto,
arbitrario di colonne del quale il terzo può essere un tipo di dato
3. Una tupla (un record con un numero predefinito)
arbitrario di campi, ognuno dotato di un tipo
di dato predefinito)
4. Un grafo, un insieme di nodi alcuni dei quali
possono essere un tipo di dato predefinito
collegati da archi

Il gestore di query SPARQL di DBPedia fornisce In una serie di formati, tra cui HTML per debug,
risultati: ma anche XML e JSON, a seconda dell’header o di
un parametro della richiesta HTTP
1. esclusivamente in formato HTML, per la
consultazione da parte di un utente umano;
2. sotto forma di tabella in formato HTML;
3. in una serie di formati, tra cui HTML per
debug, ma anche XML e JSON, sulla base di
quanto selezionato dall’utente
nell’interfaccia web;
4. In una serie di formati, tra cui HTML per
debug, ma anche XML e JSON, a seconda
dell’header o di un parametro della richiesta
HTTP
Qual è la differenza maggiore tra wikipedia e
DBpedia
1. La possibilità di effettuare query SPARQL e
poter avere risultati machine readable
2. Il fatto che sono presentati in un formato La possibilità di effettuare query SPARQL e poter
HTML più facilmente analizzabile tramite un avere risultati machine readable
programma
3. Non ci sono differenze significative
4. Il fatto di poter avere risultati in linguaggi
differenti

In che formato restituisce la risposta di una


query SPARQL?
1. in generale è una tabella. È inoltre possibile
ricevere XML o JSON modificando l'header o
indicandolo nel parametro options. in generale è una tabella. È inoltre possibile
2. XML, ma è un formato troppo complicato ricevere XML o JSON modificando l'header o
nella lettura e si sceglie come altra opzione indicandolo nel parametro options.
TURTLE, formato più leggibile, composto da:
composto da <Soggetto> (ripetuto una volta
all'inizio) seguito poi da <Predicato> Oggetto
3. [altre opzioni]

Scrivi una query SPARQL che ritorni l’URL del


blog appartenente alla persona chiamata “Jon
Foobar” SELECT ?url
WHERE
{
?id foaf:name "Jon Foobar" .
?id foaf:weblog ?url .
}

Scrivi una query SPARQL che ritorni i presidenti SELECT ?presidente


delle squadre di serie A che giochino al Meazza.
WHERE
{
"Giuseppe Meazza" è_stadio_di ?squadra .
?presidente è_presidente_di ?squadra .
?squadra partecipa "Campionato di Serie A" .
}
Dato il seguente grafo definire l'insieme di
"Analisi Matematica" parte_di "primo anno" .
triple RDF (in formato Turtle/N3).
"Algoritmi e Strutture Dati" parte_di "primo anno" .
"primo anno" parte_di "CdL in Informatica" .
"secondo anno" parte_di "CdL in Informatica" .
"Linguaggi e Computabilità" parte_di "secondo
anno" .
"Reti e sistemi operativi" parte_di "secondo anno" .

Scrivi una query SPARQL che selezioni i


recordman di specialità dell'atletica leggera.
SELECT ?recordman
WHERE
{
?metri rdf:type "Atletica leggera" .
?metri recordman ?recordman .
}

Scrivi una query SPARQL che selezioni gli atleti


che partecipano sia ai 100 metri che ai 200 SELECT ?atleta
metri di Atletica leggera. WHERE
{
?atleta partecipa_a “100 metri” .
?atleta partecipa_a “200 metri“ .
}
Occhio a usare ? non $!

Scrivi una query SPARQL che selezioni gli SELECT ?esercitatore


esercitatori del corso di Sistemi Distribuiti. WHERE
{
?sd parte_di "CdL in Informatica" .
?esercitatore effettua_esercitazioni ?sd .
}

Date le seguenti triple e la seguente query RDF,


definire il risultato della query.

FLAVIO_DE_PAOLI, DANIELA_MICUCCI.
Query:
SELECT ?person WHERE {
?person insegna ?corso ,
?corso parte_di Cdl_in_Informatica .
}

Daniela_Micucci insegna_corso Programmazione_2


.
Dare un esempio di sintassi Turtle.
Ricorda:
Soggetto Predicato Oggetto

Quali affermazioni sono VERE? L’invocazione da


parte di un server di un accept su una socket s1
determina:
1. L’associazione di una porta alla socket s1 per
poter ricevere dal client
La creazione di una nuova socket s2 per
2. La lettura del primo messaggio di richiesta
colloquiare con il client
da parte del client dalla socket s1
3. L’abilitazione della socket s1 a colloquiare
con il client
4. La creazione di una nuova socket s2 per
colloquiare con il client
A un server multi-threaded sono collegati 3
processi client. Quante sono le socket aperte
per il processo che esegue il server?
1. 2 Più di 3

2. 1 (precisamente 4 socket aperte)

3. 3
4. Più di 3

Un sender esegue l’istruzione (in pseudo


codice): write (socket, buffer, N) per scrivere
sulla socket gli N byte contenuti nel buffer.
QUALI di queste affermazioni sono FALSE (2
risposte)?
Il receiver può leggere l’intero buffer con una
-Il receiver può leggere l’intero buffer con un ciclo istruzione: read(socket, buffer, N)
di istruzioni: read(socket, buffer, N/2)
-Il receiver può leggere l’intero buffer con una
-Il receiver può leggere l’intero buffer con una istruzione: read(socket, buffer, 2*N)
istruzione: read(socket, buffer, 2*N)
[da rivedere]
-Il receiver può leggere l’intero buffer con un ciclo
di istruzioni: read(socket, buffer, N)
-Il receiver può leggere l’intero buffer con una
istruzione: read(socket, buffer, N)

Dato un processo P1 che apre una socket s1 e


poi esegue una fork() generando un processo
P2. Cosa succede .... [illeggibile] ...
1. leggono in modo concorrente lo stesso
canale
2. P2 riceve un messaggio di errore perchè il ....
canale è riservato a P1
3. P1 riceve un messaggio di errore perchè il
canale è riservato a P2
4. Leggono dati diversi perchè ciascuno ha un
proprio canale

Un sender esegue l’istruzione (in pseudo Il receiver può leggere l’intero buffer con una
codice): write (socket, buffer, N) per scrivere istruzione: read(socket, buffer, N)
sulla socket gli N byte contenuti nel buffer.
-Il receiver può leggere l’intero buffer con una
QUALI di queste affermazioni sono FALSE (2 istruzione: read(socket, buffer, 2*N)
risposte)?
[da rivedere]
1. Il receiver può leggere l’intero buffer con un
ciclo di istruzioni: read(socket, buffer, N/2)
2. Il receiver può leggere l’intero buffer con una
istruzione: read(socket, buffer, 2*N)
3. Il receiver può leggere l’intero buffer con un
ciclo di istruzioni: read(socket, buffer, N)
4. Il receiver può leggere l’intero buffer con una
istruzione: read(socket, buffer, N)

Le socket permettono a due pari (client e


server) di comunicare tramite il protocollo:
1. HTML
TCP/IP
2. HTTP
3. FTP
4. TCP/IP

Quale di queste affermazioni è FALSA:


1. La system call bind serve ad associare una
porta nota ad un server socket;
2. Per leggere tutti i dati da una socket serve
sempre un ciclo di lettura; Non è possibile associare una porta nota (well-
known port) ad un client socket.
3. Se il client effettua una system call connect
verso un server socket occupata viene
messo in coda;
4. Non è possibile associare una porta nota
(well-known port) ad un client socket.

La trasmissione di messaggi tramite socket in


Java avviene attraverso:
1. TCP/IP attraverso flussi di byte (byte stream) TCP/IP attraverso flussi di byte(byte stream) dopo
dopo una connessione esplicita tramite una connessione esplicita tramite normali system
normali system call read/write (sono call read/write (sono sospensive/bloccanti e
sospensive/bloccanti e utilizzano buffer per utilizzano buffer per garantire flessibilità)
garantire flessibilità)
2. [non abbiamo altre opzioni]

L’invocazione da parte di un server di una


accept su una socket determina:
1. la definizione del numero di richieste che il
server è disposto ad accettare
2. la creazione di una nuova socket su cui La sospensione del server finché non arriva una
accettare richieste di connessione richiesta di connessione
3. la sospensione del server finché non arriva
una richiesta di connessione
4. l'accettazione di un nuovo messaggio di
richiesta

Illustrare le sequenze di operazioni (System Un server esegue la seguente sequenza di


Call) che eseguono i processi Server per creare, operazioni (System Call):
connettere ed utilizzare una comunicazione via 1. Crea il socket (Socket)
socket con un client. Precisare quante socket
vengono create e perché. 2. Gli assegna un indirizzo (Bind)
3. Rende il servizio raggiungibile (Listen)
4. Accetta nuove connessioni (Accept)
5. Interagisce con il client
6. Chiude il socket (Close)
Viene creata una socket dal server e tante altre
quanti sono i client che si connettono quindi sono
N+1

La socket è uno dei possibili canali di


Spiegare cosa si intende per Socket e spiegare
comunicazione tra client e server, è possibile
che tipo di messaggi è possibile inviare su una
mandare messaggi che sono esclusivamente
Socket
stream di byte su base protocollare TCP/IP.

Quando il client e il server inizializzano le


socket, che tipo di socket devono inizializzare?
1. Il server inizializza una Socket, il client
inizializza una ServerSocket.
2. Il server inizializza una ServerSocket, il client
inizializza una Socket Il server inizializza una ServerSocket, il client
3. Il server e il client devono entrambi creare inizializza una Socket
una Socket e una ServerSocket altrimenti
non possono leggere e scrivere.
4. Nessuna delle risposte precedenti.
[non uscita in esame, ma utile per controllare la
padronanza della materia]

Quale delle seguenti affermazioni è corretta a


proposito della comunicazione tra client e
server?
1. Il server usa un InputStream per ricevere
dati dal client, e il client usa un
OutputStream per dare informazioni al
server
2. Il server e il client hanno "due connessioni", Il server e il client hanno entrambi un InputStream
una per leggere e l'altra per scrivere e un OutputStream
3. Il server usa un OutputStream per ricevere
dati dal client, e il client usa un InputStream
per dare dati al server
4. Il server e il client hanno entrambi un
InputStream e un OutputStream
[non uscita in esame, ma utile per controllare la
padronanza della materia]
Qual è il vantaggio di utilizzare Socket
Multicast?
1. Le socket Multicast sono più facili da
implementare rispetto a quelle Broadcast e
Unicast
2. È generalmente più efficiente usare one
È generalmente più efficiente usare one socket
socket Multicast che usare socket Unicast
Multicast che usare socket Unicast multiple
multiple
Ricorda: i router sono già ottimizzati per
3. Le socket Multicast, a differenza di quelle
implementare le socket Multicast
Broadcast, toccano tutti i nodi/destinazioni
4. Le socket Multicast utilizzano più banda
larga/risorse rispetto alle socket Broadcast e
Multicast
[non uscita in esame, ma utile per controllare la
padronanza della materia]

L’utilizzo di servizi di terze parti tramite AJAX


1. Richiede obbligatoriamente l’utilizzo del
linguaggio XML
2. Non è possibile con il solo puro JavaScript, è
necessario l’utilizzo di framework quali ad Richiede la conoscenza delle specifiche API e
esempio JQuery formati di interscambio prescritto dal servizio
utilizzato
3. Può avvenire anche in assenza di
connettivirtà da parte del client
4. Richiede la conoscenza delle specifiche API e
formati di interscambio prescritto dal
servizio utilizzato

Perché i servizi REST sono più conformi al


modello Web di quelli WSDL/SOAP?
1. Perché permettono di definire API
personalizzate
2. Perché permettono l’utilizzo di interfacce
Perché usano il protocollo HTTP in modo nativo
AJAX
3. Perché usano il protocollo HTTP in modo
nativo
4. Perché usano il protocollo HTTP come
vettore per le chiamate di procedura

Perché il ciclo di vita delle HTTPServlet può Perché hanno un’interfaccia nota
essere gestito da un engine?
1. Perché hanno un’interfaccia nota
2. Perché usano il protocollo HTTP
3. Perché Java è un linguaggio interpretato
4. Perché generano risposte HTML

REST (2 risposte)
1. Rende centrale il concetto di risorsa
2. È uno standard codificato Rende centrale il concetto di risorsa

3. È un insieme di guidelines e best practices È un insieme di guidelines e best practices

4. Non è in grado di appoggiarsi e sfruttare


HTTP

Tramite l’utilizzo di tecniche AJAX:


1. È possibile rendere una pagina reattiva ad
eventi generati dall’utente ma anche
eseguire ciclicamente funzioni JavaScript
indipendentemente da stimoli da parte
dell’utente
2. È possibile rendere una pagina reattiva ad
eventi generati dall’utente ma non è È possibile rendere una pagina reattiva ad eventi
possibile far di che esibisca un generati dall’utente ma anche eseguire
comportamento spontaneo, in assenza di ciclicamente funzioni JavaScript
stimoli da parte dell’utente indipendentemente da stimoli da parte dell’utente
3. Permette la comunicazione con sevizi remoti
tramite l’importazione di librerie scritte in
linguaggi diversi da JavaScript
4. Non è comunque possibile interagire con
servizi remoti, ma solo effettuare controlli e
adattamenti sulla pagina locale ed
eventualmente sui dati contenuti nelle form

Dopo una prima richiesta HTTP GET viene


inviata una richiesta HTTP POST. Secondo il
modello Java Servlet, sarà invocato per primo:
1. Il metodo init() Il metodo service(...)
2. Il metodo service(...)
3. Il metodo destroy()
4. Il metodo doPost()

Le applicazioni AJAX-JSON sono più efficienti di Si, perché i dati JSON sono in formato compilabile
quelle AJAX-XML? JavaScript
1. Si, perché i dati JSON sono in formato
compilabile JavaScript
2. Si, perché i dati JSON sono in formato testo
3. No, sono equivalenti
4. No, perché XML è più espressivo

Per ogni richiesta HTTP GET viene inviata una


richiesta HTTP POST. Secondo il modello Java
Servlet, sarà invocato per primo (2 risposte):
1. Il metodo init() Il metodo init()
Il metodo service(...)
2. Il metodo service(...)
3. Il metodo destroy()
4. Il metodo doPost()

In HTTP, quale è una funzione primaria delle


coppie nome-valore contenute nell'header?
1. Indicare il formato dei dati del payload
2. Trasferire i parametri passati con le richieste
Indicare il formato dei dati del payload
3. Indicare la dimensione dell'intero messaggio
HTTP
4. Definire il valore dei cookie scambiati tra
client e server

In HTTP, che cosa significa che una operazione


è "safe"?
1. Che l'esecuzione multipla della stessa
richiesta produce lo stesso effetto di una
singola esecuzione
2. Che l'esecuzione della richiesta non modifica Che l'esecuzione della richiesta non modifica lo
lo stato della risorsa coinvolta. stato della risorsa coinvolta.
3. Che l'esecuzione multipla della stessa
richiesta produce lo stesso effetto di un'altra
operazione.
4. Che l'esecuzione della richiesta modifica lo
stato della risorsa coinvolta.

Per ogni richiesta HTTP GET viene inviata una


richiesta HTTP POST. Secondo il modello Java
Servlet, sarà invocato per primo (2 risposte):
1. Il metodo init() Il metodo init()
Il metodo service(...)
2. Il metodo service(...)
3. Il metodo destroy()
4. Il metodo doPost()

Cosa significa che il metodo GET è La GET è idempotente nel senso che l’effetto di più
idempotente? richieste identiche di ottenere una risorsa è lo
stesso di quello di una sola risorsa, la GET è sicura
quindi non altera lo stato della risorsa.

REST è uno stile architetturale per sistemi


distribuiti, si intende ogni semplice interfaccia che
trasmetta dati su HTTP senza un livello opzionale
come SOAP o la gestione della sessione tramite i
cookies.
1. i servizi REST usano il protocollo HTTP in
Che cos'è REST? modo nativo
2. le risorse REST sono definite da URI e
manipolate attraverso la loro
rappresentazione
3. i messaggi REST sono auto-descrittivi e
stateless.

Ajax è una tecnica di sviluppo software per


creare applicazioni web interattive asincrone.
Tramite l'utilizzo di tecniche AJAX è possibile
Che cos'è AJAX? rendere una pagina reattiva ad eventi generati
dall'utente, ma anche eseguire ciclicamente
funzioni di Javascript indipendentemente da
stimoli da parte dell'utente.

Il DNS è un servizio che consente di risolvere il


nome dei nodi di rete in indirizzo IP e viceversa.
Di cosa si occupa il DNS?
Il servizio è realizzato tramite database distribuito,
costituito da 13 server DNS principali.

Si tratta di due metodi HTTP diversi:


GET: viene utilizzata per ottenere una risorsa dal
server. Si tratta di una funzione idempotente e
sicura.
Spiegare la differenza tra i metodi GET e POST
POST: invece invia dei dati al server, i dati sono
sempre inviati come copia e vengono inseriti
nell'header del pacchetto HTTP che il client
invia al server.

Quale è la definizione corretta di middleware? È uno strato software che sta sopra i sistemi
1. È uno strato software che virtualizza operativi di rete e fornisce servizi alle applicazioni
l’hardware e fornisce servizi alle applicazioni soprastanti
soprastanti
2. È uno strato software che sta sopra i sistemi
operativi di rete e fornisce servizi alle
applicazioni soprastanti
3. È uno strato software che sta sopra il
sistema operativo di rete per simulare un
sistema operativo distribuito
4. È uno strato software che sostituisce i
sistemi operativi di rete e fornisce servizi alle
applicazioni soprastanti

In riferimento all’architettura a 3-tier, la


tecnologia Servlet e JSP è utile per (2 risposte)
1. Il tier di presentazione
Il tier di presentazione
2. Il tier della logica applicativa
Il tier della logica applicativa
3. Non è una tecnologia adeguata a questo
genere di architettura
4. Il tier dei dati persistenti

Cosa significa il termine stateless nel contesto


della Service Oriented Architecture (SOA)?
1. Che non si possono realizzare sessioni di
lavoro
Che lo stato di un servizio non dipende dallo stato
2. Che lo stato di un servizio non dipende dallo
di un altro servizio
stato di un altro servizio
3. Che i client di un servizio non possono avere
stato
4. Che i servizi non possono avere stato

Il concetto di trasparenza nei sistemi distribuiti


significa che:
1. Occorre utilizzare meccanismi di base per
accedere alle funzionalità desiderate
2. È possibile accedere alle funzionalità di più
Non è necessario conoscere i dettagli con cui
basso livello rispetto alle funzionalità
vengono realizzate le funzionalità utilizzate
utilizzate
3. Non è necessario conoscere i dettagli con cui
vengono realizzate le funzionalità utilizzate
4. Sono visibili i dettagli con cui vengono
realizzate le funzionalità utilizzate

l termine Failure Transparency sta ad indicare Un sistema è in grado di portare a termine un


che… compito anche in presenza di fallimenti parziali
1. L’utente può riconoscere un fallimento
parziale e porvi rimedio
2. Il sistema operativo può far ripartire un
server dopo un fallimento
3. Un sistema è in grado di effettuare un abort
per riportare ad uno stato consistente dopo
un fallimento
4. Un sistema è in grado di portare a termine
un compito anche in presenza di fallimenti
parziali

La realizzazione di un server basato su socket


TCP/IP può essere critica. Quale delle seguenti
affermazioni è FALSA?
1. La connessione potrebbe non essere chiusa
correttamente generando problemi di
blocco del servizio
L’invio di stream di bytes limita il tipo di messaggi
2. L’invio di stream di bytes rende arbitrario il da inviare
tempo di recezione dei messaggi
3. La necessità di una connessione per client
può comportare ritardi nel servizio
4. L’invio di stream di bytes limita il tipo di
messaggi da inviare

Il termine Persistence Transparency sta ad


indicare che…
1. È possibile memorizzare i dati via rete;
2. È possibile memorizzare i dati su disco; Una risorsa (software o dati) può essere in
3. Una risorsa (software o dati) viene memoria o su disco.
conservata in memoria;
4. Una risorsa (software o dati) può essere in
memoria o su disco.

Il termine Migration/Mobility Transparency sta


ad indicare che...
1. È possibile portare il software su macchine
diverse senza modifiche
2. Lo spostamento di dati e/o software Lo spostamento di dati e/o software non
comporta modifiche nei programmi utente comporta modifiche nei programmi utente
3. Lo spostamento di dati e/o software non
comporta modifiche nei programmi utente
4. È possibile accedere a dati e/o software da
qualsiasi punto fella rete

Quali vantaggi o svantaggi comporta Semplificazione della gestione dei buffer


un’organizzazione a messaggi di lunghezza
fissa?
1. Semplificazione della gestione dei buffer
2. Minore velocità di trasmissione
3. Limitazione nella lunghezza di invio
4. Maggiore velocità di trasmissione

Con il termine Asynchronous RCP si intende


che:
1. il server restituisce il controllo alla ricezione
della richiesta;
2. il server non si blocca quando riceve una il client non si blocca quando esegue una
chiamata; chiamata;
3. il client non si blocca quando esegue una
chiamata;
4. il server restituisce il controllo al
completamento della richiesta;