Sei sulla pagina 1di 37

PREPARAZIONE AI COLLOQUI

Intro 1
Backend 1
Java 1
Spring 6
.NET 12

Front End 12
Angular 12
CSS 18
VARIE 19

Database 22

Versioning, Metodologie e Deployment 26

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

1) Differenza tra Java e C.


Java è un linguaggio orientato agli oggetti mentre C è un linguaggio procedurale.
Nel linguaggio C è permessa l’allocazione dinamica di memoria mentre in Java la
gestione della memoria avviene attraverso il Garbage Collector in modo
automatico. Java, inoltre, è eseguibile su ogni hardware grazie alla Java Virtual
Machine.

2) I principi S.O.L.I.D. in java

S - Single responsibility principle


Ogni classe dovrebbe avere una ed una sola responsabilità
interamente incapsulata al suo interno.

O - Open-closed principle
2
Un oggetto o entità dovrebbe essere aperta alle estensioni
ma chiusa alle modifiche

L - Liskov substitution principle


Gli oggetti dovrebbero poter essere sostituiti con dei loro sottotipi
senza alterare il comportamento del programma che li utilizza.

I - Interface segregation principle


Una classe client non dovrebbe dipendere da metodi che non usa
pertanto è preferibile utilizzare interfacce specifiche e piccole

D - Dependency inversion principle


I moduli di alto livello non devono dipendere da quelli
di basso livello, ma devono dipendere da astrazioni.

3) I 3 principi fondamentali su cui si fonda JAVA


- Ereditarietà: una classe (definita come sottoclasse) che estende un’altra
classe (definita come superclasse) ne eredita il comportamento (ovvero
metodi e variabili)
- Polimorfismo: in java un metodo può avere comportamenti differenti in base
agli argomenti che gli sono passati quando viene invocato
- Incapsulamento dei dati: limita l’accesso diretto agli elementi di un oggetto in
base agli elementi di visibilità. (Private, protected, ecc.)

4) Differenza tra interfaccia e classe astratta.


L’interfaccia possiede solo la signature dei metodi, i quali non vengono
implementati. Può solo definire variabili final o static.
Una classe astratta, invece, è una classe che non può essere istanziata
(ovvero senza costruttori), ma che può implementare dei metodi. Al suo interno può
definire dei metodi astratti, anche parzialmente.
Una grande differenza tra le due è che una classe può implementare una o
più interfacce, ma può solo estendere una sola classe astratta,(in ogni caso una
classe estende solo una sola classe alla volta che sia astratta o meno)

5) Un costruttore può essere esteso?


Sì: in java, una classe A (sottoclasse) può estendere una classe B (superclasse).
La sottoclasse eredita i metodi e variabili della superclasse però non ne eredita il
costruttore ma, comunque, deve richiamare il costruttore della superclasse tramite
la stringa super(argomenti del costruttore) nel caso in cui se ne definisca uno al suo
interno.

6) Differenza tra override e overload.


3
@Override è un operatore di sovrascrittura dei metodi, mentre @Overload si usa
per costruire due o più metodi con lo stesso nome che possono avere return o
parametri espliciti diversi. Quest’ultimo è come un costruttore.

7) Final e static applicato a variabili, metodi e classi.


Final e static sono due modificatori applicabili a classi, variabili e metodi. Static
serve a rendere invocabile liberamente ciò a cui è stato applicato, Final serve a
“bloccare” ciò a cui è stato applicato.
Sullo specifico, se static viene applicato a:
a) una classe: non è necessario istanziare per utilizzare metodi e attributi al suo
costruttore. Non ha costruttore, né return.
b) una variabile: posso accedervi direttamente con la sintassi
nomeClasse.nomeVariabile senza istanziare l’oggetto
c) un metodo: può essere accessibile senza istanziare la classe che li contiene,
scrivendo nomeClasse.nomeMetodo()
mentre se final viene applicato a:
d) una classe: non può essere estesa6
e) una variabile: si usa quando si vuole che una variabile memorizzi sempre lo
stesso valore, rendendo il suo contenuto persistente
f) un metodo: non può essere sovrascritto

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

9) Cos’è java EE?


Standard di java adatto per la creazione di modelli B2B e B2C(business to
business, business to consumer).Integra librerie in grado di gestire il protocollo SOAP e
realizzare REST API e di leggere, modellare e modificare documenti xml.

10)Quali novità ha apportato Java 8.


Java 8 è la prima edizione completamente Made in Oracle dopo l’acquisizione della
Sun. La principale novità sono le espressioni Lambda, che definiscono una funzione
anonima che mantiene lo stato e può essere utilizzata una sola volta e inserita come
parametro; Nashorn, che permette a Java 8 di eseguire JavaScript sulla JVM; Stream
permette di filtrare e manipolare le collezioni di dati; migliorata la libreria delle date con
l’aggiunta del tipo LocalDateTime.
4

11) Scope di una variabile.


Lo scope di una variabile esprime il suo livello di visibilità, ovvero se questa è
leggibile da altre entità (metodi, classi). Esprime in quali parti del programma tale variabile
è accessibile. Può essere limitato al blocco in cui è dichiarato oppure globale.

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

14)Cos’è una classe e come è costituita?


Una classe è un costrutto per creare oggetti. E’ un contenitore di metodi, attributi e
costruttori.
Ogni classe in java deve essere in un file distinto che ha lo stesso nome della classe (che
per convenzione deve iniziare per lettera maiuscola).

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.

16)Cos’è una variabile?


Una variabile è un puntatore all’indirizzo di memoria in cui sono salvate le proprietà
dell’oggetto (stato, comportamento, proprietà). E’ formata da un nome simbolico (detto
identificatore, utile a far riferimento all’indirizzo di memoria per accedere e\o modificarne il
valore) e un indirizzo di memoria (utile a memorizzare il valore della variabile).

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

N.B. SYNCHRONIZED DA AGGIUNGERE

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.

