Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Intro 1
Backend 1
Java 1
Spring 6
.NET 12
Front End 12
Angular 12
CSS 18
VARIE 19
Database 22
C 28
Testing 29
Esercizi 31
1
Intro
lo scopo di questo file è quello di agevolare l’apprendimento delle
conoscenze della formazione tramite le domande che più comunemente
chiedono ai colloqui.
Backend
Java
O - Open-closed principle
2
Un oggetto o entità dovrebbe essere aperta alle estensioni
ma chiusa alle modifiche
8) Garbage Collector.
Il garbage collector è un thread Daemon di Java che rimane in esecuzione in
background ed ha la capacità di liberare la memoria heap distruggendo tutti gli oggetti non
più referenziati. Esplicita la stessa funzione che in C viene eseguita dal comando free.
In particolare, il Garbage Collector compie tre azioni:
1. Garbage Detection ovvero la determinazione degli oggetti da eliminare
2. Liberare la corrispondente zona di memoria per renderla di nuovo utilizzabile
3. Combattere la frammentazione dell’heap attraverso due tecniche:
a. Compacting: sposta tutti gli oggetti validi verso un estremo dell’heap
in modo che i nuovi oggetti validi raggiungano quella parte di memoria
b. Copying: copia tutti gli oggetti in una nuova area di memoria
12)Java Bean.
I javabean sono classi scritte in java usate per incapsulare più oggetti in un singolo
oggetto detto bean, così che tali oggetti possano essere passati come un unico oggetto
invece che come tanti oggetti multipli.
13)Modificatori di visibilità.
Ci sono diversi descrittori di visibilità:
● Public: rende visibile un campo o un metodo a tutti
● Private: rende visibile un campo o un metodo solo all’interno della classe.1
● Protected: un campo o un metodo sono visibili solo alle classi dello stesso
package e dalle sue sottoclassi (anche se in altri package)
● Default: visibile dallo stesso package e dalle sue sottoclassi se nello stesso
package
15)Cos’è un’istanza?
L'istanza è un particolare oggetto di una determinata classe. Ogni istanza è
separata dalle altre, ma condivide con gli altri oggetti della stessa classe le sue
caratteristiche generali, attraverso la comune descrizione dei campi e dei metodi.
17)Singleton
Il singleton è un pattern che evita l’istanziazione multipla, ha quindi il vantaggio di
far risparmiare molta memoria ed utilizzare una sola istanza di un oggetto. Viene
implementato con il metodo statico getInstance() che verifica se è presente un’istanza
dell’oggetto:
1
Un campo Private può essere accessibile all’esterno se vengono dichiarati i metodi get e set come
pubblici. Le variabili all’interno di una classe vanno dichiarate private in modo da non essere modificate da
fuori la classe.
5
● se è presente la restituisce
● se non è presente ne crea una nuova
● il costruttore DEVE essere private
● il costruttore DEVE essere vuoto
● il suo metodo DEVE essere Public
18)Java Multithreading
Se una classe deve essere eseguita come thread si deve implementare l’interfaccia
Runnable, ovvero:
● Implementare un metodo run() dell’interfaccia Runnable:
public void run(){corpo del metodo}
● Istanziare un oggetto Thread usando il seguente costruttore:
Thread(Runnable threadObj, String threadName);
Dove threadObj è un’istanza della classe che implementa Runnable e
threadName è il nome del thread;
● Creato l’oggetto Thread, per attivarlo si invoca il metodo start(), che esegue
una chiamata al metodo run().
19)Funzione Lambda
La funzione Lambda è una funzione anonima, che può essere sia passata come
parametro oppure come ritorno di un metodo.
La sintassi è parametri -> metodo 2.
Permette di ridurre il codice implementato.
In poche parole si tratta di un metodo senza dichiarazione, una sorta di scorciatoia che
consente di scrivere un metodo nello stesso posto dove ti serve.
Può essere utilizzata una sola volta e inserita come parametro.
20) Stream
https://www.html.it/pag/68504/stream-e-lambda-expression-in-java/
È un’interfaccia che restituisce un flusso di dati finito o infinito su cui è possibile fare
operazioni di filtro, mappa e riduzione.
.filter()
.map()
2
Esempio: (int x, int y) -> x + y
name.forEach(x -> System.out.println(x));
6
.reduce()
.forEach()
Sono oggetti scritti in linguaggio Java che operano all'interno di un web server (come
Tomcat).Non rappresentano applicazioni basate solo sul protocollo HTTP (di tipo web),
nonostante noi vedremo sempre questo tipo di applicazioni. Le servlet derivano dalla
classe httpservlet.I metodi più comunemente utilizzati sono: doGet e doPost, gestiscono
rispettivamente le richieste HTTP di tipo GET e POST.
24)Tipi di casting
Un casting può essere:
● Esplicito: quando usiamo le parentesi. Es. x = (int)v
● Implicito: quando si eguaglia a un certo valore (come quando si eguaglia un
intero a un float). Es. f = f + i
Il cast può essere implicito solo se è un widening3, mentre deve essere esplicito se è un
narrowing4 (in quel caso sarebbe possibile farlo implicito solo se il valore della variabile
“entra” nel tipo più piccolo).
3
Widening: allargamento, detto anche “up-cast”
4
Narrowing: restringimento, detto anche “down-cast”
7
Spring
25)Cos’è il CrudRepository?
E’ un’interfaccia di Spring Data che fornisce tutte le operazioni CRUD generiche
(Create, Read, Update, Delete) effettuabili su un tipo specifico. Fornisce diversi metodi
predefiniti per interagire con un database.
a) il GET invia dati dal server inserendoli direttamente nell’URL, mentre il POST
invia dati al server.
b) il GET può inviare soltanto dati sotto forma di caratteri in codice ASCII
mentre il POST può inviare anche formati diversi (foto, video, audio)
c) GET può inoltre inviare caratteri in modo limitato (circa 2000) POST invece
non pone limiti di memoria
d) POST è più sicura perché nasconde delle informazioni all’utente sulla
chiamata, mentre GET permette all’utente di accedere a più informazioni
attraverso l’url
28)Che differenza c’è tra POST e PUT? Possiamo dire che sono simili?
Mentre la PUT si utilizza nell’update,e serve ad allocare nuove risorse sul server
passatogli dal client, il POST invece si utilizza nel create per ottenere qualcosa passando
dei parametri che non siano chiari nel url.
Inoltre, una stessa richiesta PUT può essere inviata più volte producendo sempre lo
stesso risultato, mentre effettuare una richiesta POST ripetutamente può creare la stessa
risorsa multiple volte.
29)Cos’è Application-properties?
L’Application-properties è un elemento fondamentale di un progetto Spring Boot,
presente nella directory resources. Questo file permette di definire le principali
configurazioni di un progetto Spring Boot, come ad esempio il data source.
8
30)Cosa fa l’annotation @Transactional?
L’annotation @Transactional marca il repository e ci permette di gestire le
operazioni sul database, contemplando anche i casi di errore, le transazioni
programmatiche (codice di gestione esplicito) e dichiarative (separano il codice di gestione
delle transazioni dalla logica aziendale).
34)I moduli di Spring. Elencali e spiega brevemente cosa sono e cosa fanno.
Il framework Spring è organizzato in 20 moduli che possono essere raggruppati in
supermoduli:
1. Core Container:
a. Contiene i moduli Beans e Core che forniscono le parti più
fondamentali del framework e le funzionalità Ioc e Dependency
Injection;
b. il modulo Context che fornisce un modo per accedere agli oggetti in
modo framework-style;
c. il modulo Expression Language fornisce un linguaggio di espressione
per interrogare e manipolare il grafo degli oggetti a runtime.
2. Web:
a. Contiene il modulo Web che offre funzionalità di integrazione
web-oriented di base;
b. il modulo Web-Servlet che fornisce l’implementazione di spring del
pattern MVC per le applicazioni web;
c. il modulo Web-Portlet che fornisce l’implementazione MVC in
ambiente portlet
3. Accesso ai dati/Integrazione:
a. Contiene il modulo JDBC che fornisce un livello di astrazione JDBC e
l’interpretazione dei codici di errore specifici dei database;
b. il modulo ORM che fornisce i livelli di integrazione per i principali
framework di mapping, tra cui JPA, JDO, Hibernate e iBatis;
c. il modulo OXM che fornisce un livello di astrazione per l’utilizzo di
diverse implementazioni di Object/XML mapper;
d. il modulo JMS che fornisce supporto per spring per il servizio di
messaggistica Java;
9
e. il modulo Transcaction fornisce un modo per la gestione delle
transazioni sia programmatiche che dichiarative.
4. AOP: Integra le funzionalità di Aspect Oriented Programming direttamente
nel framework, consentendoci di definire funzionalità trasversali alla nostra
logica di business.
5. Aspect: Fornisce integrazione con AspectJ.
6. Instrumentation:Fornisce supporto per la strumentizzazione di classe ed
implementazioni di classloader da utilizzare in server applicativi.
7. Messaging: Fornisce le funzioni base per le applicazioni basate su
messaggistica.
8. Test: Fornisce astrazione su molti framework di testing e mocking come
TestNg, JUnit, Mockito, PowerMock.
40)IoC Container.
E’ considerato il cuore di Spring poiché si occupa di creare i componenti, detti bean,
e occuparsi della realizzazione delle dipendenze ed è realizzato da due interfacce;
l’interfaccia BeanFactory che definisce le funzionalità di base per gestire i Bean e
l’interfaccia ApplicationContext che estende le funzionalità base aggiungendone altre
tipicamente enterprise.
41)Hibernate.
E’ una piattaforma open source middleware, per lo sviluppo di applicazioni Java e
gestisce la persistenza dei dati sul DB attraverso la rappresentazione e il mantenimento
del DB di un sistema di oggetti Java utilizzando HQL (Hibernate Query Language) come
linguaggio. HQL è fortemente ispirato a SQL. La sua sintassi assomiglia alle query SQL,
ma invece di operare su tabelle e colonne, HQL lavora con oggetti persistenti e con le loro
proprietà (JPA). Le query HQL vengono tradotte da Hibernate in query SQL convenzionali,
che a loro volta eseguono azioni dirette sul database.
5
ES: public String getUser(@PathVariable("userId") String id)
11
Si, tramite il metodo createSqlQuery(String query)
49)Spring Bean.
Un bean in Spring è un oggetto che viene creato (istanziato) da Spring a fronte del
nome della classe (se usi la configurazione XML) e possibilmente anche configurato da
Spring se necessario.
E’ un oggetto come un altro, solo che:
1. è contenuto, cioè tenuto referenziato, in un "contenitore" che è gestito da
Spring;
6
Chiamate rest che vengono esplicitate nell’AbstractController con le annotazioni @GetMapping,
@PostMapping, @DeleteMapping e @PutMapping.
12
2. insieme ad altri oggetti è eventualmente coinvolto in tutto il discorso della
Dependency Injection.
In Spring, gli oggetti che costituiscono la base dell’applicativo e che sono gestiti dal
contenitore Spring IoC sono chiamati bean. Un bean è un oggetto istanziato, assemblato e
gestito da un contenitore Spring IoC. Altrimenti, un bean è semplicemente uno dei tanti
oggetti nell’applicativo. I bean e le loro dipendenze si riflettono nei metadati di
configurazione utilizzati da un contenitore. (Fonte Spring Docs)
.NET
E’ un linguaggio di programmazione di NET framework, è un provider di NET
framework ed è un linguaggio che compila in un linguaggio intermedio CIL
(Comune intermedial linguage) e poi viene interpretato dal compilatore LUIGIN.
Startup.cs permette la configurazione dell’applicazione, è formata da 2 metodi:
Configure = permette la funzionalità del programma, vengono inseriti tutti i
middleware ( permette di abilitare alcune funzionalità del programma).
Configure service = abilita i servizi (invertion of control, accesso al database,
autenticazione)
L’inversion of control avviene all’interno del file startup dove vengono inseriti nel
metodo configure service, viene inserito sia l’interfaccia che la classe che
implementa l’interfaccia.
53)Entity Framework.
L’entity framework è un framework open source object-relational mapping per
ADO.NET in principio era parte di .NET successivamente è stato separato, con EF spesso
viene utilizzato .NET Core come estensioni per lo sviluppo in C#
54) Linq.
LINQ (Language-Integrated Query) è il nome di un set di tecnologie basate
sull'integrazione delle funzionalità di query direttamente nel linguaggio C#. In
genere, le query sui dati vengono espresse come stringhe semplici senza il
controllo dei tipi in fase di compilazione o il supporto IntelliSense
55) SQLServer e Migrazione
Una delle metodologie di lavoro per la programmazione è la cosiddetta Code First,
grazie a tale approccio il database con tutte le sue operazioni dalla creazione alla
modifica o cancellazione delle tabelle e le loro righe può essere eseguito
direttamente dal codice sorgente, da qui la Migrazione che serve,appunto, per
migrare tutti i campi del database e crearne gli schema direttamente dal codice
SQLServer è un DBMS relazionale creato da MS.
14
Front End
Angular
62)Pattern MVVM.
Il pattern MVVM è il pattern più utilizzato per la gestione del front-end con Angular e
sta per Model-View-ViewModel, dove
a) Per Model si intendono i service e i model (.ts)
b) La View è il file HTML di ogni componente. Sono gli elementi visualizzati
dall’utente. Non contiene logica.
c) Il ViewModel è il component.ts, che contiene la logica e usa gli oggetti del
model.
68)Scope in Javascript
Lo scope Javascript riguarda il livello di visibilità di una variabile, ossia se essa è
leggibile da altre entità.
Se sono in un metodo, definisco la variabile come let variabile ed è limitato al blocco in cui
è dichiarato, altrimenti se è globale le definisco var variabile, oppure const variabile lo
scope è uguale a let solo che sarà una costante.
77)Environment di Angular
78)Cos’è Node.js?
Node.js è un runtime environment per l’esecuzione di codice in javascript, utile per
installare il node package manager NPM, che serve per l’installazione di angular cli ed
eseguire comandi utili come ng create
81)Libreria Rxjs.
Rxjs è una libreria Javascript che permette di comporre programmi asincroni, basati
su eventi tramite sequenze osservabili. Un tipo chiave è Observable che rappresenta
l’idea di una collezione invocabile di futuri valori o eventi, che può essere osservata da una
collezione di chiamate che sanno come “prelevare” i valori inviati. Observable rimane in
ascolto per la gestione degli eventi dal backend e salva la risposta in una variabile a cui
accediamo attraverso la subscribe che monitora i dati e li gestisce in maniera asincrona.
Contiene operatori utili, come:
● interval: che crea un Observable che emette numeri sequenziali in ogni
intervallo di tempo specificato.
● fromEvent: che converte un evento in un observable
● operatori pipeable: che hanno la stessa funzione degli stream di java
● subscription: è un riferimento all’observable e viene utilizzato principalmente
per terminare la sue esecuzione tramite un unsubscribe
19
● subject: usati per la possibilità di condividere l’esecuzione dell’observer e
gestire le sottoscrizioni multiple allo stesso Observable
84)Angular Material
Angular Material è una libreria fornita agli sviluppatori angular per creare
componenti consistenti, accattivanti e web application moderne, responsive e portabili
85)Bootstrap
Bootstrap è un toolkit per la creazione di interfacce grafiche che permette di
rendere automaticamente siti responsivi. Necessita di JQuery e Popper.js
87)Vantaggi di Angular
Angular offre molteplici vantaggi:
● Permette di creare Single-Page Applications (applicazione o sito utilizzabile
o consultabile su una singola pagina per fornire un’esperienza utente più
fluida e simile alle applicazioni desktop tradizionali).
● Ogni applicazione è eseguita all’interno del browser e non viene mai
modificata perchè ogni modifica dell’interfaccia grafica avviene a livello di
DOM, evitando la spedizione dell’intera pagina da server o browser inviando
così solo i componenti che si modificano.
● Permette di realizzare siti responsive se usato insieme a toolkit come
Angular Material o Bootstrap
● Carica i dati asincronicamente, infatti l’interfaccia grafica non resta in attesa
dei dati, ma viene prima costruita e poi caricata con i dati.
20
CSS
89)Flexbox.
Flexbox è una libreria che aiuta il posizionamento degli elementi all’interno del loro
container, possiede, tra molte, le proprietà “-start” ed “-end” che permettono di posizionare
un elemento all’inizio, da sinistra a destra, o alla fine di un container.
VARIE
Linguaggi pseudocompilati: Sono una via di mezzo tra quelli interpretati e quelli compilati.
Un programma di un linguaggio pseudocompilato, viene prima compilato, ma non in
assembly, ma in un linguaggio intermedio (Java usa il Bytecode). Successivamente questo
codice viene interpretato. Es: Java.
93)Proprietà A.C.I.D.
Nell'ambito dei database indicano le proprietà logiche che devono avere le
transazioni
Coerenza: il database rispetta i vincoli di integrità, sia ad inizio che a fine transazione. Non
devono verificarsi contraddizioni tra i dati archiviati nel db.
Isolamento: ogni transazione deve essere eseguita in modo isolato e indipendente dalle
altre transazioni. L'eventuale fallimento di una transazione non deve interferire con le altre
transazioni in esecuzione.
Durabilità: detta anche persistenza, si riferisce al fatto che una volta che una transazione
abbia richiesto un commit i cambiamenti non dovranno essere più persi.
94)Architettura SOA
22
La service oriented architecture (SOA) è un tipo di progettazione software
finalizzato al riutilizzo dei componenti software attraverso interfacce di servizio che usano
un linguaggio di comunicazione comune in una rete.
7
Ad esempio, “nome”:”GianniOnnis” significa che l’oggetto possiede la proprietà “nome” il cui valore è
impostato a “GianniOnnis”.
23
● Pattern comportamentali, risolvono problematiche inerenti le interazioni più
comuni tra gli oggetti (es. Interpreter, Iterator, Observer…)
103) Swagger
Swagger è una libreria Open Source che permette di documentare le nostre API REST in
modo preciso. E’ utilizzabile in moltissimi linguaggi quali Node.js, Spring, Java e Python.
Fornisce un editor che permette di documentare facilmente
● l’URL da contattare con porta TCP;
● il metodo HTTP per l’invocazione (GET, POST, PUT O DELETE)
● la descrizione di ogni azione che può essere svolta
● vari parametri in input
● i risultati da attendersi in funzione dell’esito dell’operazione, sia come codice
di stato HTTP sia come parametri restituiti.
Database
106) Quali sono e come sono classificate le operazioni sulle relazioni?
Le operazioni sulle relazioni possono essere di due tipi: unarie e binarie
Le operazioni principali sono:
● Proiezione: seleziona alcuni attributi da una relazione e scarta gli altri,
eliminando eventuali duplicati dalle tuple (come una sorta di proiezione
verticale)
● Selezione: seleziona un sottoinsieme di tuple che soddisfano una
determinata condizione (come una sorta di partizione orizzontale)
● Join: permette di interrogare più tabelle nei database relazionali, combinando
i dati memorizzati in diverse tabelle e restituendoli in forma filtrata. è la
combinazione di prodotto cartesiano e selezione. Esistono tre tipi di join:
cross join, inner join e outer join (che può essere left, right o full)
Esempio:
SELECT * FROM Customers
ORDER BY Country, CustomerName;
108) Come prendere gli elementi con id dispari di una determinata tabella ( +
esempio).
Per selezionare tutti gli elementi con id dispari è necessario utilizzare l’operatore
%(modulo), un numero infatti è dispari se il risultato dell’operazione %2(modulo due) è
uguale a 1, quindi il resto della divisione per 2 è uguale ad 1, il dividendo è dispari, se
uguale a zero, il dividendo è pari. la sintassi è la seguente
SELECT * FROM nome_tabella WHERE id%2=1
25
109) Cos’è un cursore su SQL
112) Truncate, Delete, Drop Il comando drop table nometab elimina la tabella dal
database.
Il comando truncate table nometab elimina i dati all’interno di una tabella, ma non la
tabella stessa.
Il comando delete elimina 1 o piu’ record all’interno di una tabella in base alla condizione
che segue il where.
119) JDBC
JBDC è un connettore (driver) per database che consente l’accesso e la gestione
della persistenza dei dati indipendentemente dal tipo di DBMS utilizzato. E’
costituito da un’API object oriented orientata ai database relazionali, raggruppata
nel package java.sql, che serve ai client per connettersi ad un database fornendo i
metodi per interrogare e modificare i dati. L’architettura di JDBC prevede l’utilizzo di
un driver manager8
8
Il driver manager serve ad esporre alle applicazioni un insieme di interfacce standard e si occupa di
caricare a “run-time” i driver opportuni per “pilotare”gli specifici DBMS.
28
9
Secondo Jeff Bezos, CEO di Amazon, un team di sviluppo deve avere delle dimensioni tali da poter essere
sfamato con due pizze grandi (che, essendo americane, sono notoriamente delle schifezze non paragonabili
alle pizze nostrane; un team italiano potrebbe quindi essere sfamato da 2 pizze grandi americane, ma poi
bisognerebbe pagare anche i giorni di malattia causati dalla dissenteria).
29
127) Come deploy un progetto?
128) Cos’è docker.
129) Perchè docker è particolarmente usato nei microservizi?
Containerizzatore di applicazioni. E’ in grado di isolare un’applicazione all’interno di
container evitando l’uso di macchina virtuale. Permette la creazioni di sistemi distribuiti.
Utilizzando i container, le risorse possono essere isolate, i servizi limitati etc. In questo
modo si effettua il deployment di nuovi nodi solo se necessario. Se si vuole far interagire
più container Docker è necessario utilizzare un software di orchestrazione di container
come Kubernetes.
d) docker logs {CONTAINER} log del container (NB bastano i prime 3/4
caratteri alfanumerici dell’id container)
h) docker attach {CONTAINER} entri nel terminal del container (per uscire
CTRL + P CTRL + Q altrimenti fermi il container)
i) docker rmi {IMAGE} elimina la docker image (NB non devono essere
connessi container attivi)
Testing
160) Cos’è un testing automation?
Black box : test quando non conosci il progetto, basandoti solo su alcune
specifiche date dai programmatori.
White box : quando conosci il programma che vai a testare e hai a disposizione il
codice.
Creando casi di Test ad HOC in base alle specifiche del programma che il
programmatore fornisce.
32
165) Test di sistema
Caso atteso è ciò che mi aspetto venga eseguito dal metodo che vado a testare,
uscita è il risultato effettivo rilasciato dal metodo.
Lo stress Test tende a verificare che il sistema sia in grado di far fronte ad un
picco di lavoro senza degradare le prestazioni.
172) All’interno del ciclo di vita del software cosa si vuole testare?
E’ tutto ciò che dev’essere testato, simulando anche degli errori per vedere come
reagisce il programma (esempio : errori di digitazione)
Esercizi
184) Applicazioni bitly.
192)
193) Sviluppa una funzione che data una stringa di parole separate da
spazi, ritorni la parola che compare più volte.
Es. 1. most_frequent(“one two three one two one”)
returns: “one”.
194) Data una traccia, un pò troppo generale, costruisci un modello E-R e scrivi una
query che selezioni i primi 10 elementi ordinati in ordine decrescente.
Traccia: Bisogna salvare alcuni prodotti nel db del quale sai solo che hanno una
categoria e il resto delle proprietà le inserirai tu a piacere.
36
1. la rispettiva query: SELECT * FROM Prodotto ORDER BY nomeProdotto
DESC LIMIT 10;
2. Se la categoria avesse una descrizione e un nome? In quel caso bisogna
creare un’altra entità Categoria che ha una descrizione e un nome e
bisognerà inserire un riferimento di Categoria in Prodotto come Foreign-Key.
in quel caso la query diventa:
SELECT prodotto.nome FROM Prodotto INNER JOIN Categoria ON
prodotto.categoria_id = categoria.id order WHERE categoria.nome
=’prodottoPavimento’ ORDER BY prodotto.nome DESC LIMIT 10
195) Esercizio DB