Hvad er de 10 mest almindelige C#-interviewspørgsmål, og hvordan besvarer man dem?
Fra enkle spørgsmål om fordelene ved C# til forklaring af forskellige elementer i programmeringssproget og hvordan de kan bruges, har vi lavet en liste over de 10 vigtigste spørgsmål til en jobsamtale om C#.
Denne artikel fremhæver ti ofte stillede spørgsmål i en jobsamtale til en udviklerstilling. Vi har også medtaget svar på hvert af disse spørgsmål. Selvom disse spørgsmål dækker en række emner fra enkle til detaljerede, er der mange andre mulige spørgsmål om C# og dets særlige funktioner.
Denne artikel giver et indledende overblik over forskellige spørgsmål, der kan blive stillet, lige fra enkle spørgsmål til mere specifikke spørgsmål, der kræver visse detaljer. Denne artikel kan også hjælpe dig med at forstå, hvordan du forbereder dig til en samtale, der har til formål at teste din viden om et bestemt programmeringssprog.
Spørgsmål 1: Hvad er de særlige egenskaber ved C#, og hvilke fordele tilbyder programmeringssproget?
Med sit specielle udviklingsmiljø Visual Studio er C# grundlæggende designet med henblik på hastighed. Som et objektorienteret programmeringssprog scorer C# også point med sin enkle og moderne app-udvikling, der er både alsidig og kraftfuld. Derfor vælger mange udviklere C#, når de skal beslutte, hvilket programmeringssprog de vil lære.
C# er grundlæggende struktureret omkring klasser og objekter og følger strengt typningsprincipperne. Det tilbyder funktioner som abstraktion, indkapsling og arv. Programmeringssproget er primært beregnet til udvikling inden for Microsoft .NET-økosystemet.
På grund af sin tilpasning til .NET-rammen har C# sin egen struktur, hvor mange typer inden for .NET-strukturer arver fra objektklassen. Som følge heraf arver disse klasser metoder, egenskaber, felter og begivenheder. Denne hierarkiske struktur fremmer konsistens og interoperabilitet inden for .NET-økosystemet.
Spørgsmål 2: Hvad betyder klassificeringen “objekt” i C#?
For at forstå objekter i C# er det vigtigt at forstå de grundlæggende principper i sproget. I sin kerne er C# et objektorienteret programmeringssprog, hvor klasser fungerer som fundamentet. En klasse afgrænser datastrukturen og dikterer, hvordan data lagres, administreres og overføres i C#. I det væsentlige fungerer den som en blåkopi for alle andre datastrukturer.
Objekter er reelle elementer i C#, som også optager reelle værdier i den tilgængelige hukommelse. Alle enheder, der er udstyret med meget specifikke egenskaber, eller som udfører en specifik opgave i softwaren, kan betragtes som objekter. Objekttypen defineres af en klasse, og klasseinstanser danner rammen for deres videre struktur.
Lad os for eksempel sige, at vi designer et program, der er centreret omkring et fjernsyn. Først skal vi definere en entitet som udgangspunkt. I dette tilfælde kunne vi oprette klassen “Fjernsyn”. Inden for denne klasse vil vi definere fem egenskaber: producent, model, farve, størrelse og pris. Disse egenskaber er medlemmer af klassen. Andre medlemmer af klassen kunne være begivenheder, metoder eller felter, som alle sammen udgør et objekt.
For at programmere en Sony Bravia som en instans af et tv kan vi angive Sony, Bravia, Black, 50 og 500 som egenskaber, når vi opretter dette objekt. Dette definerer oplysningerne om producent, model, farve, størrelse og pris. Sony-fjernsynet er derfor en instans af klassen Television. For at gøre denne klasse tilgængelig er det vigtigt at definere den som offentlig og ikke som privat eller beskyttet.
Spørgsmål 3: Hvad er forskellen mellem administreret og ikke-administreret kode i C#?
Administreret kode
Administreret kode i C# er al kode, der er oprettet ved hjælp af .NET Framework. Denne type kode udføres direkte af Common Language Runtime (CLR). CLR administrerer kodens livscyklus, herunder oprettelse af objekter, hukommelsesallokering og bortskaffelse af objekter.
Ikke-administreret kode
Kode, der er udviklet uden for .NET Framework, betegnes som ikke-administreret kode. Denne kategori omfatter alle applikationer, der ikke udføres under kontrol af CLR.
.NET Framework indeholder en funktion, der kan konvertere ikke-administreret kode til administreret kode og omvendt. Denne funktion er særlig nyttig, da den letter problemfri integration af objektskabning og -udførelse samt kodebortskaffelse inden for rammen.
Spørgsmål 4: Hvad er forskellen mellem struct og class?
I C# henviser udtrykkene klasse (class) og struktur (struct) til brugerdefinerede datatyper. Disse datatyper har dog nogle grundlæggende forskelle.
Struktur
- Som en værditype i C# arver strukturer altid implicit fra System.ValueType.
- Strukturer kan ikke afledes fra andre typer.
- Som regel bruges en struktur til mindre datamængder.
- Strukturer kan ikke være abstrakte og kræver derfor direkte implementering.
- Det er ikke muligt at tildele en standardkonstruktør til en struktur.
- Det er ikke obligatorisk at oprette et objekt ved hjælp af nøgleordet
new.
Klasse
- Som referencetype i C# arver klasser altid implicit fra System.Object.
- Klaser kan afledes fra andre klasser, hvilket muliggør arv.
- Som regel bruges en klasse til større datamængder eller mere komplekse strukturer.
- Klaser kan være abstrakte, hvilket betyder, at de ikke tillader direkte instansiering.
- I modsætning til strukturer kan klasser have en standardkonstruktør, hvis de har brug for en.
Spørgsmål 5: Hvad er forskellen mellem en grænseflade og en abstrakt klasse i C#?
Interfaces (grænseflader) og abstrakte klasser (abstrakte klasser) specificerer begge kodekontraktklasser, f.eks. forudsætninger eller objektinvarianter, for afledte klasser. På trods af denne fællesnævner er der mange forskelle, som funktionaliteten af interfaces og abstrakte klasser viser.
Kodekontraktklasser kan bruges til at specificere forudsætninger, efterbetingelser og objektinvarianter. Forudsætninger er krav, der skal være opfyldt, når man går ind i en metode eller egenskab.
Med hensyn til arv kan abstrakte klasser indeholde metoder med implementeret kode ud over abstrakte metoder, mens grænseflader kræver, at alle metoder er abstrakte. Af denne grund skal abstrakte klasser deklareres med nøgleordet abstract
Da C# ikke understøtter multiple arv af klasser, kan en klasse ikke arve fra mere end én abstrakt klasse. En klasse kan dog implementere flere grænseflader for at muliggøre multiple arv af grænseflader.
En abstrakt klasse kan have konstruktorer, der kan påkaldes af afledte klasser. Interfaces kan ikke indeholde konstruktorer, da de ikke er instanser og derfor ikke kan initialiseres.
Spørgsmål 6: Hvad er egenskaber i C#?
I C# er egenskaber et element i en klasse, der giver dig mulighed for at læse, skrive eller beregne værdien af et privat deklareret felt. Egenskaber kan bruges til at få adgang til offentlige grænseflader eller tillade ændringer af data, der er gemt i en klasse.
Egenskaber er et grundlæggende aspekt af objektorienteret programmering i C# og bruges ofte i applikationer til at give ren og sikker adgang til klassedata.
De deklareres ved hjælp af get og set, som definerer adfærden for læsning eller indstilling af egenskabsværdien. get henter egenskabens værdi, mens set indstiller egenskabens værdi. En egenskab kan have en eller begge accessorer. Dette afhænger af, om egenskaben er (eller bør være) skrivebeskyttet eller læse-/skrivebeskyttet.
Spørgsmål 7: Hvad menes der med boxing og unboxing i C#?
Boxing og unboxing bruges i C# til typekonvertering.
- Konvertering fra en værditype til en referencetype kaldes boxing. Dette kan f.eks. være konvertering af en simpel datatype som int til datatypen object. Boxing er en implicit konvertering.
- Konvertering fra en referencetype til en værditype kaldes derimod unboxing. Unboxing kan kun finde sted med den nøjagtige værditype, der oprindeligt blev boxet, for eksempel konvertering af objekt tilbage til int.
Spørgsmål 8: Hvad er enumeration (enum), og hvad bruges det til i C#?
En enum er en værditype med et sæt relaterede navngivne konstanter. Denne gruppe kaldes også en ‘enumeratorliste’. I C# er enums enumererede datatyper, der er primitive og brugerdefinerede. Nøgleordet enum bruges til at deklarere en enumeration.
Enums i .NET Framework bruges til at oprette numeriske konstanter. Hvert medlem af en enum er af typen enum, og der kræves en numerisk værdi for hver enum-type. Disse enum-værdier er uforanderlige. Enums kan repræsenteres som tegnstrenge og manipuleres som heltal.
Standardtypen for opregningselementet er int. Som standard har den første opregner værdien 0, og værdien for hver efterfølgende opregner øges med 1. Disse værdier kan dog også indstilles manuelt, f.eks. 10 = Til og 20 = Fra.
Spørgsmål 9: Hvad er forskellen mellem Dispose og Finalize i C#?
I C# bruges begge metoder til at frigive ressourcer.
Dispose-metoden frigiver ikke-administrerede ressourcer, såsom databaseforbindelser, der ikke administreres automatisk af .NET-kørselstidværten. Den implementeres normalt i en klasse. Dette implementerer igen IDisposable-grænsefladen, som definerer Dispose-metoden.
Denne metode kaldes eksplicit af klientkoden for at frigive ressourcer, der ikke længere er nødvendige. Alternativt kan den kaldes implicit med using, hvilket sikrer, at Dispose-metoden kaldes, når objektet går ud af omfanget.
Finalize-metoden bruges derimod til at udføre oprydningsoperationer på et objekt lige før garbage collection-processen finder sted. Derfor implementeres den typisk i en klasse, der overskriver Object.Finalize-metoden.
Spørgsmål 10: Hvad er fordelene ved udvidelsesmetoder i C#?
Udvidelsesmetoder giver udviklere mulighed for at udvide funktionaliteten af en eksisterende type uden at ændre den oprindelige type eller oprette en ny afledt type. De gør det muligt at tilføje metoder til eksisterende klasser, strukturer, grænseflader, enums osv., selvom metoderne ikke oprindeligt var defineret inden for typen.
Udvidelsesmetoder deklareres inden for en statisk klasse og defineres som statiske metoder med en unik første parameter ved navn this. Denne parameter angiver den type, der udvides, hvilket gør det muligt at påkalde udvidelsesmetoden, som om den var en instansmetode af den pågældende type.
Hvilke spørgsmål kan jeg forvente i en C#-samtale?
At vide, hvem der interviewer dig, kan give dig et bedre indblik i, hvilken type spørgsmål du vil blive stillet. Rekrutteringsansvarlige mangler nogle gange den nødvendige ekspertise til at føre dybtgående diskussioner om specialiserede områder som kategorier eller objekter i C#. Så hvis intervieweren er en teknisk leder eller et medlem af udviklerteamet, er det mere sandsynligt, at interviewspørgsmålene vil dreje sig om specifikke programmeringskoncepter og -færdigheder.
Hvis den ledende softwarearkitekt eller webudvikler er til stede, vil de sandsynligvis stille specialiserede spørgsmål, især hvis du søger stillinger, der ligger over entry level. Det skyldes, at dine fremtidige kolleger gerne vil vide, hvordan det nye teammedlem vil kunne hjælpe dem i deres daglige arbejde.