Può operare in modo sequenziale o in modo parallelo sotto richiesta.

Tra i suoi metodi principali ci sono:

.filter()

.map()

2
Esempio: (int x, int y) -> x + y
name.forEach(x -> System.out.println(x));
6
.reduce()

.forEach()

21)Una volta ricevuto il comando, lo stream rimane attivo?


Sì, per chiudere uno stream bisogna implementare l’interfaccia Autocloseable.
Bisogna comunque tenere in considerazione che alcuni tipi di stream composti, ad
esempio, da collezioni o array non necessiterebbero l’implementazione di questa
interfaccia in quanto l’unica risorsa che impegnano è la memoria, la quale è
comunque gestita dal Garbage Collector.

22)Collegamento con database


Bisogna seguire vari step:
● Si deve aggiungere il connettore jdbc
● In ogni metodo della dao si apre la connessione con il db tramite un metodo
che ritorna la Connection
● Si usa PreparedStatement per preparare le query definite come attributi della
classe Dao
● Si esegue con .execute() oppure con Statement statement =
connection.createStatement() e ResultSet resultSet =
statement.executeQuery
● Alla fine si chiude la connessione.

23)Cos’è una servlet?

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.

26)Differenza tra le interfacce CrudRepository e JpaRepository in Spring Data


JPA?
CrudRepository e JpaRepository sono entrambe interfacce della libreria Spring
Data Repository. CrudRepository fornisce tutte le operazioni CRUD generiche, mentre
JpaRepository è un’estensione di quest’ultima (e di PagingAndSorting). Eredita alcuni
finders come findOne, oltre al get e al delete; inoltre, fornisce altri metodi extra come:
● un metodo che permette il delete di gruppo;
● un metodo che permette di trasmettere in blocco dati al database;
● un metodo legato alla paginazione e all’ordinamento.

27)Quali sono le differenze di trasmissione tra GET e POST? Elencane almeno 3


Sono metodi simili ma hanno sostanziali differenze, in particolare:

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).

31)Come gestiresti i package nel tuo progetto Spring?


Innanzitutto bisogna creare un package base dove inserire la classe
SpringWebApplication. Dopodichè bisogna inserire i package model, repository, controller
e service nei quali si va ad inserire le varie classi relative ad ogni entità del database.

32)Come invochi la dependency Injection in Spring?


La dependency injection in spring si invoca con l’annotazione @Autowired, che
permette di iniettare le istanze all’interno di una classe sostituendo il costruttore.

33)Dove inserisci e a cosa serve l’annotazione @SpringBootApplication?


L’annotazione @SpringBootApplication va inserita nella SpringWebApplication e
serve ad abilitare diverse funzionalità all’avvio del programma, tra cui la scansione
automatica del root package, cioè tutte le classi marcate con i vari marcatori.

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.

35)A cosa serve l’annotazione @RequestBody?


L’annotazione @RequestBody, inserita come parametro di un metodo, permette di
ottenere l’oggetto passato.

36)A cosa serve l’annotazione @RequestParam?


L’annotazione @RequestParam viene usata per richiedere i parametri da una
richiesta

37)A cosa serve l’annotazione @PathVariable?


10
Ci permette di recuperare valori inclusi nell’URI associato alla richiesta5;

38)A cosa serve l’annotazione @CrossOrigin?


@CrossOrigin è un meccanismo per indicare ad un browser che un’app dispone
delle autorizzazioni per accedere alle risorse. Un’applicazione web invia una cross-origin
HTTP Request quando richiede una risorsa che ha un’origine differente dalla propria. E’
un’annotazione di sicurezza che ci permette di comunicare con più domini via localhost.

39)Inversion of Control e Dependency Injection.


L’inversion of Control è un pattern per cui un componente di livello applicativo
riceve il controllo da un componente appartenente a un libreria riusabile, il suo obiettivo è
quello di rendere le componenti software il più indipendenti possibile le une dalle altre; la
Dependency Injection è un modo con cui si può attuare l’IoC: in pratica un programmatore
0può iniettare direttamente la dipendenza evitando di inizializzarla. Essa viene inizializzata
una sola volta nel IoC Container.
The client delegates to call to another object the responsibility of providing its
dependencies

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.

42)Hibernate: eager e lazy.


Eager e Lazy sono due tipi di caricamento di un dato. In particolare, Eager si
riferisce al caricamento immediato all’inizializzazione di un componente, Lazy invece
indica che un tipo di dato deve essere caricato solo quando è richiesto.
Il tipo di caricamento può essere specificato su un campo di un Entity che rappresenta la
colonna utilizzando l’attributo fetch
(fetch=FetchType.LAZY)
(fetch=FetchType.EAGER)

43)Hibernate: si può scrivere una query nativa in hibernate?

5
ES: public String getUser(@PathVariable("userId") String id)
11
Si, tramite il metodo createSqlQuery(String query)

44)Codice del Model.


Nel model vanno inserite le annotazioni @AllArgsConstructor e
@NoArgsConstructor per generare i costruttori con attributi e vuoto; l’annotazione @Data
per generare getter, setter, toString() e equals(), @Entity per generare l’entità, @Id e
@GeneratedValue per la Primary Key dell’entità e @Column per le colonne dell’entità.
Inoltre, si possono esplicitare le relazioni con le annotation @OneToOne, @OneToMany,
@ManyToOne e @ManyToMany, insieme a @JoinColumn.

45)Codice del Repository.


La repository è un’interfaccia che può estendere la CrudRepository. Nel repository
vanno inserite le annotazioni @Repository e @Transactional che permette di gestire le
transazioni.

46)Codice del Controller.


Il Controller estendono l’Abstract Controller, che contiene tutte le mapping delle
chiamate Rest. Nel nostro controller vanno le annotazioni @Controller o @RestController
(nel caso il nostro controller debba mappare chiamate rest), @RequestMapping per
mappare le chiamate Rest6, @CrossOrigin per gestire le autorizzazioni e @Autowired per
iniettare la DI. Inoltre, vanno usate, a seconda delle necessità, le annotation
@RequestBody e @RequestParam nell’AbstractController.

