Module 9: Async Flashcards

1
Q

Wat is asynchroon programmeren?

A

Asynchrone programmering is een vorm van programmeren waarmee een werkeenheid afzonderlijk van de main thread kan worden uitgevoerd.

Asynchroon programmeren is een vorm van programmeren waarin je minder zekerheid hebt over de volgorde waarin taken uitgevoerd zullen worden. Maar wat je hier voor terug krijgt is een flow waar de thread bezig kan gaan met andere taken wanneer de huidige taak ergens op moet wachten zoals een IO operatie.

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

Waarom asynchroon programmeren?

A

Voor het optimaal benutten van resources. Er kan meer/beter gebruik gemaakt worden van de CPU en er kan efficiënter met geheugen omgegaan worden. Dit resulteerd in betere performance, responsiveness en resilience.

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

Wat is de CompletableFuture?

A

De CompletableFuture is een klasse waarmee we middels een instantie van deze klasse een async operatie kunnen uitvoeren.

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

Met welke methode kunnen we (synchronized) toegang krijgen tot het resultaat van een CompletableFuture?

A

Om toegang te krijgen tot de waarde in een future kan er gebruik gemaakt worden van de get() methode. Deze methode blokkeert de thread totdat de future klaar is.

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

Wat is de standaard threadpool die gebruikt wordt voor de CompletableFuture?

A

ForkJoinPool.commonPool().

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

Welke soorten Threadpools zijn er?

A
  • Fixed, een pool met een vast aantal threads. Goed voor CPU intensieve taken.
  • Work stealing, probeert taken zo efficiënt mogelijk te verdelen aan de hand van het ingestelde parallellisme niveau.
  • Single, een pool met een enkele thread.
  • Cached, een pool waar voor elke taak een thread wordt gemaakt of hergebruikt.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Welke soort Threadpool is in de praktijk meestal de beste keuze?

A

Fixed.

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

Wat is Spring Webflux?

A

Spring WebFlux is een webframework dat bovenop Project Reactor is gebouwd en brengt reactive programming naar Spring.

Spring WebFlux wijkt af van het thread-per-request-blokkeringsmodel in traditionele SpringMVC en gaat naar een multi-EventLoop, async, non-blocking (met Netty standaard) paradigma met tegendruk die meer schaalbaar is en efficiënter dan de traditionele blokkeringscode.

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

Wat is reactive programming?

A

Reactive programming is een paradigma dat vertrouwt op asynchrone programmeerlogica om realtime updates van anders statische inhoud af te handelen.

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

In Spring Webflux wordt er veel gebruik gemaakt van twee publishers. Welke?

A
  • Mono, Bevat een stream waar 0 of 1 element in zit.

- Flux, Bevat een stream waar 0 tot n elementen in zitten.

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

Wat is het Back pressure mechanisme in Spring Webflux?

A

In Spring Webflux wordt voorkomen dat een publisher een subscriber overweldigd door gebruik te maken van het back pressure mechanisme.

Het mechanisme werkt op basis van een pull push aanpak. Een subscriber vraagt n elementen op. De publisher stuurt dan de elementen in zijn buffer naar de subscriber. Op deze manier geeft de subscriber zelf aan hoeveel elementen hij kan verwerken.

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

Welke webserver maakt Spring Webflux standaard gebruik van? En wat is het?

A

Netty.

Netty is een asynchroon event driven network application framework. Door netty te gebruiken kan je non blocking communicatie verwerkelijken waarin back pressure wordt toegepast.

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

Wat is het verschil tussen Spring Webflux en Spring MVC?

A

In Spring MVC wordt wordt gebruik gemaakt van servlets waarin standaard voor elke request een thread wordt aangemaakt waarin blocking calls plaats vinden.

In Spring Webflux worden standaard evenveel threads aangemaakt als de hoeveelheid beschikbare CPU cores. Deze threads handelen binnenkomende requests af d.m.v een event loop waarbij geen blocking calls gemaakt worden.

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

Is het mogelijk om Servlet containers te gebruiken voor Spring Webflux?

A

Het is ook mogelijk om servlet containers te gebruiken in Spring Webflux zoals Tomcat en Jetty. Hiervoor wordt dan de asynchrone servlet 3.1 API gebruikt.

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

Hoe kan je in Spring asynchrone methodes aangeven?

A

met de @Async annotatie. Voordat je er gebruik van kan maken moet de @EnableAsync annotatie zijn toegevoegd aan de applicatie configuratie.

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

Welke return types moeten Asynchroon geannoteerde methodes hebben in Spring?

A

Asynchroon geannoteerde methodes moeten als return type void, Future of CompleteableFuture hebben.

17
Q

Op welke Executor worden standaard de asynchrone methodes (met de @Async annotatie) geplaatst door Spring?

A

Standaard worden deze asynchrone methodes door Spring op een SimpleAsyncTaskExecutor geplaatst.

Dit gedrag kan zowel op applicatie niveau als op methode niveau worden overschreven.

18
Q

Wat is het probleem als je met async en ThreadLocal of transacties werkt?

A

Een ThreadLocal wordt gebruikt om thread specifieke data op te slaan. Het probleem hiervan in combinatie met async is dat er geen garantie is dat je code door dezelfde thread wordt afgehandeld. In Spring security wordt de user ID in een ThreadLocal opgeslagen. Hierdoor kan je bij bij het gebruik van Future’s niet bij de UserContext.

