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?
- 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