Generelle Spørsmål
git
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?
Testing og kodestil
- Gi noen gode grunner til hvorfor man bør teste koden man skriver
- Hvis du har funksjon som regner ut sinus til x - hvordan ville du testet denne funksjonen?
- Hva er parametriserte tester og når kan vi bruke det?
- Hva må man passe å når man tester at to tall er like - er det forskjell å om vi sammenligner heltall og flyttall?
- 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?
- Hvorfor er det spesielt viktig å ha konsistent kodestil når man jobber flere sammen å et prosjekt?
C++
- Kan du nevne noen forskjeller mellom Python og C++ som programmeringsspråk?
- I C++ må man spesifisere typen å variabler. Er det noen fordeler med det?
- Hva er en kompilator?
- Hva er en referanse variabel?
- Hva er en peker?
- Hvordan lager man kommentarer i C++?
- Hva betyr det at en funksjon har retur type
void
? - Hvordan brukes en funksjon med signaturen
void print(int)
? - Hva betyr det at en funksjon returnerer typen
int&
? - Hvordan gjøres dynamisk minneallokering i C++?
- Hva er en destruktør?
- Hvordan kan en minnelekkasje oppstå?
- Hvordan henter du ut verdien til objektet som en peker peker å, og hva heter dette?
- Hva er forskjellen å en funksjon der vi bruker call by value og en funksjon er vi bruker call by reference?
- Hvordan kan man printe noe til terminalen i et C++-program?
- Hva er forskjellen å en class og en struct?
- Hva vil det si at en variabel er private?
- Hva er funksjons overlasting (function overloading)?
- Hva betyr det hvis vi skriver
using namespace std
? - Hvordan er pekere og arrays relatert?
- Hvis vi har int x[10], og ønsker å sette int y = x[2]. Kan vi gjøre dette å en annen måte?
- Hva er et skop?
- Hvordan er skop relatert til dynamisk minnealokering?
- Hvordan aksesserer man medlemsvariabler til et objekt via en peker (f.eks
x
åGridPoint
, viaGridPoint *start_ptr
)? - Hvilket språk likte du best å jobbe med?
Algoritmeanalyse
- Hva vil det si at en algoritme er O(N^2)
- Hva er kjøretiden å de ulike operasjonene å ArrayList og LinkedList (append, insert, pop, …)?
- Hva hvis vi har med tail / ikke har med tail peker i LinkedList?
- Hva hvis LinkedList er dobbel-lenket / enkelt-lenket?
Generelt
- 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?
- Hvilket av de tre prosjektene syns du var vanskeligst? Hvorfor det?
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 å 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 å parallelisere koden vår i Python?
Gi eksempler å sorteringsalgoritmer. Hvordan kan vi vurdere hvilken sorteringsalgoritme vi bør velge?
Objektorientert programmering
Når vi lager en klasse i Python, går det an å implementere såkalte “magiske metoder” som starter med
__
. Ett eksempel er__add__
. Kan du gi noen andre eksempler? Hvorfor er slike metoder nyttige?Hva er forskjellen å instansmetoder, klassemetoder og statiske metoder i Python?
Nevn de fire pilarene innenfor objektorientert programmering og fortell kort hva de innebærer
Hva er et design pattern?
Hvordan gjør man arv i Python? Hvordan kaller man å metoder i foreldreklassen?
Hva er et namespace i Python, og hvorfor er namespace nyttige?
Tilfeldige tall
Hva er en random number generator? Hva er en pseudorandom number generator? Hvordan kan vi generere “tilfeldige” tall å en datamaskin?
Hva er hensikten med å bruke et
seed
(ڰø)?Hva sier “pigeonhole principle”?
Hva er en random walk?
Hva er en markovkjede?
Prosjekt 1 - Dobbelpendel
I prosjekt 1 måtte dere løse systemer av ordinære differensialligninger (ODE), hvordan gikk dere frem for å gjøre det?
Hvordan ble objektorientert programmering brukt i prosjektet?
- Hva var fordelene?
I prosjektet lagde dere en DoublePendulum klasse man kunne bruke for å løse bevegelsesligningene til en dobbelpendel og plotte resultatet. Kan du forklare i grove trekk hvordan man går frem for å bruke denne klassen?
Flere steder ble dere bedt om å skrive unit tests/enhetstester. Kan du forklare hva en enhetstest er?
Klarer du å skrive opp en av enhetstestene du lagde i prosjekt 1 å tavla? Det er ikke krise om den ikke blir helt riktig, målet er bare å vise ideen.
I prosjektet ble dere bedt om å bruke
@property
dekoratoren. Kan du forklare hva denne er, og hvordan den brukes?I koden får man tilgang til løsningen som attributter å objektet, f.eks
pendulum.time
,pendulum.x
,pendulum.y
.- Hva skjer om man prøver å bruke disse attributtene før man har kalt å 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 en array-liste? Hva er den underliggende idéen med array-lister?
Hva er en lenket liste? Hva er den underliggende idéen med lenkelister?
Hva er forskjellen å
private
ogpublic
?- 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 å 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 ArrayList definerer dere en metode som heter resize. Hva gjør resize-operasjonen?
Hvordan er det å sette inn et element i midten av en ArrayListe?
- Forklar hva kosten blir i Big-O
- Hva med å fjerne et element med remove?
- Hva om du prøver å inserte i midten av en liste som allerede er full?
Hva er forskjellen å en enkel-lenket og en dobbel-lenket liste?
Klarer du å skrive append-metoden til ArrayList å tavla?
Klarer du å skrive append-metoden til LenketListe å tavia?
I Oppgave 3 sammenligner dere kostnadene til forskjellige operasjoner å de to type listene. Dette gjøres med “stor O”-notasjon:
- 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 å lage en metode med Signaturen
int& operator[](int)
- Hva er denne metoden?
- Hva betyr
&
i dette tilfellet?
Du blir bedt om å 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 å et sted koden din kaster et unntak (exception)?
Hva er en sirkulær lenket liste?
Klarer du å 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 den regulære N-kanten (regular N-gon)?
- 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 å 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
ogr
- 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 2h) blir du bedt om skrive minst 4 enhetstester. Kan du forklare hva en enhetstest er, og gi et eksempel å en test du skrev?
- I siste del av prosjektet ble dere bedt om å 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 ut en tilfeldig funksjon blant 4 funksjoner, 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 bad 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 implementere en klasse
Variation
. Hva er hensikten med denne oppgaven?