top 50 c interview questions with answers
Întrebări frecvente de bază despre interviu C # despre programare și codificare:
C # este un limbaj de programare care a crescut rapid și este, de asemenea, utilizat pe scară largă. Este foarte solicitat, versatil și acceptă și multiplataforma.
Nu este folosit doar pentru Windows, ci pentru multe alte sisteme de operare. Prin urmare, este foarte important să aveți o înțelegere puternică a acestei limbi pentru a ajunge la orice loc de muncă din industria de testare software.
Mai jos sunt înscriși nu doar un set de întrebări frecvente despre C #, ci și câteva subiecte foarte importante care trebuie înțelese să iasă din mulțimea populației C #.
Deoarece C # este un subiect vast, pentru ușurința abordării tuturor conceptelor, am împărțit acest subiect în trei părți, după cum se menționează mai jos:
- Întrebări privind conceptele de bază
- Întrebări despre matrice și corzi
- Concepte avansate
Acest articol include un set de primele 50 de întrebări și răspunsuri la interviu C # care acoperă aproape toate subiectele sale importante în termeni simpli, pentru a vă ajuta să vă pregătiți pentru interviu.
Ce veți învăța:
Cele mai populare întrebări și răspunsuri la interviul C #
Noțiuni de bază
Q # 1) Ce este un obiect și o clasă?
Răspuns: Clasa este o încapsulare a proprietăților și metodelor care sunt utilizate pentru a reprezenta o entitate în timp real. Este o structură de date care reunește toate instanțele într-o singură unitate.
Obiectul este definit ca o instanță a unei clase. Din punct de vedere tehnic, este doar un bloc de memorie alocat care poate fi stocat sub formă de variabile, matrice sau colecție.
Q # 2) Care sunt conceptele OOP fundamentale?
Răspuns: Cele patru concepte fundamentale ale programării orientate pe obiecte sunt:
- Incapsularea : Aici, reprezentarea internă a unui obiect este ascunsă vederii din afara definiției obiectului. Doar informațiile necesare pot fi accesate, în timp ce restul implementării datelor este ascuns.
- Abstracție: Este un proces de identificare a comportamentului și datelor critice ale unui obiect și eliminarea detaliilor irelevante.
- Moştenire : Este capacitatea de a crea noi clase dintr-o altă clasă. Se face accesând, modificând și extinzând comportamentul obiectelor din clasa părinte.
- Polimorfism : Numele înseamnă, un singur nume, multe forme. Se realizează având mai multe metode cu același nume, dar implementări diferite.
Î # 3) Ce este codul gestionat și necontrolat?
Răspuns: Codul gestionat este un cod care este executat de CLR (Common Language Runtime), adică tot codul aplicației se bazează pe platforma .Net. Este considerat gestionat din cauza cadrului .Net care folosește intern colectorul de gunoi pentru a curăța memoria neutilizată.
Codul neadministrat este orice cod care este executat de runtime-ul aplicației din orice alt cadru în afară de .Net. Runtime-ul aplicației se va ocupa de memorie, securitate și alte operațiuni de performanță.
Q # 4) Ce este o interfață?
Răspuns: Interfața este o clasă fără implementare. Singurul lucru pe care îl conține este declararea metodelor, proprietăților și evenimentelor.
Q # 5) Care sunt diferitele tipuri de clase din C #?
Răspuns: Diferitele tipuri de clase din C # sunt:
- Clasa parțială: Permite membrilor săi să fie împărțiți sau partajați cu mai multe fișiere .cs. Este notat prin cuvântul cheie Parțial.
- Clasa sigilată: Este o clasă care nu poate fi moștenită. Pentru a accesa membrii unei clase sigilate, trebuie să creăm obiectul clasei. Este notat prin cuvântul cheie Sigilat .
- Clasa abstractă : Este o clasă al cărei obiect nu poate fi instanțiat. Clasa poate fi moștenită doar. Ar trebui să conțină cel puțin o metodă. Este notat prin cuvântul cheie abstract .
- Clasa statică : Este o clasă care nu permite moștenirea. Membrii clasei sunt, de asemenea, statici. Este notat prin cuvântul cheie static . Acest cuvânt cheie îi spune compilatorului să verifice dacă există instanțe accidentale ale clasei statice.
Q # 6) Explicați compilarea codului în C #.
Răspuns: Compilarea codului în C # include următorii patru pași:
- Compilarea codului sursă în cod gestionat de compilatorul C #.
- Combinarea codului nou creat în ansambluri.
- Se încarcă Common Language Runtime (CLR).
- Executarea asamblării de către CLR.
Q # 7) Care sunt diferențele dintre o clasă și o structură?
Răspuns: Dat mai jos sunt diferențele dintre o clasă și o structură:
Clasă | Struct |
---|---|
Sprijină moștenirea | Nu acceptă Moștenirea |
Clasa este Treceți prin referință (tip de referință) | Struct este Pass by Copy (tip valoare) |
Membrii sunt privați în mod implicit | Membrii sunt publici în mod implicit |
Bun pentru obiecte complexe mai mari | Bun pentru modelele mici izolate |
Poate folosi colectorul de deșeuri pentru gestionarea memoriei | Nu se poate utiliza Garbage Collector și, prin urmare, nu există gestionarea memoriei |
Q # 8) Care este diferența dintre metoda virtuală și metoda abstractă?
Răspuns: Metoda virtuală trebuie să aibă întotdeauna o implementare implicită. Cu toate acestea, poate fi suprascris în clasa derivată, deși nu este obligatoriu. Poate fi anulat folosind trece peste cuvânt cheie.
O metodă abstractă nu are o implementare. Rezidă în clasa abstractă. Este obligatoriu ca clasa derivată să implementeze metoda abstractă. Un trece peste cuvântul cheie nu este necesar aici, deși poate fi folosit.
Q # 9) Explicați spațiile de nume în C #.
Răspuns: Sunt folosite pentru a organiza proiecte de coduri mari. „Sistem” este cel mai utilizat spațiu de nume din C #. Ne putem crea propriul spațiu de nume și putem folosi, de asemenea, un spațiu de nume în altul, numit Spații de nume imbricate.
Acestea sunt notate prin cuvântul cheie „namespace”.
Q # 10) Ce înseamnă instrucțiunea „folosind” în C #?
Răspuns: „Utilizarea” cuvântului cheie indică faptul că spațiul de nume particular este utilizat de program.
De exemplu, folosind System
Aici, Sistem este un spațiu de nume. Clasa Console este definită în Sistem. Deci, putem folosi console.writeline („….”) Sau readline în programul nostru.
Q # 11) Explicați abstractizarea.
Răspuns: Abstracția este unul dintre conceptele OOP. Este folosit pentru a afișa doar caracteristicile esențiale ale clasei și pentru a ascunde informații inutile.
Să luăm un exemplu de mașină:
Un șofer al mașinii ar trebui să cunoască detaliile despre mașină, cum ar fi culoarea, numele, oglinda, direcția, treapta de viteză, frâna etc. Ce nu trebuie să știe este un motor intern, un sistem de evacuare.
Deci, abstractizarea ajută la cunoașterea a ceea ce este necesar și ascunderea detaliilor interne din lumea exterioară. Ascunderea informațiilor interne poate fi realizată prin declararea unor parametri precum Privat utilizând privat cuvânt cheie.
Q # 12) Explicați polimorfismul?
Răspuns: Programatic, polimorfismul înseamnă aceeași metodă, dar implementări diferite. Este de 2 tipuri, Compile-time și Runtime.
- Polimorfism în timp de compilare se realizează prin supraîncărcarea operatorului.
- Polimorfismul în timpul rulării se realizează prin suprascriere. Funcțiile de moștenire și virtuale sunt utilizate în timpul polimorfismului Runtime.
De exemplu ,Dacă o clasă are o metodă Void Add (), polimorfismul se realizează prin supraîncărcarea metodei, adică void Add (int a, int b), void Add (int add) sunt toate metode supraîncărcate.
Q # 13) Cum se implementează Exception Handling în C #?
Răspuns: Tratarea excepțiilor se face folosind patru cuvinte cheie în C #:
- încerca : Conține un bloc de cod pentru care va fi verificată o excepție.
- captură : Este un program care prinde o excepție cu ajutorul manipulatorului de excepții.
- in cele din urma : Este un bloc de cod scris pentru a fi executat, indiferent dacă o excepție este sau nu capturată.
- Arunca : Aruncă o excepție atunci când apare o problemă.
Q # 14) Ce sunt clasele I / O C #? Care sunt clasele de I / O utilizate în mod obișnuit?
Răspuns: C # are spațiu de nume System.IO, format din clase care sunt utilizate pentru a efectua diverse operații pe fișiere precum crearea, ștergerea, deschiderea, închiderea etc.
Unele clase I / O utilizate în mod obișnuit sunt:
- Fişier - Ajută la manipularea unui fișier.
- StreamWriter - Folosit pentru a scrie caractere într-un flux.
- StreamReader - Folosit pentru citirea personajelor într-un flux.
- StringWriter - Folosit pentru citirea unui buffer de șiruri.
- StringReader - Folosit pentru scrierea unui buffer șir.
- cale - Folosit pentru efectuarea operațiunilor legate de informațiile despre cale.
Q # 15) Ce este clasa StreamReader / StreamWriter?
Răspuns: StreamReader și StreamWriter sunt clase de spațiu de nume System.IO. Ele sunt folosite atunci când vrem să citim sau să scriem date charact90, respectiv bazate pe Reader.
Unii dintre membrii StreamReader sunt: Close (), Read (), Readline ().
Membrii StreamWriter sunt: Close (), Write (), Writeline ().
Class Program1 { using(StreamReader sr = new StreamReader(“C:ReadMe.txt”) { //----------------code to read-------------------// } using(StreamWriter sw = new StreamWriter(“C:ReadMe.txt”)) { //-------------code to write-------------------// } }
Q # 16) Ce este un Destructor în C #?
Răspuns: Destructor este folosit pentru a curăța memoria și a elibera resursele. Dar în C # acest lucru este realizat de colectorul de gunoi singur. System.GC.Collect () este apelat intern pentru curățare. Dar uneori poate fi necesar să implementați distructori manual.
De exemplu:
~Car() { Console.writeline(“….”); }
Q # 17) Ce este o clasă abstractă?
Răspuns: O clasă Abstract este o clasă care este notată printr-un cuvânt cheie abstract și poate fi utilizată doar ca o clasă de bază. Această clasă ar trebui întotdeauna moștenită. O instanță a clasei în sine nu poate fi creată. Dacă nu dorim ca niciun program să creeze un obiect al unei clase, atunci astfel de clase pot fi făcute abstracte.
Orice metodă din clasa abstractă nu are implementări în aceeași clasă. Dar ele trebuie implementate în clasa de copii.
De exemplu:
abstract class AB1 { Public void Add(); } Class childClass : AB1 { childClass cs = new childClass (); int Sum = cs.Add(); }
Toate metodele dintr-o clasă abstractă sunt implicit metode virtuale. Prin urmare, cuvântul cheie virtual nu trebuie utilizat cu nicio metodă din clasa abstractă.
Q # 18) Ce sunt boxul și dezabonarea?
Răspuns: Conversia unui tip de valoare în tip de referință se numește Box.
De exemplu:
int Valoare1 - = 10;
//----Box------//
obiect boxedValue = Value1;
Se apelează conversia explicită a aceluiași tip de referință (creat prin box) înapoi la tipul de valoare Deconectare .
De exemplu:
// ———— UnBoxing —————— //
int UnBoxing = int (boxedValue);
ce este un fișier .7z
Q # 19) Care este diferența dintre Continuare și Declarație de pauză?
Răspuns: Instrucțiunea Break sparge bucla. Face controlul programului să iasă din buclă. Instrucțiunea Continue face ca controlul programului să iasă doar din iterația curentă. Nu rupe bucla.
Q # 20) Care este diferența dintre blocul final și finalizarea?
Răspuns: in cele din urma blocul este apelat după executarea blocului try and catch. Este folosit pentru tratarea excepțiilor. Indiferent dacă este surprinsă sau nu o excepție, acest bloc de cod va fi executat. De obicei, acest bloc va avea un cod de curățare.
metoda finalize este numită chiar înainte de colectarea gunoiului. Se utilizează pentru a efectua operații de curățare a codului Unmanaged. Se apelează automat atunci când o instanță dată nu este apelată ulterior.
Matrice și corzi
Q # 21) Ce este o matrice? Dați sintaxa pentru o matrice unică și multidimensională?
Răspuns: O matrice este utilizată pentru a stoca mai multe variabile de același tip. Este o colecție de variabile stocate într-o locație de memorie contiguă.
De exemplu:
numere duble = dublu nou (10);
int () scor = new int (4) {25,24,23,25};
O matrice unidimensională este o matrice liniară în care variabilele sunt stocate într-un singur rând. De mai sus exemplu este o matrice unidimensională.
Tablourile pot avea mai multe dimensiuni. Tablourile multidimensionale se mai numesc tablouri dreptunghiulare.
De exemplu , int (,) numere = new int (3,2) {{1,2}, {2,3}, {3,4}};
Q # 22) Ce este o matrice Jagged?
Răspuns: O matrice Jagged este o matrice ale cărei elemente sunt matrice. Este, de asemenea, numit ca matrice de matrice. Poate avea dimensiuni simple sau multiple.
int () jaggedArray = new int (4) ();
Q # 23) Numiți câteva proprietăți ale Array.
Răspuns: Proprietățile unui tablou includ:
- Lungime: Obține numărul total de elemente dintr-o matrice.
- IsFixedSize: Spune dacă matricea are dimensiuni fixe sau nu.
- IsReadOnly : Indică dacă matricea este numai în citire sau nu.
Q # 24) Ce este o clasă Array?
Răspuns: O clasă Array este clasa de bază pentru toate matricile. Oferă multe proprietăți și metode. Este prezent în sistemul spațiului de nume.
Q # 25) Ce este un șir? Care sunt proprietățile unei clase de șiruri?
Răspuns: Un șir este o colecție de obiecte char. De asemenea, putem declara variabile șir în c #.
string name = „C # Întrebări”;
O clasă de șiruri din C # reprezintă un șir. Proprietățile clasei șir sunt:
- Chars obțineți obiectul Char în șirul curent.
- Lungime obține numărul de obiecte din șirul curent.
Q # 26) Ce este o secvență de evadare? Numiți câteva secvențe de scăpare din șir în C #.
Răspuns: O secvență Escape este notată printr-o bară inversă (). Bara inversă indică faptul că caracterul care o urmează ar trebui interpretat literal sau este un personaj special. O secvență de evadare este considerată ca un singur personaj.
Secvențele de evacuare a șirurilor sunt după cum urmează:
- n - caracter Newline
- b - Backspace
- \ - Bară inversă
- ’- Citat unic
- '' - Citat dublu
Q # 27) Ce sunt expresiile regulate? Căutați un șir folosind expresii regulate?
Răspuns: Expresia regulată este un șablon care se potrivește cu un set de intrări. Modelul poate consta din operatori, constructe sau litere de caractere. Regex este utilizat pentru analiza șirului și înlocuirea șirului de caractere.
De exemplu:
* se potrivește cu caracterul precedent de zero sau de mai multe ori. Deci, a * b regex este echivalent cu b, ab, aab, aaab și așa mai departe.
Căutarea unui șir folosind Regex:
static void Main(string() args) { string() languages = { 'C#', 'Python', 'Java' }; foreach(string s in languages) { if(System.Text.RegularExpressions.Regex.IsMatch(s,'Python')) { Console.WriteLine('Match found'); } } }
Exemplul de mai sus caută „Python” împotriva setului de intrări din matricea de limbi. Se folosește Regex.IsMatch care returnează adevărat în cazul în care modelul este găsit în intrare. Modelul poate fi orice expresie regulată care reprezintă intrarea pe care dorim să o potrivim.
Î. 28) Care sunt operațiile de bază ale șirurilor? Explica.
Răspuns: Unele dintre operațiile de bază ale șirului sunt:
- Înlănţui : Două șiruri pot fi concatenate fie utilizând un System.String.Concat, fie utilizând operatorul +.
- Modifica : Replace (a, b) este folosit pentru a înlocui un șir cu un alt șir. Trim () este folosit pentru a tăia șirul la sfârșit sau la început.
- Comparaţie : System.StringComparison () este folosit pentru a compara două șiruri, fie o comparație sensibilă la majuscule sau la minuscule. Prinde în principal doi parametri, șirul original și șirul cu care trebuie comparat.
- Căutare : Metodele StartWith, EndsWith sunt utilizate pentru a căuta un anumit șir.
Q # 29) Ce este analiza? Cum se analizează un șir de dată și oră?
Răspuns: Analizarea convertește un șir într-un alt tip de date.
De exemplu:
text șir = „500”;
int num = int.Parse (text);
500 este un număr întreg. Deci, metoda Parse convertește șirul 500 în propriul tip de bază, adică int.
Urmați aceeași metodă pentru a converti un șir DateTime.
string dateTime = „1 ianuarie 2018”;
DateTime parsedValue = DateTime.Parse (dateTime);
Concepte avansate
Î. 30) Ce este un delegat? Explica.
Răspuns: Un delegat este o variabilă care deține referința la o metodă. Prin urmare, este un indicator de funcție sau un tip de referință. Toți delegații provin din spațiul de nume System.Delegate. Atât delegatul, cât și metoda la care se referă pot avea aceeași semnătură.
- Declararea unui delegat: delegat public void AddNumbers (int n);
După declarația unui delegat, obiectul trebuie creat de delegat folosind noul cuvânt cheie.
AddNumbers an1 = new AddNumbers (număr);
Delegatul oferă un fel de încapsulare metodei de referință, care va fi apelată intern când este apelat un delegat.
public delegate int myDel(int number); public class Program { public int AddNumbers(int a) { int Sum = a + 10; return Sum; } public void Start() { myDel DelgateExample = AddNumbers; } }
În exemplul de mai sus, avem un delegat myDel care ia o valoare întreagă ca parametru. Programul de clasă are o metodă cu aceeași semnătură ca delegatul, numită AddNumbers ().
Dacă există o altă metodă numită Start () care creează un obiect al delegatului, atunci obiectul poate fi atribuit Adăugătorilor, deoarece are aceeași semnătură ca cea a delegatului.
Î. 31) Ce sunt evenimentele?
Răspuns: Evenimentele sunt acțiuni ale utilizatorilor care generează notificări către aplicația la care trebuie să răspundă. Acțiunile utilizatorului pot fi mișcările mouse-ului, apăsarea tastelor și așa mai departe.
Programatic, o clasă care generează un eveniment se numește editor și o clasă care răspunde / primește evenimentul este numită abonat. Evenimentul ar trebui să aibă cel puțin un abonat altul, eveniment care nu este niciodată ridicat.
Delegații sunt folosiți pentru a declara evenimente.
Delegatul public anulează PrintNumbers ();
Numere de imprimare a evenimentului MyEvent;
Î. 32) Cum se utilizează delegații cu evenimente?
Răspuns: Delegații sunt folosiți pentru a ridica evenimente și pentru a le gestiona. Întotdeauna trebuie delegat mai întâi un delegat și apoi sunt declarate Evenimentele.
Să vedem un exemplu:
Luați în considerare o clasă numită Pacient. Luați în considerare alte două clase, asigurări și bancă, care necesită informații despre decesul pacientului din clasa de pacienți. Aici, Asigurările și Banca sunt abonații, iar clasa Pacient devine Editor. Declanșează evenimentul morții și celelalte două clase ar trebui să primească evenimentul.
namespace ConsoleApp2 { public class Patient { public delegate void deathInfo();//Declaring a Delegate// public event deathInfo deathDate;//Declaring the event// public void Death() { deathDate(); } } public class Insurance { Patient myPat = new Patient(); void GetDeathDetails() { //-------Do Something with the deathDate event------------// } void Main() { //--------Subscribe the function GetDeathDetails----------// myPat.deathDate += GetDeathDetails; } } public class Bank { Patient myPat = new Patient(); void GetPatInfo () { //-------Do Something with the deathDate event------------// } void Main() { //--------Subscribe the function GetPatInfo ----------// myPat.deathDate += GetPatInfo; } } }
Q # 33) Care sunt diferitele tipuri de delegați?
Răspuns: Diferite tipuri de delegați sunt:
- Delegat unic : Un delegat care poate apela o singură metodă.
- Delegat Multicast : Un delegat care poate apela la mai multe metode. + și - operatorii sunt utilizați pentru abonare și respectiv dezabonare.
- Delegat generic : Nu necesită definirea unei instanțe a delegatului. Este de trei tipuri, acțiune, funcții și predicat.
- Acțiune - În exemplul de mai sus de delegați și evenimente, putem înlocui definiția de delegat și eveniment folosind cuvântul cheie Acțiune. Delegatul de acțiune definește o metodă care poate fi apelată pe argumente, dar nu returnează un rezultat
Delegat public anulează deathInfo ();
Eveniment public deathInfo deathDate;
// Înlocuirea cu acțiune //
Eveniment public Acțiune deathDate;
Acțiunea se referă implicit la un delegat.
-
- Func - Un delegat Func definește o metodă care poate fi apelată la argumente și returnează un rezultat.
Func myDel este la fel ca delegate bool myDel (int a, șir b);
-
- Predicat - Definește o metodă care poate fi apelată pe argumente și returnează întotdeauna bool-ul.
Predicați myDel este la fel ca delegați bool myDel (șiruri);
Q # 34) Ce înseamnă delegații Multicast?
Răspuns: Un delegat care indică mai multe metode se numește delegat multicast. Difuzarea multiplă se realizează utilizând operatorul + și + =.
Luați în considerare exemplul din Q # 32.
Există doi abonați pentru deathEvent, GetPatInfo , și GetDeathDetails . Și, prin urmare, am folosit + = operator. Înseamnă ori de câte ori myDel este apelat, ambii abonați sunt chemați. Delegații vor fi chemați în ordinea în care sunt adăugați.
Q # 35) Explicați editorii și abonații la evenimente.
Răspuns: Publisher este o clasă responsabilă de publicarea unui mesaj de diferite tipuri de alte clase. Mesajul nu este altceva decât Eveniment, așa cum este discutat în întrebările de mai sus.
De la Exemplu în Q # 32, Class Pacient este clasa Publisher. Generează un eveniment deathEvent , care este primit de celelalte clase.
Abonații captează mesajul de tipul care îl interesează. Din nou, din Exemplu din Q # 32, Class Insurance și Bank sunt Abonați. Sunt interesați de eveniment deathEvent de tip nul .
Q # 36) Ce sunt operațiile sincrone și asincrone?
Răspuns: Sincronizarea este o modalitate de a crea un cod sigur pentru fir, în care un singur fir poate accesa resursa la un moment dat. Apelul asincron așteaptă finalizarea metodei înainte de a continua cu fluxul de programe.
Programarea sincronă afectează grav operațiile UI atunci când utilizatorul încearcă să efectueze operațiuni care consumă mult timp, deoarece va fi utilizat un singur fir. În operație asincronă, apelul metodei va reveni imediat, astfel încât programul să poată efectua alte operații în timp ce metoda apelată își finalizează activitatea în anumite situații.
În C #, cuvintele cheie Async și Await sunt utilizate pentru a realiza o programare asincronă. Uitați-vă la Q # 43 pentru mai multe detalii despre programarea sincronă.
cel mai bun convertor YouTube în mp3 pentru Mac
Q # 37) Ce este Reflection în C #?
Răspuns: Reflecția este capacitatea unui cod de a accesa metadatele ansamblului în timpul rulării. Un program reflectă asupra sa și folosește metadatele pentru a informa utilizatorul sau pentru a modifica comportamentul acestuia. Metadatele se referă la informații despre obiecte, metode.
Spațiul de nume System.Reflection conține metode și clase care gestionează informațiile tuturor tipurilor și metodelor încărcate. Este utilizat în principal pentru aplicații Windows, De exemplu , pentru a vizualiza proprietățile unui buton într-un formular Windows.
Obiectul MemberInfo al reflecției clasei este utilizat pentru a descoperi atributele asociate cu o clasă.
Reflecția este implementată în doi pași, mai întâi, obținem tipul obiectului și apoi folosim tipul pentru a identifica membrii, cum ar fi metodele și proprietățile.
Pentru a obține tipul unei clase, putem folosi pur și simplu,
Tastați mytype = myClass.GetType ();
Odată ce avem un tip de clasă, celelalte informații despre clasă pot fi accesate cu ușurință.
System.Reflection.MemberInfo Info = mytype.GetMethod („AddNumbers”);
Declarația de mai sus încearcă să găsească o metodă cu nume AddNumbers în clasă clasa mea .
Î. 38) Ce este o clasă generică?
Răspuns: Generic sau Generic class este utilizat pentru a crea clase sau obiecte care nu au niciun tip de date specific. Tipul de date poate fi atribuit în timpul runtime, adică atunci când este utilizat în program.
De exemplu:
Deci, din codul de mai sus, vedem 2 metode de comparare inițial, pentru a compara șirul și int.
În cazul altor comparații de parametri de tip de date, în loc să creăm multe metode supraîncărcate, putem crea o clasă generică și putem transmite un tip de date substitut, adică T. Deci, T acționează ca un tip de date până când este utilizat în mod specific în metoda Main () .
Q # 39) Explicați Obțineți și setați proprietățile accesorului?
Răspuns: Get și Set se numesc accesori. Acestea sunt folosite de Proprietăți. Proprietatea oferă un mecanism de citire, scriere a valorii unui câmp privat. Pentru accesarea acelui câmp privat, acești accesori sunt utilizați.
Obțineți proprietate este utilizat pentru a returna valoarea unei proprietăți
Setarea accesorului proprietății este utilizată pentru a seta valoarea.
Utilizarea get și set este următoarea:
Q # 40) Ce este un fir? Ce este Multithreading?
Răspuns: Un subiect este un set de instrucțiuni care pot fi executate, ceea ce va permite programului nostru să efectueze procesare simultană. Procesarea simultană ne ajută să facem mai multe operații odată. În mod implicit, C # are un singur fir. Dar celelalte fire pot fi create pentru a executa codul în paralel cu firul original.
Firul are un ciclu de viață. Acesta începe de fiecare dată când se creează o clasă de fire și se termină după executare. Sistem.Filare este spațiul de nume care trebuie inclus pentru a crea fire și a folosi membrii acestuia.
Firele sunt create prin extinderea clasei de fire. Start() metoda este utilizată pentru a începe executarea firului.
//CallThread is the target method// ThreadStart methodThread = new ThreadStart(CallThread); Thread childThread = new Thread(methodThread); childThread.Start();
C # poate executa mai multe sarcini odată. Acest lucru se face prin gestionarea diferitelor procese prin fire diferite. Aceasta se numește MultiThreading.
Există mai multe metode de thread care sunt folosite pentru a gestiona operațiuni multi-thread:
Începeți, dormiți, anulați, suspendați, reluați și alăturați-vă.
Majoritatea acestor metode se explică de la sine.
Q # 41) Numiți câteva proprietăți ale clasei de fire.
Răspuns: Puține proprietăți ale clasei de fire sunt:
- Este in viata - conține valoare True atunci când un fir este activ.
- Nume - Poate returna numele firului. De asemenea, poate seta un nume pentru fir.
- Prioritate - returnează valoarea prioritară a sarcinii stabilite de sistemul de operare.
- IsBackground - obține sau setează o valoare care indică dacă un fir ar trebui să fie un proces de fundal sau un prim plan.
- ThreadState - descrie starea firului.
Q # 42) Care sunt diferitele stări ale unui fir?
Răspuns: Stările diferite ale unui thread sunt:
- Neînceput - Se creează firul.
- Alergare - Firul începe executarea.
- WaitSleepJoin - Firele apelează somn, apelurile așteaptă pe un alt obiect și apelurile se unesc pe un alt fir.
- Suspendat - Firul a fost suspendat.
- Abortat - Firul este mort, dar nu a fost schimbat în stare oprit.
- Oprit - Firul s-a oprit.
Q # 43) Ce sunt Async și Await?
Răspuns: Cuvintele cheie Async și Await sunt utilizate pentru a crea metode asincrone în C.
Programarea asincronă înseamnă că procesul rulează independent de procesele principale sau de alte procese.
Utilizarea Async și Await este după cum se arată mai jos:
- Cuvântul cheie asincronizat este utilizat pentru declarația metodei.
- Numărul este al unei sarcini de tip int care apelează metoda CalculateCount ().
- Calculatecount () începe executarea și calculează ceva.
- Lucrarea independentă se face pe firul meu și apoi se ajunge la declarația de numărare așteptată.
- Dacă Calculatecount nu este terminat, myMethod va reveni la metoda sa de apelare, astfel firul principal nu se blochează.
- Dacă Calculatecount este deja terminat, atunci avem rezultatul disponibil când controlul atinge numărul de așteptări. Deci următorul pas va continua în același fir. Cu toate acestea, nu este situația din cazul de mai sus în care este implicată întârzierea de 1 secundă.
Q # 44) Ce este un impas?
Răspuns: Un blocaj este o situație în care un proces nu este capabil să-și finalizeze execuția, deoarece două sau mai multe procese așteaptă să se termine unul pe celălalt. Acest lucru apare de obicei în multi-threading.
Aici o resursă partajată este ținută de un proces și un alt proces așteaptă ca primul proces să îl elibereze și firul care deține elementul blocat așteaptă finalizarea unui alt proces.
Luați în considerare exemplul de mai jos:
- Efectuați accesarea sarcinilor objB și așteaptă 1 secundă.
- Între timp, PerformtaskB încearcă să acceseze ObjA.
- După 1 secundă, PeformtaskA încearcă să acceseze ObjA care este blocat de PerformtaskB.
- PerformtaskB încearcă să acceseze ObjB care este blocat de PerformtaskA.
Acest lucru creează Blocaj.
Q # 45) Explicați L ock , Monitoare , și Mutex Obiect în filetare.
Răspuns: Cuvântul cheie de blocare se asigură că numai un fir poate introduce o anumită secțiune a codului la un moment dat. În cele de mai sus Exemplu , blocare (ObjA) înseamnă că blocarea este plasată pe ObjA până când acest proces îl eliberează, niciun alt fir nu poate accesa ObjA.
Mutex este, de asemenea, ca o blocare, dar poate funcționa pe mai multe procese simultan. WaitOne () este utilizat pentru a bloca și ReleaseMutex () este utilizat pentru a elibera blocarea. Dar Mutex este mai lent decât blocarea, deoarece este nevoie de timp pentru a-l achiziționa și elibera.
Monitor.Enter și Monitor.Exit implementează blocarea internă. o blocare este o comandă rapidă pentru monitoare. blocare (objA) apeluri interne.
Monitor.Enter(ObjA); try { } Finally {Monitor.Exit(ObjA));}
Q # 46) Ce este o condiție de cursă?
Ani: Condiția de cursă apare atunci când două fire accesează aceeași resursă și încearcă să o schimbe în același timp. Firul care va putea accesa mai întâi resursa nu poate fi prezis.
Dacă avem două fire, T1 și T2, și încearcă să acceseze o resursă partajată numită X. Și dacă ambele fire încearcă să scrie o valoare în X, ultima valoare scrisă în X va fi salvată.
Q # 47) Ce este gruparea de fire?
Ani: Grupul de fire este o colecție de fire. Aceste fire pot fi utilizate pentru a efectua sarcini fără a deranja firul principal. Odată ce firul finalizează sarcina, firul se întoarce la pool.
Spațiul de nume System.Threading.ThreadPool are clase care gestionează firele din pool și operațiunile sale.
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(SomeTask));
Linia de mai sus pune în coadă o sarcină. Metodele SomeTask ar trebui să aibă un parametru de tip Object.
Q # 48) Ce este serializarea?
Răspuns: Serializarea este un proces de conversie a codului în formatul său binar. Odată ce este convertit în octeți, acesta poate fi stocat cu ușurință și scris pe un disc sau orice astfel de dispozitive de stocare. Serializările sunt utile în principal atunci când nu dorim să pierdem forma originală a codului și acesta poate fi recuperat oricând în viitor.
Orice clasă care este marcată cu atributul (Serializable) va fi convertită în forma sa binară.
Procesul invers de recuperare a codului C # din forma binară se numește Deserializare.
Pentru a serializa un obiect, avem nevoie ca obiectul să fie serializat, un flux care poate conține obiectul serializat și spațiul de nume System.Runtime.Serialization poate conține clase pentru serializare.
Q # 49) Care sunt tipurile de serializare?
Răspuns: Diferitele tipuri de serializare sunt:
- Serializare XML - Serializează toate proprietățile publice în documentul XML. Deoarece datele sunt în format XML, acestea pot fi citite și manipulate cu ușurință în diferite formate. Clasele se află în System.sml.Serialization.
- SĂPUN - Clasele se află în System.Runtime.Serialization. Similar cu XML, dar produce un plic complet compatibil cu SOAP, care poate fi utilizat de orice sistem care înțelege SOAP.
- Serializare binară - Permite convertirea oricărui cod în forma sa binară. Poate serializa și restaura proprietăți publice și non-publice. Este mai rapid și ocupă mai puțin spațiu.
Q # 50) Ce este un fișier XSD?
Răspuns: Un fișier XSD înseamnă XML Schema Definition. Oferă o structură pentru fișierul XML. Înseamnă că decide elementele pe care XML ar trebui să le aibă și în ce ordine și ce proprietăți ar trebui să fie prezente. Fără un fișier XSD asociat cu XML, XML poate avea orice etichete, orice atribute și orice elemente.
Instrumentul Xsd.exe convertește fișierele în formatul XSD. În timpul serializării codului C #, clasele sunt convertite în format compatibil XSD prin xsd.exe.
Concluzie
C # crește rapid zi de zi și joacă un rol major în industria de testare software.
Sunt sigur că acest articol vă va face pregătirea pentru interviu mult mai ușoară și vă va oferi o cantitate echitabilă de cunoștințe despre majoritatea subiectelor C #.
Sper că veți fi gata să faceți față oricărui interviu C # cu încredere !!
Lectură recomandată
- Întrebări și răspunsuri la interviu
- Întrebări și răspunsuri la interviuri de testare ETL
- Top 50 Cele mai populare întrebări și răspunsuri ale interviului CCNA
- Top 51 Întrebări și răspunsuri la interviu Bootstrap
- Top 20+ Întrebări și răspunsuri la interviu .NET
- Top 50+ Întrebări și răspunsuri pentru interviul bazei de date
- Câteva întrebări și răspunsuri dificile de testare manuală
- Cele mai bune 25 de întrebări și răspunsuri de interviu pentru testarea agilă