The forum of the Computer Science students of the University of Pisa

Domande Orale Ferrari

[mod: Discussione fissata come annuncio per raccogliere nel tempo le domande per ripasso dell'orale con il Ferrari]

Quali sono le principali domande del Ferrari all'orale?

Domande 2016

Manutio
- Cos'è l'invariante di rappresentazione
- Mark & sweep e altri garbage collector
- stack a runtime di ocaml
- stack, heap, class area e tabella dei metodi in Java + record di attivazione

Sul progetto ti chiede in quale altro modo potevi fare determinate cose che a lui non sono piaciute e perché hai scelto quello

Domande 2017
unknown
L'orale con Ferrari non è troppo complicato, le domande sono sempre molto chiare e se non si sa rispondere lui fa ragionare.
Come tempo medio siamo sui 15 minuti ma può arrivare anche ad un'ora nel caso in cui non si sappia rispondere a qualche domanda dato che insiste molto sugli argomenti che non si sanno spiegare.

Del progetto chiede a tutti come potevano essere implementate delle parti che non sono fatte troppo bene.
Le domande più frequenti riguardano il runtime stack, il garbage collector, la tabella dei metodi e la class area. Qualche volta ha chiesto anche il principio di sostituzione e ha voluto sapere tutte le varie regole.
Non ha mai chiesto la parte del programma relativa ai punti fissi.

LorenzoCasalini
Orale del primo appello sessione invernale anno 2016/2017:
-Dimmi cosa accade a run time al momento della chiamata di una funzione.RISPOSTA:spiegare i concetti e i compiti di prologo ed epilogo( svolti dal chiamante) e spiegare la parte svolta dalla funzione chiamata.
-Dimmi la funzione di astrazione del progetto di Java
-Dimmi cosa fa la funzione x che hai scritto nel progetto di OCaml

Alberto Alberigi
Cosa è lo static link, quando non si usa (ad esempio in c non si usa perché le funzioni sono tutte dichiarate prima del main e quindi l'ambiente è uguale per tutti, ossia quello globale).
Garbage collector
Principio di sostituzione (in che senso la regola della precondizione indebolisce?)
E poi domande sul progetto, ti chiede di spiegare dei punti, ti fa vedere gli errori e cose che non gli sono piaciute e chiede in che altto modo potevi implementarle.

Domande 2018

Giulio Purgatorio
Aggiorno un po' visto che non si trovano info recenti a riguardo.
All'orale rimane una persona tranquilla, fa ragionare e dà tutto il tempo che serve per arrivare alla risposta.
Nella mia sessione ha chiesto praticamente a tutti l'invariante di rappresentazione ed i records di attivazione (cosa sono, come funzionano), in particolare poi ha indirizzato su Control Link e Static Link e come quest'ultimo viene calcolato, per poi parlare dei progetti e finire l'orale. Ad alcuni ha chiesto la Retention (il Retain dei records), ad altri ha chiesto la definizione formale della call-by-value / reference e così via ma sempre roba inerente agli errori commessi nello scritto. Un'altra domanda piuttosto gettonata è il Garbage Collector, e dopo ciò fine ^^

Giammarco Romagnoli
Secondo appello sessione estiva 2017/2018

L'orale non è particolarmente difficile. Viene dato tutto il tempo che serve per ragionare ma insiste molto sui concetti che non sono chiari. Il mio orale è durato circa 30 minuti e mi ha chiesto le seguenti cose:

- Run time di Java facendomi rifare l'esercizio che avevo sbagliato allo scritto. Quindi cosa sono root set, Object area, Method area, Class area ed in quale memoria risiedono.
- Principio di sostituzione con relative regole, come lo vorremmo e come si comporta Java. Perchè sarebbe utile avere degli argomenti più generici nella sottoclasse?
- Differenza di strutturazione dello stack a run time in C e in Java. Praticamente in C i riferimenti non locali vengono risolti nell'ambiente globale, mentre in Java vengono risolti nell'ambiente dove risiede l'oggetto e quindi al metodo bisogna passargli il "this".
- Differenza tra compilazione ed interpretazione mettendo a confronto il C con il Java. In particolare mi ha chiesto in che linguaggio è scritto il codice oggetto in C e se è possibile fare un interprete con il C (no perchè non ha il pattern-matching).
- Dimmi l'invariante di rappresentazione del progetto di Java.
- Altre domande sui progetti

Questo è il mio blocco appunti: https://1drv.ms/u/s!ArR1V6ArCBX6lkWrxOzg8jQDl8EH
Spero possa essere utile. Se trovate errori fatemelo presente.
Da Telegram:

chiede quasi sempre la share di java e l'applyover di caml, vuole che nella share ci sia l'eccezione se si prova a condividere un dato con se stessi (perché già la copy fa questa cosa. Per caml preferiva un dizionario ricorsivo ad un (ide.exp)list e ci tiene che nell'apply over la prima cosa che si valuti sia la chiusura della funzione


Ferrari avevo rotto le scatole a qualcuno sul fatto di :
1) password che potevano essere stringhe vuote oppure uguali a username
2) applyover che non controllava subito se l'argomento fosse una chiusura
3) username stringa vuota
4) eccezione per share fatta su se stesso