47)Codice del Service.


Il Service estende l’Abstract Service. Utilizziamo l'annotazione @Service e
implementiamo tutti i vari findBy…

48)Perché @Autowired è così importante.


L’annotazione @Autowired può essere applicata a diversi elementi della nostra
classe: ad un campo, un metodo o un costruttore. In ogni caso il suo compito è quello di
indicare a Spring quali sono le dipendenze richieste da un determinato oggetto. Queste
vengono ricercate tra le istanze presenti nello IoC container e, se presenti, vengono
iniettate mediante il costruttore o il metodo annotato.

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)

50)Qual'è la differenza tra Soap e Rest


Rest è uno stile architetturale mentre SOAP è un protocollo.
Rest usa come protocollo di comunicazione solo HTTP mentre SOAP anche su
HTTP. REST utilizza metodi come GET, POST, PUT, DELETE, PATCH,ecc, SOAP
principalmente json (anche xml), SOAP usa xml. REST è stateless, SOAP può
essere anche stateless,statefull.

51)Cos’è SpringBoot (COSA HA INTEGRATO)


E’ un progetto parallelo di Spring , ha integrato Tomcat e le dipendenze del
Maven.

52) Cos’è il JWT?


Sta per Json web Token , è un formato JSON, quando un client fa l’autenticazione
al web server, li viene rilasciato un token se esiste nel db, il token è formato da 3
parti:
Header: contiene i vari metadati del token
Body: le informazioni
Payload: è la signature del token
Quando si fa il login, manda le credenziali a un autentification server e lui
comunica con il server effettivo e poi il server restituisce un token.
13

.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.

La chiamata al database è sempre asincrona perché ogni query viene inserita la


keyword async e poi await gestisce la chiamata asincrona.

Le implementazione dell’Entity framework:


Model first: parte da un linguaggio di design che può essere UML, Crea il database
e l’entity class.
Code first: il programmatore scriverà il codice manualmente, tramite il comando ad
migration
Database first: crea prima il database, viene convertito in un linguaggio di design e
poi genererà l’entity class (GET e set). Molto utilizzato

Quali sono le pagini in JSP, sono le RazorPage

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

56)Come si installa Angular?


L’installazione di angular è possibile grazie al Node.JS che è un runtime
environment che permette l’utilizzo del node package manager, infatti grazie al suo
comando npm install -g @angular/cli, quando viene eseguito, viene installata a livello
globale la angular command line interface che ci permette di utilizzare i comandi ng
[operazione] come ad esempio ng new che crea un nuovo progetto angular.

57)Che comando usi per creare un nuovo progetto in Angular?


Un nuovo progetto viene creato utilizzando il comando ng new nomeProgetto.
Questo comando crea una cartella con il nome del progetto e tutti i componenti base.
come gli app.module, app.routing.module i vari file .json contenenti dipendenze e settaggi
dell’app e molti altri.

58)Cos’è un modulo in Angular.


In Angular, un modulo è una classe a cui applichiamo il particolare decoratore
@NgModule e permette di organizzare la nostra applicazione strutturando in unità che
contengono entità aventi una certa relazione fra loro.

59)Le direttive in Angular. Quando le usi e come.


Le direttive in Angular sono il core di Angular e vengono utilizzate per manipolare il
DOM dinamicamente modificando aspetto o comportamento di un elemento.

Esistono 3 tipi di direttive:


a) Componenti: formati da tre file:
i) .component.html: contenente il layout del componente
ii) .component.css: contenente il suo stile
iii) .component.ts: contenente la logica del componente, i rimandi
all’html e al css e il selector che viene utilizzato per richiamare il
componente in qualsiasi parte dell’applicativo tramite tag html.

b) Direttive Strutturali: permettono modifiche a livello di DOM tramite:


i) *ngIf: permette di visualizzare o nascondere un elemento data una
condizione(e.g. se tale condizione è falsa l’elemento associato non
viene visualizzato, altrimenti viene visualizzato);
ii) *ngFor: dato un array, permette di visualizzare tante volte un
componente quanti gli elementi di quell’array;
iii) *ngSwitch:come uno switch classico, permette di scegliere, data
una variabile, l’elemento da visualizzare in base al caso
corrispondente.
15
c) Direttive di Attributo: ascoltano e modificano il comportamento di altri
elementi HTML, attributi, proprietà e componenti tramite:
i) ngClass: permette di aggiungere o rimuovere delle classi da un
elemento data una condizione;
ii) ngStyle: permette di settare uno o più stili simultaneamente a
seconda dello stato di un componente, questa direttiva può accettare
variabili e/o metodi;
iii) ngModel: permette di vedere la proprietà dei dati di un
componente e aggiornare tale proprietà quando l’utente effettua
dei cambiamenti.

60)Le Pipe in Angular.


Le pipes permettono di trasformare stringhe, valori monetari, date o altri tipi in
specifiche formattazione preimpostate a livello HTML, senza avere la necessità di
preoccuparsi di formattare manualmente i dati, passando valori spuri attraverso
l’applicazione.

61)Differenza tra Observable e Promise.


● Una Promise è legata ad un solo evento asincrono e l'unica cosa che è
possibile fare è gestire il suo successo o il fallimento. Non rimane in ascolto
ma si attiva in maniera sincrona solo quando la risposta arriva e possono
gestirne usa sola alla volta.
● Un Observable è una variabile che rimane sempre in ascolto per la gestione
degli eventi, attesa in formato JSON da parte del backend in seguito ad una
chiamata rest. Per accedere alla suddetta risposta bisogna “iscriversi”
all’observable in maniera asincrona, in quanto esso sarà già pronto per
ricevere altre risposte.

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.

63)Cos’è un componente in Angular.


