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 på når man tester at to tall er like - er det forskjell på 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 på et prosjekt?
C++
- Kan du nevne 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?
- Hvordan gjøres dynamisk minneallokering i C++?
- Hva er en destruktør?
- Hvordan kan en minnelekkasje oppstå?
- Hvordan kan man printe noe til terminalen i et C++-program?
- Hva betyr det hvis vi skriver
using namespace std
? - Hvilket språk likte du best å jobbe med?
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 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 å parallelisere koden vår i Python?
Gi eksempler på 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 på 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 på 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 på 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 på 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 på objektet, f.eks
pendulum.time
,pendulum.x
,pendulum.y
.- Hva skjer om man prøver å bruke disse attributtene før man har kalt 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 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 på
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 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 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 på en enkel-lenket og en dobbel-lenket 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”-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 på 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 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
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 på 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?