# Kādi ir 10 visbiežāk uzdotie C# intervijas jautājumi un kā uz tiem atbildēt?

No vienkāršiem jautājumiem par C# priekšrocībām līdz dažādu programmēšanas valodas elementu izskaidrošanai un to lietošanas veidiem – mēs esam izveidojuši sarakstu ar 10 svarīgākajiem jautājumiem C# darba intervijai.

Šajā rakstā ir apkopoti desmit bieži uzdotie jautājumi darba intervijā par attīstības speciālista amatu. Mēs esam iekļāvuši arī atbildes uz katru no šiem jautājumiem. Lai gan šie jautājumi aptver dažādas tēmas, sākot no vienkāršām līdz detalizētām, ir daudz citu iespējamo jautājumu par C# un tā īpašajām funkcijām.

Šis raksts sniedz sākotnēju pārskatu par dažādiem jautājumiem, kas var tikt uzdoti, sākot no vienkāršiem jautājumiem līdz specifiskākiem jautājumiem, kuros tiek prasīta konkrēta informācija. Šis raksts var arī palīdzēt jums saprast, kā sagatavoties intervijai, kuras mērķis ir pārbaudīt jūsu zināšanas par konkrētu programmēšanas valodu.

## 1. jautājums: Kādas ir C# īpašās iezīmes un kādas priekšrocības piedāvā šī programmēšanas valoda?

Ar savu īpašo attīstības vidi *Visual Studio*, C# ir pamatā **izstrādāts ātruma nodrošināšanai**. Kā objektorientēta programmēšanas valoda, C# izceļas arī ar savu vienkāršo un moderno lietotņu izstrādi, kas ir gan daudzpusīga, gan jaudīga. Tāpēc daudzi izstrādātāji, izvēloties, kuru programmēšanas valodu apgūt, izvēlas C#.

C# ir strukturēta ap klasēm un objektiem, stingri ievērojot **tipizācijas principus**. Tā nodrošina tādas funkcijas kā abstrakcija, ietvērums un pārmantošana. Šī programmēšanas valoda ir galvenokārt paredzēta izstrādei Microsoft .NET ekosistēmā.

Tā kā C# ir saskaņots ar .NET vidi, tam ir sava struktūra, kurā daudzi .NET struktūru tipi pārmanto objektu klasi. Rezultātā šīs klases pārmanto metodes, īpašības, laukus un notikumus. Šī hierarhiskā struktūra veicina konsekvenci un sadarbspēju .NET ekosistēmā.

## 2. jautājums: Ko nozīmē klasifikācija „objekts” C# valodā?

Objektu izpratne C# valodā ir atkarīga no valodas pamatprincipu izpratnes. C# pamatā ir objektorientēta programmēšanas valoda, kuras **pamatā ir klases**. Klase nosaka datu struktūru un to, kā dati tiek uzglabāti, pārvaldīti un pārnesti C# valodā. Būtībā tā kalpo kā paraugs visām pārējām datu struktūrām.

Objekti ir **reāli elementi C# valodā**, kas arī aizņem reālas vērtības pieejamajā atmiņā. Par objektiem var uzskatīt visas vienības, kurām ir ļoti specifiskas īpašības vai kuras veic konkrētu uzdevumu programmatūrā. Objekta tips tiek definēts ar klasi, un klases instancēm veido pamatu to turpmākajai struktūrai.

**Piemēram**, pieņemsim, ka mēs izstrādājam programmu, kas saistīta ar televizoru. Pirmkārt, mums ir jādefinē entītija kā sākuma punkts. Šajā gadījumā mēs varētu izveidot klasi „Televizors”. Šajā klasē mēs vēlamies definēt piecas īpašības: ražotājs, modelis, krāsa, izmērs un cena. Šīs īpašības ir klases locekļi. Citi klases locekļi var būt notikumi, metodes vai lauki, kas kopā veido objektu.

Lai programmētu Sony Bravia kā televīzijas piemēru, mēs varam norādīt Sony, Bravia, Black, 50 un 500 kā īpašības, izveidojot šo objektu. Tas definē informāciju par ražotāju, modeli, krāsu, izmēru un cenu. Tādējādi Sony televīzija ir televīzijas klases piemērs. Lai šī klase būtu pieejama, ir svarīgi to definēt kā *publisku*, nevis *privātu* vai *aizsargātu*.

## 3. jautājums: Kāda ir atšķirība starp pārvaldītu un nepārvaldītu kodu C#?

### Pārvaldīts kods

Pārvaldītais kods C# ir viss kods, **kas izveidots, izmantojot .NET Framework**. Šāda veida kods tiek izpildīts tieši ar *Common Language Runtime* (CLR). CLR pārvalda koda dzīves ciklu, tostarp objektu izveidi, atmiņas sadali un objektu iznīcināšanu.

### Nepārvaldīts kods

