Java Flashcards

1
Q

Cos’è Java?

A

Java è un ecosistema composto dal linguaggio di programmazione generico utilizzato per lo sviluppo web, la Java Virtual Machine (JVM), un ambiente di esecuzione virtuale, il Java Runtime Environment (JRE), un ambiente runtime, e il Java Development Kit (JDK), il componente principale dell’ambiente Java che contiene JRE insieme al compilatore Java, al debugger Java e ad altre classi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Perché Java è un linguaggio indipendente dalla piattaforma?

A

Il linguaggio di programmazione Java è stato sviluppato in modo tale da non dipendere da alcun hardware o software. Ciò è possibile grazie al compilatore Java che compila il codice e lo converte in codice byte eseguibile su diversi sistemi a prescindere dalla piattaforma. Infatti l’unico requisito per far girare il codice byte è aver installato sulla macchina l’ambiente di runtime JRE.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Perché Java non è un linguaggio ad oggetti puro?

A

Java non è un linguaggio di pura OP, ma un linguaggio orientato agli oggetti, ad esempio perché i valori dei tipi primitivi non sono oggetti (byte, boolean, char, short, int, float, long e double)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Java utilizza i puntatori?

A

No, per vari motivi: I puntatori sono complicati, il che va contro il principio di Java sulla semplicità del codice. L’uso dei puntatori può anche causare potenziali errori, oltre a compromettere la sicurezza (con l’aiuto dei puntatori gli utenti possono accedere direttamente alla memoria). Java usa i riferimenti al posto dei puntatori, perché i riferimenti non possono essere manipolati.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Cos’è il compilatore JIT?

A

Il compilatore Just in Time (JIT) viene usato per convertire insieme le parti del bytecode che hanno funzionalità simili, e quindi ridurre la quantità di tempo necessaria per la compilazione. In questo modo le prestazioni aumentano quasi al livello di una compilazione in linguaggio macchina.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Che differenza c’è tra una variabile locale e una variabile di istanza?

A

Le variabili di istanza (instance variable) descrivono le proprietà di un oggetto e sono vincolate ad esso. Dichiarate all’interno della classe e all’esterno dei metodi, sono variabili accessibili da tutti i metodi della classe.

Le variabili locali (local variable) sono presenti all’interno di un blocco, funzione o costruttore, e la loro visibilità è limitata all’ambito del blocco. Infatti gli altri metodi della classe non hanno alcuna conoscenza della variabile locale dichiarata all’interno di un metodo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Cosa significa il motto di Java “WORA (write once and run anywhere)”?

A

Write Once and Run Anywhere fa riferimento alla natura indipendente da piattaforma di Java. Infatti il compilatore Java converte i programmi Java nel bytecode, il linguaggio intermedio tra il codice sorgente e il codice macchina. Il bytecode non è specifico della piattaforma, e quindi può essere eseguito su qualsiasi computer, da qui il motto ‘scrivi una volta, esegui ovunque’.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

L’ordine dei modificatori d’accesso ha importanza in Java?

A

No: un programma Java viene compilato ed eseguito correttamente a prescindere dall’ordine usato.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Cosa sono i modificatori di accesso?

A

In Java, i modificatori di accesso sono parole chiave usate per definire l’ambito di accesso del metodo, della classe o di una variabile.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Quali sono i modificatori di accesso di Java?

A

Nel linguaggio Java ci sono quattro identificatori di accesso per metodi, classi e variabili:

pubblico, ovvero accessibile da qualsiasi classe o metodo
protetto, ovvero accessibile solo dalla classe dello stesso package, o dalla sottoclasse di questa classe, o all’interno della stessa classe
default, ovvero accessibile solo all’interno del package (è l’impostazione predefinita di tutti i metodi, classi e variabili)
privato, ovvero accessibile solo all’interno della classe.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Cos’è una Classe (Class)?

A

In Java, una classe è un modello o blueprint che definisce le proprietà (variabili) e i
comportamenti (metodi) di un oggetto. Una classe funge da struttura di base per creare
oggetti concreti.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Cos’è un Oggetto (Object)?

A

