Software Engineering (SE)

61 belangrijke vragen over Software Engineering (SE)

Wat is een Data Structure?

Een collectie van data die:
- Data stored
- Bepaalde operaties ondersteund
(vb: Array is een data structure dat een collectie in volgorde bewaart)

Wat zijn de nadelen van Arrays (2)

- Als de Array eenmaal is aangemaakt, kun je zijn size niet veranderen
- elementen inserten, deleten, sorteren en zoeken gaat niet gemakkelijk bij arrays (en niet efficient)

Noem 4 classic Data Structures

- Lists
- Stacks
- Queues
- Binary Trees
  • Hogere cijfers + sneller leren
  • Niets twee keer studeren
  • 100% zeker alles onthouden
Ontdek Study Smart

Wat is het verschil tussen een liniaire structuur, en een hierarchische structuur

Liniaire structuren bestaan uit een sequentie van elementen
een Hierarchische structuur bestaat uit lagen (links en rechts bijvoorbeeld)

Welke data structuren zijn sequenteel, en welke hierarchisch

Seq:
- List
- Stack
- Queue

Hierarchisch
- Binary Tree

Noem termen die gebruikt worden in Binary Trees (7)

- Node, Arc/Link
- Parent, Child
- Root, Leaf
- Binary Search Tree

Wat is een nadeel van een Binary Tree

Om de laatste node te krijgen moet je eerst overal langs. (Langs elke Node)

Wat is een Node, en waar wordt het in gebruikt (welke data struct)

Een node houdt bij wat de volgende node is.
Als de volgende node 'null' is, is de huidige node ook de laatste node

Nodes worden gebruikt in:
- Binary Trees
- Linked Lists

Wat is het verschil tussen een Linked List en een Binary Tree

Een linked list en binary tree bevatten beide nodes die naar een volgende node verwijzen.

Het verschil is dat een BT geen 'next' heeft zoals een LL. De BT heeft een 'left' en een 'right', en een 'parent' en 'child'.

Hoe wordt er 'gesorteerd' in Binary trees

Binnen Binary trees heb je 'left' en 'right'. Alles de Linker child van de node is kleiner, de rechter child van de node is groter.

Noem 3 verschillende 'orders' in binary trees, en hoe ze werken

- In Order
- Pre order
- Post order / Breadth first
- Level order

(zie afbeeldingen voor beter uitleg)

In order:
- Sorteerd op oplopende volgorde (1,2,3,4.. a,b,c,d   etc)

Waarom zou je de Big O notation gebruiken ipv een Script

Het gebruiken van een script om je applicatie en algoritme te testen heeft veel nadelen:
- Algoritme implementeren kost tijd
- Kan in de praktijk anders zijn
- Hardware/software moet zelfde zijn

In plaats van een test script kan je beter een theoretische analyse doen. (Big O).
- Is onafhankelijk van hardware/software. Kijkt puur naar het algoritme
- Kijkt alle mogelijk inputs

Welke O notatie heeft Binair zoeken?

O(log n)

Beschrijf het 'Greedy algoritme' in het kort

Met het Greedy algoritme pak je zoveel je kunt in een keer, en denkt niet over de consequenties die volgen. Je gaat niet meer terug.

Bijv: Je wilt het hoogste punt bereiken. Je berekent niet eerst alles, en gaat naar het hoogste punt, maar je kijkt waar jij op dit moment 'verder' kan. Op ten duur denk je dat je op het hoogste punt bent, terwijl het niet zo is, maar je kan niet meer terug.

Greedy alg. = niet altijd optimaal

Wat is optimal substruction

De optimal substruction kijk of het Greedy algoritme optimaal werkt in de huidige situatie.
(hij kijkt of greedy gebruikt kan worden, zo ja, gebruik het. Is het niet optimaal, gebruik dynamic programming)

Bij wat voor spellen werkt de minimax methode niet?

Bij spellen zoals:
- Mijnenveger
- Monopoly
- Yahtzee
- Ganzenbord
- Mario

Omdat er bij sommige spellen verborgen info is (bij kaart spellen weet je niet wat de tegenstander heeft).
Ook omdat sommige spellen met kans werken, en kans kan niet 100% berekend worden.
Of meer dan 2 spelers heeft.

