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 (fr?)?
  • 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