Domande generiche sul funzionamento di java Flashcards
(38 cards)
cosa sono i design pattern?
Sono delle soluzioni progettuali a problemi ricorrenti contribuendo a mantenere la manutenibilità e la comprensione del codice.
come si suddividono i design pattern?
- Pattern Creazionali
- Pattern Architetturali
- Pattern Strutturali
- Pattern Comportamentali
quali sono i design pattern Creazionali?
Singleton
Builder
Prototype
quali sono i design pattern Architetturali?
MVC
Layer
quali sono i design pattern Strutturali?
Adapter
Questo pattern permette a classi con interfacce incompatibili di lavorare insieme. Si utilizza quando è necessario far funzionare insieme classi che altrimenti non potrebbero collaborare a causa di differenze nelle loro interfacce.
Il pattern Adapter è estremamente utile quando si desidera utilizzare classi esistenti in un nuovo contesto senza modificarle, permettendo al codice di essere più riutilizzabile e mantenibile.
quali sono i design pattern Comportamentali?
Strategy
Consente inoltre di selezionare un algoritmo in modo dinamico al runtime, evitando di dover scrivere codice con strutture di controllo rigide come if o switch.
Descrivi il design pattern Singleton
Questo è utile quando si vuole che una classe abbia una sola istanza nell’intero ciclo di vita dell’applicazione.
L’implementazione del Singleton prevede che la classe abbia un costruttore privato, in modo che le istanze non possano essere create direttamente dall’esterno
Descrivi il design pattern Prototype
Il design pattern Prototype si concentra sulla creazione di nuovi oggetti duplicando un oggetto esistente, chiamato prototipo. Questo è utile quando si desidera creare nuove istanze di oggetti con lo stesso stato di un oggetto esistente, ma senza dover passare attraverso il processo di inizializzazione e costruzione da zero.
Descrivi il design pattern MVC
Inoltre, MVC facilita la creazione di interfacce utente responsive, poiché le logiche di presentazione sono separate dalla logica di business.
1. Model (Modello): Il Model rappresenta la struttura dei dati dell’applicazione e le logiche per manipolarli. Si occupa dell’accesso ai dati, della loro validazione e delle operazioni aziendali. Il Model non è consapevole di come i dati vengano presentati all’utente o di come l’utente interagisce con essi. È responsabile di mantenere la coerenza dei dati e dell’implementazione delle operazioni core dell’applicazione.
2. View (Vista): La View è responsabile della presentazione dei dati all’utente. Mostra i dati contenuti nel Model in un formato comprensibile per l’utente. La View può essere una rappresentazione grafica o testuale dell’interfaccia utente. Importante, la View non manipola i dati direttamente; invece, ottiene i dati dal Model e li visualizza. Inoltre, può gestire eventi dell’utente come input da tastiera e clic del mouse.
3. Controller (Controllore): Il Controller funge da intermediario tra il Model e la View. Gestisce le interazioni dell’utente, interpreta gli input e trasmette le istruzioni al Model e alla View. Quando l’utente effettua azioni nell’interfaccia utente, il Controller determina quale View deve essere utilizzata per mostrare i dati aggiornati all’utente. indicando alla View di aggiornare la visualizzazione dei dati.
cosa sono i Thread ?
In Java, un thread rappresenta un singolo flusso di esecuzione all’interno di un programma. Un’applicazione Java può contenere uno o più thread che lavorano in parallelo per eseguire attività diverse
Cosa è il jdk?
JDK è un pacchetto software
con strumenti di sviluppo e compilazione.
JRE è un pacchetto software che produce il bytecode (Precompilato).
Bytecode Java è un formato intermedio di codice generato dal compilatore Java (javac) a partire dal codice sorgente Java. Questo bytecode non è eseguibile direttamente dalla CPU, ma è progettato per essere eseguito dalla Java Virtual Machine (JVM). Ecco un’analisi dettagliata del bytecode Java:
JVM: La componente di esecuzione che realmente interpreta ed esegue il bytecode Java.
ATTENZIONE! da Java 9 (21 settembre 2017), la struttura delle distribuzioni di Java è stata modificata e la distinzione tradizionale tra JDK, JRE e JVM è stata semplificata la JRE non esiste più
Differenza tra Oggetto ed Classe
Classe: Una classe è una struttura o un modello che definisce un tipo di oggetto. In altre parole, una classe è una descrizione astratta
Istanza di Classe (Oggetto): Un’istanza di classe è una rappresentazione concreta di un oggetto specifico basato sulla definizione di una classe.
modificatore di accesso final
- Quando una variabile è dichiarata final, il suo valore non può essere cambiato dopo essere stato assegnato
- Un metodo dichiarato final non può essere sovrascritto (override) nelle sottoclassi.
- Una classe dichiarata final non può essere estesa (ereditata).
Descrivi l’uso di finally e finalize
- finally: La parola chiave finally è utilizzata in un blocco try-catch-finally per contenere codice che deve essere eseguito indipendentemente se si verifica o meno un’eccezione all’interno del blocco try. Il blocco finally viene sempre eseguito, sia che ci sia un’eccezione sia che non ci sia.
- finalize: Il metodo finalize() è un metodo definito nella classe Object (la classe radice di tutte le classi in Java) che **viene chiamato dal sistema di garbage collection prima che un oggetto venga rimosso **dalla memoria. Tuttavia, l’uso di finalize() è considerato obsoleto e non è raccomandato. Invece, è meglio utilizzare i blocchi try-finally o
Quali sono le differenze tra ArrayList e LinkedList?
- ArrayList: Solitamente è più veloce per l’accesso casuale agli elementi e per le operazioni che coinvolgono iterazioni frequenti.
- LinkedList: Solitamente è più veloce per le operazioni di inserimento e cancellazione frequenti in posizioni intermedie.
Descrivere il funzionamento dell’ HashMap
L’interfaccia Map
1. HashMap: Questa è una delle implementazioni più utilizzate di Map. Utilizza una tabella hash per archiviare le coppie chiave-valore. Le operazioni di inserimento, ricerca ed eliminazione sono generalmente molto veloci. Tuttavia, non garantisce un ordine specifico delle chiavi.
2. LinkedHashMap: Questa classe estende HashMap aggiungendo la caratteristica di mantenere l’ordine di inserimento delle coppie chiave-valore. Ciò significa che le iterazioni sulla mappa rifletteranno l’ordine in cui gli elementi sono stati inseriti.
**3.TreeMap: Questa implementazione mantiene le coppie chiave-valore in un ordine ordinato delle chiavi.
**
4. Utilizza un albero rosso-nero per garantire l’ordinamento delle chiavi. Di conseguenza, le iterazioni su una TreeMap produrranno coppie chiave-valore ordinate.
HashSet
L’interfaccia Set in Java rappresenta una collezione di elementi unici, senza duplicati. Le implementazioni di questa interfaccia forniscono un modo per memorizzare e manipolare insiemi di dati senza la necessità di preoccuparsi di duplicati.
HashSet (no doppioni)
LinkedHashSet (no doppioni)
TreeSet (no doppioni)
Spiega l’interfaccia Comparable e Comparator.
è importante quando si tratta di ordinare oggetti in Java.
Differenza tra Web server ed Application server
In sintesi, un web server gestisce principalmente il servizio di file statici come pagine HTML e immagini, mentre un application server gestisce la logica di business delle applicazioni, processando richieste dinamiche e generando risposte basate su dati e logica dell’applicazione. Spesso, queste due componenti lavorano insieme all’interno di un’architettura web per fornire un’esperienza completa agli utenti, in cui il web server inoltra le richieste dinamiche all’application server per l’elaborazione e la generazione dei contenuti.
Web server: Apache HTTP Server
Application Server : Tomcat , WildFly,Oracle WebLogic Server
Nota su tomcat Importante
Sì, Apache Tomcat può essere considerato un application server, ma con alcune limitazioni e differenze rispetto agli application server Java EE (Jakarta EE) più completi.
Inizialmente, Tomcat è stato sviluppato come un container per servlet e JSP (JavaServer Pages), che sono componenti specifici dell’architettura Java EE. Tuttavia, Tomcat non implementa completamente tutte le specifiche di Java EE come fanno altri application server come WildFly (JBoss), WebSphere e WebLogic.
Cosa è il DAO?
è un design pattern utilizzato per separare la logica di accesso ai dati dal resto dell’applicazione, permettendo di gestire in modo più efficiente le operazioni di persistenza (lettura/scrittura su un database, per esempio).
Descrivi la Dipendence Iniection
La Dependency Injection (DI) è un design pattern di progettazione che consente di gestire le dipendenze tra gli oggetti in un’applicazione. Invece di creare manualmente oggetti dipendenti all’interno di una classe, la DI permette di “iniettare” le dipendenze esternamente. Questo significa che un oggetto non deve preoccuparsi di creare o conoscere i dettagli delle sue dipendenze, ma può riceverle da un’entità esterna. L’obiettivo principale della DI è rendere le classi indipendenti dalle loro dipendenze, facilitando la manutenzione, il testing e la riduzione dell’accoppiamento tra i componenti.
Architettura a strato
L’architettura a strati (o a livelli) è un modello di progettazione software che suddivide un sistema complesso in strati separati e gerarchici, ognuno con responsabilità specifiche.
Strato di Presentazione (Presentation Layer)
Strato di Applicazione (Application Layer)
Strato di Servizio (Service Layer)
Strato di Persistenza (Persistence Layer)
Strato di Database (Database Layer)
Architettura SOA (SERVICE ORIENTED ARCHITETTURE)
In sintesi, l’architettura SOA è una metodologia di progettazione che mira a creare applicazioni scomponendo il software in componenti riutilizzabili e distribuiti, consentendo una maggiore flessibilità e facilità di gestione. È importante distinguere la SOA dai microservizi, che rappresentano una tecnologia più moderna per lo sviluppo di applicazioni cloud native.