̽ѡ

Spørsmål til eksamen

Her finner du en liste med spørsmål som du kan bli spurt om. Du kan også bli spurt om andre spørsmål men dersom du klarer å svare på alle disse vil vi si at du er godt forberedt.

Spørsmål om Pensum

Git

  • Hva er Git og hvorfor er Git nyttig?
  • Kan du forklare de vanligste Git-kommandoene du har brukt?
    • Du bør kunne add, commit, push og pull.
  • Hva er en pull request?
  • Hva er en Git gren (engelsk: branch)?
  • Hva er formålet med en .gitignore-fil?
  • Hvordan oppstår Git-konflikter?
  • Hva er en Git commit-melding og hvorfor er de viktige?

Testing og kodestil

  • Hvorfor bør man teste koden?
  • Hva er en enhetstest?
  • Hva er test-dreven utvikling?
  • Si du har en funksjon sinus(x: float) -> float:
    • Hvordan ville du testet funksjonen?
    • Hvordan ville du håndtert brukerfeil?
  • Hva er parametriserte tester?
  • Hva må man passe på når man tester at to tall er like?
    • Er det forskjell på om vi sammenligner heltall og flyttall?
  • Hva legger man i begrepet kodestil?
  • Hva menes med dokumentasjon i programmering?

C++

  • Nevn noen forskjeller mellom Python og C++ som programmeringsspråk.
  • I C++ må man spesifisere typen på variabler. Er det noen fordeler med det?
  • Hva er en kompilator?
  • Hva er en referanse-variabel?
  • Hva er en peker? Hva kan man si om følgende funksjoner basert på signaturen?
    • double function(double*)
    • double* function(double, double, int)
    • void function(double*, int)
    • int& function(int, bool)
  • Parametre til en funksjon:
    • Hva er call by value?
    • Hva er call by reference?
  • Hvordan gjøres dynamisk minneallokering i C++?
  • Hva er en destruktør?
  • Hvordan kan en minnelekkasje oppstå?
  • Gitt en heltallsvariabel bar.
    • Hvordan kan du opprette en peker foo til bar?
    • Hvordan kan du hente ut heltallet fra pekeren foo? Og,
    • hva heter dette?
  • Hva er funksjons-overlasting (egelsk: function overloading)?
  • Hvordan kan man printe noe til terminalen i et C++-program?
  • Klasser:
    • Hva er forskjellen mellom private og public?
    • Hva er forskjellen på class og struct?
  • Hva betyr det hvis vi skriver using namespace std?
  • Hvordan er pekere og arrays relatert?
  • Gitt et array double arr[3] = {1.2, 1.3, 1.4}:
    • Hvis double y = arr[1] og man utfører y += 0.4, hva er nå verdien til arr[1]?
    • Hvis double &z = arr[2] og man utfører z += 0.4, hva er nå verdien til arr[2]?
  • Gitt et array int r[3] = {5, 4, 3}:
    • Hva gir *(r + 1)?
    • Gitt pekeren auto *y_ptr = &r[1]. Hva er y_ptr + 1?
  • Hva er et skop?
  • Hvordan er skop relatert til dynamisk minneallokering?
  • Gitt Gridpoint-objektet start med medlemsvariabler x, y og z:
    • Hvordan kan du hente ut x fra start?
    • Gitt Gridpoint* ptr = &start, hvordan kan du hente ut x fra ptr?

Algoritmeanalyse

  • Kan du forklare i grove trekk hva vi mener med kostnad?
    • Hva menes med stor-O notasjon?
  • Hva vil det si at en algoritme er 𝒪(N2)?

Kodeoptimalisering

  • Nevn noen teknikker man kan bruke for å gjøre koden mer effektiv.
  • Hvorfor er operasjoner i NumPy raskere enn operasjoner i ren Python?
  • Hva bør man gjøre før man starter å optimalisere koden?
  • Hva er forskjellen på I/O-begrensede (I/O bounded) og CPU-begrensede (CPU bounded) problemer?
  • Hva vil det si å kjøre kode i parallell?
  • Hva slags bibliotek kan vi bruke om vi ønsker å parallellisere koden vår i Python?

Objektorientert programmering i Python

  • Hva er en attributt? Forklar følgende begreper:
    • Metoder: Instansmetoder, klassemetoder og statiske metoder.
    • Datafelt: Instansvariabler og klassevariabler.
  • Magiske metoder (som f.eks __add__):
    • Hva brukes magiske metoder til?
    • Gi eksempler på andre magiske metoder.
  • Kan man lage private attriubutter i Python?
    • Forklar bruk av @property og @<datafield>.setter
  • Hva betyr begrepet innkapsling i OOP?
  • Hva betyr begrepet abstraksjon i OOP?
  • Hva betyr begrepet polymorfisme i OOP?
  • Hva betyr begrepet arv i OOP?
    • Hvordan implementerer man arv i Python?
    • Hvordan kan man kalle på metoder i superklassen fra subklassen?
  • Hva kjennetegner en abstrakt klasse i Python?
  • Hva er et navnerom (engelsk: namespace) i Python?