Het probleem waar je met async in combinatie met transacties tegen aan kan lopen is dat de TransactionContext niet wordt overgenomen naar een nieuwe thread. Een mogelijke oplossing voor dit probleem is het versturen van id’s i.p.v entiteiten waarna de nieuwe thread zelf de entiteit ophaalt.

19
Q

Wanneer is Cassandra geschikt als database?

A

Bij grote hoeveelheid aan lees- en schrijfoperaties.

20
Q

Wat is het CAP theorem?

A

Het CAP-theorema, ook bekend als Brewers theorema, stelt dat het onmogelijk is voor een gedistribueerd computersysteem om gelijktijdig aan de volgende drie voorwaarden te voldoen:

  • Consistency
    Alle nodes in het systeem zien dezelfde data op hetzelfde moment.
  • Availability
    De beschikbaarheid zegt iets over aanvragen (requests) en antwoorden (responses). Iedere aanvraag krijgt altijd een (niet-foutief) antwoord terug, ongeacht de consistentie van dit antwoord.
  • Partition Tolerance
    Het systeem blijft functioneren bij het uitvallen van een of meerdere nodes (computers/servers) in het netwerk.Partitie Tolerantie
21
Q

Wat is eventual consistency?

A

Eventuele consistentie is een garantie dat wanneer een update wordt uitgevoerd in een gedistribueerde database, die update uiteindelijk wordt weerspiegeld in alle nodes die de gegevens opslaan, wat resulteert in hetzelfde antwoord elke keer dat de gegevens worden opgevraagd.

22
Q

Wat is SimpleAsyncTaskExecutor?

A

TaskExecutor-implementatie die voor elke taak een nieuwe thread start en deze asynchroon uitvoert.

23
Q

Wat is een Keyspace (Cassandra)?

A

Een keyspace is het buitenste object dat bepaalt hoe gegevens worden gerepliceerd op nodes. Keyspaces bestaan ​​uit objecten die column families worden genoemd (die lijken op tabellen in RDBMS), rijen die zijn geïndexeerd op sleutels, gegevenstypen, replicatiefactor.

24
Q

Welke methodes kun je aanroepen om een CompletableFuture aan te maken?

A
  • CompletableFuture CompletableFuture.runAsync(Runnable)

- CompletableFuture CompletableFuture.supplyAsync(Supplier)

25
Q

Wat zijn drie vragen om een keuze te maken tussen verschillend threadPools?

A
  • Hoeveel threads wil je parallel laten werken?
  • Wat moet de executor doen met een geleverde taak wanneer alle threads al bezig zijn?
  • Wil je een limiet zetten op de grote van de queue en wat moet er gebeuren als de queue vol is?
26
Q

Hoe ziet de architectuur er uit van Cassandra?

A

Cassandra is opgebouwd uit verschillende instanties (nodes) van de database. Deze instanties hebben hun eigen verantwoordelijkheden, maar hebben ook communicatie onderling. Er is echter geen leider of verkiezingsalgoritme, en dus is iedere instantie in de basis gelijk aan elkaar.

Deze instanties leven binnen een cluster. Informatie over instanties, clusters en hun positie wordt automatisch door de instanties zelf bekendgemaakt.

27
Q

Welk protocol gebruikt Cassandra om verschillende instanties van elkaar te kunnen ontdekken? en hoe vaak wordt dit herhaald?

A

Het gossip-protocol. Dit proces wordt iedere seconde herhaald,

28
Q

Wat is het verschil tussen async en multithreading?

A

Bij multithreading-programmering draait alles om het gelijktijdig uitvoeren van verschillende functies. Asynchrone programmering gaat over niet-blokkerende uitvoering tussen functies

29
Q

Wat is Project Reactor?

A

Project Reactor is een library die is gebaseerd op de Reactive Streams specificatie. Deze kan dus gebruikt worden om non-blocking Java applicaties te ontwikkelen. Project Reactor biedt de Mono en Flux API’s aan.

30
Q

Wat is Cassandra?

A

Apache Cassandra is een open source NoSQL gedistribueerde database dat is ontworpen om grote hoeveelheden gegevens te verwerken en een hoge beschikbaarheid biedt zonder single point of failure.

31
Q

Welke CompletableFuture methode kunnen we gebruiken om een asynchrone taak uit te voeren die void returned?

A

CompletableFuture.runAsync()

32
Q

Welke CompletableFuture methode kunnen we gebruiken om een asynchrone taak uit te voeren die een Object returned?

A

CompletableFuture.supplyAsync().

It takes a Supplier and returns CompletableFuture where T is the type of the value obtained by calling the given supplier

33
Q

Wat is een pure function?

A

Een pure function is een functie waarvan de resultaten alleen afhankelijk zijn van de invoerparameters en waarvan de werking geen side effect veroorzaakt, dat wil zeggen geen externe impact heeft naast de retourwaarde.

34
Q

Wat is functional programming?

A

functional programming is a programming paradigm where programs are constructed by applying and composing functions.

35
Q

Wat zijn eigenschappen van functioneel programmeren?

A
  • Functions as first class objects
  • Pure functions, functions zonder side effects
  • Higher order functions
36
Q

Wat is Functions as first class objects?

A

Er kunnen instanties gemaakt worden van functies

37
Q

Wat is Higher order functions?

A

Functions die een function als input nemen of als output terug geven.

38
Q

Waar is cassandra minder goed in?

A

Wanneer je data wilt ophalen dat niet is geindexed (niet bij key dus maar by value)…

39
Q

Wat zijn use cases voor cassandra?

A

Logging, tensor data