Spørsmål til eksamen

Her vil dere finne en liste med spørsmål dere kan bli stilt på eksamen

Generelle Spørsmål

  • Hva er git og hvorfor er git nyttig?

  • Kan du forklare de vanligste Git-kommandoene du har brukt?

    • add, commit, push, pull
  • Hva er formålet med en .gitignore-fil?

  • Hva er en git commit melding, og hvorfor er de viktige?

  • I alle tre prosjektene har vi presisert viktigheten av god kodestil. Kan du forklare oss hva kodestil er for noe? Hvordan har du jobbet for å oppnå god kodestil?

  • Hvilket av de tre prosjektene syns du var vanskeligst? Hvorfor det?

  • Har du opplevd noen rare bugs i kurset? Kanskje mens du jobbet med C++?

    • Hvordan gikk du frem for finne ut av løse problemet?
    • Hva var buggen?
  • Nevn noen teknikker man kan bruke for å gjøre koden mer effektiv?

  • Hva bør man gjøre før man starter å optimalisere koden?

  • Hva er forksjellen på multiprocessing og multithreading?

  • Når vi lager en klasse går det an å implemetere slike “magiske metoder” som starter med __. Ett eksempel er __add__. Kan du gi noen andre eksempler? Hvorfor er slike metoder nyttige?

  • Gi noen gode argumenter for hvorfor vi bør skrive tester?

  • Hva er forskjellen på instansmetoder, klassemetoder of statiske metoder?

  • Nevn de fire pilarene innenfor objekt orientert programmering og fortell kort hva de innebærer

  • Hva er et design pattern?

  • Hvordan gjør man arv i python? Hvordan kaller man på metoder i foreldre klassen?

  • Hva er et namespace, og hvorfor er namespace nyttige?

  • Gi eksempler på sorteringsalgoritmer? Hvordan kan vi vurdere hvilken sorteringsalgoritme vi bør velge?

  • Hva er et binært søketree? Hva er kjøretiden på de ulike operasjonene vi kan gjøre på et binært søketre?

  • Hvorfor er vi opptatt av høyden til et binært tre?

  • Hva er rekursjon? Gi ett eksempel hvor vi bruker rekursjon?

  • Hva er en random number generator? Hva er en pseudorandom number generator? Hvordan kan vi generere “tilfeldige” tall på en datamaskin?

  • Hva er hensikten med å bruke et seed (frø)?

  • Hva sier “pigeonholde principle”?

  • Hva er en random walk?

  • Hva er en markov chain?

Prosjekt 1 - Dobbelpendel

  • I prosjekt 1 måtte dere løse systemer av ordinære partielle differensialligninger (ODE), hvordan gikk dere frem for å gjøre det?

  • Hvordan ble objekt-orientert programmering brukt i prosjektet?

    • Hva var fordelene?
  • I prosjektet lagde dere en DoublePendulum klasse man kunne bruke for a løse bevegelsesligningene til en dobbelpendel og plotte resultatet. Kan du forklare i grove trekk hvordan man går frem for a bruke denne klassen?

  • Flere steder ble dere bedt om a skrive unit tests/enhetstester. Kan du forklare hva en enhetstest er?

  • Klarer du å skrive opp en av enhetstestene du lagde i prosjekt 1 på tavla? Det er ikke krise om den ikke blir helt riktig, målet er bare å vise ideen.

  • I prosjektet ble dere bedt om a bruke @property dekoratoren. Kan du forklare hva denne er, og hvordan den brukes?

  • I koden får man tilgang til løsningen som attributter på objektet, f.eks pendulum.time, pendulum.x, pendulum.y.

    • Hva skjer om man prøver a bruke disse attributtene før man har kallet på solve?
    • Kan du forklare hvordan dette ble implementert?
  • I prosjektet implementerer dere en __call__ metode. Hva gjør denne metoden?

  • I oppgave 2g) skal dere lage en dempet pendel, altså en pendel med friksjon. Dette gjøres gjennom “arv”

    • Kan du forklare hvordan arv brukes i denne oppgaven?
    • Hva er fordelen med arv i dette tilfellet?