I componenti in Angular sono gli elementi costitutivi fondamentali delle applicazioni
Angular. Visualizzano i dati dell’utente, ascoltano l’input e agiscono in base a tale input.
L’app component è distribuita su 3 file:
a) app.component.ts è il codice della logica del componente, scritto in
TypeScript
b) app.component.html è il modello del componente, scritto in HTML
16
c) app.component.css è il file .css che contiene gli stili privati del componente

64)Come collegare tante componenti.


Quando si ha a che fare con un progetto Angular con tante componenti, ognuna di
esse va dichiarata:
● nell’app-module, che è il file dove sono definiti sia i componenti che i service,
i quali vengono inizializzati con l’avvio dell’application e poi iniettati con la
Dependency Injection
● nell’app-routing, che è il file che contiene le coppie “path-componente”
necessarie a visualizzare i componenti

65)Come avviene il passaggio di valori tra i componenti?


Il passaggio dei dati avviene attraverso il dataBinding, che può essere:
● Unidirezionale è quando il passaggio avviene dal .ts al html, si esprime tra
parentesi quadre [ngmodel] e si divide in :
○ interpolazione: permette di intrappolare un valore di una variabile
passato dal componente e viene utilizzata con le doppie parentesi
graffe {{}};
○ eventi( all’interazione con l’utente).
● Bidirezionale [(ngmodel)] quando il passaggio dei dati avviene dal .ts al .html
e viceversa.

66)Differenza tra javascript e typescript.


Sia javascript che typescript sono linguaggi orientati agli oggetti ed agli eventi,
inoltre il secondo è un Superset del JS che, oltre a racchiudere tutte le caratteristiche,
offre, grazie alla sua proprietà principale: la tipizzazione, una robustezza e sicurezza del
codice, adatta ad applicazioni più grandi.

67)Javascript e programmazione funzionale

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.

69) Tipi di form.


Angular ci mette a disposizione due tipologie di form: i template driven form e i
reactive forms.

1. Template-driven form è il metodo per certi versi più semplice, adatto


principalmente per creare dei form di pochi campi che non richiedono
elaborazioni complesse. Come suggerisce lo stesso nome, nel realizzare e
17
configurare questo tipo di form svolgeremo la maggior parte del lavoro
all'interno del template facendo uso di diversi tipi di direttive anche per la
validazione dei campi.
2. Reactive forms permettono di costruire dei form più flessibili e riutilizzabili.
Al contrario della precedente categoria, la logica del form viene spostata dal
template al componente stesso così come tutte le istruzioni per la
validazione dei vari campi. I moduli costruiti con questa tecnica sono anche
più semplici da testare.

70) Differenza tra un componente in Angular e in Javascript

71)File di configurazione di Angular.


I principali file di configurazione di Angular sono:
● app-module: è il file dove sono definiti sia i componenti che i servizi. I
componenti vengono inizializzati all’avvio e poi iniettati tramite la
Dependency Injection
● app-routing: è il file che contiene le coppie “path-componente” necessarie a
visualizzare i componenti.
● package.json: è il file che viene letto quando si avvia npm-install e contiene
tutte le dipendenze del progetto.
● angular.json: è il file che contiene le configurazioni principali
dell’applicazione. E’ possibile specificarvici eventuali file .css e .js da
inglobare nell’output finale dell’applicazione.

72)Come si effettuano le chiamate al backend in Angular?


Si effettuano le chiamate REST nei servizi in modalità asincrona creando così un
flusso di dati, gli Observable. Si importa Httpclient per poter utilizzare le funzioni get,
delete, post, put...
Essendo un flusso di dati asincrono, deve essere sottoscritto ogni volta con il metodo
subscribe()

73)Cosa sono i servizi Rest?


I servizi Rest realizzano l'architettura client-server per lo scambio dei dati tramite il
protocollo http.
Nella specifica del Spring Rest controller sfrutta i metodi GET PUT POST E DELETE. In
pratica con l’annotazione @Requestmapping si prende sia il valore, per arrivare alla
richiesta, che il metodo @RequestMethod.POST

74)Quale comando permette di fare la build finale in Angular?


18
Il comando che ci permette di dare il build del progetto è ng build: compila un’app
angular in una directory di Angular chiamata dist/ in un path deciso, creando alcuni file
nella cartella (html, style.js, polify.jsv, ector, webpack).

75)Cos’è Angular CLI?


Angular CLI è il cuore di Angular, permette di creare i progetti (ng new), i vari
componenti (ng generate component), i servizi, di avviare l’applicazione (ng serve), di
buildare…
Si tratta di un’interfaccia tool a linea di comando che si usa per inizializzare, sviluppare,
organizzare e mantenere delle applicazioni Angular direttamente da shell di comando.

76)Quali moduli di Angular utilizzi?

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

79) Proprietà di @Input e @Output.


@Input e @Output sono due descrittori di variabili che permettono rispettivamente il
passaggio di parametri da padre a figlio e da figlio a padre.
● @Input nel figlio lavora per parametri. Definisco @Input()nomeItem davanti
alla variabile che voglio che il figlio legga dal padre.
● @Output nel figlio lavora per evento. Nel .ts definisco @Output()itemEvent =
new EventEmitter<TYPE>

80)Come si genera l’output finale di un progetto Angular?


L’output finale si ottiene con il comando di Angular CLI ng build

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

82)Ciclo di vita dei componenti.


● Il ciclo di vita di un componente inizia quando Angular ne istanzia la classe
del componente e ne renderizza il contenuto nella view tramite OnInIt; non
sono ancora state inizializzate le proprietà di input e non è ancora disponibile
la view associata al componente
● Segue poi con il rilevamento dei suoi stati, modificandone la view e l’istanza
del componente se ce n'è bisogno con OnChanges;
● infine, il componente termina il suo ciclo di vita quando angular ne distrugge
l’istanza ed elimina il suo render della DOM con OnDestroy.

83)Package Manager di Angular


