Sp?rsm?l til eksamen

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

    • 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 og r
    • 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?
Publisert 11. nov. 2020 09:29 - Sist endret 11. nov. 2020 09:29