Prosjekt 2 - Lister

  • I dette prosjektet lager dere to typer lister. Hvilke to typer er dette, og hva er hovedforskjellene mellom dem i grove trekk?

  • Hva er forskjellen på private og public?

    • Kan du bruke ArrayList klassen som et eksempel? Hvilke attributter bør være private, og hvilke bør være public?
  • Hva er forskjellen på klasser og structs i C++. Når bruker vi hvilken?

  • Til både ArrayList og LinkedList skulle dere lage en destructor-metode. Hva gjør denne metoden, og hvorfor er den viktig i teorien? Hvorfor er den ikke alltid viktig i praksis?

  • Hva er en array liste? Hva er baktanken?

  • Hva er en lenket liste? Hva er baktanken?

  • I ArrayList definerer dere en funksjon som heter resize. Hva gjør resize operasjonen?

  • Hvordan er det å inserte i midten av en ArrayListe?

    • Forklar hva kosten blir i Big-O
    • Hva med a fjerne et element med remove?
    • Hva om du prøver å inserte i midten av en liste som allerede er full?
  • Hva er forskjellen på en enkellenket og en dobbellenket liste?

  • Klarer du å skrive append-metoden til ArrayList på tavla?

  • Klarer du å skrive append-metoden til LenketListe på tavia?

  • I Oppgave 3 sammenligner dere kostnadene til forskjellige operasjoner på de to type listene. Dette gjøres med stor O:

    • Kan du forklare i grove trekk hva vi mener med kostnad? Og hva stor-O er?
    • Velg en metode helt selv, f.eks. append i lenket liste, kan du forklare hvordan du går frem for å analysere kostnaden?
  • I Oppgave 3 sammenligner dere de to type listene

    • Hva er fordelene med en ArrayListe?
    • Hva er fordelene med en LenketListe?
  • Hvordan gikk du frem for å teste listene dine?

  • Du blir bedt om a lage en metode med Signaturen int& operator[](int)

    • Hva er denne metoden?
    • Hva betyr & i dette tilfellet?
  • Du blir bedt om a overloade konstruktøren med metoden: LinkedList(vector<int>)

    • Hva betyr det å overloade?
    • Hva gjør denne metoden? Hvorfor er den forskjellig fra den andre konstruktøren?
  • Kan du gi et eksempel på et sted koden din kaster ett exception?

  • Hva er en sirkulær lenket liste?

  • Klarer du a forklare hva en Josephus-sekvens er?

    • Hvorfor er sirkulært lenkede lister gode for å finne slike sekvenser?
    • Kan du skrive opp sekvensen for n=6, k=3 for hånd?

Prosjekt 3 - Kaosspill

  • Kan du forklare i grove trekk hvordan kaosspillet fungerer?
  • Hva slags figur får vi ut fra trekanteksempelet?
  • Hvordan lager vi selve plottet?
  • Kan du forklare hvordan vi velger et tilfeldig startpunkt innenfor polygonet?
  • I 1e) blir du bedt om å plotte trekanten i rødt, grønt og blått.
    • Hvordan går du frem for å gi en farge til hvert punkt?
    • Hvordan ser figuren ut i disse fargene?
  • I 1f) blir du bedt om a lage figuren i farger på en annen måte
    • Hva er forskjellene i fremgangsmaten i 1e og 1f?
    • Hvordan blir figuren seende ut denne gangen?
  • Når du generaliserer problemstillingen introduserer vi to parametere, n og r
    • Hva er disse to parametrene?
  • Hvordan gikk du frem for å finne hjørnene i en regulær n-kant?
  • Hvordan lagret du bildene du lagde?
  • I 2g) blir du bedt om skrive minst 4 enhetstester. Kan du forklare hva en enhetstest er, og gi et eksempel på en test du skrev?
  • I siste del av prosjektet ble dere bedt om a lage en AffineTransform klasse
    • Hva gjorde denne klassen?
    • Hva slags metode implementerte du?
    • Hvorfor tror du vi lager denne klassen?
  • I 3c) må vi plukke en tilfeldig funksjon ut av 4, men ikke med uniform sannsynlighet. Forklar hvordan du kan plukke en av fire funksjoner med en vektet sannsynlighet - Man kan gjøre dette med np.random.choice, men vi så eksplisitt at dere ikke skulle gjøre det. Kan du huske hvorfor?
  • Hvordan blir plottet i oppgave 3? Hva er det vi ser i figuren?
  • I oppgave 4 blir du bedt om at implemtentere en klasse Variation. Hva er hensikten med denne oppgaven?
Publisert 20. nov. 2019 08:24 - Sist endret 28. nov. 2019 20:47