Alates liht­sa­test kü­si­mus­test C# eeliste kohta kuni prog­ram­mee­ri­mis­keele erinevate ele­men­tide ja nende ka­su­tus­või­ma­luste sel­gi­ta­miseni – oleme koostanud nimekirja 10 olu­li­se­mast kü­si­mu­sest C# töö­in­terv­juuks.

Käes­ole­vas artiklis on esitatud kümme arendaja ametikoha töö­in­terv­juul sageli esi­ta­ta­vat küsimust. Oleme lisanud ka vastused igale kü­si­mu­sele. Kuigi need küsimused hõlmavad erinevaid teemasid alates liht­sa­test kuni de­tai­li­deni, on veel palju muid või­ma­likke küsimusi C# ja selle eripärade kohta.

Käesolev artikkel annab esialgse ülevaate eri­ne­va­test kü­si­mus­test, mida võidakse küsida, alates liht­sa­test kü­si­mus­test kuni spet­sii­fi­li­se­mate ja teatud üksikasju nõudvate kü­si­mus­teni. Käesolev artikkel aitab teil ka mõista, kuidas val­mis­tuda in­terv­juuks, mille eesmärk on testida teie teadmisi konk­reet­sest prog­ram­mee­ri­mis­kee­lest.

Küsimus 1: Millised on C# eripärad ja milliseid eeliseid pakub see prog­ram­mee­ri­mis­keel?

Tänu spet­siaal­sele aren­dus­kesk­konda Visual Studio on C# põ­hi­mõt­te­li­selt loodud kiiruse jaoks. Ob­jek­tio­rien­tee­ri­tud prog­ram­mee­ri­mis­kee­lena teenib C# punkte ka oma lihtsa ja kaasaegse ra­ken­duste aren­da­mise poolest, mis on nii mit­me­külgne kui ka võimas. Seetõttu valivad paljud arendajad C#, kui ot­sus­ta­vad, millist prog­ram­mee­ri­mis­keelt õppida.

C# on põ­hi­mõt­te­li­selt üles ehitatud klasside ja objektide ümber, järgides rangelt tüüpimise põ­hi­mõt­teid. See pakub selliseid funkt­sioone nagu abst­rakt­sioon, kap­sel­da­mine ja pärimine. Prog­ram­mee­ri­mis­keel on mõeldud peamiselt aren­da­miseks Microsoft .NET öko­süs­tee­mis.

Kuna C# on kooskõlas .NET-raa­mis­ti­kuga, on sellel oma struktuur, kus paljud .NET-struk­tuu­ride tüübid pärinevad ob­jek­ti­klas­sist. Selle tu­le­mu­sena pärivad need klassid meetodid, omadused, väljad ja sündmused. See hie­rar­hi­line struktuur soodustab .NET-öko­süs­teemi jär­je­pi­de­vust ja koos­ta­lit­lus­võimet.

Küsimus 2: Mida tähendab klas­si­fi­kat­sioon „objekt” C#-is?

Objektide mõistmine C#-is sõltub keele põ­hi­print­sii­pide oman­da­mi­sest. C# on oma olemuselt ob­jek­to­rien­tee­ri­tud prog­ram­mee­ri­mis­keel, mille aluseks on klassid. Klass määratleb andmete struk­tuuri ja dikteerib, kuidas neid C#-is sal­ves­ta­takse, hal­la­takse ja edas­ta­takse. Si­su­li­selt on see kõikide teiste and­me­st­ruk­tuu­ride aluseks.

Objektid on C#-keeles reaalsed elemendid, mis hõivavad ka reaalset mälu. Kõiki üksusi, millel on väga spet­sii­fi­li­sed omadused või mis täidavad tarkvaras kindlat ülesannet, võib pidada ob­jek­ti­deks. Objekti tüüp mää­rat­le­takse klassiga ja klassi ins­tant­sid moo­dus­ta­vad raa­mis­tiku nende edasiseks struk­tuu­riks.

Võtame näiteks, et kavandame teleril põhinevat programmi. Esmalt peame mää­rat­lema al­gus­punk­tiks oleva entiteedi. Sel juhul võiksime luua klassi „Te­le­vi­sion”. Selle klassi raames soovime mää­rat­leda 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 moo­dus­ta­vad objekti.

Sony Bravia teleri ins­tant­sina prog­ram­mee­ri­miseks võime selle objekti loomisel määrata oma­dus­tena Sony, Bravia, Black, 50 ja 500. See määrab tootja, mudeli, värvi, suuruse ja hinna. Sony teler on seega Te­le­vi­sion-klassi instants. Selle klassi kät­te­saa­da­vaks te­ge­miseks on oluline määrata see avalikuks, mitte pri­vaat­seks või kaitstud.

Küsimus 3: Mis vahe on C#-is hal­la­ta­val ja hallamata koodil?

Haldatav kood

C#-keeles hallatav kood on kogu kood, mis on loodud .NET Fra­meworki abil. Seda tüüpi koodi täidab otse ühine keele keskkond (CLR). CLR haldab koodi elutsük­lit, seal­hul­gas objektide loomist, mälu eral­da­mist ja objektide kõr­val­da­mist.