Tilfeldige tall

  • Hva er en pseudo-tilfeldig tallgenerator (pRNG)?
    • Hva er egenskapene til en god pRNG?
  • Hva er hensikten med å bruke et seed (ڰø)?
  • Hva er virrevandring (engelsk: random walk)?
  • Hva er en Markovkjede?
    • Forklar hvordan man kan gjøre en stokastisk simulering av en Markovkjede.
  • Hva er sammenhengen mellom de store talls lov og stokastiske simuleringer?
  • Hva vil det si at et system er stokastisk / deterministisk
    • Kan man bruke stokastiske simuleringer til å bestemme deterministiske egenskaper?

Prosjektene

Generelt

  • Hvordan har du jobbet for å oppnå god kodestil?
  • Har du opplevd noen rare bugs i kurset?
    • Hva var buggen?
    • Hvordan gikk du frem for finne ut av løse problemet?
  • Hvilket prosjekt syns du var vanskeligst?

Prosjekt 1 - Dobbelpendel

  • Hvordan ble systemene av ordinære differensialligninger (ODE) løst?
    • Hvordan ble ligningssystemene satt opp?
    • Hvordan ble ODE’ene løst?
    • Hvordan ble resultatene lagret?
  • Hvordan ble objektorientert programmering brukt i prosjektet?
    • Hvordan ble arv brukt?
  • Hvis man implementerer en __call__-metode, hvordan kan man bruke denne?
  • Hva ble __call__-metoden brukt til i klassene?
  • Skriv en skisse av en av enhetstestene fra prosjekt 1 på tavlen.
  • Hva var hensikten ved å først implementere ODEModel og deretter la ExponentialDecay, Pendulum og DoublePendulum arve fra denne?
  • Forklar hvordan dere testet at dere løste ODE’ene riktig
  • Hvordan testet du plotte funksjonen?
  • På hvilken måte ble polymorfisme brukt i prosjekt 1?

Prosjekt 2 - Lister i C++

  • Spørsmål om enten array-lister eller lenkede lister:
    • Forklar datastrukturen til listen i grove trekk.
    • Hvordan lagres elementene i listen?
    • Skriv en skisse av metoden append på tavlen.
    • Nevn noen attributter som bør være private.
    • Nevn noen attributter som bør være public.
    • Hva er fordelene med denne type liste?
    • Hva er ulempen med denne typen liste?
    • Hvordan gikk du frem for å teste listen?
  • Gi et eksempel på et sted koden din kaster et unntak (engelsk: exception).
  • Hva gjør metoden resize i ArrayList?
  • Angi (og begrunn) kjøretiden til append, insert og pop for:
    • ArrayList som er full.
    • ArrayList som er ikke er full.
    • LinkedList med eller uten tail.
  • Hva er forskjellen på en enkelt-lenket og en dobbel-lenket liste
  • Hva er forskjellen på en enkel-lenket og en dobbel-lenket liste?
    • Hvilken type ble implementert i prosjekt 2?
  • Hvordan gikk du frem for å teste listene dine?
  • Du blir bedt om å lage en metode med signaturen int& operator[](int)
    • Hva gjør denne metoden?
    • Hva betyr & i dette tilfellet?
  • Du blir bedt om å overloade konstruktøren med metoden LinkedList(std::vector<int>)
    • Hva betyr det å overloade?
    • Hva gjør denne metoden?
    • Hvordan er den forskjellig fra den andre konstruktøren?
  • Hvordan ble smarte pekere brukt i prosjektet?
  • Hva er forskjellen på en smart og en rå peker?

Prosjekt 3 - Kaosspill

  • Kan du forklare i grove trekk hvordan kaosspillet fungerer?
  • Hvordan lager vi selve plottet?
  • Kan du forklare hvordan vi velger et tilfeldig startpunkt innenfor den regulære N-kanten?
  • I 1e) blir du bedt om å plotte trekanten i rødt, grønt og blått.
    • Hvordan går du frem for å tilordne en farge til hvert punkt?
    • Hvordan ser figuren ut i disse fargene?
  • I 1f) blir du bedt om å lage figuren i farger på en annen måte
    • Hva er forskjellene i fremgangsmåten 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?
  • Hva slags enhetstester skrev du i 2h)?
  • Du ble bedt om å lage en klasse AffineTransform:
    • Hva gjorde denne klassen?
    • Hva slags metode implementerte du?
  • I 3c) må vi tilfeldig plukke ut en av fire funksjoner i hver iterasjon.
    • Var det uniform sannsynlighet?
    • Forklar hvordan du plukket ut funksjonene tilfeldig.
  • Beskriv plottet i oppgave 3.
  • Hva brukes klassen Variation til?
Publisert 14. nov. 2022 15:21 - Sist endret 14. nov. 2022 15:21