Il Package manager è un insieme di tools che automatizzano il processo di
installazione, upgrade, configurazione e rimozione di pacchetti software per un
determinato sistema operativo.
Il package manager di Angular è NPM (Node package manager). Esso è installato di
default installando node.js.

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

86)Cosa succede se utilizzi contemporaneamente Angular Material e Bootstrap?


Ciò è impossibile perchè Angular Material e Bootstrap sono incompatibili ed è
impossibile usarli contemporaneamente in un progetto.

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

88)Position absolute, relative, fixed.


la proprietà position serve per specificare il tipo di posizionamento, relativo ad altri
oggetti oppure alla pagina, a seconda del tipo;
● : absolute; posiziona l’elemento relativamente all’elemento
● : relative; posiziona un oggetto relativamente alla sua solita posizione;
● : fixed; blocca il posizionamento di un oggetto relativamente alla vista, inoltre
tale elemento rimane fissato nella stessa posizione anche quando la pagina
viene scrollata.

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.

90)Come rendere una pagina responsive. Argomentare


esistono diverse possibilità per rendere una pagina il più responsive possibile:
● può essere effettuato grazie all’utilizzo di misure relative, come ad esempio
l’uso di percentuale al posto di misure in pixel;
● possono essere usate librerie come Material, Bootstrap che utilizzano degli
stili e delle funzioni integrate per l’organizzazione e lo scaling degli elementi.

VARIE

91) Linguaggi compilati, interpretati e pseudocompilati


Tutti i linguaggi ad alto livello (di astrazione), necessitano di vari passaggi per
essere eseguiti dalla macchina.
21
A seconda di come ed in cosa vengono tradotti, distinguiamo linguaggi:
Compilati, intepretati e pseudocompilati.

Linguaggi compilati: un linguaggio compilato è un linguaggio che viene tradotto da


un compilatore prima di essere eseguito, che si occupa di tradurre il codice in assembly.
Successivamente un assemblatore si occuperà di tradurre l'assembly in 0 e 1.
Questi linguaggi hanno lo svantaggio di non essere portabili, in quanto
ogni famiglia di processori ha un linguaggio assembly differente. Sono però più efficienti in
termini di tempo rispetto a quelli interpretati. Es: C, C++, Pascal,Cobol.

Linguaggi interpretati: un linguaggio interpretato invece, viene eseguito direttamente


partire dal codice sorgente dall'interprete, appunto senza doverlo prima compilare.
Vengono inoltre eseguiti mentre vengono tradotti. Ciò porta ad un maggior consumo di
tempo e di risorse, ma recano con se il vantaggio di essere portabili. Es: Basic, Perl,
Python, PHP, JavaScript.

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.

92)Cos’è una transazione


Una qualunque sequenza di operazioni che se eseguite in modo corretto produce
una variazione nello stato della base di dati. Il risultato delle operazioni deve essere
persistente e in caso di insuccesso si deve tornare allo stato precedente.

93)Proprietà A.C.I.D.
Nell'ambito dei database indicano le proprietà logiche che devono avere le
transazioni

Atomicità: il processo deve essere suddivisibile in un numero finito di unità indivisibili,


chiamate 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.

95)Che cos’è un JSON.


Un json (JavaScript Object Notation) si tratta di un formato testuale per la
strutturazione di dati, che permette di aggregarli (in stringhe, numeri, ecc…) per creare
informazioni di più alto livello.
Per creare un oggetto JSON è sufficiente:
● disporre una coppia di parentesi graffe all’inizio e alla fine della struttura per
contenere l’oggetto intero;
● inserire all’interno delle parentesi graffe una sequenza di proprietà (numeri,
stringhe…) il cui nome e valore sono separate dal simbolo “:” (due punti)7 ;
● le proprietà di un oggetto sono separate da virgole.
Il formato JSON è adatto all’interscambio di dati fra applicazioni client/server

96)Differenza tra linguaggio fattorizzato e procedurale (non credo esista davvero


un linguaggio fattorizzato).
In informatica la programmazione procedurale è un paradigma di
programmazione che consiste nel creare dei blocchi di codice sorgente, identificati da un
nome e racchiusi da dei delimitatori, che variano a seconda del linguaggio di
programmazione; questi sono detti anche sottoprogrammi (in inglese subroutine).

97)Differenza tra JSON e SOAP


Json è il tipo di dato utilizzato per inviare e ricevere dati (nei servizi rest) mentre
soap è un protocollo basato sui messaggi XML.

98)Cos’è un design pattern.


Un design pattern è una soluzione progettuale generale ad un problema ricorrente.
La descrizione o modello logico ,applicato per risolvere un problema che potrebbe
presentarsi in diverse situazioni durante le fasi di progettazione e sviluppo software ben
prima di definire un algoritmo risolutivo e computazionale.

99)Famiglie di design pattern.


I design pattern sono raggruppati in 3 macro-famiglie:
● Pattern creazionali, risolvono problematiche inerenti l'istanziazione degli
oggetti (es. Abstract Factory, Builder, Singleton…)
● Pattern strutturali, risolvono problematiche inerenti la struttura delle classi e
degli oggetti (es. Adapter, Bridge, Container…)

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…)

100) Pattern Builder.


E uno dei pattern fondamentali,originariamente definito ‘Gang of four’. Nella
programmazione ad oggetti separa la costruzione di un oggetto complesso dalla sua
rappresentazione cosicché il processo di costruzione stesso possa creare diverse
rappresentazioni; l’algoritmo per la creazione di un oggetto complesso è indipendente
dalle varie parti che costituiscono l’oggetto e da come vengono assemblate.
Permette di rendere più semplice la classe, permettendo ad una classe builder separata di
focalizzarsi sulla corretta costruzione di un’istanza, lasciando che la classe originale si
concentri sul funzionamento degli oggetti.

101) Pattern Observer.