L’Oggetto in Java è una istanza della classe, l’entità unitaria con stato e comportamento definiti a priori. Gli stati degli oggetti sono veicolati dagli attributi (o variabili) di istanza, mentre i metodi ne stabiliscono il comportamento. L’oggetto viene solitamente creato con la keyword ‘new’.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

A cosa serve la garbage collection in Java?

A

L’obiettivo principale di questo processo è ottimizzare l’uso delle risorse di memoria, eliminando tutto ciò che non serve. Dunque la garbage collection libera lo spazio di memoria occupato da oggetti non necessari e irraggiungibili durante l’esecuzione del programma.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Cos’è l’ereditarietà (inheritance)?

A

L’ereditarietà è uno dei quattro concetti fondamentali della programmazione orientata agli oggetti, insieme a incapsulamento, polimorfismo e astrazione. Ereditarietà in Java significa che una classe può estendersi a un’altra classe, consentendo di riutilizzare il codice da una classe all’altra. La classe esistente viene chiamata superclasse mentre quella derivata è chiamata sottoclasse.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Cos’è l’incapsulamento (encapsulation)?

A

L’incapsulamento è uno dei quattro concetti fondamentali della programmazione orientata agli oggetti, insieme a ereditarietà, polimorfismo e astrazione. L’incapsulamento in Java è un meccanismo che riunisce in una singola unità i dati (variabili) e il codice che agisce sui dati (metodi). Allo stesso tempo, si tratta di una procedura di sicurezza, perché le variabili di una classe sono nascoste alle altre classi, e l’accesso è consentito solo tramite i metodi della loro classe corrente. Sostanzialmente impedisce l’accesso ai dati da parte del codice al di fuori di questa capsula. Questo concetto viene chiamato anche occultamento dei dati.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Cos’è il poliformismo (polymorphism)?

A

Il polimorfismo è uno dei quattro concetti fondamentali della programmazione orientata agli oggetti, insieme a ereditarietà, incapsulamento e astrazione. Il polimorfismo di per sé è la capacità di un oggetto di assumere molte forme. In Java, questo indica la possibilità di eseguire la stessa azione in molti modi diversi, ovvero consente di definire un’interfaccia e avere più implementazioni.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Cos’è l’astrazione?

A

L’astrazione è uno dei quattro concetti fondamentali della programmazione orientata agli oggetti, insieme a ereditarietà, incapsulamento e polimorfismo. In Java l’astrazione consiste nello scegliere i dati da un insieme più ampio per mostrare all’utente solo i dettagli rilevanti dell’oggetto. Significa mostrare solo gli attributi essenziali e nascondere le informazioni non necessarie, per ridurre la complessità di programmazione.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Quanti tipi di polimorfismo ci sono in Java?

A

Ci sono due tipi di polimorfismo in Java: polimorfismo in fase di compilazione e polimorfismo in fase di esecuzione.

Il polimorfismo in fase di compilazione (compile time polymorphism) è anche noto come polimorfismo statico. Questo tipo di polimorfismo si ottiene con l’overload di metodi.

Il polimorfismo in fase di esecuzione (runtime polymorphism) viene chiamato anche polimorfismo dinamico o dynamic method dispatch. Si ottiene quando una chiamata ad un metodo overriden viene risolta in fase di runtime.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Cos’è il method overriding?

A

L’override del metodo è una funzionalità che consente a una sottoclasse di fornire un’implementazione specifica di un metodo già fornito da una delle sue superclassi. Quando un metodo in una sottoclasse ha lo stesso nome, gli stessi parametri e lo stesso tipo restituito di un metodo della sua superclasse, allora si dice che il metodo nella sottoclasse sovrascrive (override) il metodo nella superclasse. L’override del metodo è uno dei modi con cui Java realizza il polimorfismo in fase di esecuzione (runtime polymorphism).

20
Q

Cos’è il method overloading?

A

L’overload del metodo (method overloading) consente di definire più versioni dello stesso metodo, variando il numero e il tipo dei parametri e/o la visibilità. L’overloading può essere fatto nella stessa classe o anche nelle classi derivate. L’overloading è correlato al polimorfismo in fase di compilazione (o statico)

21
Q

Cos’è un’interfaccia in Java?

A

