Ciao a tutta la comunity di Html.it
Sono un nuovo iscritto del forum ma ho già avuto il piacere di utilizzare i mezzi e le informazioni messe a disposizione da html.it una miriade di volte. Mi complimento quindi con tutti per il servizio che state fornendo, a mio avviso il migliore in Italia!
Srcivo in questa sezione in quanto mi servirebbe una mano per risolvere alcuni quesiti che mi sono trovato a dover risolvere durante una esercitazione e ai quali nono so dare una risposta.
Se mi potreste dare una mano, motivando anche le vostre risposte, mi fareste un'enorme favore.
Le domande sono relative a un programma in Java sviluppato ad hoc per l'esercitazione.

Questa domanda si riferisce al codice della classe test definita nel file test.java.
Come quando e da chi viene invocato il metodo hendle hevent


1.dal programmatore e dall’utente ogniqualvolta le circostanze lo richiedano
2.implicitamente dalla cpu del sistema che ospita l’emulatore della macchina virtuale java o all’inizio, meno frequentemente, al termine di ciascun ciclo di clock della cpu medesima
3.implicitamente dal metodo init al termine dell’ esecuzione delle istruzioni che costituiscono il corpo del metodo init medesimo, così come redatte dall utente
4.automaticamente dalla macchina java virtual machine al manifestarsi di un evento esterno ossia all’atto del cambiamento di stato di uno strumento di input in seguito al rilascio del tasto del mouse
5.nessuna delle precedenti

Questa domanda si riferisce al metodo run della classe span definita nel file test.java.
Perché vengono create e avviate due istanze della classe smaz per ricopiare byte da una socket all’altra e viceversa invece di realizzare un unico ciclo all’interno del quale con 2 operazioni in sequenza si effettui dapprima la ricopiatura di un dato in una direzione, facendolo immediatamente seguire da un’operazione di copiatura di un dato nella direzione opposta?


1.perché nel caso in cui i dati da ricopiare in una direzione fossero in quantità inferiore rispetto a quelli da ricopiare nella direzione opposta la comparsa del valore -1 nella prima direzione comporterebbe necessariamente l’uscita dal ciclo di copiatura inibendo così il completamento della copiatura nell’altra direzione
2.perché altrimenti dovendosi compiere due operazioni di lettura e due operazioni di scrittura ad ogni ciclo, una per ciascuna direzione, verrebbero dimezzate le prestazioni del sistema di conseguenza la durata di tutte le note raddoppierebbe in fase di esecuzione rispetto a quella nativa calcolata all’origine in fase di composizione
3.perché altrimenti la ricopiatura in una direzione risulterebbe maggiormente favorita rispetto alla ricopiatura nell’altra direzione, con il conseguente accumulo di ritardi crescenti per quest’ultima il che a lungo andare potrebbe comportare una fatale dissincronizzazione del dialogo tra client e server
4.perché ci si potrebbe trovare in presenza di dati ricopiabili da una socket all’altra ma in assenza di dati da ricopiare in direzione opposta; la lettura della socket sul cui canale di uscita non sia per il momento presente in alcun dato avrebbe come effetto quello di bloccare temporaneamente l’esecuzione del programma in attesa che su quello stesso canale di uscita si manifesti la presenza di un qualche dato, questo blocco impedirebbe il passaggio dell’istruzione successiva e quindi alla copiatura nella direzione opposta di un dato eventualmente gia disponibile
5.nessuna delle precedenti

Questa domanda si riferisce all’invocazione di thread.sleep che compare nella classe play definita nel file test.java
Perche il metodo sleep è definito come metodo static nella classe thread e non nella classe object?


1.non è affatto vero che il metodo sleep sia definito nella classe thread esso è definito nella classe object ed è lecito invocarlo con riferimento alla classe thread come nell’esempio in esame, solo in quanto quest’ultimo è una sottoclasse della classe object dalla quale eredita quindi tutti i metodi sleep incluso
2.perché altrimenti erroneamente potrebbe essere mandata in sleep anche la classe class capostipite di tutte le classi e quindi anche della classe object il sistema si bloccherebbe definitivamente senza alcuna possibilità di essere risvegliato
3.perché in caso contrario il metodo sleep potrebbe essere correttamente invocato solo con object.sleep con il che verrebbero mandati a dormire non solo tutti i thread ma anche tutti gli altri oggetti presenti nella macchina virtuale java che esegue il codice di cui trattasi rendendo utilizzabile la cpu della java virtual machine medesima per tutta la durata dello sleep
4.perche la funzionalità dello sleep è tipica dei thread in quanto programmi di esecuzioni e non degli object qualunque in quanto strutture dati passive e per le quali il concetto di sleep è privo quindi di senso.
5.nessuna delle precedenti

Questa domanda si riferisce al corpo del costrutto swich che compare nel codice della classe data definito nel file serv.java.
Perché le due letture successive che compaiono in ciascuno dei due casi p=2 p=3 non sono state raggruppate in una sezione critica mediante un opportuno utilizzo del costrutto syncronized?


