Hva er de 10 vanligste spørsmålene i et C#-intervju, og hvordan svarer man på dem?
Fra enkle spørsmål om fordelene ved C# til forklaringer av ulike elementer i programmeringsspråket og hvordan de kan brukes, har vi laget en liste over de 10 viktigste spørsmålene for et jobbintervju om C#.
Denne artikkelen belyser ti vanlige spørsmål i et jobbintervju for en utviklerstilling. Vi har også inkludert svar på hvert av disse spørsmålene. Selv om disse spørsmålene dekker en rekke emner, fra enkle til detaljerte, finnes det mange andre potensielle spørsmål om C# og dets spesielle funksjoner.
Denne artikkelen gir en innledende oversikt over ulike spørsmål som kan stilles, fra enkle spørsmål til mer spesifikke spørsmål som krever visse detaljer. Artikkelen kan også hjelpe deg med å forstå hvordan du kan forberede deg til et intervju som har som mål å teste dine kunnskaper om et bestemt programmeringsspråk.
Spørsmål 1: Hva er spesielle funksjoner i C#, og hvilke fordeler tilbyr programmeringsspråket?
Med sitt spesielle utviklingsmiljø Visual Studio er C# grunnleggende designet for hastighet. Som et objektorientert programmeringsspråk scorer C# også poeng med sin enkle og moderne apputvikling, som er både allsidig og kraftig. Dette er grunnen til at mange utviklere velger C# når de skal bestemme seg for hvilket programmeringsspråk de skal lære.
C# er fundamentalt strukturert rundt klasser og objekter, og følger strengt typingsprinsippene. Det tilbyr funksjonaliteter som abstraksjon, innkapsling og arv. Programmeringsspråket er primært ment for utvikling innenfor Microsoft .NET-økosystemet.
På grunn av sin tilpasning til .NET-rammeverket har C# sin egen struktur, hvor mange typer innenfor .NET-strukturer arver fra objektklassen. Som et resultat arver disse klassene metoder, egenskaper, felt og hendelser. Denne hierarkiske strukturen bidrar til konsistens og interoperabilitet innenfor .NET-økosystemet.
Spørsmål 2: Hva betyr klassifiseringen «objekt» i C#?
For å forstå objekter i C# må man forstå de grunnleggende prinsippene i språket. I sin kjerne er C# et objektorientert programmeringsspråk, hvor klasser fungerer som grunnlag. En klasse avgrenser datastrukturen og dikterer hvordan data lagres, administreres og overføres i C#. I hovedsak fungerer den som en blåkopi for alle andre datastrukturer.
Objekter er reelle elementer i C# som også opptar reelle verdier i det tilgjengelige minnet. Alle enheter som har svært spesifikke egenskaper eller som utfører en spesifikk oppgave i programvaren, kan betraktes som objekter. Objekttypen defineres av en klasse, og klasseinstanser danner rammeverket for deres videre struktur.
La oss for eksempel si at vi designer et program som er sentrert rundt en fjernsyn. Først må vi definere en enhet som utgangspunkt. I dette tilfellet kan vi opprette klassen «Fjernsyn». Innenfor denne klassen ønsker vi å definere fem egenskaper: produsent, modell, farge, størrelse og pris. Disse egenskapene er medlemmer av klassen. Andre medlemmer av klassen kan være hendelser, metoder eller felt, som alle sammen utgjør et objekt.
For å programmere en Sony Bravia som en instans av en TV, kan vi spesifisere Sony, Bravia, Black, 50 og 500 som egenskaper når vi oppretter dette objektet. Dette definerer informasjonen om produsent, modell, farge, størrelse og pris. Sony-TV-en er derfor en instans av klassen Television. For å gjøre denne klassen tilgjengelig, er det viktig å definere den som offentlig og ikke som privat eller beskyttet.
Spørsmål 3: Hva er forskjellen mellom administrert og ikke-administrert kode i C#?
Administrert kode
Administrert kode i C# er all kode som er opprettet ved hjelp av .NET Framework. Denne typen kode kjøres direkte av Common Language Runtime (CLR). CLR administrerer livssyklusen til koden, inkludert oppretting av objekter, minnetildeling og sletting av objekter.
Uadministrert kode
Kode som er utviklet utenfor .NET Framework, kalles ikke-administrert kode. Denne kategorien omfatter alle applikasjoner som ikke kjøres under kontroll av CLR.
.NET Framework har en funksjon som kan konvertere ikke-administrert kode til administrert kode og omvendt. Denne funksjonen er spesielt nyttig fordi den gjør det enklere å integrere oppretting og kjøring av objekter samt sletting av kode i rammeverket.
Spørsmål 4: Hva er forskjellen mellom struct og class?
I C# refererer begrepene klasse (class) og struktur (struct) til brukerdefinerte datatyper. Disse datatypene har imidlertid noen grunnleggende forskjeller.
Struktur
- Som en verditype i C# arver strukturer alltid implisitt fra System.ValueType.
- Strukturer kan ikke avledes fra andre typer.
- Som regel brukes en struktur for mindre datamengder.
- Strukturer kan ikke være abstrakte og krever derfor direkte implementering.
- Det er ikke mulig å tilordne en standardkonstruktør til en struktur.
- Det er ikke obligatorisk å opprette et objekt ved hjelp av nøkkelordet
new.
Klasse
- Som referansetype i C# arver klasser alltid implisitt fra System.Object.
- Klasser kan avledes fra andre klasser, noe som muliggjør arv.
- Som regel brukes en klasse til større datamengder eller mer komplekse strukturer.
- Klasser kan være abstrakte, noe som betyr at de ikke tillater direkte instansiering.
- I motsetning til strukturer kan klasser ha en standardkonstruktør hvis de trenger det.
Spørsmål 5: Hva er forskjellen mellom et grensesnitt og en abstrakt klasse i C#?
Grensesnitt (interfaces) og abstrakte klasser (abstract classes) spesifiserer begge kodekontraktklasser, f.eks. forutsetninger eller objektinvarianter, for avledede klasser. Til tross for denne fellestrekk, er det mange forskjeller, som funksjonaliteten til grensesnitt og abstrakte klasser viser.
Kodekontraktklasser kan brukes til å spesifisere forutsetninger, etterbetingelser og objektinvarianter. Forutsetninger er krav som må oppfylles når man går inn i en metode eller egenskap.
Når det gjelder arv, kan abstrakte klasser inneholde metoder med implementert kode i tillegg til abstrakte metoder, mens grensesnitt krever at alle metoder er abstrakte. På grunn av dette trenger abstrakte klasser nøkkelordet abstract for deklarering.
Siden C# ikke støtter multiarv av klasser, kan en klasse ikke arve fra mer enn én abstrakt klasse. Imidlertid kan flere grensesnitt implementeres av en klasse for å muliggjøre multiarv av grensesnitt.
En abstrakt klasse kan ha konstruktorer som kan påkalles av avledede klasser. Grensesnitt kan ikke inneholde konstruktorer fordi de ikke er instanser og derfor ikke kan initialiseres.
Spørsmål 6: Hva er egenskaper i C#?
I C# er egenskaper et element i en klasse som lar deg lese, skrive eller beregne verdien av et privat deklarert felt. Egenskaper kan brukes til å få tilgang til offentlige grensesnitt eller tillate endringer i data som er lagret i en klasse.
Egenskaper er et grunnleggende aspekt ved objektorientert programmering i C# og brukes ofte i applikasjoner for å gi ren og sikker tilgang til klassedata.
De deklareres ved hjelp av tilgangsmetodene get og set, som definerer oppførselen for lesing eller innstilling av egenskapsverdien. Tilgangsmetoden get henter verdien av egenskapen, mens tilgangsmetoden set setter verdien av egenskapen. En egenskap kan ha én eller begge tilgangsmetodene. Dette avhenger av om egenskapen er (eller bør være) skrivebeskyttet eller lesbar/skrivbar.
Spørsmål 7: Hva menes med boxing og unboxing i C#?
Boxing og unboxing brukes i C# for typekonvertering.
- Konvertering fra en verditype til en referansetype kalles boxing. Dette kan for eksempel være å konvertere en enkel datatype som int til datatypen object. Boxing er en implisitt konvertering.
- Konvertering fra en referansetype til en verditype kalles derimot unboxing. Unboxing kan bare skje med den eksakte verditypen som opprinnelig ble boksert, for eksempel å konvertere object tilbake til int.
Spørsmål 8: Hva er oppregning (enum) og hva brukes det til i C#?
En enum er en verditype med et sett av relaterte navngitte konstanter. Denne gruppen kalles også en «enumeratorliste». I C# er enums oppregnede datatyper som er primitive og brukerdefinerte. Nøkkelordet enum brukes til å deklarere en oppregning.
Enums i .NET Framework brukes til å opprette numeriske konstanter. Hvert medlem av en enum er av enum-typen, og det kreves en numerisk verdi for hver enum-type. Disse enum-verdiene er uforanderlige. Enums kan representeres som tegnstrenger og manipuleres som heltall.
Standardtypen for oppregningselementet er int. Som standard har den første oppregneren verdien 0, og verdien til hver påfølgende oppregner økes med 1. Disse verdiene kan imidlertid også angis manuelt, for eksempel 10 = På og 20 = Av.
Spørsmål 9: Hva er forskjellen mellom Dispose og Finalize i C#?
I C# brukes begge metodene til å frigjøre ressurser.
Dispose-metoden frigjør ikke-administrerte ressurser, for eksempel databasetilkoblinger som ikke administreres automatisk av .NET-kjøretidsverten. Den implementeres normalt i en klasse. Dette implementerer igjen IDisposable-grensesnittet, som definerer Dispose-metoden.
Denne metoden kalles eksplisitt av klientkoden for å frigjøre ressurser som ikke lenger er nødvendige. Alternativt kan den kalles implisitt med using, som sikrer at Dispose-metoden kalles når objektet går ut av omfanget.
Finalize-metoden brukes derimot til å utføre oppryddingsoperasjoner på et objekt like før søppeloppsamlingsprosessen starter. Som et resultat implementeres den vanligvis i en klasse som overstyrer Object.Finalize-metoden.
Spørsmål 10: Hva er fordelene med utvidelsesmetoder i C#?
Utvidelsesmetoder lar utviklere utvide funksjonaliteten til en eksisterende type uten å endre den opprinnelige typen eller opprette en ny avledet type. De gjør det mulig å legge til metoder til eksisterende klasser, strukturer, grensesnitt, enums osv., selv om metodene ikke opprinnelig var definert innenfor typen.
Utvidelsesmetoder deklareres i en statisk klasse og defineres som statiske metoder, med en unik første parameter kalt this. Denne parameteren spesifiserer typen som utvides, slik at utvidelsesmetoden kan påkalles som om den var en instansmetode av den typen.
Hva slags spørsmål kan jeg forvente i et C#-intervju?
Å vite hvem som intervjuer deg kan gi deg mer innsikt i hva slags spørsmål du vil bli stilt. Rekrutterere mangler noen ganger den nødvendige ekspertisen for å kunne føre dyptgående diskusjoner om spesialiserte områder som kategorier eller objekter i C#. Så hvis intervjueren er en teknisk leder eller et medlem av utviklingsteamet, er det mer sannsynlig at intervjuet vil dreie seg om spesifikke programmeringskonsepter og ferdigheter.
Hvis den ledende programvarearkitekten eller webutvikleren er til stede, er det sannsynlig at de vil stille spesialiserte spørsmål, spesielt hvis du søker på stillinger utover nybegynnernivå. Dette er fordi fremtidige kolleger ønsker å vite hvordan det nye teammedlemmet vil kunne hjelpe dem i deres daglige oppgaver.