L’interfaccia (interface) in Java è un insieme di nomi di metodi astratti che possono essere implementati su più classi. Ha una struttura simile a una classe, ma può contenere solo e soltanto metodi d’istanza astratti e costanti. Un’interfaccia quindi non può contenere costruttori, variabili statiche, variabili di istanza e metodi statici.

22
Q

Cos’è una classe astratta (abstract class)?

A

Una classe astratta in Java è una classe dichiarata con la keyword ‘abstract’ che definisce una interfaccia senza implementarla, definendo caratteristiche comuni fra classi di una determinata gerarchia. La classe astratta può avere costruttori e metodi statici, metodi astratti e non astratti, ma non può essere istanziata.

23
Q

Che differenza c’è tra interfaccia e classe astratta?

A

In Java interfacce e classi astratte sono dichiarate ma non istanziate, ma le classi astratte, a differenza delle interfacce, possono avere costruttori, variabili di istanza e metodi non astratti.

24
Q

Che cos’è una funzione Lambda in Java?

A

La funzione Lambda è stata introdotta con Java 8 (2014). Un’espressione lambda è un breve blocco di codice che accetta parametri e restituisce un valore. Le espressioni lambda sono simili ai metodi, ma non necessitano di un nome e possono essere implementate direttamente nel corpo di un metodo. Si tratta sostanzialmente di una funzione anonima, cioè priva di una dichiarazione che le dia un nome (è un approccio tipico della programmazione funzionale).

25
Q

Quali sono le differenze tra List e ArrayList?

A

Una delle differenze più importanti tra List e ArrayList è che List è un’interfaccia che estende il framework Collection mentre ArrayList è una classe Collection standard che estende la classe AbstractList e implementa le interfacce List.

L’interfaccia List crea una raccolta di elementi archiviati in una sequenza e identificabili o accessibili dal loro numero di indice. Al contrario, ArrayList crea un array di oggetti in cui l’array può crescere dinamicamente quando richiesto.

26
Q

Quali sono le differenze tra Array e ArrayList?

A

La principale differenza tra Array e ArrayList in Java è la natura statica dell’Array e la natura dinamica di ArrayList. La dimensione di Array deve essere definita al momento della creazione, non può essere modificata e per inserire un elemento bisogna specificare l’index. Al contrario ArrayList può ridimensionarsi quando necessario, e l’inserimento non è posizionabile.

Un’altra notevole differenza è che Array fa parte della programmazione Java di base, mentre ArrayList fa parte del framework Collections.

27
Q

Quali sono le differenze tra HashMap e HashTable?

A

HashMap non è sincronizzato, ed è quindi indicato per le applicazioni senza thread. Consente solo una chiave null ma un qualsiasi numero di null nei valori. Inoltre supporta l’ordine di inserimento utilizzando la sua sottoclasse LinkedHashMap.

HashTable al contrario è is synchronized è sincronizzato, ed è quindi indicato per le applicazioni con thread. Non consente null in chiavi o valori, e non garantisce l’ordine di inserimento.

28
Q

Che cos’è Collection in Java?

A

Collection è un framework, cioè un insieme di classi e interfacce che forniscono un’architettura già pronta. Il framework Collection in Java fornisce un’architettura per archiviare e manipolare un insieme di oggetti singoli come se fossero una singola unità. Le Java Collections possono eseguire tutte le operazioni consentite su un dato come la ricerca, l’ordinamento, l’inserimento, la manipolazione e l’eliminazione.

29
Q

Come si inverte un albero binario in Java?

A

In Java è possibile invertire un albero binario usando il metodo descendingSet() per rendere un elemento TreeSet in ordine decrescente.

Se invece bisogna cambiarne l’ordine da sinistra a destra, ecco un esempio pratico di come codificare l’inversione dell’albero binario in Java:
static void reverseTree(final TreeNode root) {
if (root == null) {
return;
}

final TreeNode temp = root.right;
root.right = root.left;
root.left = temp;

reverseTree(root.left);

reverseTree(root.right); }
30
Q

Qual è la differenza tra Java e JavaScript?

A