Wat is een Zero Sum game, en hoe win je dit?

Een Zero sum game is dat als de een wint, de ander verliest. Je hebt bijv 100 euro ingame. Als het geld wordt verdeeld, kan je alleen geld van de ander winnen, of verliezen. Er kan niet zomaar meer geld verschijnen. Het totaal bedrag blijft altijd op 100.

Bij een Zero Sum game is de eerste die moet kiezen nadelig, omdat de ander dan op basis van zijn keuze kan kiezen.

Bij Huffman Data compressie, welke letters staan bovenin de boom, en welke onder?

De letters die het minst vaak voorkomen, komen onderaan de boom

Wat is belangrijk om te weten bij Huffman Data compressie? (tijdens het omzetten naar bits)

Bij het omzetten van letters naar binair, is het belangrijk dat de bit prefix niet gelijk is aan een andere letter

Hoe voorkom je een Race condition?

Door middel van Synchronizing of Semaphores

Wat is een nadeel van Synchronizing?

Kan een Deadlock veroorzaken

Wat is het verschil tussen Recursie of een For-loop gebruiken?

- Recursie is trager
- Recursie "kost" meer door de overhead die erbij komt bij het aanroepen van een methode.
- De factor hangt af van hoe vaak je het doet

Aan welke 2 voorwaarden moet recursie voldoen

Recursie moet voldoen aan:
- één of meer base cases (de eenvoudigste case) worden gebruikt om recursie te stoppen. (de kleinste case. Wanneer moet recursie stoppen? vb; als het probleem opgelost is; return. anders ga door met recursie)
- Elke recursieve call verkleint het originele probleem. Waardoor je uiteindelijk bij de eenvoudigste case uitkomt (en stopt/eindigt)

Wat gebeurd er als recursie geen base case heeft (en dus oneindig doorgaat)

Dan krijg je uiteindelijk een stackOverflow, omdat elke recursieve actie zijn huidige staat op de stack opslaat.

Wat is de volgorde van snelheid in de Grote O? (5)

Van sloom naar snel
1. O(1)
2. O(log n)
3. O(n)
4. O(n log n)
5. O(n^2)
6. O(n^3)
7. O(2^n)

Waarom wordt er bij de Big O notation altijd naar de wordt case scenario gekeken?

Best case:
- Niet representatief

Average case:
- ideaal, maar erg moeilijk

Worst-case
- Niet representatief, maar makkelijk en handig
- Cruciaal voor applicaties zoals games, financieel en robotics

Wat is de geprefareerde methode om algoritmes te beschrijven?

Pseudocode

Wat voor operaties kan de Big O gebruik van maken, en hoe werkt het.

Van Primitieve operaties

VB van primitieve operaties:
- Evalueert een expressie
- Een value aan variabele toewijzen
- Indexing in een Array
- Een methode aanroepen
- Returnen van een methode

Wat doet de Asymptotic Analysis en hoe werkt het

- Bepaald de running time van een algoritme

Om het uit te voeren:
- Zoek worst-case aantal primitieve operaties
- Deze function uiten met big O

Vb:
- Alogoritme arrayMax voert maximaal:  7n -1   primitieve operaties uit
- arrayMax running time is dan: O(n) tijd

Contstante factoren en lower-order terms worden later weggelaten, dus hoeft het bij de primitieve operaties eigenlijk ook niet geteld te worden.

Wanneer is Lineair zoeken sneller dan binair zoeken?

Als de element erg vroeg in de lijst wordt gevonden, is lineair zoeken sneller

Wat is de contstante tijd in een algoritme

Dat wat contstand word uitgevoerd (bijv dat wat binnen de for-loop staat)

Wat is Dynamisch programmeren, en van welke techniek maakt het gebruik van?

NIET programmeren, maar een Algoritme technique
Bij dynamic programming wordt data dat eerder al berekend is hergebruikt, om makkelijker tot een solutie te komen.

(het opslaan van berekende getallen heet memoization)