**Ārpus .NET Framework** izstrādātais kods tiek saukts par nepārvaldītu kodu. Šajā kategorijā ietilpst visas lietojumprogrammas, kas netiek izpildītas CLR kontrolē.

.NET Framework nodrošina funkciju, kas var pārvērst nepārvaldītu kodu pārvaldītā kodā un otrādi. Šī funkcija ir īpaši noderīga, jo atvieglo objektu izveides un izpildes, kā arī koda iznīcināšanas vienotu integrāciju sistēmā.

## 4. jautājums: Kāda ir atšķirība starp struktūru un klasi?

C# valodā termini „klase” (*class*) un „struktūra” (*struct*) attiecas uz lietotāja definētiem datu tipiem. Tomēr šiem datu tipiem ir dažas būtiskas atšķirības.

### Struktūra

- Kā vērtības tips C# valodā, struktūras vienmēr netieši pārmanto no *System.ValueType*.
- Struktūras nevar atvasināt no citiem tipiem.
- Parasti struktūra tiek izmantota mazākiem datu apjomiem.
- Struktūras nevar būt abstraktas un kā tādas prasa tiešu īstenošanu.
- Struktūrai nav iespējams piešķirt standarta konstruktoru.
- Objekta izveide, izmantojot atslēgvārdu `new`, nav obligāta.

### Klase

- Kā atsauces tips C# valodā, klases vienmēr netieši pārmanto no *System.Object*.
- Klasēm var būt citu klašu atvasinājumi, kas ļauj veikt pārmantošanu.
- Parasti klase tiek izmantota lielākiem datu apjomiem vai sarežģītākām struktūrām.
- Klasēm var būt abstrakta forma, kas nozīmē, ka tās neļauj veikt tiešu instancēšanu.
- Atšķirībā no struktūrām, klasēm var būt standarta konstruktors, ja tas ir nepieciešams.

Tip Lai gan programmēšanas valodas daudzējādi atšķiras, tām ir arī daudz kopīga, jo īpaši attiecībā uz to, kas ir slikts kods. Vairāk informācijas par labākajām programmēšanas praksēm varat atrast mūsu digitālajā ceļvedī.

- Kodēšanas pamati
- Programmēšanas paradigmas
- Koda smarža

## 5. jautājums: Kāda ir atšķirība starp interfeisu un abstraktu klasi C#?

Interfeisi (*interfaces*) un abstraktās klases (*abstract classes*) abas nosaka **koda līguma klases**, piemēram, priekšnosacījumus vai objektu invarianti, atvasinātajām klasēm. Neskatoties uz šo kopīgo iezīmi, pastāv daudzas atšķirības, kā to parāda interfeisu un abstraktāko klašu funkcionalitāte.

Koda līguma klases var izmantot, lai noteiktu priekšnosacījumus, pēcnosacījumus un objektu invarianti. Priekšnosacījumi ir prasības, kas jāizpilda, ievadot metodi vai īpašību.

**Mantojuma** ziņā abstraktajās klasēs papildus abstraktajām metodēm var būt arī metodes ar īstenotu kodu, savukārt interfeisi prasa, lai visas metodes būtu abstraktas. Tāpēc abstraktajām klasēm deklarācijai ir nepieciešams atslēgvārds `abstract`

Tā kā C# neatbalsta vairāku klašu mantošanu, klase nevar mantot no vairāk nekā vienas abstrakcijas klases. Tomēr klase var īstenot vairākas saskarnes, lai nodrošinātu vairāku saskarņu mantošanu.

Abstraktajai klasei var būt **konstruktori**, kurus var izsaukt atvasinātās klases. Interfeisi nevar saturēt konstruktorus, jo tie nav instancēti un tādēļ nevar tikt inicializēti.

## 6. jautājums: Kas ir īpašības C#?

C# valodā īpašības ir klases elements, kas ļauj **lasīt, rakstīt vai aprēķināt privāti deklarēta lauka vērtību**. Īpašības var izmantot, lai piekļūtu publiskām saskarnēm vai ļautu veikt izmaiņas klasē saglabātajos datos.

Īpašības ir objektorientētās programmēšanas C# **pamatelements**, un tās parasti izmanto lietojumprogrammās, lai nodrošinātu tīru un drošu piekļuvi klases datiem.

Tās tiek deklarētas, izmantojot `get` un `set` piekļuves funkcijas, kas definē īpašības vērtības lasīšanas vai iestatīšanas darbību. `get` piekļuves funkcija iegūst īpašības vērtību, bet `set` piekļuves funkcija iestata īpašības vērtību. Īpašībai var būt viena vai abas piekļuves funkcijas. Tas ir atkarīgs no tā, vai īpašība ir (vai tai jābūt) tikai lasāma vai lasāma/rakstāma.

## 7. jautājums: Kas ir boxing un unboxing C# valodā?