A ognuno chiede qualcosa diverso, a me ha chiesto di fargli vedere la share, l'invariante di rappresentazione e l'esecuzione dei test per il progetto in Java, per quello in ocaml mi ha chiesto di fargli vedere come valuto il dizionario e come funziona l'applyover
Aumenta di due punti a tutti comunque
Dall'anno accademico 2018-2019 l'esame di PR2 è scritto + progetto, l'orale è stato eliminato.

L'ordine delle prove, per chi non fa i compitini, è: prima si presenta il progetto (entro una scadenza indicata nella consegna), poi si supera lo scritto, e infine c'è la discussione del progetto, che è l'unica parte "vis a vis" rimasta, ma che non ha nulla a che vedere con il vecchio orale. Il progetto vale per una sola sessione: quello assegnato a novembre-dicembre (durante le lezioni) è valido per dare l'esame a gennaio-febbraio (e all'app. straordinario di aprile), poi perde validità; a maggio ne esce uno diverso che deve essere svolto da chi vuole dare l'esame a giugno-luglio-settembre (e all'app. straordinario di aprile).

Alla discussione del progetto potete andare tranquilli perché non è una prova vera e propria (come lo scritto o il progetto), ma più che altro una chiacchierata sul progetto, che serve al prof a capire se siete davvero gli autori del codice e a dirvi quali cose gli sono piaciute e quali no.
  • Non boccia mai alla discussione, a meno che non scopra che avete copiato il progetto
  • Progetto e discussione non vengono valutati con un voto, ma solo con un bonus di massimo 3 punti che si somma al voto dello scritto. Quindi (in base a quanto gli piace il progetto che avete presentato) il voto dello scritto vi verrà confermato o alzato di 1-2-3 voti. Non ho mai sentito di persone a cui abbia abbassato il voto, o a cui lo abbia alzato di > 3 punti.
  • Non vengono fatte domande di teoria (ma ovviamente se mostrate di non sapere concetti usati nel progetto si può insospettire)
Nella mia discussione (appello straordinario novembre 2019) è partito facendomi vedere lo scritto, restando a disposizione per domande sulla correzione o su come si sarebbe dovuto fare un esercizio. Poi vi chiede di prendere il pc (portatevi il vostro laptop!) e si parte col progetto java. Vi chiede di fargli vedere dove sono i file sorgente, come sono strutturati, a che serve ciascuno di essi, ecc. Poi chiede di compilare il codice e di eseguire la batteria di test. Infine passa a chiedervi di vedere pezzi specifici di codice, per esempio chiedendovi "come hai fatto i test?" "in quel caso lanci un'eccezione oppure no?", "dove hai implementato questa cosa qui?", ecc. Poi si passa al progetto ocaml di cui vi dice di interpretare il vostro codice (in qualunque modo: con l'interprete da terminale o anche su https://try.ocamlpro.com/ ) e di eseguire i test. Poi vi chiede di spiegare come avete interpretato i test o le funzioni principali e lui vi dice cosa non gli piace e come voleva si facesse.

Poi si verbalizza. Durata totale 15 minuti circa, anche meno.
In aggiunta posto una raccolta di commenti di altre persone che hanno sostenuto la discussione del progetto nell'AA 2018-19, presi dai vari gruppi telegram. Alcuni sono relativi al prof. Ferrari, altri alla prof. Levi, ma comunque cambia poco o nulla tra i due corsi.
L'orale non c'è, c'è solo la discussione del progetto come parte orale
Ferrari è calmissimo, da solo domande sui progetti e nessuna domanda di teoria
A ognuno chiede qualcosa diverso, a me ha chiesto di fargli vedere la share, l'invariante di rappresentazione e l'esecuzione dei test per il progetto in Java, per quello in ocaml mi ha chiesto di fargli vedere come valuto il dizionario e come funziona l'applyover. Non a memoria, con il progetto davanti. Aumenta di due punti a tutti comunque. Tempo: 10-20 minuti.
Penso che più di 3 punti in più non dia.

Domande: Come funziona la update (che è un costruttore in più che ho definito
io - ocaml), come hai implementato la Copy e la share. La seconda
implementazione di Java manco l'ha vista

Mi ha chiesto anche se un utente fa una share con se stesso cosa succede...

-ha bocciato nessuno vero?
-No nessuno.Per bocciare secondo me ti devi impegnare

-ide*exp list non gli piace
-E come lo voleva?
-Empty | Item ide * exp * Item Una cosa del genere :)
- mi disse "anche tu hai fatto così, ma non va
benissimo perché è già troppo concreto"

Del typechecker chiede qualcosa?
A me ma perché ho fatto la parte opzionale
davvero, il prof arriva che (almeno a noi del pre appello)
nemmeno li aveva guardati, te lo fa girare dal Tuo pc solo il tuo main
e te lo fa spiegare
Domande che mi ha fatto all'orale:
.Implementazione metodo Copy
.Che strutture di implementazione ho usato
.Se alla creazione di un nuovo dizionario venisse controllata l'esistenza di elementi ripetuti
.Osservazione sul fatto che nell'ApplyOver venisse valutato una FunCall dell'argomento, quindi uso di un costrutto del linguaggio che pre-interpreta ==> JIT ==> Non gli piace
Alla fine della fiera mi ha comunque alzato di un punto, quindi tranquilli
-Cosa ha chiesto la Levi alla discussione dei progetti?
-Più che altro le scelte di implementazione che hai fatto, ma almeno sulla parte di OCaML non sembra essere troppo preparata
-Di quanto alza il voto ?
-Ti direi 2-3 punti di più non so
-Domande puramente teoriche ne ha fatte?
-A me no

Per il corso A: il Ferrari il progetto non l ha manco guardato, vi
chiede giusto due o tre cose che vede sul momento, non boccia nessuno, e aumenta al massimo di 2-3 punti

Ma mi sa che la levi fa uguale, addirittura il progetto di OCaML
gliel'ho fatto vedere io dal mio pc perché lei non lo trovava
Ragazzi ma alla discussione dei progetti, quello di ocaml
ve lo fa provare per vedere se funziona?

Il Ferrari a me non li ha fatti nemmeno lanciare
Comunque in generale si, ti chiede di compilarlo (o interpretarlo) e di
fargli vedere il test

Eh io più che altro non so nemmeno come si compila da windows,
ho sempre fatto sul sito tryocaml ahahah

Gli va bene

Anche dal sito?

Sisi esatto,Quello online
Anche questa volta ha aumentato di +2 politico alla discussione?

Si

Ma più o meno quanto dura?

Massimo 15 minuti
Ferrari non ha mai bocciato nessuno alla discussione?

Per ora non mi pare
Ma se la discussione del progetto andasse male bisogna rifare lo scritto?

Credo di si ma credo anche che non bocci alla discussione, salvo casi estremi

Tranquillo, lei stessa mi ha detto che alla discussione il voto verrà soltanto alzato o confermato. Mi ha solo detto che boccia chi becca che ha copiato i progetti

anche su questo avrei i miei dubbi ahah

I progetti neanche li guardano
Li aprono per la prima volta durante la discussione
Ieri qualcuno ha fatto la discussione dei progetti con la levi ?
Chiede solo cose sui progetti?
yep
Confermo
Comunque alla discussione chiede solo i test del progetto ocaml, e di
spiegare qualche funzione, non ha fatto riferimento a nient altro
È molto una cosa quasi tirata via
Perchè hai implementato la ApplyOver in questo modo, come potresti migliorarlo, come hai fatto i test e cose così, nel mio primo progetto non controllavo se nella share condividevo un oggetto con il proprietario di quell'oggetto stesso
Java: ha visto che andava bene, ma era meglio mettere le specifiche a ogni classe (non solo quella principale, anche le classi ausiliari)
oCaml: ha apprezzato che ha implementato la funzione che eliminava i duplicati
l orale è facoltativo giusto?

È una discussione del progetto, da quel che ho capito

L’anno scorso facevano qualche domanda di teoria se non ricordo male

Oibò, domande tipo?

Che ne so.. se c’era scritto typecheck statico e non lo hai fatto bene allora ti chiede la differenza tra statico e dinamico
Insomma usando il progetto per fare un paio di domande
Soprattutto in base agli errori.. sennò random se andava tutto bene! Giusto per vedere che almeno qualcosa la sai!
il Ferrari vi fa solo spiegare come avete implementato la share, la applyover e al massimo vi chiede di far vedere i test.
Qualcuno che ha fatto l'appello di giugno saprebbe dirmi come si tiene di preciso?