Bijv fibonacci van 1.000.003
Omdat dat uit te rekenen duurt heel erg lang.
Maar wat als de fib van ....001 en ....002 al zijn gegeven? Dan kan je het erg makkelijk uitrekenen, en hoef je het niet zelf allemaal te doen.

Wat is 'Entropy' in Huffman encoding

Entropy is a measure of information content: Het aantal bits actually nodig om data op te slaan

Hoe wordt 'Entropy' in Huffman encoding ook wel genoemd?

Een measure of surprise

Hoe werkt de Huffman encoding

In plaats van dat elke character een vaste aantal bits bevat (bijv 6 bits per char), wordt er gekeken hoe vaak elke character in totaal wordt gebruikt.

De letters die vaak gebruikt worden (hoge frequentie) staan bovenaan in de tree, en zijn kleine bits.
De letters niet niet vaak worden gebruikt staan onderaan de tree en zijn grote bits)

Hoe wordt de huffman encoding gecodeerd/decodeerd

Elke letter heeft een bit stream.
Hierbij is belangrijk om te weten waar een letter begint en waar het eindigt.

Wanneer is hetpraktisch om Huffman te gebruiken, en wanneer niet?

NIET:
Voor een korte String (zoals: ABRACADABRA bijv)
- Om dit te decoderen heb je een code table nodig
- Als je de code table in de hele message moet zetten, is het hele bestand groter dan het bericht zelf. Dan is het het niet waard  

WEL:- De string om te encoden is groot, (vergeleken met de code table)
OF
- We agree on the code table beforehand

Hoe kunnen threads hun beurt af staan?

- Thread.sleep()
- Thread.yield()

Welke (3) methodes moet je NIET gebruiken binnen threads, waarom niet? Hoe moet het dan wel?

- Stop()
- Suspend()
- Resume()

Zijn depricated/outdated. Ze waren niet veilig.

Hoe wel?     
Assign null aan een Thread
Thread.interrupt

Hoe werkt het synchroniseren van methodes?

- Acquire lock voordat de methode wordt uitgevoerd
- Voer uit
- Release  lock

Andere objecten die erbij willen terwijl het locked is, worden tijdelijk geblocked totdat het gereleased is.

Met welke (3) methodes kan je samenwerken met threads, en hoe werkt het

- Wait()
- Notify()
- NotifyAll()  

De Wait() methode laat een thread wachten tot een bepaald conditie voorkomt. Wanneer het voorkomt, kan je notify() of notifyAll() gebruiken om de wachtende threads door te laten gaan.

Wanneer kan je de wait, notify en notifyall methodes aanroepen? Wat anders?

De 3 methodes moeten bynnen een synchronized methode (of block) worden aangeroepen. Doe je dit niet dan krijg je een:

IllegalMonitorStateException 

De Wait methode moet in een TRY/CATCH

Wat gebeurd er als de Thread.Wait() methode wordt aangeroepen?

- De thread pauzeert, en tegelijkertijd wordt de lock op het object losgelaten.

Als de thread weer wordt gestart nadat het notified is, krijgt hij de lock direct weer.

Wat zijn de verschillen tussen: Eenvoudige concurentie, uitgebreide concurrentie, Samenwerken

Eenvoudige concurrentie:
- Locking met synchronizing

Uitgebreide concurrentie en samenwerken:
- Afstemming via wait() en notify(), locking via synchronized

Hoe worden threads in een thread pool gemanaged?

- Door een Executor interface voor het uitvoeren van taken in een thread pool
- ExecutorService interface voor het managen en controlling van taken

ExecutorService is een subinterface van Executor

Wat is het verschil tussen een FixedThreadPool, en CachedThreadPool

Een Fixed. maakt een pool aal met een fixed aantal threads die concurrently worden uitgevoerd. Een thread kan hergebruikt worden om andere taken uit te voeren nadat de huidige taak finished is.

Een Cached. maakt een pool die threads maakt wanneer nodig, maar zal andere threads hergebruiken als die available zijn.

Wat is de Fairness Policy, en waar wordt het gebruikt?

De Fairness Policy wordt gebruikt binnen ReentrantLock. ReentrantLock is een concrete implementatie van Lock.  Je kan een Lock aanmaken met de fairness policy.