Il pattern Observer è un modello di progettazione del software che si basa su uno o
più oggetti, chiamati observer, che vengono registrati per gestire un evento che potrebbe
essere generato dall’oggetto “osservato”, il subject.
Il funzionamento dell’observer si basa su meccanismi di callback, implementabili in diversi
modi:
● Tramite funzioni virtuali
● Tramite puntatori a funzioni passati come argomenti nel momento della
registrazione dell’observer
Gli oggetti osservabili sono dichiarativi.

102) JBoss vs Tomcat.


JBoss è un application open server open source multipiattaforme interamente
realizzata in JAVA, che implementa le specifiche JAVA EE.
Tomcat è un server web nella forma di contenitore servlet, open source che implementa le
specifiche JSP(JavaServer Pages) e servlet fornendo così una piattaforma per
l'esecuzione di applicazioni web sviluppate in linguaggio JAVA.

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.

104) Differenza tra architettura monolitica e a microservizi.


Archiettura monolitica: una singola applicazione centralizzata che svolge tutte le
funzioni.Nelle architetture monolitiche tutti i processi sono strettamente collegati tra
loro e vengono eseguiti sequenzialmente come un unico servizio.
24
Archiettura a microservizi o modulare: un’applicazione è formata da componenti
indipendenti che eseguono ogni processo applicativo come un servizio. I servizi
sono realizzati in modo da svolgere una sola funzione, questi ultimi non devono
condividere alcun codice o risorse con gli altri.
105) Perché conviene utilizzare i microservizi?
I vantaggi di utilizzare un’applicazione modulare:scalabilità efficace, flessibilità del
linguaggio di sviluppo, eliminazione dei singoli punti di guasto senza influenzare il
resto dell'applicazione,servizi diversi possono utilizzare diversi tipi di database
venendo a creare la cosiddetta architettura di persistenza poliglotta.

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)

107) Come ordini le righe di una colonna(Order By + esempio query)


Per fare questa operazioni usi la sintassi sottostante:
SELECT column1, column2, …
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

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

110) Join e vari tipi di Join


E’ un’operazione nei database relazionali che permette di interrogare più tabelle di
database. Essi infatti combinano i dati memorizzati in diverse tabelle e li restituiscono in
forma filtrata. La join è la combinazione di prodotto cartesiano e selezione. L’utente
determina quali dati delle tabelle bisogna ricercare selezionando il tipo di join e le
condizioni di selezione.
3 tipi di Join
CROSS JOIN date due tabelle A e B legate da una relazione, la cross join restituisce una
tabella di risultati in cui ogni tupla della tabella A è combinata con ogni tupla della tabella
B.
INNER JOIN una inner join è una forma filtrata della cross join in cui solo le tuple di
entrambe le tabelle di output che soddisfano la condizione di selezione definita dall'utente
vengono unite insieme nel risultato impostato.
OUTER JOIN una outer join è un'estensione dell inner join. L'insieme dei risultati di una
outer join contiene le tuple di entrambe le tabelle di output che soddisfano la condizione di
selezione definita dall'utente, così come tutte le tuple rimanenti della prima tabella, della
seconda tabella o di entrambe le tabelle.
A sua volta l'OUTER JOIN in SQL Server può essere di tre tipi:
- LEFT OUTER JOIN

- RIGHT OUTER JOIN

- FULL OUTER JOIN


Le prime due si utilizzano quando si desidera selezionare tutte le righe della tabella che si
trova a sinistra (primo caso) o a destra (secondo caso) della clausola join o quando si
desidera selezionare le righe di entrambe(terzo caso).
Quindi in pratica se c'è una corrispondenza tra le due tabelle viene riportata la relativa
tupla della tabella a sinistra o a destra (o tuple, infatti alcune righe vengono duplicate), se
non c'è vengono comunque riportati i dati delle della prima o della seconda tabella,
mettendo NULL alle parti relative all’altra.
Se invece vogliamo ottenere tutti i dati di entrambe le tabelle indipendentemente
dall'esistenza di una corrispondenza tra le stesse possiamo utilizzare il FULL OUTER
JOIN.
Concludendo quindi possiamo dire che i JOIN vengono utilizzati per estrapolare dati da più
tabelle in un'unica query.
26

111) Differenza tra DDL e DML


DDL(Data definition language) che riguarda le operazioni che permettono la
creazione del db come: create table,drop table, alter table.
DML(Data Manipulation Language) che riguarda le operazioni che permettono la
manipolazione degli elementi di un db(inserimento,ricerca,recupero) come
insert,delete,select, update ecc...

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.

113) Distinct vs Group By


Distinct è un operatore aggregato e restituisce tutti i valori non nulli e distinti di una
tabella in base alla condizione dopo il where.
Group by è utilizzato per effettuare il raggruppamento dei record per un certo attributo.

114) Differenza tra db relazionali e non relazionali. MySQL e MongoDB per


esempio.
115) Cos’è una tableScann
116) Indice di un database.
Un indice tiene traccia di dove sono posizionati i dati all’interno del database. Sono
quindi tabelle speciali associate alle tabelle dati che diventano utili nel momento in cui
vengono eseguite dalle query. Infatti, quando un database crea un record in una tabella,
tale record seguirà un ordine che è quello di inserimento. In assenza di un indice, ogni
operazione che tenta il recupero di dati da qualsiasi tabella del database costringe il
database a leggere l’intera tabella e richiede troppo tempo. Con un indice appropriato,
27
invece, il database è capace di recuperare i dati necessari direttamente consultando
l’indice, per identificare la posizione esatta occupata dalle informazioni sul database e
rendere le query più efficienti.
SQL consente di creare più indici sulla stessa tabella.

117) Criteria Query.


L’Hibernate Criteria Query Language (HCQL) viene utilizzato per recuperare i
record in base a criteri specifici in cui è possibile applicare condizioni logiche. Fornisce
una maniera elegante per costruire query dinamiche, fornendo metodi per aggiungere
criteri.
Quindi è facile per il programmatore Java aggiungere criteri, come il metodo add() usato
per aggiungere restrizioni o il metodo addOrder() per l’ordinamento…