Haldamata kood

.NET Fra­meworki väl­jas­pool arendatud koodi ni­me­ta­takse haldamata koodiks. See ka­te­goo­ria hõlmab kõiki rakendusi, mida ei käi­vi­ta­tud CLR-i kontrolli all.

.NET Framework pakub funkt­siooni, mis suudab tei­sen­dada haldamata koodi hal­la­ta­vaks koodiks ja vastupidi. See võime on eriti kasulik, kuna see hõlbustab objektide loomise ja täitmise ning koodi kõr­val­da­mise sujuvat in­teg­ree­ri­mist raa­mis­tikku.

Küsimus 4: Mis vahe on struk­tuu­ril ja klassil?

C#-is viitavad terminid klass (class) ja struktuur (struct) kasutaja määratud and­me­tüü­pi­dele. Nendel and­me­tüü­pi­del on siiski mõned olulised eri­ne­vu­sed.

Struktuur

  • C#-keeles pärivad struk­tuu­rid kui väär­tus­tüüp alati vaikimisi System.ValueType-ist.
  • Struk­tuure ei saa tuletada teistest tüüpidest.
  • Reeglina ka­su­ta­takse struk­tuuri väik­se­mate and­me­mah­tude puhul.
  • Struk­tuu­rid ei saa olla abst­rakt­sed ja seetõttu nõuavad otsest ra­ken­da­mist.
  • Struk­tuu­rile ei ole võimalik määrata stan­dard­konst­ruk­to­rit.
  • Objekti loomine märksõna new abil ei ole ko­hus­tus­lik.

Klass

  • C#-keeles pärivad klassid alati vaikimisi *System.Object-*ist.
  • Klassid võivad pärineda teistest klas­si­dest, mis võimaldab pärimist.
  • Reeglina ka­su­ta­takse klassi suuremate and­me­mah­tude või kee­ru­li­se­mate struk­tuu­ride puhul.
  • Klassid võivad olla abst­rakt­sed, mis tähendab, et neid ei saa otseselt ins­tant­sida.
  • Erinevalt struk­tuu­ri­dest võivad klassid vajaduse korral omada stan­dard­konst­ruk­to­rit.

Küsimus 5: Mis vahe on C#-is liidese ja abst­raktse klassi vahel?

Liidesed (in­ter­faces) ja abst­rakt­sed klassid (abstract classes) määravad mõlemad tuletatud klasside jaoks koo­di­le­pin­gu­klas­sid, nt eel­tin­gi­mu­sed või objekti in­va­rian­did. Hoolimata sellest ühisosast on palju erinevusi, nagu näitab liideste ja abst­rakt­sete klasside funkt­sio­naal­sus.

Koo­di­le­pin­guklasse saab kasutada eel­tin­gi­muste, jä­rel­tin­gi­muste ja objekti in­va­rian­tide mää­ra­miseks. Eel­tin­gi­mu­sed on nõuded, mis peavad olema täidetud meetodi või omaduse ka­su­ta­misel.

Pärimise sei­su­ko­halt võivad abst­rakt­sed klassid sisaldada lisaks abst­rakt­se­tele mee­to­di­tele ka meetodeid, millel on ra­ken­da­tud kood, samas kui liidesed nõuavad, et kõik meetodid oleksid abst­rakt­sed. Seetõttu on abst­rakt­sete klasside dek­la­ree­ri­miseks vaja märksõna abstract

Kuna C# ei toeta klasside mit­me­kord­set pä­ran­da­mist, ei saa klass pärida rohkem kui ühest abst­rakt­sest klassist. Siiski võib klass rakendada mitut liidest, et või­mal­dada liideste mit­me­kord­set pä­ran­da­mist.

Abst­rakt­sel klassil võivad olla konst­ruk­to­rid, mida tuletatud klassid saavad kutsuda. Liidesed ei saa sisaldada konst­ruk­to­reid, kuna need ei ole ins­tant­sid ja seetõttu ei saa neid init­sia­li­see­rida.

Küsimus 6: Mis on omadused C#-is?

C#-is on omadused klassi elemendid, mis või­mal­da­vad lugeda, kirjutada või arvutada pri­vaat­selt dek­la­ree­ri­tud välja väärtust. Omadusi saab kasutada avalikele lii­des­tele juur­de­pääs­uks või klassis sal­ves­ta­tud andmete muut­miseks.

Omadused on C#-keeles ob­jek­to­rien­tee­ri­tud prog­ram­mee­ri­mise oluline aspekt ja neid ka­su­ta­takse ta­va­li­selt ra­ken­dus­tes, et tagada puhas ja turvaline juur­de­pääs klassi andmetele.

Need dek­la­ree­ri­takse kasutades get ja set pää­su­funkt­sioone, mis määravad omaduse väärtuse lugemise või sea­dis­ta­mise käitumise. get pää­su­funkt­sioon võtab omaduse väärtuse, samas kui set pää­su­funkt­sioon seab omaduse väärtuse. Omadusel võib olla üks või mõlemad pää­su­funkt­sioo­nid. See sõltub sellest, kas omadus on (või peaks olema) ainult lu­ge­miseks või lu­ge­miseks/kir­ju­ta­miseks.

