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