118) Cos’è un datasource.


Un datasource viene utilizzato per creare la connessione con il database, affidando
la gestione delle query SQL all’application server.

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

120) Cosa differisce tra MySQL e PostgreSQL

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

Versioning, Metodologie e Deployment


121) Scrum Agile.
E’ il metodo Agile più diffuso e fortemente indicato per progetti complessi, innovativi
e di sviluppo in Team. Divide il processo di gestione del progetto in sprint per coordinare le
richieste committente/client. Ogni sprint può durare dalle 2 alle 4 settimane e al suo
termine si effettua una Sprint Review per illustrare i progressi fatti al Product Owner.
Le componenti principali di SCRUM si dividono in tre ruoli:
1. lo Scrum Master, il responsabile del progetto, colui che garantisce che tale
metodologia venga eseguita con successo, eliminando eventuali ostacoli e
organizzando meeting di confronto.
2. il Product Owner, che conosce tutti i requisiti del prodotto e porta avanti gli
interessi di tutti gli stakeholder e ha il compito di massimizzare il valore del
prodotto e del lavoro svolto
3. il Team di Sviluppo, composto di solito da 3 a 9 persone9, che sviluppa il
prodotto e ne testa le funzionalità, organizzando le priorità trasformandole in
task da completare per portare a termine uno sprint.
Altri meeting degni di nota sono lo Sprint Retrospective (riunione con Product Owner,
Scrum Master e Team di Sviluppo il cui scopo è di identificare le cause di alcuni
malfunzionamenti ed incrementare le produttività lavorando in maniera proattiva sulle
soluzioni da apportare),il Daily Scrum (breve meeting giornaliero tra i membri del team di
sviluppo per aggiornarsi sui progressi fatti nella giornata precedente e programmare le
task da fare nella giornata corrente) e lo Sprint Planning (riunione in cui il product owner
stila il product backlog e descrive gli item più importanti e gli obiettivi da raggiungere nello
sprint seguente).

122) Strategia di versioning master-dev.

123) Come gestire un conflitto/merge in Git.


Se c’è un conflitto non potremo effettuare un push. Questo problema si può
risolvere con Eclipse, cliccando sul progetto tastodx->team->sincronyze e si aprirà una
schermata che ci permetterà di comparare le due versioni dello stesso file. A questo punto
possiamo scegliere quale versione mantenere o modificare la nostra versione includendo
le modifiche della versione remota; infine selezionare overwrite.
124) Hai mai creato pipeline?
125) Come buildi il progetto?
126) Metodologia DevOps.

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.

130) Principali comandi di docker.


a) docker ps visualizza la lista dei container attivi. Aggiungendo l’argomento -a
visualizza tutti i container attivi e non

b) docker stop {CONTAINER} ferma container

c) docker rm {CONTAINER} elimina container (NB deve essere


precedentemente fermato)

d) docker logs {CONTAINER} log del container (NB bastano i prime 3/4
caratteri alfanumerici dell’id container)

e) docker logs --follow {CONTAINER} simile al tail dei log

f) docker images lista immagini sul sistema

g) docker exec -it {CONTAINER} {COMMAND} esegue comando os (bash/sh)


dentro il 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)

j) docker start {CONTAINER} avvia il container creato in precedenza

k) docker inspect {CONTAINER} restituisce tutti i parametri di sistema del


container

l) docker build -t {IMAGE} . crea immagine con il nome IMAGE (. sta a


significare che siamo all’interno del repo dal quale creare l’immagine)

131) Dove si imposta la porta di connessione del container?


30
Si imposta nel dockerfile. Esso è infatti composto da:
● From: il jdk che viene scaricato dal dockerhub
● Env: permette di impostare le variabili di ambiente
● Workdir: il path dell’applicazione
● Add: sposta il file dalla path del nostro pc all’interno del filesystem
dell’immagine
● Entrypoint: indica il comando per eseguire l’applicazione all’interno del
docker container.
● Copy: permette di copiare le dipendenze necessarie al container
● Expose: si definisce la porta di connessione del container
● Mantainer: nome dell’immagine
● Cmd: il comando per avviare l’app

132) Cos’è Kubernetes.


Kubernate un’orchestatore di conteiner Docker implementato tramite miniKube su
Windows ,è un progetto open source e permette la gestione dei carichi di lavoro dei
vari conteiner Docker ed è principalmente cloud.
La struttura principale è il cluster, dentro il cluster ci sono i nodi.
Ci sono 2 tipi di nodi:
Il nodo Master, è solo uno e gestisce gli altri nodi
Nodo o worker svolgono il lavoro. All’interno di ogni nodo ci sta il POD, contenitore
per un’immagine Docker. Un nodo può contenere più POD ma un POD una sola
immagine. Ogni nodo ha una sua sezione che si chiama kublet che è un processo
per la comunicazione tra nodi diversi.
Il volume è uno spazio della memoria che serve per lato Storace dei dati che
kubernate gestisce e possono essere implementati sia dentro che fuori dal POD, se
è dentro dura quanto la vita del POD, se è fuori è come se fosse uno spazio
condiviso da tutti i POD.

Come gestisci piu chiamate al Database?


Le richieste vengono disponibile alla cache che permette di memorizzare la
richiesta fatta dal client. Annotazione cachable.
Con Kafka metto in pausa le chiamate, una specie di semaforo.

133) A variable needs to be used to store integer values from 0 to 65535