1.perché la input stream da cui si legge non è una risorsa condivisa quindi non esiste alcun rischio che tra le due letture possa intromettersi qualche altro trhead a compromettere l’integrita della comunicazione con il client
2.perché una volta entrati nel corpo del costrutto swich il primo punto in cui lo scheduler potrebbe sottrarre l’uso della cpu al trhead corrente si trova in corrispondenza dell’istruzione break e pertanto ciascuno dei casi che compongono il corpo dello swich è gia di fatto una sezione critica il che rende del tutto ridondante l’utilizzo del syncronized
3.in realtà il mancato raggruppamento delle due letture in una sezione critica è un vero e proprio errore di programmazione che fortunatamente produce effetti devastanti solo occasionalmente e che quindi improbabile che possa inficiare il buon andamento della prova d’esame del corso infatti è possibile che un thread di qualche altro utente possa mettersi tra le due letture prelevando la seconda porzione del messaggio che il thread corrente sta attualmente leggendo compromettendo in tal modo l’integrità della comunicazione con il client
4.perché in java il tipo di dato char viene rappresentato a 16bit ossia con 2 bit adiacenti e con le due letture successive di cui trattasi si vanno a leggere proprio i due byte che costituiscono la rappresentazione di un unico dato se anche quest’atro threadesi dovesse intromettersi tra le due letture esse ritornerebbe il valore null perche tra i dati byte in quanto adiacenti non ce proprio nulla da leggere e l’integrita della comunicazione con il client rimarrebbe comunque garantita
5.nessuna delle precedenti

questa domanda si riferisce all’inizializzazione delle variabili statiche host presenti sia nella classe test che nella classe span definite nel file test.java.
quale delle seguenti configurazioni è compatibile con detta inizializzazione?


1.esecuzione sulla macchina jli.dico.unimi.it sia di serv che di test come applicazioni via comando java e di esecuzione di test come applet via comando appletviewer su una macchina differente
2.l’esecuzione sulla macchina jli.dico.unimi.it sia di serv come applicazione via comando java che di test come applet via comando appletwiver ed esecuzione di test come applicazione via comando java su una macchina differente
3.l’esecuzione sulla macchina jli.dico.unimi.it di test come applicazione via comando java ed esecuzione su una macchina differente sia di serv come applicazione via cmando java che di test come applicazione via comando appletviwer
4. l’esecuzione sulla macchina jli.dico.unimi.it sia di serv che di test come applicazioni via comando java ed esecuzione di test come applet via comando appletviwer sulla stessa macchina
5.nessuna delle precedenti

Questa domanda si riferisce all’invocazione new socket test.host test.port che compare nella classe play definita nel file test.java
a quale funzione assolve questa invocazione


1.alla creazione di una socket passiva che diventerà attiva solo nel momento in cui essa verrà automaticamente connessa alla corrispondente server socket al completamento dell’esecuzione del metodo accept riferito a quest’ultimo
2.all’associazione del numero identificativo 12345 alla porta di nome jli.dico.unimi.it sulla macchina virtuale java che esegue la chiamata di new socket test.host test. port
3.alla creazione di una socket e alla richiesta di sua connessione alla corrispondente server socket connessione che verrà definitivamente instaurata solo al completamento dell’esecuzione del metodo accept riferito alla server socket medesima
4.alla creazione di una socket passiva che diventerà attiva solo nel momento in cui essa verrà connessa mediante l’esplicita invocazione di un opportuno metodo nel codice della classe play alla corrispondente server socket
5.nessuna delle precedenti

Questa domanda si riferisce alle variabili minalt e maxalt della classe test definite nel file test.java
cosa accadrebbe se venisse eliminato il qualificatore static utilizzato per le suddette variabili?[/B]

1.non accadrebbe assolutamente nulla di particolare, l’esecuzione procederebbe esattamente come se il qualificatore static non venisse rimosso rimarrebbero identiche le sue identiche strutture dati in memoria
2.non accadrebbe assolutamente nulla di particolare, l’esecuzione procederebbe esattamente come se il qualificatore static non venisse rimosso solo le strutture di dati sarebbero leggermente differenti in quanto le variabili di cui trattasi non verrebbero incluse nella rappresentazione interna della classe test bensì nella rappresentazione interna di ciascuno degli oggetti esemplari di detta classe di mano in mano che vengano creati mediante la primitiva new
3.verrebbe riscontrato un errore nella compilazione di tutte le classi in cui sono presenti le espressioni test minalt e test maxalt
4.verrebbe riscontrato un errore nell’esecuzione di alcuni metodi definiti nelle classi note e play
5.nessuna delle precedenti

Questa domanda si riferisce al codice della classe test definita nel file test.java nella classe test estensione di classe applet si trovano definiti sia un metodo di nome min che un metodo di nome init
Come vanno invocati questi metodi affinché il sistema funzioni correttamente?


1.i due metodi possono essere utilizzati insieme o in alternativa a descrizione della macchina virtuale java
2.i due metodi vanno necessariamente utilizzati insieme invocando il primo per il tramite del comando java attivato dal menu start di windows e il secondo per il tramite del comando appletviewer attivato in maniera analoga
3.i due metodi vanno necessariamente invocati in alternativa perché la macchina virtuale java non può considerare una stessa classe simultaneamente come un’applicazione da invocare mediante il comando java e come un applet da invocare col comando appletviewer
4.i due metodi possono essere utilizzati insieme o in alternativa a descrizione dell’utente
5.nessuna delle risposte precedenti