Küsimus 7: Mida tähendab C#-is boxing ja unboxing?

C#-is ka­su­ta­takse tüüpide tei­sen­da­miseks pakkimist ja lah­ti­pak­ki­mist.

  • Väär­tus­tüübi tei­sen­da­mine vii­te­tüü­biks on tuntud kui boxing. See võib olla näiteks lihtsa and­me­tüübi, nagu int, tei­sen­da­mine and­me­tüü­biks object. Boxing on imp­lit­siitne teisendus.
  • Vii­te­tyy­pist väär­tus­tüü­biks tei­sen­da­mine on aga unboxing. Unboxing võib toimuda ainult algselt boxin­gu­tud täpse väär­tus­tüü­biga, näiteks tei­sen­da­des objekti tagasi int-iks.

Küsimus 8: Mis on loen­da­mine (enum) ja milleks seda C#-is ka­su­ta­takse?

Enum on väär­tus­tüüp, millel on seotud nimega kons­tan­tide kogum. Seda rühma ni­me­ta­takse ka „loen­du­rite loendiks”. C#-is on enumid loendatud and­me­tüü­bid, mis on pri­mi­tiiv­sed ja kasutaja määratud. Loenduse dek­la­ree­ri­miseks ka­su­ta­takse märksõna enum.

.NET Fra­mewor­kis ka­su­ta­takse loendit numb­ri­liste kons­tan­tide loomiseks. Iga loendi liige on loendi tüüpi ja iga loendi tüübi jaoks on vaja numb­ri­list väärtust. Need loendi väärtused on muu­tu­ma­tud. Loendeid saab esitada mär­gi­jada­dena ja käsitleda täis­ar­vu­dena.

Loen­da­mis­e­le­mendi 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 ka­su­ta­takse mõlemat meetodit res­surs­side va­bas­ta­miseks.

Dispose-meetod vabastab haldamata ressursid, näiteks and­me­baasi­ühen­dused, mida .NET-i käi­ta­mis­aja host au­to­maat­selt ei halda. Ta­va­li­selt ra­ken­da­takse seda klassis. See omakorda rakendab IDis­posable-liidest, mis määratleb Dispose-meetodi.

Seda meetodit kutsub kliendi kood sel­ge­sõ­na­li­selt välja, et vabastada ressursid, mida enam vaja ei ole. Al­ter­na­tiivina võib seda kutsuda ka kaudselt using abil, tagades, et meetod Dispose kut­su­takse välja, kui objekt läheb ulatusest välja.

Finalize-meetodit ka­su­ta­takse aga objekti pu­has­ta­miseks vahetult enne prü­gi­ko­gu­mise protsessi algust. Seetõttu ra­ken­da­takse seda ta­va­li­selt klassis, mis ületab Object.Finalize-meetodi.

Küsimus 10: Millised on laien­dus­mee­to­dite eelised C#-is?

Laien­da­mis­vii­sid või­mal­da­vad aren­da­ja­tel laiendada ole­mas­oleva tüübi funkt­sio­naal­sust, muutmata algset tüüpi ega loomata uut tuletatud tüüpi. Need või­mal­da­vad lisada meetodeid ole­mas­ole­va­tele klas­si­dele, struk­tuu­ri­dele, lii­des­tele, loen­di­tele jne, isegi kui meetodid ei olnud algselt tüübis mää­rat­le­tud.

Laien­da­mis­vii­sid dek­la­ree­ri­takse staa­ti­li­ses klassis ja mää­rat­le­takse staa­ti­liste mee­to­di­tena, millel on unikaalne esimene pa­ra­mee­ter nimega this. See pa­ra­mee­ter määrab laien­da­tava tüübi, või­mal­da­des laien­da­mis­viisi kutsuda välja nii, nagu oleks tegemist selle tüübi ins­tant­si­mee­to­diga.

Milliseid küsimusi võin oodata C# in­terv­juul?

Teades, kes teid in­terv­juee­rib, saate paremini aru, milliseid küsimusi teile esi­ta­takse. Per­so­na­li­va­li­ja­tele puudub mõnikord vajalikud teadmised, et pidada põh­ja­likke aru­telusid spet­sii­fi­lis­tel teemadel, nagu C#-i ka­te­goo­riad või objektid. Seega, kui in­terv­juee­rija on tehniline juht või aren­dus­mees­konna liige, on tõe­näo­li­sem, et intervjuu küsimused puu­du­ta­vad konk­reet­seid prog­ram­mee­ri­mise kont­sept­sioone ja oskusi.

Kui juhtiv tark­va­ra­ar­hi­tekt või vee­biaren­daja on kohal, on tõe­näo­line, et nad esitavad spet­sii­filisi küsimusi, eriti kui kan­di­dee­rite alg­ta­se­mest kõrgemale ame­ti­ko­hale. Seda seetõttu, et tulevased kolleegid tahavad teada, kuidas uus mees­kon­na­liige suudab neid iga­päe­vas­tes üles­an­ne­tes aidata.

Go to Main Menu