C# valodā **tipu konvertēšanai** izmanto iepakošanu un izpakošanu.

- Pārveidošana no vērtības tipa uz atsauces tipu ir pazīstama kā **boxing**. Tas var būt, piemēram, vienkārša datu tipa, piemēram, *int*, pārveidošana uz datu tipu *object*. Boxing ir netieša pārveidošana.
- Pārveidošana no atsauces tipa uz vērtības tipu, no otras puses, tiek saukta **par izpakošanu**. Izpakošana var notikt tikai ar precīzu vērtības tipu, kas sākotnēji tika iepakots, piemēram, pārveidojot *objektu* atpakaļ uz *int*.

## 8. jautājums: Kas ir uzskaitījums (enum) un kādam nolūkam tas tiek izmantots C#?

Enums ir vērtību tips ar saistītu nosaukumu konstantu kopu. Šo grupu sauc arī par “enumeratoru sarakstu”. C# valodā enums ir **uzskaitīti datu tipi**, kas ir primitīvi un lietotāja definēti. Atslēgvārds `enum` tiek izmantots, lai deklarētu uzskaitījumu.

Enums .NET Framework tiek izmantoti, lai izveidotu **skaitliskas konstantes**. Katrs enum loceklis ir enum tipa, un katram enum tipam ir nepieciešama skaitliska vērtība. Šīs enum vērtības ir nemainīgas. Enums var attēlot kā rakstzīmju virknes un apstrādāt kā veselos skaitļus.

Enumerācijas elementa noklusējuma tips ir *int*. Noklusējumā pirmajam enumeratoram ir vērtība 0, un katra nākamā enumeratora vērtība palielinās par 1. Tomēr šīs vērtības var arī iestatīt manuāli, piemēram, 10 = Ieslēgts un 20 = Izslēgts.

## 9. jautājums: Kāda ir atšķirība starp Dispose un Finalize C# valodā?

C# valodā abas metodes tiek izmantotas, lai **atbrīvotu resursus**.

**Dispose metode** atbrīvo nepārvaldītus resursus, piemēram, datu bāzes savienojumus, kurus .NET izpildes laika uzņēmējs automātiski nepārvalda. Parasti tā tiek īstenota klasē. Tas savukārt īsteno *IDisposable saskarni*, kas definē Dispose metodi.

Šo metodi skaidri izsauc klienta kods, lai atbrīvotu resursus, kas vairs nav nepieciešami. Alternatīvi to var netieši izsaukt ar `using` izteikumu, nodrošinot, ka Dispose metode tiek izsaukta, kad objekts iziet no darbības jomas.

Savukārt **Finalize metode** tiek izmantota, lai veiktu objekta tīrīšanas darbības tieši pirms atkritumu savākšanas procesa. Rezultātā tā parasti tiek īstenota klasē, kas pārraksta Object.Finalize metodi.

## 10. jautājums: Kādas ir paplašinājumu metožu priekšrocības C#?

Paplašinājuma metodes ļauj izstrādātājiem **paplašināt esošā tipa funkcionalitāti**, nemainot sākotnējo tipu vai neizveidojot jaunu atvasinātu tipu. Tās ļauj pievienot metodes esošajām klasēm, struktūrām, saskarnēm, enumiem utt., pat ja metodes sākotnēji nebija definētas tipā.

Paplašinājuma metodes tiek deklarētas statiskā klasē un definētas kā statiskas metodes, kurām ir unikāls pirmais parametrs ar nosaukumu `this`. Šis parametrs norāda paplašināmo tipu, ļaujot paplašinājuma metodi izsaukt tā, it kā tā būtu šā tipa instancēšanas metode.

## Kāda veida jautājumus varu sagaidīt C# intervijā?

Zinot, kas jūs intervē, jūs varat labāk izprast jautājumu būtību, kas jums tiks uzdoti. Personāla atlases speciālistiem dažkārt trūkst nepieciešamo zināšanu, lai veiktu padziļinātas diskusijas par specializētām jomām, piemēram, kategorijām vai objektiem C#. Tāpēc, ja intervētājs ir tehniskais vadītājs vai attīstības komandas loceklis, ir lielāka varbūtība, ka intervijas jautājumi būs saistīti ar konkrētām programmēšanas koncepcijām un prasmēm.

Ja klāt ir galvenais programmatūras arhitekts vai tīmekļa izstrādātājs, visticamāk, viņi uzdos specializētus jautājumus, jo īpaši, ja pieteaties uz amatu, kas nav sākuma līmeņa. Tas ir tāpēc, ka nākamie kolēģi vēlas zināt, kā jaunais komandas loceklis spēs palīdzēt viņiem ikdienas uzdevumos.


This is a markdown version of: [https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/c-intervijas-jautajumi/](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/c-intervijas-jautajumi/) for AI/LLM consumption.