De True fairness Policy zorgt ervoor dat de langs-wachtende thread the lock als eerst krijgt wanneer beschikbaar.

False fairness Policy geeft locks aan een wachtende thread zonder een bepaalde volgorde.

Wat is een Condition tijdens het samenwerken van threads. en welke (3) methodes kan de condition gebruik van maken

Conditions zijn objecten gemaakt door het gebruiken van de newCondition() methode op een Lock object.

Als een condition is gemaakt, kan je
- Await()
- Signal()
- SignalAll()    
methodes gebruiken voor thread communicatie.

The await() methode zorgt ervoor dat de huidige thread wacht totdat de condition is gesignaleerd.
signal() maakt een thread wakker  (notify?)
signalAll() maakt alle wachtende threads wakker (notifyAll?)

In een UML/Klassendiagram. Hoe noteer je de relaties tussen elkaar. Wat zijn de verschillende lijnen? implements, extends, has, owns etc.

volle rechte lijn = extends
gestippelde lijn = implements

Hoe ziet de klassendiagram en samenhang van de volgende klassen er ongeveer uit:
Component, Container, JComponent, JPanel, Layoutmanager, Object

JPanel -> JComponent -> Container -> Component -> Object
                                                    |1
                                                    |
                                                    |1
                                          Layoutmanager

Schrijf een recursieve methode die de maximale diepte van een tree berekent. De maximale diepte van een lege tree is 0

public int maxDepth() {
  return(maxDiepte(root));
}
private int maxDepth (Node node) {
  if (node==null) {
    return(0);
  }
  else {
    int lDepth = maxDepth(node.left);
    int rDepth = maxDepth(node.right);
    // use the larger + 1
    return(Math.max(lDepth, rDepth) + 1);
  }
}

//Kan ook als one-liner:
return (Math.max(maxDepth(node.left), maxDepth(node.right)) + 1);

Hoe zit de samenhang van de Swing class hierarchie in elkaar?

Zo dus. goed leren!

Hoe ziet de Event Classes hierarchie in elkaar?

Zo dus. Goed leren!

Wat kost tegenwoordig uiteindelijk het meeste aan software

1. Het onderhouden (50-75%)
2. Development (±40%)
3. Hardware (5-10%)

Wat is software engineering precies?

- Het gebruiken en toepassen van systematische, proven methodes
- Learn from the past
- Het maken van supporting tools
- Gedisciplineerde aanpank  


Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software

Wat maakt software engineering zo moeilijk?

- Continu nieuwe developments op het gebied (nieuwe systemen, platforms, talen)
- Schalen
- De gat tussen de gebruiker en developer
- Tijdsdruk
- Relatief jonge discipline
- Zelfs als technisch alles in order is, is het niet altijd een success (ethics, user acceptance, legal issues, change management, business case, ...)

Welke 5 activiteiten in een set zijn nodig om een software systeem te developen

- Requirements specificaties & analyseren
- Design
- Implementatie
- Testen (validation + verification)
- Evolution

Wanneer is een klasse thread-safe?

Als een object van de klasse geen race condition kan veroorzaken bij meerdere threads.

Wanneer werkt Waterfall methode goed, en wanneer niet?

- Werkt alleen goed als je een goed plan hebt, en precies weet wat het eindresultaat moet zijn.

Werk niet goed als jij, of de klant, niet precies weet wat hij wil

Wat zijn de voor- en nadelen van incremental methode

+ makkelijk als je nog niet weet wat jij/de klant precies wil
+ Makkelijker om feedback te ontvangen en te verwerken
- Het proces is minder zichtbaar
- Systeem structuur is minder gestructureerd, omdat er steeds dingen bijkomen. (moet regelmatig refactored worden)

Maak een Huffman tree met de volgende gegevens:

F = 13
A = 8
C = 10
E = 6

LEREN HOE JE EEN BOOM MAAKT BITCH!
https://www.youtube.com/watch?v=umTbivyJoiI

De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:

  • Een unieke studie- en oefentool
  • Nooit meer iets twee keer studeren
  • Haal de cijfers waar je op hoopt
  • 100% zeker alles onthouden
Onthoud sneller, leer beter. Wetenschappelijk bewezen.
Trustpilot-logo