Kokie yra 10 dažniausiai užduodamų C# interviu klausimų ir kaip į juos atsakyti
Nuo paprastų klausimų apie C# privalumus iki programavimo kalbos skirtingų elementų ir jų naudojimo paaiškinimo – sudarėme 10 svarbiausių klausimų, kuriuos reikia užduoti darbo pokalbyje dėl C# programavimo darbo.
Šiame straipsnyje pateikiami dešimt dažniausiai užduodamų klausimų darbo pokalbyje dėl programuotojo darbo vietos. Taip pat pateikiami atsakymai į kiekvieną iš šių klausimų. Nors šie klausimai apima įvairias temas, nuo paprastų iki sudėtingų, yra daug kitų galimų klausimų apie C# ir jo ypatingas savybes.
Šiame straipsnyje pateikiama pirminė įvairių klausimų, kurie gali būti užduoti, apžvalga – nuo paprastų iki labiau specifinių ir reikalaujančių tam tikrų detalių. Šis straipsnis taip pat gali padėti jums suprasti, kaip pasiruošti pokalbiui, kurio tikslas – patikrinti jūsų žinias apie konkrečią programavimo kalbą.
1 klausimas: Kokios yra C# ypatybės ir kokius privalumus siūlo ši programavimo kalba?
Naudodama specialią kūrimo aplinką „Visual Studio“, C# iš esmės yra sukurta greičiui. Kaip objektų orientuota programavimo kalba, C# taip pat pelno taškų dėl savo paprastos ir modernios programų kūrimo, kuri yra tiek universali, tiek galinga. Štai kodėl daugelis programuotojų, spręsdami, kokią programavimo kalbą mokytis, renkasi C#.
C# yra iš esmės struktūrizuota aplink klases ir objektus, griežtai laikantis tipizavimo principų. Ji teikia tokias funkcijas kaip abstrakcija, inkapsuliacija ir paveldėjimas. Ši programavimo kalba yra skirta pirmiausia programavimui Microsoft .NET ekosistemoje.
Dėl suderinamumo su .NET platforma, C# turi savo struktūrą, kurioje daugelis .NET struktūrų tipų paveldi iš objekto klasės. Dėl to šios klasės paveldi metodus, savybes, laukus ir įvykius. Ši hierarchinė struktūra palengvina nuoseklumą ir sąveiką .NET ekosistemoje.
2 klausimas: Ką reiškia klasifikacija „objektas“ C# kalboje?
Objektų supratimas C# kalboje priklauso nuo pagrindinių kalbos principų suvokimo. Iš esmės C# yra objektų orientuota programavimo kalba, kurioje pagrindą sudaro klasės. Klasė apibrėžia duomenų struktūrą ir nustato, kaip jie saugomi, tvarkomi ir perduodami C# kalboje. Iš esmės ji yra visų kitų duomenų struktūrų modelis.
Objektai yra realūs elementai C# kalboje, kurie taip pat užima realias vertes turimoje atmintyje. Visi subjektai, turintys labai specifines charakteristikas arba atliekantys konkrečią užduotį programinėje įrangoje, gali būti laikomi objektais. Objekto tipas apibrėžiamas klase, o klasės instancės sudaro pagrindą tolesnei jų struktūrai.
Pavyzdžiui, tarkime, kad kuriame programą, skirtą televizoriui. Pirmiausia turime apibrėžti objektą kaip pradinį tašką. Šiuo atveju galime sukurti klasę „Televizorius“. Šioje klasėje norime apibrėžti penkias savybes: gamintoją, modelį, spalvą, dydį ir kainą. Šios savybės yra klasės nariai. Kiti klasės nariai gali būti įvykiai, metodai ar laukai, kurie visi kartu sudaro objektą.
Norėdami programuoti „Sony Bravia“ kaip televizoriaus pavyzdį, kurdami šį objektą galime nurodyti savybes „Sony“, „Bravia“, „Black“, „50“ ir „500“. Tai apibrėžia informaciją apie gamintoją, modelį, spalvą, dydį ir kainą. Taigi „Sony“ televizorius yra „Television“ klasės pavyzdys. Kad ši klasė būtų prieinama, svarbu ją apibrėžti kaip viešą, o ne kaip privačią ar apsaugotą.
3 klausimas: Koks yra skirtumas tarp valdomo ir nevaldomo kodo C# kalboje?
Valdomas kodas
C# valdomas kodas – tai visas kodas, sukurtas naudojant .NET Framework. Šio tipo kodas vykdomas tiesiogiai naudojant bendrąją kalbos vykdymo aplinką (CLR). CLR valdo kodo gyvavimo ciklą, įskaitant objektų kūrimą, atminties paskirstymą ir objektų šalinimą.
Nevalomas kodas
Kodas, sukurtas ne .NET Framework aplinkoje, vadinamas nevaldomu kodu. Ši kategorija apima visas programas, kurios nėra vykdomos CLR kontrolės sąlygomis.
.NET Framework teikia funkciją, kuri gali konvertuoti nevaldomą kodą į valdomą kodą ir atvirkščiai. Ši funkcija yra ypač naudinga, nes ji palengvina objektų kūrimo ir vykdymo bei kodo šalinimo integravimą į sistemą.
4 klausimas: Koks yra skirtumas tarp struktūros ir klasės?
C# kalboje terminai „klasė“ (class) ir „struktūra“ (struct) reiškia vartotojo apibrėžtus duomenų tipus. Tačiau šie duomenų tipai turi keletą esminių skirtumų.
Struktūra
- Kaip vertės tipas C# kalboje, struktūros visada netiesiogiai paveldi iš System.ValueType.
- Struktūros negali būti išvestos iš kitų tipų.
- Paprastai struktūra naudojama mažesniems duomenų kiekiams.
- Struktūros negali būti abstrakčios, todėl reikalauja tiesioginio įgyvendinimo.
- Struktūrai negalima priskirti standartinio konstruktoriaus.
- Objekto kūrimas naudojant raktinį žodį
newnėra privalomas.
Klasė
- Kaip nuorodų tipas C# kalboje, klasės visada netiesiogiai paveldi iš System.Object.
- Klasės gali būti kilusios iš kitų klasių, o tai leidžia paveldėjimą.
- Paprastai klasė naudojama didesniems duomenų kiekiams arba sudėtingesnėms struktūroms.
- Klasės gali būti abstrakčios, o tai reiškia, kad jos neleidžia tiesioginio instancijavimo.
- Priešingai nei struktūros, klasės gali turėti standartinį konstruktorių, jei jo reikia.
5 klausimas: Koks yra skirtumas tarp sąsajos ir abstrakčios klasės C# kalboje?
Sąsajos (interfaces) ir abstrakčiosios klasės (abstract classes) abi nurodo kodų sutarties klases, pvz., išankstines sąlygas ar objekto nekintamus dydžius, išvestinėms klasėms. Nepaisant šio bendrumo, yra daug skirtumų, kaip rodo sąsajų ir abstrakčiųjų klasių funkcionalumas.
Kodų sutarčių klasės gali būti naudojamos norint nurodyti išankstines sąlygas, paskesnes sąlygas ir objekto nekintamus dydžius. Išankstinės sąlygos yra reikalavimai, kurie turi būti įvykdyti įvedant metodą ar savybę.
Paveldėjimo atžvilgiu abstrakčios klasės gali turėti ne tik abstrakčius metodus, bet ir metodus su įgyvendintu kodu, o sąsajos reikalauja, kad visi metodai būtų abstrakčiai. Dėl to abstrakčioms klasėms deklaruoti reikalingas raktinis žodis abstract
Kadangi C# nepalaiko daugkartinio klasių paveldėjimo, klasė negali paveldėti iš daugiau nei vienos abstrakčios klasės. Tačiau klasė gali įgyvendinti keletą sąsajų, kad būtų galima daugkartinis sąsajų paveldėjimas.
Abstrakčioji klasė gali turėti konstruktorius, kuriuos gali iškviesti išvestinės klasės. Sąsajos negali turėti konstruktorių, nes jos nėra instancės ir todėl negali būti inicijuotos.
6 klausimas: Kas yra savybės C# kalboje?
C# kalboje savybės yra klasės elementas, leidžiantis skaityti, rašyti ar apskaičiuoti privačiai deklaruoto lauko vertę. Savybės gali būti naudojamos norint pasiekti viešas sąsajas arba leisti keisti klasėje saugomus duomenis.
Savybės yra pagrindinis objektinio programavimo C# kalba aspektas ir dažniausiai naudojamos programose, siekiant užtikrinti aiškų ir saugų prieigą prie klasės duomenų.
Jie deklaruojami naudojant get ir set prieigos funkcijas, kurios apibrėžia savybės vertės skaitymo ar nustatymo elgesį. get prieigos funkcija gauna savybės vertę, o set prieigos funkcija nustato savybės vertę. Savybė gali turėti vieną arba abi prieigos funkcijas. Tai priklauso nuo to, ar savybė yra (arba turėtų būti) tik skaitoma, ar skaitoma/rašoma.
7 klausimas: Ką reiškia „boxing“ ir „unboxing“ C# kalboje?
C# kalboje tipų konversijoms naudojami boxing ir unboxing.
- Konvertavimas iš vertės tipo į nuorodos tipą vadinamas „boxing“. Tai gali būti, pavyzdžiui, paprasto duomenų tipo, pvz., int, konvertavimas į duomenų tipo objektą. „Boxing“ yra netiesioginis konvertavimas.
- Pakeitimas iš nuorodos tipo į vertės tipą, kita vertus, vadinamas išpakavimu. Išpakavimas gali vykti tik su tiksliai tuo pačiu vertės tipu, kuris buvo iš pradžių įdėtas į dėžutę, pavyzdžiui, objekto konvertavimas atgal į int.
8 klausimas: Kas yra išvardijimas (enum) ir kam jis naudojamas C# kalboje?
Enumas yra vertės tipas su susijusių pavadintų konstantų rinkiniu. Ši grupė taip pat vadinama „enumeratoriaus sąrašu“. C# kalboje enumai yra išvardyti duomenų tipai, kurie yra primityvūs ir vartotojo apibrėžti. Raktažodis enum naudojamas enumeracijai deklaruoti.
.NET Framework enumai naudojami skaitmeninių konstantų kūrimui. Kiekvienas enumo narys yra enumo tipo, o kiekvienam enumo tipui reikalinga skaitmeninė vertė. Šios enumo vertės yra nekintamos. Enumai gali būti pateikiami kaip simbolių eilutės ir tvarkomi kaip sveikieji skaičiai.
Numatytasis išvardijimo elemento tipas yra int. Numatytasis pirmojo išvardijimo elemento vertė yra 0, o kiekvieno kito išvardijimo elemento vertė padidinama 1. Tačiau šias vertes taip pat galima nustatyti rankiniu būdu, pvz., 10 = Įjungta ir 20 = Išjungta.
9 klausimas: Koks yra skirtumas tarp Dispose ir Finalize C# kalboje?
C# kalboje abu metodai naudojami ištekliams išlaisvinti.
Dispose metodas atleidžia nevaldomus išteklius, pvz., duomenų bazių ryšius, kurie nėra automatiškai valdomi .NET vykdymo aplinkos šeimininko. Paprastai jis įgyvendinamas klasėje. Tai savo ruožtu įgyvendina IDisposable sąsają, kuri apibrėžia Dispose metodą.
Šis metodas yra aiškiai iškviečiamas kliento kodu, kad būtų atlaisvinti nebereikalingi ištekliai. Alternatyviai, jis gali būti netiesiogiai iškviečiamas naudojant using teiginį, užtikrinant, kad Dispose metodas būtų iškviečiamas, kai objektas išeina iš taikymo srities.
Kita vertus, Finalize metodas naudojamas objekto valymo operacijoms atlikti prieš pat šiukšlių surinkimo procesą. Todėl jis paprastai įgyvendinamas klasėje, kuri perrašo Object.Finalize metodą.
10 klausimas: Kokie yra C# išplėtimo metodų privalumai?
Išplėtimo metodai leidžia programuotojams išplėsti esamo tipo funkcionalumą nekeičiant originalaus tipo ir nesukuriant naujo išvestinio tipo. Jie leidžia pridėti metodus prie esamų klasių, struktūrų, sąsajų, enumų ir pan., net jei metodai iš pradžių nebuvo apibrėžti tipo viduje.
Išplėtimo metodai deklaruojami statinėje klasėje ir apibrėžiami kaip statiniai metodai, turintys unikalų pirmąjį parametrą, pavadintą this. Šis parametras nurodo išplečiamą tipą, leidžiant išplėtimo metodą iškviesti taip, tarsi jis būtų to tipo instancinis metodas.
Kokio pobūdžio klausimų galiu tikėtis C# interviu metu?
Žinodami, kas jus interviuos, galėsite geriau suprasti, kokio pobūdžio klausimai jums bus užduodami. Kartais personalo atrankos specialistams trūksta žinių, reikalingų išsamioms diskusijoms apie specializuotas sritis, pvz., kategorijas ar objektus C# kalboje. Taigi, jei interviu vedėjas yra techninis vadovas arba programavimo komandos narys, labiau tikėtina, kad interviu klausimai bus susiję su konkrečiomis programavimo sąvokomis ir įgūdžiais.
Jei dalyvauja vyriausiasis programinės įrangos architektas arba žiniatinklio kūrėjas, tikėtina, kad jie užduos specializuotus klausimus, ypač jei pretenduojate į aukštesnes pareigas nei pradinio lygio. Taip yra todėl, kad būsimi kolegos nori žinoti, kaip naujas komandos narys galės jiems padėti kasdieninėse užduotyse.