Millised on 10 kõige levinumat C# intervjuu küsimust ja kuidas neile vastata?
Alates lihtsatest küsimustest C# eeliste kohta kuni programmeerimiskeele erinevate elementide ja nende kasutusvõimaluste selgitamiseni – oleme koostanud nimekirja 10 olulisemast küsimusest C# tööintervjuuks.
Käesolevas artiklis on esitatud kümme arendaja ametikoha tööintervjuul sageli esitatavat küsimust. Oleme lisanud ka vastused igale küsimusele. Kuigi need küsimused hõlmavad erinevaid teemasid alates lihtsatest kuni detailideni, on veel palju muid võimalikke küsimusi C# ja selle eripärade kohta.
Käesolev artikkel annab esialgse ülevaate erinevatest küsimustest, mida võidakse küsida, alates lihtsatest küsimustest kuni spetsiifilisemate ja teatud üksikasju nõudvate küsimusteni. Käesolev artikkel aitab teil ka mõista, kuidas valmistuda intervjuuks, mille eesmärk on testida teie teadmisi konkreetsest programmeerimiskeelest.
Küsimus 1: Millised on C# eripärad ja milliseid eeliseid pakub see programmeerimiskeel?
Tänu spetsiaalsele arenduskeskkonda Visual Studio on C# põhimõtteliselt loodud kiiruse jaoks. Objektiorienteeritud programmeerimiskeelena teenib C# punkte ka oma lihtsa ja kaasaegse rakenduste arendamise poolest, mis on nii mitmekülgne kui ka võimas. Seetõttu valivad paljud arendajad C#, kui otsustavad, millist programmeerimiskeelt õppida.
C# on põhimõtteliselt üles ehitatud klasside ja objektide ümber, järgides rangelt tüüpimise põhimõtteid. See pakub selliseid funktsioone nagu abstraktsioon, kapseldamine ja pärimine. Programmeerimiskeel on mõeldud peamiselt arendamiseks Microsoft .NET ökosüsteemis.
Kuna C# on kooskõlas .NET-raamistikuga, on sellel oma struktuur, kus paljud .NET-struktuuride tüübid pärinevad objektiklassist. Selle tulemusena pärivad need klassid meetodid, omadused, väljad ja sündmused. See hierarhiline struktuur soodustab .NET-ökosüsteemi järjepidevust ja koostalitlusvõimet.
Küsimus 2: Mida tähendab klassifikatsioon „objekt” C#-is?
Objektide mõistmine C#-is sõltub keele põhiprintsiipide omandamisest. C# on oma olemuselt objektorienteeritud programmeerimiskeel, mille aluseks on klassid. Klass määratleb andmete struktuuri ja dikteerib, kuidas neid C#-is salvestatakse, hallatakse ja edastatakse. Sisuliselt on see kõikide teiste andmestruktuuride aluseks.
Objektid on C#-keeles reaalsed elemendid, mis hõivavad ka reaalset mälu. Kõiki üksusi, millel on väga spetsiifilised omadused või mis täidavad tarkvaras kindlat ülesannet, võib pidada objektideks. Objekti tüüp määratletakse klassiga ja klassi instantsid moodustavad raamistiku nende edasiseks struktuuriks.
Võtame näiteks, et kavandame teleril põhinevat programmi. Esmalt peame määratlema alguspunktiks oleva entiteedi. Sel juhul võiksime luua klassi „Television”. Selle klassi raames soovime määratleda viis omadust: tootja, mudel, värv, suurus ja hind. Need omadused on klassi liikmed. Klassis võivad olla ka sündmused, meetodid või väljad, mis kõik kokku moodustavad objekti.
Sony Bravia teleri instantsina programmeerimiseks võime selle objekti loomisel määrata omadustena Sony, Bravia, Black, 50 ja 500. See määrab tootja, mudeli, värvi, suuruse ja hinna. Sony teler on seega Television-klassi instants. Selle klassi kättesaadavaks tegemiseks on oluline määrata see avalikuks, mitte privaatseks või kaitstud.
Küsimus 3: Mis vahe on C#-is hallataval ja hallamata koodil?
Haldatav kood
C#-keeles hallatav kood on kogu kood, mis on loodud .NET Frameworki abil. Seda tüüpi koodi täidab otse ühine keele keskkond (CLR). CLR haldab koodi elutsüklit, sealhulgas objektide loomist, mälu eraldamist ja objektide kõrvaldamist.
Haldamata kood
.NET Frameworki väljaspool arendatud koodi nimetatakse haldamata koodiks. See kategooria hõlmab kõiki rakendusi, mida ei käivitatud CLR-i kontrolli all.
.NET Framework pakub funktsiooni, mis suudab teisendada haldamata koodi hallatavaks koodiks ja vastupidi. See võime on eriti kasulik, kuna see hõlbustab objektide loomise ja täitmise ning koodi kõrvaldamise sujuvat integreerimist raamistikku.
Küsimus 4: Mis vahe on struktuuril ja klassil?
C#-is viitavad terminid klass (class) ja struktuur (struct) kasutaja määratud andmetüüpidele. Nendel andmetüüpidel on siiski mõned olulised erinevused.
Struktuur
- C#-keeles pärivad struktuurid kui väärtustüüp alati vaikimisi System.ValueType-ist.
- Struktuure ei saa tuletada teistest tüüpidest.
- Reeglina kasutatakse struktuuri väiksemate andmemahtude puhul.
- Struktuurid ei saa olla abstraktsed ja seetõttu nõuavad otsest rakendamist.
- Struktuurile ei ole võimalik määrata standardkonstruktorit.
- Objekti loomine märksõna
newabil ei ole kohustuslik.
Klass
- C#-keeles pärivad klassid alati vaikimisi *System.Object-*ist.
- Klassid võivad pärineda teistest klassidest, mis võimaldab pärimist.
- Reeglina kasutatakse klassi suuremate andmemahtude või keerulisemate struktuuride puhul.
- Klassid võivad olla abstraktsed, mis tähendab, et neid ei saa otseselt instantsida.
- Erinevalt struktuuridest võivad klassid vajaduse korral omada standardkonstruktorit.
Küsimus 5: Mis vahe on C#-is liidese ja abstraktse klassi vahel?
Liidesed (interfaces) ja abstraktsed klassid (abstract classes) määravad mõlemad tuletatud klasside jaoks koodilepinguklassid, nt eeltingimused või objekti invariandid. Hoolimata sellest ühisosast on palju erinevusi, nagu näitab liideste ja abstraktsete klasside funktsionaalsus.
Koodilepinguklasse saab kasutada eeltingimuste, järeltingimuste ja objekti invariantide määramiseks. Eeltingimused on nõuded, mis peavad olema täidetud meetodi või omaduse kasutamisel.
Pärimise seisukohalt võivad abstraktsed klassid sisaldada lisaks abstraktsetele meetoditele ka meetodeid, millel on rakendatud kood, samas kui liidesed nõuavad, et kõik meetodid oleksid abstraktsed. Seetõttu on abstraktsete klasside deklareerimiseks vaja märksõna abstract
Kuna C# ei toeta klasside mitmekordset pärandamist, ei saa klass pärida rohkem kui ühest abstraktsest klassist. Siiski võib klass rakendada mitut liidest, et võimaldada liideste mitmekordset pärandamist.
Abstraktsel klassil võivad olla konstruktorid, mida tuletatud klassid saavad kutsuda. Liidesed ei saa sisaldada konstruktoreid, kuna need ei ole instantsid ja seetõttu ei saa neid initsialiseerida.
Küsimus 6: Mis on omadused C#-is?
C#-is on omadused klassi elemendid, mis võimaldavad lugeda, kirjutada või arvutada privaatselt deklareeritud välja väärtust. Omadusi saab kasutada avalikele liidestele juurdepääsuks või klassis salvestatud andmete muutmiseks.
Omadused on C#-keeles objektorienteeritud programmeerimise oluline aspekt ja neid kasutatakse tavaliselt rakendustes, et tagada puhas ja turvaline juurdepääs klassi andmetele.
Need deklareeritakse kasutades get ja set pääsufunktsioone, mis määravad omaduse väärtuse lugemise või seadistamise käitumise. get pääsufunktsioon võtab omaduse väärtuse, samas kui set pääsufunktsioon seab omaduse väärtuse. Omadusel võib olla üks või mõlemad pääsufunktsioonid. See sõltub sellest, kas omadus on (või peaks olema) ainult lugemiseks või lugemiseks/kirjutamiseks.
Küsimus 7: Mida tähendab C#-is boxing ja unboxing?
C#-is kasutatakse tüüpide teisendamiseks pakkimist ja lahtipakkimist.
- Väärtustüübi teisendamine viitetüübiks on tuntud kui boxing. See võib olla näiteks lihtsa andmetüübi, nagu int, teisendamine andmetüübiks object. Boxing on implitsiitne teisendus.
- Viitetyypist väärtustüübiks teisendamine on aga unboxing. Unboxing võib toimuda ainult algselt boxingutud täpse väärtustüübiga, näiteks teisendades objekti tagasi int-iks.
Küsimus 8: Mis on loendamine (enum) ja milleks seda C#-is kasutatakse?
Enum on väärtustüüp, millel on seotud nimega konstantide kogum. Seda rühma nimetatakse ka „loendurite loendiks”. C#-is on enumid loendatud andmetüübid, mis on primitiivsed ja kasutaja määratud. Loenduse deklareerimiseks kasutatakse märksõna enum.
.NET Frameworkis kasutatakse loendit numbriliste konstantide loomiseks. Iga loendi liige on loendi tüüpi ja iga loendi tüübi jaoks on vaja numbrilist väärtust. Need loendi väärtused on muutumatud. Loendeid saab esitada märgijadadena ja käsitleda täisarvudena.
Loendamiselemendi vaikimisi tüüp on int. Vaikimisi on esimese loendaja väärtus 0 ja iga järgmise loendaja väärtus suureneb 1 võrra. Neid väärtusi saab aga ka käsitsi määrata, näiteks 10 = sisse ja 20 = välja.
Küsimus 9: Mis vahe on C#-is Dispose ja Finalize vahel?
C#-is kasutatakse mõlemat meetodit ressursside vabastamiseks.
Dispose-meetod vabastab haldamata ressursid, näiteks andmebaasiühendused, mida .NET-i käitamisaja host automaatselt ei halda. Tavaliselt rakendatakse seda klassis. See omakorda rakendab IDisposable-liidest, mis määratleb Dispose-meetodi.
Seda meetodit kutsub kliendi kood selgesõnaliselt välja, et vabastada ressursid, mida enam vaja ei ole. Alternatiivina võib seda kutsuda ka kaudselt using abil, tagades, et meetod Dispose kutsutakse välja, kui objekt läheb ulatusest välja.
Finalize-meetodit kasutatakse aga objekti puhastamiseks vahetult enne prügikogumise protsessi algust. Seetõttu rakendatakse seda tavaliselt klassis, mis ületab Object.Finalize-meetodi.
Küsimus 10: Millised on laiendusmeetodite eelised C#-is?
Laiendamisviisid võimaldavad arendajatel laiendada olemasoleva tüübi funktsionaalsust, muutmata algset tüüpi ega loomata uut tuletatud tüüpi. Need võimaldavad lisada meetodeid olemasolevatele klassidele, struktuuridele, liidestele, loenditele jne, isegi kui meetodid ei olnud algselt tüübis määratletud.
Laiendamisviisid deklareeritakse staatilises klassis ja määratletakse staatiliste meetoditena, millel on unikaalne esimene parameeter nimega this. See parameeter määrab laiendatava tüübi, võimaldades laiendamisviisi kutsuda välja nii, nagu oleks tegemist selle tüübi instantsimeetodiga.
Milliseid küsimusi võin oodata C# intervjuul?
Teades, kes teid intervjueerib, saate paremini aru, milliseid küsimusi teile esitatakse. Personalivalijatele puudub mõnikord vajalikud teadmised, et pidada põhjalikke arutelusid spetsiifilistel teemadel, nagu C#-i kategooriad või objektid. Seega, kui intervjueerija on tehniline juht või arendusmeeskonna liige, on tõenäolisem, et intervjuu küsimused puudutavad konkreetseid programmeerimise kontseptsioone ja oskusi.
Kui juhtiv tarkvaraarhitekt või veebiarendaja on kohal, on tõenäoline, et nad esitavad spetsiifilisi küsimusi, eriti kui kandideerite algtasemest kõrgemale ametikohale. Seda seetõttu, et tulevased kolleegid tahavad teada, kuidas uus meeskonnaliige suudab neid igapäevastes ülesannetes aidata.