top 50 c interview questions with answers
Preguntes bàsiques sobre l'entrevista C # sobre programació i codificació:
C # és un llenguatge de programació que ha crescut ràpidament i que també s’utilitza àmpliament. És molt demandat, versàtil i també admet multiplataforma.
No només s’utilitza per a Windows, sinó per a molts altres sistemes operatius. Per tant, és molt important tenir una bona comprensió d’aquest idioma per aconseguir qualsevol feina a la indústria de les proves de programari.
A continuació, no només s’inclouen un conjunt de preguntes més freqüents sobre C #, sinó també alguns temes molt importants que cal entendre que destaquen entre la multitud de la població de C #.
Com que C # és un tema ampli, per facilitar la resolució de tots els conceptes, he dividit aquest tema en tres parts, tal com s’esmenta a continuació:
- Preguntes sobre conceptes bàsics
- Preguntes sobre matrius i cordes
- Conceptes avançats
Aquest article inclou un conjunt de 50 preguntes i respostes de les entrevistes en C # que cobreixen gairebé tots els seus temes importants en termes senzills, per ajudar-vos a preparar-vos per a l’entrevista.
Què aprendreu:
Preguntes i respostes més populars de l'entrevista C #
Conceptes bàsics
Q # 1) Què és un objecte i una classe?
Resposta: Class és una encapsulació de propietats i mètodes que s’utilitzen per representar una entitat en temps real. És una estructura de dades que reuneix totes les instàncies en una sola unitat.
L’objecte es defineix com una instància d’una classe. Tècnicament, només és un bloc de memòria assignat que es pot emmagatzemar en forma de variables, matriu o col·lecció.
P # 2) Quins són els conceptes fonamentals de POO?
Resposta: Els quatre conceptes fonamentals de la programació orientada a objectes són:
- Encapsulació : Aquí, la representació interna d’un objecte s’amaga de la vista fora de la definició de l’objecte. Només es pot accedir a la informació requerida, mentre que la resta de la implementació de dades està oculta.
- Abstracció: És un procés per identificar el comportament crític i les dades d’un objecte i eliminar els detalls irrellevants.
- Herència : És la capacitat de crear noves classes a partir d’una altra classe. Es fa accedint, modificant i ampliant el comportament dels objectes de la classe pare.
- Polimorfisme : El nom significa, un nom, moltes formes. S’aconsegueix tenint diversos mètodes amb el mateix nom però implementacions diferents.
P # 3) Què és el codi gestionat i no gestionat?
Resposta: El codi gestionat és un codi que s’executa per CLR (Common Language Runtime), és a dir, que tot el codi de l’aplicació es basa en la plataforma .Net. Es considera gestionat pel marc .Net que utilitza internament el col·lector de deixalles per esborrar la memòria no utilitzada.
El codi no gestionat és qualsevol codi que s'executa mitjançant l'execució de l'aplicació de qualsevol altre marc a part de .Net. El temps d'execució de l'aplicació s'encarregarà de la memòria, la seguretat i altres operacions de rendiment.
Q # 4) Què és una interfície?
Resposta: La interfície és una classe sense implementació. L'únic que conté és la declaració de mètodes, propietats i esdeveniments.
Q # 5) Quins són els diferents tipus de classes de C #?
Resposta: Els diferents tipus de classe de C # són:
- Classe parcial: Permet dividir o compartir els seus membres amb diversos fitxers .cs. Es denota amb la paraula clau Parcial.
- Classe segellada: És una classe que no es pot heretar. Per accedir als membres d’una classe segellada, hem de crear l’objecte de la classe. Es denota amb la paraula clau Segellat .
- Classe abstracta : És una classe l'objecte del qual no es pot instanciar. La classe només es pot heretar. Ha de contenir com a mínim un mètode. Es denota amb la paraula clau resum .
- Classe estàtica : És una classe que no permet l’herència. Els membres de la classe també són estàtics. Es denota amb la paraula clau estàtic . Aquesta paraula clau indica al compilador que comprovi si hi ha cap instància accidental de la classe estàtica.
Q # 6) Expliqueu la compilació del codi en C #.
Resposta: La compilació de codis a C # inclou els quatre passos següents:
- Compilació del codi font al codi gestionat pel compilador C #.
- Combinant el codi de nova creació en muntatges.
- S'està carregant el Common Language Runtime (CLR).
- Execució de l'assemblea per CLR.
Q # 7) Quines diferències hi ha entre una classe i una Struct?
Resposta: A continuació es mostren les diferències entre una classe i un Struct:
Classe | Estruct |
---|---|
Admet l'herència | No admet Herència |
La classe és Passa per referència (tipus de referència) | Struct és Pass by Copy (tipus de valor) |
Els membres són privats per defecte | Els membres són públics per defecte |
Ideal per a objectes complexos més grans | Ideal per a models aïllats petits |
Pot utilitzar el col·lector de residus per a la gestió de la memòria | No es pot utilitzar el col·lector de deixalles i, per tant, no hi ha gestió de memòria |
Q # 8) Quina diferència hi ha entre el mètode virtual i el mètode abstracte?
Resposta: El mètode virtual sempre ha de tenir una implementació per defecte. Tot i això, es pot anul·lar a la classe derivada, tot i que no és obligatori. Es pot anul·lar mitjançant el fitxer anul·lar paraula clau.
Un mètode abstracte no té cap implementació. Resideix a la classe abstracta. És obligatori que la classe derivada implementi el mètode abstracte. An anul·lar aquí no és necessària la paraula clau, tot i que es pot utilitzar.
Q # 9) Expliqueu els espais de noms en C #.
Resposta: S'utilitzen per organitzar projectes de codi gran. 'Sistema' és l'espai de noms més utilitzat a C #. Podem crear el nostre propi espai de noms i també podem utilitzar un espai de noms en un altre, que s’anomena Espais de noms imbricats.
Es denoten amb la paraula clau 'espai de noms'.
Q # 10) Què és la sentència 'utilitzant' a C #?
Resposta: 'Utilitzar' la paraula clau indica que l'espai de noms concret està sent utilitzat pel programa.
Per exemple, utilitzant System
Aquí, Sistema és un espai de noms. La classe Consola es defineix a Sistema. Per tant, podem utilitzar la consola.writeline ('...') o readline al nostre programa.
Q # 11) Expliqueu l'abstracció.
Resposta: L’abstracció és un dels conceptes de POO. S'utilitza per mostrar només les característiques essencials de la classe i amagar informació innecessària.
Prenguem un exemple de cotxe:
El conductor del cotxe hauria de conèixer els detalls del cotxe, com ara el color, el nom, el mirall, la direcció, l’engranatge, el fre, etc. El que no ha de saber és un motor intern, un sistema d’escapament.
Per tant, l’abstracció ajuda a saber què és necessari i a amagar els detalls interns del món exterior. L'amagament de la informació interna es pot aconseguir declarant paràmetres com a privats mitjançant el fitxer privat paraula clau.
P # 12) Expliqueu el polimorfisme?
Resposta: Programàticament, el polimorfisme significa el mateix mètode però implementacions diferents. És de 2 tipus, Compile-time i Runtime.
- Polimorfisme en temps de compilació s’aconsegueix mitjançant una sobrecàrrega de l’operador.
- Polimorfisme en temps d'execució s’aconsegueix anul·lant. Les funcions d’herència i virtuals s’utilitzen durant el polimorfisme d’execució.
Per exemple ,Si una classe té un mètode Void Add (), el polimorfisme s’aconsegueix sobrecarregant el mètode, és a dir, void Add (int a, int b), void Add (int add) són mètodes sobrecarregats.
P # 13) Com s’implementa el tractament d’excepcions a C #?
Resposta: El tractament de les excepcions es fa mitjançant quatre paraules clau a C #:
- provar : Conté un bloc de codi per al qual es verificarà una excepció.
- atrapar : És un programa que capta una excepció amb l'ajut del controlador d'excepcions.
- finalment : És un bloc de codi escrit per executar-se independentment de si es capta o no una excepció.
- Llançar : Genera una excepció quan es produeix un problema.
Q # 14) Què són les classes d'E / S de C #? Quines són les classes d'E / S més utilitzades?
Resposta: C # té espai de noms System.IO, format per classes que s’utilitzen per realitzar diverses operacions en fitxers com ara crear, suprimir, obrir, tancar, etc.
Algunes classes d'E / S que s'utilitzen habitualment són:
- Dossier - Ajuda a manipular un fitxer.
- StreamWriter - S’utilitza per escriure caràcters en un flux.
- StreamReader - S’utilitza per llegir personatges en un flux.
- StringWriter - S’utilitza per llegir un buffer de cadenes.
- StringReader - S’utilitza per escriure un buffer de cadena.
- Camí - S'utilitza per realitzar operacions relacionades amb la informació del camí.
Q # 15) Què és la classe StreamReader / StreamWriter?
Resposta: StreamReader i StreamWriter són classes de l'espai de noms System.IO. S'utilitzen quan volem llegir o escriure dades basades en lectors, respectivament, charact90.
Alguns dels membres de StreamReader són: Tancar (), Llegir (), Llegir línia ().
Els membres de StreamWriter són: Tancar (), escriure (), línia d’escriptura ().
Class Program1 { using(StreamReader sr = new StreamReader(“C:ReadMe.txt”) { //----------------code to read-------------------// } using(StreamWriter sw = new StreamWriter(“C:ReadMe.txt”)) { //-------------code to write-------------------// } }
P # 16) Què és un destructor en C #?
Resposta: Destructor s’utilitza per netejar la memòria i alliberar els recursos. Però a C #, el recol·lector d’escombraries ho fa tot sol. System.GC.Collect () es diu internament per a la neteja. Però de vegades pot ser necessari implementar destructors manualment.
Per exemple:
~Car() { Console.writeline(“….”); }
P # 17) Què és una classe abstracta?
Resposta: Una classe Abstract és una classe que es denota per paraula clau abstracta i només es pot utilitzar com a classe Base. Aquesta classe sempre s’ha d’heretar. No es pot crear una instància de la mateixa classe. Si no volem que cap programa creï un objecte d'una classe, aquestes classes es poden fer abstractes.
Qualsevol mètode de la classe abstracta no té implementacions a la mateixa classe. Però s’han d’implementar a la classe infantil.
Per exemple:
abstract class AB1 { Public void Add(); } Class childClass : AB1 { childClass cs = new childClass (); int Sum = cs.Add(); }
Tots els mètodes d’una classe abstracta són implícitament mètodes virtuals. Per tant, la paraula clau virtual no s’ha d’utilitzar amb cap mètode de la classe abstracta.
P # 18) Què és la boxa i la desfeta?
Resposta: La conversió d’un tipus de valor a tipus de referència s’anomena boxa.
Per exemple:
int Valor1 - = 10;
// ———— Boxa —————— //
object boxedValue = Valor1;
Es crida la conversió explícita del mateix tipus de referència (creada per la boxa) al tipus de valor Unboxing .
Per exemple:
// ———— UnBoxing —————— //
int UnBoxing = int (BoxedValue);
obrint un fitxer eps a Windows
P # 19) Quina diferència hi ha entre Continuació i Declaració de ruptura?
Resposta: La sentència Break trenca el bucle. Fa que el control del programa surti del bucle. La instrucció Continue fa que el control del programa només surti de la iteració actual. No trenca el bucle.
P # 20) Quina diferència hi ha entre el bloc final i final?
Resposta: finalment El bloc es diu després de l'execució del bloc try and catch. S'utilitza per al maneig d'excepcions. Independentment de si es capta o no una excepció, s’executarà aquest bloc de codi. Normalment, aquest bloc tindrà un codi de neteja.
El mètode finalize es diu just abans de la recollida d'escombraries. S'utilitza per realitzar operacions de neteja de codi no gestionat. Es crida automàticament quan posteriorment no es crida una instància determinada.
Matrius i cordes
P # 21) Què és una matriu? Voleu donar la sintaxi per a una matriu única i multidimensional?
Resposta: Una matriu s’utilitza per emmagatzemar diverses variables del mateix tipus. És una col·lecció de variables emmagatzemades en una ubicació contigua de memòria.
Per exemple:
nombres dobles = doble nou (10);
int () score = new int (4) {25,24,23,25};
Una matriu d'una sola dimensió és una matriu lineal on les variables s'emmagatzemen en una sola fila. A sobre exemple és una matriu de dimensió única.
Les matrius poden tenir més d’una dimensió. Les matrius multidimensionals també s’anomenen matrius rectangulars.
Per exemple , int (,) números = new int (3,2) {{1,2}, {2,3}, {3,4}};
P # 22) Què és una matriu dentada?
Resposta: Una matriu dentada és una matriu els elements de la qual són matrius. També s’anomena matriu d’arrays. Pot ser de dimensions individuals o múltiples.
int () jaggedArray = new int (4) ();
Q # 23) Anomeneu algunes propietats d'Array.
Resposta: Les propietats d'una matriu inclouen:
- Llargada: Obté el nombre total d'elements d'una matriu.
- IsFixedSize: Indica si la matriu té una mida fixa o no.
- IsReadOnly : Indica si la matriu és de només lectura o no.
P # 24) Què és una classe de matriu?
Resposta: Una classe Array és la classe base per a totes les matrius. Proporciona moltes propietats i mètodes. És present al sistema d’espais de noms.
P # 25) Què és una cadena? Quines són les propietats d'una classe de cordes?
Resposta: Una cadena és una col·lecció d'objectes de caràcters. També podem declarar variables de cadena en c #.
string name = 'Preguntes C #';
Una classe de cadena en C # representa una cadena. Les propietats de la classe de cadena són:
- Caràcters obtenir l'objecte Char a la cadena actual.
- Llargada obté el nombre d'objectes de la cadena actual.
P # 26) Què és una seqüència d'escapament? Anomeneu algunes seqüències d'escapament de cadenes en C #.
Resposta: Una seqüència Escape es denota amb una barra invertida (). La barra invertida indica que el personatge que la segueix s’ha d’interpretar literalment o bé és un caràcter especial. Una seqüència d'escapament es considera com un sol personatge.
Les seqüències d'escapament de cadenes són les següents:
- n - Caràcter de línia nova
- b - Retrocés
- \ - Barra invertida
- ’- Pressupost únic
- ’’ - Cita doble
P # 27) Què són les expressions regulars? Cerqueu una cadena amb expressions regulars?
Resposta: L’expressió regular és una plantilla que coincideix amb un conjunt d’entrada. El patró pot consistir en operadors, construccions o literals de caràcters. Regex s’utilitza per analitzar i substituir la cadena de caràcters.
Per exemple:
* coincideix amb el caràcter anterior zero o més vegades. Per tant, una regla * b equival a b, ab, aab, aaab, etc.
Cerqueu una cadena mitjançant 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'); } } }
L'exemple anterior cerca 'Python' contra el conjunt d'entrades de la matriu d'idiomes. Utilitza Regex.IsMatch que torna cert per si el patró es troba a l'entrada. El patró pot ser qualsevol expressió regular que representi l'entrada que volem que coincideixi.
P # 28) Quines són les operacions bàsiques de cadena? Explica.
Resposta: Algunes de les operacions bàsiques de cadena són:
- Concatenar : Es poden concatenar dues cadenes mitjançant un System.String.Concat o mitjançant un operador +.
- Modificar : Replace (a, b) s’utilitza per substituir una cadena per una altra. Trim () s’utilitza per retallar la corda al final o al principi.
- Compara : System.StringComparison () s’utilitza per comparar dues cadenes, ja sigui una comparació sensible a majúscules o minúscules. Principalment pren dos paràmetres, la cadena original i la cadena amb què es pot comparar.
- Cerca : StartWith, els mètodes EndsWith s’utilitzen per cercar una cadena concreta.
P # 29) Què és l'anàlisi? Com analitzar una cadena de data i hora?
Resposta: L'anàlisi converteix una cadena en un altre tipus de dades.
Per exemple:
text de la cadena = '500';
int num = int.Parse (text);
500 és un nombre enter. Per tant, el mètode Parse converteix la cadena 500 en el seu propi tipus base, és a dir, int.
Seguiu el mateix mètode per convertir una cadena DateTime.
string dateTime = '1 de gener de 2018';
DataTime parsedValue = DataTime.Parse (dataTime);
Conceptes avançats
P # 30) Què és un delegat? Explica.
Resposta: Un delegat és una variable que conté la referència a un mètode. Per tant, és un punter de funció o tipus de referència. Tots els delegats es deriven de l'espai de noms System.Delegate. Tant el delegat com el mètode al qual fa referència poden tenir la mateixa signatura.
- Declaració de delegat: delegat públic buit AddNumbers (int n);
Després de la declaració d'un delegat, l'objecte ha de ser creat pel delegat mitjançant la nova paraula clau.
AddNumbers an1 = new AddNumbers (número);
El delegat proporciona una mena d’encapsulació al mètode de referència, que es cridarà internament quan es cridi 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; } }
A l'exemple anterior, tenim un delegat myDel que pren un valor enter com a paràmetre. El Programa de classes té un mètode de la mateixa signatura que el delegat, anomenat AddNumbers ().
Si hi ha un altre mètode anomenat Start () que crea un objecte del delegat, l'objecte es pot assignar a AddNumbers ja que té la mateixa signatura que la del delegat.
P # 31) Què són els esdeveniments?
Resposta: Els esdeveniments són accions de l'usuari que generen notificacions a l'aplicació a la qual ha de respondre. Les accions de l'usuari poden ser moviments del ratolí, pressió de tecles, etc.
Programàticament, una classe que genera un esdeveniment s’anomena editor i una classe que respon / rep l’esdeveniment es diu subscriptor. L'esdeveniment hauria de tenir com a mínim un subscriptor que no es generi mai.
Els delegats s’utilitzen per declarar esdeveniments.
El delegat públic anul·la els números d'impressió ();
Números d'impressió d'esdeveniments myEvent;
P # 32) Com s'utilitzen els delegats amb esdeveniments?
Resposta: Els delegats s’utilitzen per plantejar esdeveniments i gestionar-los. Sempre s’ha de declarar sempre un delegat i després es declaren els esdeveniments.
Vegem un exemple:
Penseu en una classe anomenada Pacient. Penseu en altres dues classes, Assegurances i Banc, que requereixen informació de defunció del pacient de la classe de pacient. Aquí, Assegurances i Banc són els subscriptors i la classe Pacient es converteix en l'editor. Desencadena l'esdeveniment de la mort i les altres dues classes haurien de rebre l'esdeveniment.
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) Quins són els diferents tipus de delegats?
Resposta: Els diferents tipus de delegats són:
- Delegat únic : Un delegat que pot trucar a un sol mètode.
- Delegat multidifusió : Un delegat que pot trucar a diversos mètodes. Els operadors + i - s'utilitzen per subscriure i donar-se de baixa respectivament.
- Delegat genèric : No requereix que es defineixi una instància del delegat. És de tres tipus, Acció, Funcs i Predicat.
- Acció - A l'exemple anterior de delegats i esdeveniments, podem substituir la definició de delegat i esdeveniment mitjançant la paraula clau Action. El delegat d'Acció defineix un mètode que es pot invocar en arguments però que no retorna cap resultat
Delegat públic anul·la deathInfo ();
Esdeveniment públic deathInfo deathDate;
// Substitució per Acció //
Esdeveniment públic Acció deathDate;
L’acció es refereix implícitament a un delegat.
-
- funcions - Un delegat de Func defineix un mètode que es pot invocar en arguments i retorna un resultat.
Func myDel és el mateix que delegar bool myDel (int a, cadena b);
-
- Predicat - Defineix un mètode que es pot cridar a arguments i sempre retorna el bool.
Predica myDel és el mateix que delegar bool myDel (cadena);
Q # 34) Què volen dir els delegats de multidifusió?
Resposta: Un delegat que apunta a més d’un mètode s’anomena delegat de multidifusió. La multidifusió s’aconsegueix mitjançant l’operador + i + =.
Penseu en l'exemple de la Q # 32.
Hi ha dos subscriptors per a deathEvent, GetPatInfo , i GetDeathDetails . I, per tant, hem utilitzat l'operador + =. Significa sempre que el fitxer myDel es crida, es crida a tots dos subscriptors. Es cridarà als delegats per l’ordre en què s’afegeixen.
P # 35) Expliqueu els editors i els subscriptors als esdeveniments.
Resposta: Publisher és una classe responsable de publicar un missatge de diferents tipus d'altres classes. El missatge no és res més que Esdeveniment, tal com es comenta a les preguntes anteriors.
Des del Exemple a la Q # 32, Class Pacient és la classe Publisher. Està generant un esdeveniment deathEvent , que reben les altres classes.
Els subscriptors capturen el missatge del tipus que li interessa. De nou, des de Exemple de Q # 32, Class Insurance i Bank són subscriptors. Els interessa l’esdeveniment deathEvent de tipus buit .
P # 36) Què són les operacions síncrones i asíncrones?
Resposta: La sincronització és una manera de crear un codi segur de fils on només un fil pot accedir al recurs en un moment donat. La trucada asíncrona espera que el mètode es completi abans de continuar amb el flux del programa.
La programació síncrona afecta greument les operacions de la interfície d’usuari quan l’usuari intenta realitzar operacions que consumeixen molt de temps, ja que només s’utilitzarà un fil. En operació asíncrona, la trucada al mètode tornarà immediatament perquè el programa pugui realitzar altres operacions mentre el mètode anomenat completa el seu treball en determinades situacions.
A C #, les paraules clau Async i Await s’utilitzen per aconseguir una programació asíncrona. Consulteu la Q # 43 per obtenir més informació sobre la programació síncrona.
P # 37) Què és la reflexió en C #?
Resposta: La reflexió és la capacitat d’un codi per accedir a les metadades de l’assemblea durant el temps d’execució. Un programa reflexiona sobre si mateix i utilitza les metadades per informar l’usuari o modificar el seu comportament. Les metadades es refereixen a informació sobre objectes, mètodes.
L’espai de noms System.Reflection conté mètodes i classes que gestionen la informació de tots els tipus i mètodes carregats. S'utilitza principalment per a aplicacions de Windows, Per exemple , per veure les propietats d'un botó en un formulari de Windows.
L'objecte MemberInfo de la reflexió de classe s'utilitza per descobrir els atributs associats a una classe.
La reflexió s’implementa en dos passos: primer, obtenim el tipus d’objecte i, a continuació, fem servir el tipus per identificar membres, com ara mètodes i propietats.
Per obtenir el tipus de classe, només podem utilitzar,
Escriviu mytype = myClass.GetType ();
Un cop tenim un tipus de classe, es pot accedir fàcilment a l’altra informació sobre la classe.
System.Reflection.MemberInfo Info = mytype.GetMethod ('Afegeix números');
La sentència anterior intenta trobar un mètode amb nom Afegeix números a la classe la meva classe .
P # 38) Què és una classe genèrica?
Resposta: Els genèrics o la classe genèrica s’utilitzen per crear classes o objectes que no tenen cap tipus de dades específic. El tipus de dades es pot assignar durant el temps d'execució, és a dir, quan s'utilitza al programa.
Per exemple:
Per tant, a partir del codi anterior, veiem 2 mètodes de comparació inicialment, per comparar cadena i int.
En cas d’altres comparacions de paràmetres de tipus de dades, en lloc de crear molts mètodes sobrecarregats, podem crear una classe genèrica i passar un tipus de dades substitutiu, és a dir, T. Per tant, T actua com a tipus de dades fins que s’utilitza específicament al mètode Main () .
P # 39) Expliqueu Obtén i estableix les propietats de l'accessor?
Resposta: Get i Set es diuen accessoris. Propietats les utilitzen. La propietat proporciona un mecanisme per llegir i escriure el valor d’un camp privat. Per accedir a aquest camp privat, s’utilitzen aquests accessors.
Obtenir propietat s’utilitza per retornar el valor d’una propietat
Estableix l'accessor de propietats s'utilitza per establir el valor.
L’ús de get and set és el següent:
P # 40) Què és un fil? Què és Multithreading?
Resposta: Un fil és un conjunt d’instruccions que es poden executar i que permetran al nostre programa realitzar processos simultanis. El processament simultani ens ajuda a fer més d’una operació alhora. Per defecte, C # només té un fil. Però els altres fils es poden crear per executar el codi en paral·lel amb el fil original.
El fil té un cicle de vida. Comença sempre que es crea una classe de fil i es finalitza després de l'execució. Sistema és l'espai de noms que cal incloure per crear fils i utilitzar els seus membres.
Els fils es creen ampliant la classe de fils. Començar() s'utilitza el mètode per iniciar l'execució del fil.
//CallThread is the target method// ThreadStart methodThread = new ThreadStart(CallThread); Thread childThread = new Thread(methodThread); childThread.Start();
C # pot executar més d'una tasca alhora. Això es fa gestionant diferents processos mitjançant diferents fils. Això s’anomena MultiThreading.
Hi ha diversos mètodes de fil que s’utilitzen per gestionar operacions de diversos fils:
Començar, dormir, cancel·lar, suspendre, reprendre i unir-se.
La majoria d’aquests mètodes s’expliquen per si mateixos.
P # 41) Anomeneu algunes propietats de la classe de fils.
Resposta: Poques propietats de la classe de fil són:
- Està viu - conté el valor True quan un fil està actiu.
- Nom - Pot retornar el nom del fil. A més, es pot establir un nom per al fil.
- Prioritat - retorna el valor prioritzat de la tasca establerta pel sistema operatiu.
- IsBackground - obté o estableix un valor que indica si un fil ha de ser un procés en segon pla o en primer pla.
- ThreadState - descriu l'estat del fil.
Q # 42) Quins són els diferents estats d’un fil?
Resposta: Els diferents estats d’un fil són:
- Sense iniciar - Es crea el fil.
- Córrer - El fil comença l'execució.
- WaitSleepJoin - Les trucades de fils dormen, les trucades esperen en un altre objecte i les trucades s’uneixen en un altre fil.
- Suspès - S'ha suspès el fil.
- Abortat - El fil està mort però no s'ha canviat a estat aturat.
- Aturat - El fil s'ha aturat.
Q # 43) Què són Async i Await?
Resposta: Les paraules clau Async i Await s’utilitzen per crear mètodes asíncrons a C.
La programació asíncrona significa que el procés s'executa independentment dels processos principals o d'altres.
L’ús d’Async i Await és el que es mostra a continuació:
- La paraula clau asincronitzada s’utilitza per a la declaració del mètode.
- El recompte és d'una tasca de tipus int que crida al mètode CalculateCount ().
- Calculatecount () inicia l'execució i calcula alguna cosa.
- Es fa un treball independent al meu fil i, a continuació, s’arriba a la declaració del compte.
- Si el Calculatecount no s’acaba, myMethod tornarà al mètode de trucada, de manera que el fil principal no es bloquejarà.
- Si el Calculatecount ja està acabat, tindrem el resultat disponible quan el control arribi a comptar. Per tant, el següent pas continuarà en el mateix fil. Tanmateix, no és la situació en el cas anterior on hi ha un retard d'1 segon.
P # 44) Què és un punt mort?
Resposta: Un punt mort és una situació en què un procés no pot completar la seva execució perquè dos o més processos estan esperant que s’acabin. Això sol produir-se en múltiples fils.
Aquí un procés compta amb un recurs compartit i un altre procés espera que el primer procés l’alliberi i el fil que conté l’element bloquejat espera que es completi un altre procés.
Considereu l'exemple següent:
- Realitza tasques d'accés a objB i espera 1 segon.
- Mentrestant, PerformtaskB intenta accedir a ObjA.
- Al cap d'1 segon, PeformtaskA intenta accedir a ObjA que està bloquejat per PerformtaskB.
- PerformtaskB intenta accedir a ObjB que està bloquejat per PerformtaskA.
Això crea un punt mort.
Q # 45) Expliqueu L ock , Monitors , i Mutex Objecte en roscat.
Resposta: La paraula clau de bloqueig garanteix que només un fil pugui introduir una secció concreta del codi en un moment donat. A l’anterior Exemple , lock (ObjA) significa que el bloqueig es col·loca a ObjA fins que aquest procés no l’allibera, cap altre fil no pot accedir a ObjA.
Mutex també és com un bloqueig, però pot funcionar en diversos processos alhora. WaitOne () s’utilitza per bloquejar i ReleaseMutex () s’utilitza per alliberar el bloqueig. Però Mutex és més lent que el bloqueig, ja que es necessita temps per adquirir-lo i alliberar-lo.
Monitor.Enter i Monitor.Exit implementen el bloqueig intern. un bloqueig és una drecera per a monitors. bloqueja (objA) les trucades internes.
Monitor.Enter(ObjA); try { } Finally {Monitor.Exit(ObjA));}
P # 46) Què és una condició de carrera?
Anys: La condició de carrera es produeix quan dos fils accedeixen al mateix recurs i intenten canviar-lo al mateix temps. El fil que podrà accedir al recurs primer no es pot predir.
Si tenim dos fils, T1 i T2, i intenten accedir a un recurs compartit anomenat X. I si tots dos fils intenten escriure un valor a X, es guardarà l'últim valor escrit a X.
Q # 47) Què és l'agrupació de fils?
Anys: El grup de fils és una col·lecció de fils. Aquests fils es poden utilitzar per realitzar tasques sense molestar el fil primari. Un cop el fil completa la tasca, el fil torna a la piscina.
L’espai de noms System.Threading.ThreadPool té classes que gestionen els fils de l’agrupació i les seves operacions.
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(SomeTask));
La línia anterior posa en cua una tasca. Alguns mètodes de Tasca han de tenir un paràmetre de tipus Object.
Q # 48) Què és la serialització?
Resposta: La serialització és un procés de conversió de codi al seu format binari. Un cop convertit a bytes, es pot emmagatzemar i escriure fàcilment en un disc o en qualsevol dispositiu d’emmagatzematge d’aquest tipus. Les serialitzacions són útils principalment quan no volem perdre la forma original del codi i es pot recuperar en qualsevol moment en el futur.
Qualsevol classe que estigui marcada amb l'atribut (Serializable) es convertirà a la seva forma binària.
El procés invers de recuperar el codi C # de la forma binària s’anomena deserialització.
Per serialitzar un objecte, necessitem que es serialitzi l’objecte, un flux que pugui contenir l’objecte serialitzat i l’espai de noms System.Runtime.Serialization pot contenir classes per a la serialització.
P # 49) Quins són els tipus de serialització?
Resposta: Els diferents tipus de serialització són:
- Serialització XML - Serialitza totes les propietats públiques al document XML. Com que les dades estan en format XML, es poden llegir i manipular fàcilment en diversos formats. Les classes resideixen a System.sml.Serialization.
- SABÓ - Les classes resideixen a System.Runtime.Serialization. Semblant a XML, però produeix un embolcall complet compatible amb SOAP que pot ser utilitzat per qualsevol sistema que entengui SOAP.
- Serialització binària - Permet convertir qualsevol codi a la seva forma binària. Pot serialitzar i restaurar propietats públiques i no públiques. És més ràpid i ocupa menys espai.
P # 50) Què és un fitxer XSD?
Resposta: Un fitxer XSD significa XML Schema Definition. Ofereix una estructura per al fitxer XML. Vol dir que decideix els elements que hauria de tenir l'XML i en quin ordre i quines propietats haurien d'estar presents. Sense un fitxer XSD associat a XML, l'XML pot tenir etiquetes, atributs i elements.
L'eina Xsd.exe converteix els fitxers al format XSD. Durant la serialització del codi C #, les classes es converteixen a format compatible amb XSD mitjançant xsd.exe.
Conclusió
C # creix ràpidament dia a dia i té un paper important en la indústria de proves de programari.
Estic segur que aquest article us facilitarà la preparació de l’entrevista i us proporcionarà una bona quantitat de coneixements sobre la majoria dels temes de C #.
què és la prova beta en proves de programari
Espero que estigueu a punt per afrontar qualsevol entrevista de C # amb confiança !!
Lectura recomanada
- Preguntes i respostes de l’entrevista
- Preguntes i respostes d’entrevistes de proves ETL
- Top 50 de les preguntes i respostes de les entrevistes CCNA més populars
- Top 51 preguntes i respostes de l’entrevista Bootstrap
- Top 20+ Preguntes i respostes de l’entrevista .NET
- Top 50+ preguntes i respostes d’entrevistes a la base de dades
- Algunes preguntes i respostes de proves manuals complicades
- 25 millors preguntes i respostes d’entrevista de proves àgils