134) A variable needs to be used to store integer values from 0 to 256
135) What is the most optimized ( the one requiring less memory space)
standard type(size) that can be used for the variable?
136) What is the scope of a variable?
137) IF-ELSE costrutto
138) SWITCH-CASE costrutto
139) x &= 0x00
140) X |= 0xAA
31
141) It is possible to change the value of a static variable?
142) What is a static variable?
143) What is the pointer?
144) What is CAN(Controller Area Network)?
145) What is LIN(Local Interconnect Network)?
146) IS LIN FASTER THAN CAN?
147) What is UDS(Unified Diagnostic Service)?
148) What is DTC(Diagnostic Trouble Codes)?
149) Cos’è un Sistema Embedded?
150) Cos’è un Sistema Real-Time?
151) Cos’è il protocollo di comunicazione rs232?
152) Cos’è il CRC(controllo di ridondanza ciclico)?
153) Strutturare un codice per implementare il meccanismo che guida
l’accensione, spegnimento di una lampada
154) Cos’è un Interrupt Service Routine?
155) Comunicazione seriale o parallela
156) Differenza tra #Define e const
157) Cos’è il distruttore?
158) Template cos’è?
159) Puntatore per la chiamata a riferimento e chiamata a valore

Testing
160) Cos’è un testing automation?

Esecuzione di Test tramite codice (grazie ad appositi framework) e non manuale.

161) Quali tipi di Testing esistono?

Test unitario, di sistema, d’integrazione, collaudo, stress.

162) Test integrazione:

Testare i collegamenti tra unità diverse di un sistema.

163) Cos’è una blackbox e una whitebox?

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.

164) Come testi un codice se non lo conosci?

Creando casi di Test ad HOC in base alle specifiche del programma che il
programmatore fornisce.
32
165) Test di sistema

Test completo dell’intero software.

166) Test di collaudo

Test eseguito dal committente che accetta o meno il progetto.

167) Cos’è una suite di Test?

Insieme di Test case.

168) Differenza tra caso atteso e uscita?

Caso atteso è ciò che mi aspetto venga eseguito dal metodo che vado a testare,
uscita è il risultato effettivo rilasciato dal metodo.

169) Differenza tra un test di sistema e un test di collaudo?

Il test di sistema lo fa il team mentre il test di collaudo dal committente.

170) Cos’è lo stress test

Lo stress Test tende a verificare che il sistema sia in grado di far fronte ad un
picco di lavoro senza degradare le prestazioni.

171) Cos’è un accesso di DOS

172) All’interno del ciclo di vita del software cosa si vuole testare?

Tutte le sue funzionalità , iterazioni fra unità del sistema.

173) Come capisco che il mio risultato è quello di test?

Quando il comportamento che mi aspetto dal codice, è uguale a quello che il


codice esegue effettivamente.

174) Transazioni badge e transazioni online


175) Billing wholesale
176) Cos’è Toat (88Oracle)

Software applicativo usato dagli sviluppatori e amministratori di database e dagli


analisti di dati per gestire database relazionali e non relazionali usando linguaggio
SQL.

177) Cos’è un semaforo

E’ un tipo di dato astratto gestito da un sistema operativo multitasking per


sincronizzare l’accesso a risorse condivise tra task.
33
178) Test di non regressione

Test di non regressione si occupa di verificare che, all’atto di upgrade di un


applicativo, tutte le sue funzionalità che devono continuare ad essere attive non
vengano in alcun modo compromesse.

179) Mi fai un esempio di test, come lo scriveresti?


180) Cos’è lo step di un TestCase?

Azione elementare da eseguire a cui corrisponde un risultato atteso. L’insieme di


più step compone un caso di Test.

181) Quali sono i casi di test?

E’ tutto ciò che dev’essere testato, simulando anche degli errori per vedere come
reagisce il programma (esempio : errori di digitazione)

182) Test Funzionale o test di sistema :

Test completo dell’intero software.

183) Test unitario :

Testing di una singola unità o modulo (metodo, classe).

Esercizi
184) Applicazioni bitly.

185) Ordinare un array di stringhe in ordine alfabetico


import java.util.Arrays;
public class Pane {
public static void main(String[] args){
String[] nomi = {“cane”,”bau”,”ni”,”add”};
34
Array.sort(nomi);
for (int i=0; i<nomi.lenght;i++)
System.out.println(nomi[i]);

186) Verificare se due parole sono una l’anagramma dell’altro.


static boolean isAnagramma(String str, String par){
if(str.lenght() != par.lenght()) {return false}
else{
for(int i=0; i<str.length(); i++){
int conta=0;
int count=0;
for(int j=0; j<str.length(); j++){
if(str.charAt(i)==str.charAt(j)){
conta++;
}
if(str.charAt(i)==par.charAt(j)){
count++;
}
}
if(conta!=count){return false;}
}
return true;
}
}
187) Trovare lettere duplicate
String string1 = “Great responsability”;
int count;
char string [] = string1.toCharArray //converto da string a character array
System.out.println(“i caratteri duplicati sono:”);
for (int i = 0; i<string.lenght; i++){
count = 1;
for (int j = i+1; j<string.lenght; j++){
count++;
string[j] = ‘0’ //setta string[j] a 0 quando trova il duplicato
}
// un carattere è considerato duplicato se count è maggiore di 1
if(count > 1 && string[i] !=’0’)
System.out.println(string[i]);
}
}
188) Dato un array di stringhe, ritornare la stringa concatenata più lunga
possibile senza ripetizioni.
189) Data una stringa, se essa non ha ripetizioni di carattere ritorna -1,
altrimenti ritorna l’indice della ripetizione.
190) Dato un array, per ogni occorrenza conta quante volte esso si ripete
all’interno dell’array.
35
191) Algoritmo Bubble Sort

192)

Select sum(price) As sum, inv_num From sampledb_invoice_item group by inv_num order


by inv_num desc;

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

Aeroporto (Citta, Nazione, NumeroPiste)


Volo (ID, Giorno, CittaPartenza, OrarioPartenza, CittaArrivo, OrarioArrivo,
TipoAereo)
Aereo (TipoAereo, NumeroPasseggeri )

Trovare tutti i voli in partenza da Milano per il giorno 15/12/2017


Trovare il numero totale di voli che arrivano in Italia il 25/12/2017

Potrebbero piacerti anche