Java è un linguaggio di programmazione orientato agli oggetti, mentre JavaScript è un linguaggio di scripting orientato agli oggetti.
Java crea applicazioni eseguibili su browser o virtual machine, mentre il codice JavaScript è eseguibile unicamente su browser.
Il codice Java deve essere compilato, mentre il codice JavaScript si presenta sotto forma di testo.

31
Q

Cos’è un Design Pattern?

A

Un design pattern è una soluzione riutilizzabile a un problema comune nel software design. Non è un pezzo di codice finito ma un modello che può essere seguito per risolvere problemi di progettazione in vari contesti.

32
Q

Quali sono le tre categorie principali di Design Patterns?

A

1.Creazionali: Concernono la creazione di oggetti.
2.Strutturali: Concernono la composizione delle classi o degli oggetti.
3.Comportamentali: Concernono le interazioni e le responsabilità tra gli oggetti.

33
Q

Cos’è il Singleton Pattern?

A

Il Singleton Pattern assicura che una classe abbia una sola istanza e fornisce un punto di accesso globale a quell’istanza.

34
Q

Cos’è il Factory Method Pattern?

A

Il Factory Method Pattern definisce un’interfaccia per creare oggetti, ma lascia alle sottoclassi la decisione su quale classe istanziare. Il Factory Method consente a una classe di delegare l’istanziazione alle sottoclassi.

35
Q

Cos’è il Abstract Factory Pattern?

A

L’Abstract Factory Pattern fornisce un’interfaccia per creare famiglie di oggetti correlati o dipendenti senza specificare le loro classi concrete.

36
Q

Cos’è il Builder Pattern?

A

Il Builder Pattern separa la costruzione di un oggetto complesso dalla sua rappresentazione, consentendo di creare diversi tipi e rappresentazioni di un oggetto utilizzando lo stesso processo di costruzione.

37
Q

Cos’è il Prototype Pattern?

A

Il Prototype Pattern consente di creare nuovi oggetti copiando istanze esistenti, evitando il costo di ricreare gli oggetti da zero.

38
Q

Cos’è il Adapter Pattern?

A

L’Adapter Pattern consente a classi con interfacce incompatibili di lavorare insieme convertendo l’interfaccia di una classe in un’altra aspettata dai clienti.

39
Q

Cos’è il Observer Pattern?

A

L’Observer Pattern definisce una dipendenza uno-a-molti tra oggetti, in modo tale che quando un oggetto cambia stato, tutti i suoi dipendenti vengano notificati e aggiornati automaticamente.

39
Q

Cos’è il Decorator Pattern?

A

Il Decorator Pattern permette di aggiungere responsabilità aggiuntive a un oggetto dinamicamente, fornendo un’alternativa flessibile all’ereditarietà per estendere le funzionalità.

39
Q

Cos’è il Strategy Pattern?

A

Il Strategy Pattern definisce una famiglia di algoritmi, incapsula ciascuno di essi e li rende intercambiabili. Permette di selezionare l’algoritmo desiderato da una famiglia di algoritmi in modo dinamico.

40
Q

Cos’è il Command Pattern?

A

Il Command Pattern incapsula una richiesta come un oggetto, permettendo di parametrizzare i client con richieste, accodare richieste, e supportare operazioni annullabili.

41
Q

Cos’è il Template Method Pattern?

A

Il Template Method Pattern definisce il guscio di un algoritmo in un’operazione, differendo alcuni passaggi a sottoclassi. Permette alle sottoclassi di ridefinire certi passaggi di un algoritmo senza cambiare la struttura dell’algoritmo stesso.

42
Q

Cos’è il Facade Pattern?

A

Il Facade Pattern fornisce un’interfaccia unificata per un insieme di interfacce in un sottosistema. Definisce un’interfaccia di alto livello che rende il sottosistema più facile da usare.

43
Q

Cos’è il State Pattern?

A

Il State Pattern permette a un oggetto di cambiare il suo comportamento quando il suo stato interno cambia. L’oggetto sembrerà cambiare classe.

44
Q

Cos’è la Depedency Injection?

A

La Dependency Injection (DI) è un pattern che implementa IoC, in cui le dipendenze di un oggetto sono fornite da un assembler anziché essere create dall’oggetto stesso. Questo permette di iniettare le dipendenze esternamente.