top 50 c interview questions with answers
Domande frequenti sui colloqui di base in C # su programmazione e codifica:
C # è un linguaggio di programmazione che è cresciuto rapidamente ed è anche ampiamente utilizzato. È molto richiesto, versatile e supporta anche multipiattaforma.
Non è utilizzato solo per Windows ma per molti altri sistemi operativi. Quindi, è molto importante avere una forte comprensione di questo linguaggio per approdare a qualsiasi lavoro nel settore del test del software.
Di seguito sono elencati non solo un insieme delle domande più frequenti di C # ma anche alcuni argomenti molto importanti da comprendere per distinguersi dalla massa della popolazione di C #.
Poiché C # è un argomento vasto, per la facilità di affrontare tutti i concetti, ho diviso questo argomento in tre parti come indicato di seguito:
- Domande sui concetti di base
- Domande su array e stringhe
- Concetti avanzati
Questo articolo include una serie delle 50 principali domande e risposte dell'intervista C # che coprono quasi tutti gli argomenti importanti in termini semplici, al fine di aiutarti a prepararti per l'intervista.
Cosa imparerai:
Domande e risposte ai colloqui di C # più popolari
Concetti basilari
D # 1) Cosa sono un oggetto e una classe?
Risposta: La classe è un incapsulamento di proprietà e metodi utilizzati per rappresentare un'entità in tempo reale. È una struttura dati che riunisce tutte le istanze in un'unica unità.
L'oggetto è definito come un'istanza di una classe. Tecnicamente, è solo un blocco di memoria allocato che può essere memorizzato sotto forma di variabili, array o una raccolta.
D # 2) Quali sono i concetti fondamentali dell'OOP?
Risposta: I quattro concetti fondamentali della programmazione orientata agli oggetti sono:
- Incapsulamento : Qui, la rappresentazione interna di un oggetto è nascosta alla vista al di fuori della definizione dell'oggetto. È possibile accedere solo alle informazioni richieste mentre il resto dell'implementazione dei dati è nascosto.
- Astrazione: È un processo di identificazione del comportamento critico e dei dati di un oggetto ed eliminazione dei dettagli irrilevanti.
- Eredità : È la capacità di creare nuove classi da un'altra classe. Viene fatto accedendo, modificando ed estendendo il comportamento degli oggetti nella classe genitore.
- Polimorfismo : Il nome significa, un nome, molte forme. Si ottiene utilizzando più metodi con lo stesso nome ma differenti implementazioni.
D # 3) Che cos'è il codice gestito e non gestito?
Risposta: Il codice gestito è un codice eseguito da CLR (Common Language Runtime), ovvero tutto il codice dell'applicazione è basato sulla piattaforma .Net. È considerato gestito a causa del framework .Net che utilizza internamente il garbage collector per ripulire la memoria inutilizzata.
Il codice non gestito è qualsiasi codice eseguito dal runtime dell'applicazione di qualsiasi altro framework oltre a .Net. Il runtime dell'applicazione si occuperà della memoria, della sicurezza e di altre operazioni sulle prestazioni.
Q # 4) Cos'è un'interfaccia?
Risposta: L'interfaccia è una classe senza implementazione. L'unica cosa che contiene è la dichiarazione di metodi, proprietà ed eventi.
D # 5) Quali sono i diversi tipi di classi in C #?
Risposta: i diversi tipi di classe in C # sono:
- Classe parziale: Consente ai suoi membri di essere divisi o condivisi con più file .cs. È indicato dalla parola chiave Parziale.
- Classe sigillata: È una classe che non può essere ereditata. Per accedere ai membri di una classe sealed, dobbiamo creare l'oggetto della classe. È indicato dalla parola chiave Sigillato .
- Classe astratta : È una classe il cui oggetto non può essere istanziato. La classe può essere solo ereditata. Dovrebbe contenere almeno un metodo. È indicato dalla parola chiave astratto .
- Classe statica : È una classe che non consente l'ereditarietà. Anche i membri della classe sono statici. È indicato dalla parola chiave statico . Questa parola chiave indica al compilatore di controllare eventuali istanze accidentali della classe statica.
D # 6) Spiegare la compilazione del codice in C #.
Risposta: la compilazione del codice in C # include i quattro passaggi seguenti:
- Compilazione del codice sorgente in codice gestito dal compilatore C #.
- Combinazione del codice appena creato in assembly.
- Caricamento del Common Language Runtime (CLR).
- Esecuzione dell'assembly da CLR.
Q # 7) Quali sono le differenze tra una classe e una struttura?
Risposta: di seguito sono riportate le differenze tra una classe e una struttura:
Classe | Struct |
---|---|
Supporta l'ereditarietà | Non supporta l'ereditarietà |
La classe è Passa per riferimento (tipo di riferimento) | Struct è Passa per copia (tipo di valore) |
I membri sono privati per impostazione predefinita | I membri sono pubblici per impostazione predefinita |
Ottimo per oggetti complessi più grandi | Buono per i modelli piccoli isolati |
Può utilizzare il raccoglitore di rifiuti per la gestione della memoria | Impossibile utilizzare Garbage Collector e quindi nessuna gestione della memoria |
Q # 8) Qual è la differenza tra il metodo Virtual e il metodo Abstract?
Risposta: Il metodo Virtual deve sempre avere un'implementazione predefinita. Tuttavia, può essere sovrascritto nella classe derivata, sebbene non sia obbligatorio. Può essere sovrascritto utilizzando il oltrepassare parola chiave.
Un metodo Abstract non ha un'implementazione. Risiede nella classe astratta. È obbligatorio che la classe derivata implementi il metodo astratto. Un oltrepassare la parola chiave non è necessaria qui sebbene possa essere utilizzata.
D # 9) Spiegare gli spazi dei nomi in C #.
Risposta: Sono usati per organizzare progetti di codice di grandi dimensioni. 'System' è lo spazio dei nomi più utilizzato in C #. Possiamo creare il nostro spazio dei nomi e possiamo anche utilizzare uno spazio dei nomi in un altro, chiamato Spazi dei nomi annidati.
Sono indicati con la parola chiave 'spazio dei nomi'.
D # 10) Che cos'è l'istruzione 'using' in C #?
Risposta: La parola chiave 'Using' denota che il particolare spazio dei nomi è utilizzato dal programma.
Per esempio, utilizzando System
Qui, Sistema è uno spazio dei nomi. La classe Console è definita in System. Quindi, possiamo usare console.writeline ('….') O readline nel nostro programma.
D # 11) Spiega l'astrazione.
Risposta: L'astrazione è uno dei concetti OOP. Viene utilizzato per visualizzare solo le caratteristiche essenziali della classe e nascondere le informazioni non necessarie.
Facciamo un esempio di un'auto:
Un guidatore dell'auto dovrebbe conoscere i dettagli dell'auto come colore, nome, specchietto, sterzo, cambio, freno, ecc. Quello che non deve sapere è un motore interno, un sistema di scarico.
Quindi, l'astrazione aiuta a sapere cosa è necessario ea nascondere i dettagli interni al mondo esterno. L'occultamento delle informazioni interne può essere ottenuto dichiarando tali parametri come Privato utilizzando il privato parola chiave.
D # 12) Spiega il polimorfismo?
Risposta: A livello di codice, polimorfismo indica lo stesso metodo ma implementazioni diverse. È di 2 tipi, Compile-time e Runtime.
- Polimorfismo in fase di compilazione si ottiene sovraccaricando l'operatore.
- Polimorfismo a runtime si ottiene sovrascrivendo. Le funzioni di ereditarietà e virtuali vengono utilizzate durante il polimorfismo di runtime.
Per esempio ,Se una classe ha un metodo Void Add (), il polimorfismo si ottiene sovraccaricando il metodo, ovvero void Add (int a, int b), void Add (int add) sono tutti metodi di overload.
D # 13) Come viene implementata la gestione delle eccezioni in C #?
Risposta: la gestione delle eccezioni viene eseguita utilizzando quattro parole chiave in C #:
- provare : Contiene un blocco di codice per il quale verrà verificata un'eccezione.
- catturare : È un programma che cattura un'eccezione con l'aiuto del gestore delle eccezioni.
- infine : È un blocco di codice scritto per essere eseguito indipendentemente dal fatto che un'eccezione venga rilevata o meno.
- Gettare : Genera un'eccezione quando si verifica un problema.
D # 14) Cosa sono le classi di I / O C #? Quali sono le classi di I / O comunemente utilizzate?
Risposta: C # dispone dello spazio dei nomi System.IO, costituito da classi utilizzate per eseguire varie operazioni sui file come la creazione, l'eliminazione, l'apertura, la chiusura e così via.
Alcune classi di I / O comunemente utilizzate sono:
- File - Aiuta a manipolare un file.
- StreamWriter - Utilizzato per scrivere caratteri in un flusso.
- StreamReader - Utilizzato per leggere i caratteri in un flusso.
- StringWriter - Utilizzato per leggere un buffer di stringa.
- StringReader - Usato per scrivere un buffer di stringhe.
- Sentiero - Utilizzato per eseguire operazioni relative alle informazioni sul percorso.
Q # 15) Cos'è la classe StreamReader / StreamWriter?
Risposta: StreamReader e StreamWriter sono classi dello spazio dei nomi System.IO. Vengono utilizzati quando vogliamo leggere o scrivere charact90, rispettivamente dati basati su Reader.
Alcuni dei membri di StreamReader sono: Chiudi (), Leggi (), Readline ().
I membri di StreamWriter sono: 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-------------------// } }
D # 16) Che cos'è un distruttore in C #?
Risposta: Il distruttore viene utilizzato per ripulire la memoria e liberare le risorse. Ma in C # questo viene fatto dal Garbage Collector da solo. System.GC.Collect () viene chiamato internamente per la pulizia. Ma a volte può essere necessario implementare manualmente i distruttori.
Per esempio:
~Car() { Console.writeline(“….”); }
D # 17) Cos'è una classe astratta?
Risposta: Una classe Abstract è una classe che è indicata dalla parola chiave abstract e può essere utilizzata solo come classe Base. Questa classe dovrebbe essere sempre ereditata. Non è possibile creare un'istanza della classe stessa. Se non vogliamo che alcun programma crei un oggetto di una classe, allora tali classi possono essere rese astratte.
Qualsiasi metodo nella classe astratta non ha implementazioni nella stessa classe. Ma devono essere implementati nella classe figlio.
Per esempio:
abstract class AB1 { Public void Add(); } Class childClass : AB1 { childClass cs = new childClass (); int Sum = cs.Add(); }
Tutti i metodi in una classe astratta sono metodi implicitamente virtuali. Pertanto, la parola chiave virtual non deve essere utilizzata con alcun metodo nella classe astratta.
D # 18) Cosa sono la boxe e l'unboxing?
Risposta: La conversione di un tipo di valore in un tipo di riferimento è chiamata Boxe.
Per esempio:
int Value1 - = 10;
//----Boxe------//
oggetto boxedValue = Value1;
Viene chiamata la conversione esplicita dello stesso tipo di riferimento (creato dal pugilato) al tipo di valore Spacchettamento .
Per esempio:
//----Spacchettamento------//
int UnBoxing = int (boxedValue);
miglior blocco pop-up gratuito per Chrome
D # 19) Qual è la differenza tra Continue e Break Statement?
Risposta: L'istruzione Break interrompe il ciclo. Rende il controllo del programma per uscire dal ciclo. L'istruzione Continue fa sì che il controllo del programma esca solo dall'iterazione corrente. Non interrompe il ciclo.
D # 20) Qual è la differenza tra il blocco finale e quello finale?
Risposta: infine block viene chiamato dopo l'esecuzione di try and catch block. Viene utilizzato per la gestione delle eccezioni. Indipendentemente dal fatto che un'eccezione venga rilevata o meno, questo blocco di codice verrà eseguito. Di solito, questo blocco avrà un codice di pulizia.
Il metodo finalize viene chiamato appena prima della garbage collection. Viene utilizzato per eseguire operazioni di pulizia del codice non gestito. Viene chiamato automaticamente quando una determinata istanza non viene successivamente chiamata.
Array e stringhe
D # 21) Che cos'è un array? Fornire la sintassi per un array singolo e multidimensionale?
Risposta: Un array viene utilizzato per memorizzare più variabili dello stesso tipo. È una raccolta di variabili archiviate in una posizione di memoria contigua.
Per esempio:
numeri doppi = nuovo doppio (10);
punteggio int () = nuovo int (4) {25,24,23,25};
Un array monodimensionale è un array lineare in cui le variabili sono memorizzate in una singola riga. Sopra esempio è un array monodimensionale.
Gli array possono avere più di una dimensione. Gli array multidimensionali sono anche chiamati array rettangolari.
Per esempio , int (,) numeri = new int (3,2) {{1,2}, {2,3}, {3,4}};
D # 22) Cos'è un Jagged Array?
Risposta: Un array Jagged è un array i cui elementi sono array. Viene anche chiamato array di array. Può essere una o più dimensioni.
int () jaggedArray = new int (4) ();
D # 23) Assegna un nome ad alcune proprietà di Array.
Risposta: le proprietà di un array includono:
- Lunghezza: Ottiene il numero totale di elementi in una matrice.
- IsFixedSize: Indica se la dimensione dell'array è fissa o meno.
- IsReadOnly : Indica se l'array è di sola lettura o meno.
D # 24) Che cos'è una classe array?
Risposta: Una classe Array è la classe base per tutti gli array. Fornisce molte proprietà e metodi. È presente nel sistema dello spazio dei nomi.
Q # 25) Cos'è una stringa? Quali sono le proprietà di una classe String?
Risposta: Una stringa è una raccolta di oggetti char. Possiamo anche dichiarare variabili stringa in c #.
nome stringa = 'Domande C #';
Una classe stringa in C # rappresenta una stringa. Le proprietà della classe string sono:
- Chars ottiene l'oggetto Char nella stringa corrente.
- Lunghezza ottiene il numero di oggetti nella stringa corrente.
D # 26) Che cos'è una sequenza di escape? Assegna un nome ad alcune sequenze di escape di stringhe in C #.
Risposta: Una sequenza di escape è indicata da una barra rovesciata (). La barra rovesciata indica che il carattere che lo segue deve essere interpretato letteralmente o è un carattere speciale. Una sequenza di escape è considerata come un singolo carattere.
Le sequenze di escape delle stringhe sono le seguenti:
- n - Carattere di nuova riga
- b - Backspace
- \ - Barra rovesciata
- ’- Virgoletta singola
- ’’ - virgolette doppie
D # 27) Cosa sono le espressioni regolari? Cerchi una stringa usando espressioni regolari?
Risposta: L'espressione regolare è un modello per abbinare un insieme di input. Il modello può essere costituito da operatori, costrutti o caratteri letterali. Regex viene utilizzato per l'analisi delle stringhe e la sostituzione della stringa di caratteri.
Per esempio:
* corrisponde al carattere precedente zero o più volte. Quindi, a * b regex è equivalente a b, ab, aab, aaab e così via.
Ricerca di una stringa utilizzando 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'esempio precedente cerca 'Python' rispetto al set di input dall'array delle lingue. Usa Regex.IsMatch che restituisce true nel caso in cui il modello si trovi nell'input. Il modello può essere qualsiasi espressione regolare che rappresenta l'input a cui vogliamo corrispondere.
D # 28) Quali sono le operazioni di base sulle stringhe? Spiegare.
Risposta: alcune delle operazioni di base sulle stringhe sono:
- Concatenare : Due stringhe possono essere concatenate utilizzando un System.String.Concat o utilizzando l'operatore +.
- Modificare : Sostituisci (a, b) viene utilizzato per sostituire una stringa con un'altra stringa. Trim () viene utilizzato per tagliare la stringa alla fine o all'inizio.
- Confrontare : System.StringComparison () viene utilizzato per confrontare due stringhe, un confronto con distinzione tra maiuscole e minuscole o meno. Principalmente richiede due parametri, stringa originale e stringa da confrontare.
- Ricerca I metodi: StartWith, EndsWith vengono utilizzati per cercare una stringa particolare.
D # 29) Cos'è l'analisi? Come analizzare una stringa di data e ora?
Risposta: L'analisi converte una stringa in un altro tipo di dati.
Per esempio:
stringa di testo = '500';
int num = int.Parse (testo);
500 è un numero intero. Quindi, il metodo Parse converte la stringa 500 nel proprio tipo di base, cioè int.
Segui lo stesso metodo per convertire una stringa DateTime.
string dateTime = 'Jan 1, 2018';
DateTime parsedValue = DateTime.Parse (dateTime);
Concetti avanzati
Q # 30) Che cos'è un delegato? Spiegare.
Risposta: Un delegato è una variabile che contiene il riferimento a un metodo. Quindi è un puntatore a funzione o un tipo di riferimento. Tutti i delegati derivano dallo spazio dei nomi System.Delegate. Sia Delegate che il metodo a cui fa riferimento possono avere la stessa firma.
- Dichiarazione di un delegato: delegato pubblico void AddNumbers (int n);
Dopo la dichiarazione di un delegato, l'oggetto deve essere creato dal delegato utilizzando la nuova parola chiave.
AddNumbers an1 = new AddNumbers (numero);
Il delegato fornisce una sorta di incapsulamento al metodo di riferimento, che verrà chiamato internamente quando viene chiamato un delegato.
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; } }
Nell'esempio precedente, abbiamo un delegato myDel che accetta un valore intero come parametro. Il programma di classe ha un metodo con la stessa firma del delegato, denominato AddNumbers ().
Se è presente un altro metodo chiamato Start () che crea un oggetto del delegato, l'oggetto può essere assegnato a AddNumbers poiché ha la stessa firma di quello del delegato.
D # 31) Cosa sono gli eventi?
Risposta: Gli eventi sono azioni dell'utente che generano notifiche all'applicazione a cui deve rispondere. Le azioni dell'utente possono essere i movimenti del mouse, la pressione dei tasti e così via.
A livello di codice, una classe che genera un evento è chiamata editore e una classe che risponde / riceve l'evento è chiamata sottoscrittore. L'evento dovrebbe avere almeno un sottoscrittore, altrimenti l'evento non viene mai generato.
I delegati vengono utilizzati per dichiarare gli eventi.
Delegato pubblico void PrintNumbers ();
Event PrintNumbers myEvent;
D # 32) Come utilizzare i delegati con eventi?
Risposta: I delegati vengono utilizzati per generare eventi e gestirli. Sempre un delegato deve essere dichiarato prima e poi vengono dichiarati gli eventi.
Vediamo un esempio:
Considera una classe chiamata Paziente. Considera altre due classi, Assicurazione e Banca, che richiedono informazioni sulla morte del paziente dalla classe del paziente. Qui, Assicurazione e Banca sono gli abbonati e la classe Paziente diventa l'editore. Innesca l'evento di morte e le altre due classi dovrebbero ricevere l'evento.
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) Quali sono i diversi tipi di delegati?
Risposta: diversi tipi di delegati sono:
- Unico delegato : Un delegato che può chiamare un singolo metodo.
- Delegato multicast : Un delegato che può chiamare più metodi. Gli operatori + e - vengono utilizzati rispettivamente per iscriversi e annullare l'iscrizione.
- Delegato generico : Non richiede la definizione di un'istanza del delegato. È di tre tipi, Action, Funcs e Predicate.
- Azione - Nell'esempio precedente di delegati ed eventi, è possibile sostituire la definizione di delegato ed evento utilizzando la parola chiave Action. Il delegato Action definisce un metodo che può essere chiamato su argomenti ma non restituisce un risultato
Delegato pubblico void deathInfo ();
Evento pubblico deathInfo deathDate;
// Sostituzione con azione //
Evento pubblico Action deathDate;
L'azione si riferisce implicitamente a un delegato.
-
- funzioni - Un delegato Func definisce un metodo che può essere chiamato su argomenti e restituisce un risultato.
Func myDel è uguale a delegate bool myDel (int a, string b);
-
- Predicato - Definisce un metodo che può essere chiamato su argomenti e restituisce sempre il valore bool.
Predicate myDel è uguale a delegate bool myDel (string s);
Q # 34) Cosa significano i delegati multicast?
Risposta: Un delegato che punta a più di un metodo è chiamato delegato multicast. Il multicasting si ottiene utilizzando gli operatori + e + =.
Considera l'esempio da D # 32.
Ci sono due iscritti per deathEvent, GetPatInfo , e GetDeathDetails . E quindi abbiamo usato l'operatore + =. Significa che ogni volta che il file myDel viene chiamato, entrambi gli abbonati vengono chiamati. I delegati verranno chiamati nell'ordine in cui vengono aggiunti.
D # 35) Spiega editori e iscritti negli eventi.
Risposta: Publisher è una classe responsabile della pubblicazione di un messaggio di diversi tipi di altre classi. Il messaggio non è altro che Evento come discusso nelle domande precedenti.
Dal Esempio in Q # 32, Class Patient è la classe Publisher. Sta generando un Evento deathEvent , che viene ricevuto dalle altre classi.
Gli abbonati acquisiscono il messaggio del tipo a cui sono interessati. Di nuovo, dal file Esempio di Q # 32, Class Insurance e Bank sono abbonati. Sono interessati all'evento deathEvent di tipo vuoto .
D # 36) Cosa sono le operazioni sincrone e asincrone?
Risposta: La sincronizzazione è un modo per creare un codice thread-safe in cui solo un thread può accedere alla risorsa in un dato momento. La chiamata asincrona attende il completamento del metodo prima di continuare con il flusso del programma.
La programmazione sincrona influisce negativamente sulle operazioni dell'interfaccia utente quando l'utente tenta di eseguire operazioni che richiedono molto tempo poiché verrà utilizzato un solo thread. Nell'operazione asincrona, la chiamata al metodo verrà immediatamente restituita in modo che il programma possa eseguire altre operazioni mentre il metodo chiamato completa il suo lavoro in determinate situazioni.
In C #, le parole chiave Async e Await vengono utilizzate per ottenere la programmazione asincrona. Guarda Q # 43 per maggiori dettagli sulla programmazione sincrona.
D # 37) Che cos'è la riflessione in C #?
Risposta: La riflessione è la capacità di un codice di accedere ai metadati dell'assembly durante il runtime. Un programma riflette su se stesso e utilizza i metadati per informare l'utente o modificarne il comportamento. I metadati si riferiscono alle informazioni su oggetti, metodi.
Lo spazio dei nomi System.Reflection contiene metodi e classi che gestiscono le informazioni di tutti i tipi e metodi caricati. Viene utilizzato principalmente per applicazioni Windows, Per esempio , per visualizzare le proprietà di un pulsante in un windows form.
L'oggetto MemberInfo della riflessione di classe viene utilizzato per rilevare gli attributi associati a una classe.
La riflessione viene implementata in due passaggi, prima otteniamo il tipo di oggetto e quindi utilizziamo il tipo per identificare membri come metodi e proprietà.
Per ottenere il tipo di una classe, possiamo semplicemente usare,
Digitare mytype = myClass.GetType ();
Una volta che abbiamo un tipo di classe, è possibile accedere facilmente alle altre informazioni sulla classe.
System.Reflection.MemberInfo Info = mytype.GetMethod ('AddNumbers');
L'istruzione sopra cerca di trovare un metodo con il nome AddNumbers in classe la mia classe .
Q # 38) Che cos'è una classe generica?
Risposta: La classe Generics o Generic viene utilizzata per creare classi o oggetti che non hanno alcun tipo di dati specifico. Il tipo di dati può essere assegnato durante il runtime, cioè quando viene utilizzato nel programma.
Per esempio:
Quindi, dal codice sopra, vediamo inizialmente 2 metodi di confronto, per confrontare string e int.
In caso di altri confronti di parametri di tipo di dati, invece di creare molti metodi sovraccaricati, possiamo creare una classe generica e passare un tipo di dati sostitutivo, ad esempio T. Quindi, T agisce come un tipo di dati finché non viene utilizzato specificamente nel metodo Main () .
D # 39) Spiegare le proprietà Get and Set Accessor?
Risposta: Get e Set sono chiamati Accessors. Questi sono utilizzati da Proprietà. La proprietà fornisce un meccanismo per leggere, scrivere il valore di un campo privato. Per accedere a quel campo privato, vengono utilizzate queste funzioni di accesso.
Ottieni proprietà viene utilizzato per restituire il valore di una proprietà
La funzione di accesso Imposta proprietà viene utilizzata per impostare il valore.
L'utilizzo di get and set è il seguente:
Q # 40) Cos'è un thread? Cos'è il multithreading?
Risposta: Un thread è un insieme di istruzioni che possono essere eseguite, che consentiranno al nostro programma di eseguire elaborazioni simultanee. L'elaborazione simultanea ci aiuta a eseguire più di un'operazione alla volta. Per impostazione predefinita, C # ha un solo thread. Ma gli altri thread possono essere creati per eseguire il codice in parallelo con il thread originale.
Il filo ha un ciclo di vita. Inizia ogni volta che viene creata una classe di thread e termina dopo l'esecuzione. System.Threading è lo spazio dei nomi che deve essere incluso per creare thread e utilizzare i suoi membri.
I thread vengono creati estendendo la classe Thread. Inizio() metodo viene utilizzato per iniziare l'esecuzione del thread.
//CallThread is the target method// ThreadStart methodThread = new ThreadStart(CallThread); Thread childThread = new Thread(methodThread); childThread.Start();
C # può eseguire più di un'attività alla volta. Questo viene fatto gestendo diversi processi da diversi thread. Questo si chiama MultiThreading.
Esistono diversi metodi di thread utilizzati per gestire le operazioni multi-thread:
Avvia, dormi, interrompi, sospendi, riprendi e partecipa.
La maggior parte di questi metodi è autoesplicativa.
Q # 41) Assegna un nome ad alcune proprietà della classe Thread.
Risposta: Poche proprietà della classe thread sono:
- È vivo - contiene il valore True quando un thread è attivo.
- Nome - Può restituire il nome del thread. Inoltre, può impostare un nome per il thread.
- Priorità - restituisce il valore prioritario dell'attività impostata dal sistema operativo.
- IsBackground - ottiene o imposta un valore che indica se un thread deve essere un processo in background o in primo piano.
- ThreadState - descrive lo stato del thread.
Q # 42) Quali sono i diversi stati di un thread?
Risposta: diversi stati di un thread sono:
- Non avviato - Viene creato il thread.
- In esecuzione - Il thread avvia l'esecuzione.
- WaitSleepJoin - Il thread chiama sleep, chiama wait su un altro oggetto e chiama join su un altro thread.
- Sospeso - Il thread è stato sospeso.
- Abortito - Il thread è morto ma non è cambiato in stato interrotto.
- Fermato - Il thread si è interrotto.
Q # 43) Cosa sono Async e Await?
Risposta: Le parole chiave Async e Await vengono utilizzate per creare metodi asincroni in C.
La programmazione asincrona significa che il processo viene eseguito indipendentemente dai processi principali o da altri.
L'utilizzo di Async e Await è come mostrato di seguito:
- La parola chiave asincrona viene utilizzata per la dichiarazione del metodo.
- Il conteggio è di un'attività di tipo int che chiama il metodo CalculateCount ().
- Calculatecount () avvia l'esecuzione e calcola qualcosa.
- Il lavoro indipendente viene svolto sul mio thread e quindi viene raggiunta l'istruzione di count.
- Se il Calculatecount non è terminato, myMethod tornerà al metodo chiamante, quindi il thread principale non viene bloccato.
- Se il Calculatecount è già terminato, abbiamo il risultato disponibile quando il controllo raggiunge il conteggio in attesa. Quindi il passaggio successivo continuerà nello stesso thread. Tuttavia, non è la situazione nel caso precedente in cui è coinvolto il ritardo di 1 secondo.
D # 44) Cos'è un deadlock?
Risposta: Un deadlock è una situazione in cui un processo non è in grado di completare la sua esecuzione perché due o più processi sono in attesa del termine dell'altro. Questo di solito si verifica nel multi-threading.
Qui una risorsa condivisa è trattenuta da un processo e un altro processo è in attesa che il primo processo la rilasci e il thread che contiene l'elemento bloccato è in attesa del completamento di un altro processo.
Considera l'esempio seguente:
- Esegui attività accede a objB e attende 1 secondo.
- Nel frattempo, PerformtaskB tenta di accedere a ObjA.
- Dopo 1 secondo, PeformtaskA tenta di accedere a ObjA che è bloccato da PerformtaskB.
- PerformtaskB tenta di accedere a ObjB che è bloccato da PerformtaskA.
Questo crea Deadlock.
Q # 45) Spiega L ock , Monitor , e Mutex Oggetto in Threading.
Risposta: La parola chiave Lock garantisce che un solo thread possa accedere a una particolare sezione del codice in un dato momento. In quanto sopra Esempio , lock (ObjA) significa che il lock viene posizionato su ObjA fino a quando questo processo non lo rilascia, nessun altro thread può accedere a ObjA.
Anche Mutex è come un lucchetto, ma può funzionare su più processi contemporaneamente. WaitOne () viene utilizzato per bloccare e ReleaseMutex () viene utilizzato per rilasciare il blocco. Ma Mutex è più lento del blocco in quanto richiede tempo per acquisirlo e rilasciarlo.
Monitor.Enter e Monitor.Exit implementano il blocco internamente. un lucchetto è una scorciatoia per i monitor. lock (objA) chiama internamente.
Monitor.Enter(ObjA); try { } Finally {Monitor.Exit(ObjA));}
Q # 46) Cos'è una Race Condition?
Anni: La condizione di competizione si verifica quando due thread accedono alla stessa risorsa e cercano di modificarla contemporaneamente. Il thread che sarà in grado di accedere per primo alla risorsa non può essere previsto.
Loadrunner intervista domande e risposte per esperti
Se abbiamo due thread, T1 e T2, e stanno cercando di accedere a una risorsa condivisa chiamata X. E se entrambi i thread tentano di scrivere un valore su X, l'ultimo valore scritto su X verrà salvato.
Q # 47) Cos'è il pool di thread?
Anni: Il pool di thread è una raccolta di thread. Questi thread possono essere utilizzati per eseguire attività senza disturbare il thread principale. Una volta che il thread completa l'attività, il thread ritorna al pool.
Lo spazio dei nomi System.Threading.ThreadPool dispone di classi che gestiscono i thread nel pool e le relative operazioni.
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(SomeTask));
La riga precedente mette in coda un'attività. Alcuni metodiTask dovrebbero avere un parametro di tipo Object.
D # 48) Che cos'è la serializzazione?
Risposta: La serializzazione è un processo di conversione del codice nel suo formato binario. Una volta convertito in byte, può essere facilmente memorizzato e scritto su un disco o su qualsiasi dispositivo di archiviazione simile. Le serializzazioni sono utili principalmente quando non si vuole perdere la forma originale del codice e può essere recuperato in qualsiasi momento in futuro.
Qualsiasi classe contrassegnata con l'attributo (Serializable) verrà convertita nella sua forma binaria.
Il processo inverso per recuperare il codice C # dal formato binario è chiamato deserializzazione.
Per serializzare un oggetto è necessario che l'oggetto da serializzare, un flusso che possa contenere l'oggetto serializzato e lo spazio dei nomi System.Runtime.Serialization può contenere classi per la serializzazione.
D # 49) Quali sono i tipi di serializzazione?
Risposta: i diversi tipi di serializzazione sono:
- Serializzazione XML - Serializza tutte le proprietà pubbliche nel documento XML. Poiché i dati sono in formato XML, possono essere facilmente letti e manipolati in vari formati. Le classi risiedono in System.sml.Serialization.
- SAPONE - Le classi risiedono in System.Runtime.Serialization. Simile a XML ma produce una busta completa conforme a SOAP che può essere utilizzata da qualsiasi sistema che comprende SOAP.
- Serializzazione binaria - Consente a qualsiasi codice di essere convertito nella sua forma binaria. Può serializzare e ripristinare proprietà pubbliche e non pubbliche. È più veloce e occupa meno spazio.
Q # 50) Che cos'è un file XSD?
Risposta: Un file XSD sta per XML Schema Definition. Fornisce una struttura per il file XML. Significa che decide gli elementi che l'XML dovrebbe avere e in quale ordine e quali proprietà dovrebbero essere presenti. Senza un file XSD associato a XML, l'XML può avere qualsiasi tag, qualsiasi attributo e qualsiasi elemento.
Lo strumento Xsd.exe converte i file nel formato XSD. Durante la serializzazione del codice C #, le classi vengono convertite nel formato compatibile con XSD da xsd.exe.
Conclusione
C # sta crescendo rapidamente giorno dopo giorno e svolge un ruolo importante nel settore del test del software.
Sono sicuro che questo articolo renderà la tua preparazione per il colloquio molto più semplice e ti darà una discreta conoscenza della maggior parte degli argomenti di C #.
Spero che tu sia pronto ad affrontare con sicurezza qualsiasi intervista in C # !!
Lettura consigliata
- Domande e risposte dell'intervista
- Domande e risposte al colloquio di prova ETL
- Le 50 domande e risposte dell'intervista CCNA più popolari
- Le 51 principali domande e risposte dell'intervista Bootstrap
- Top 20+ .NET Intervista Domande e risposte
- Top 50+ domande e risposte ai colloqui di database
- Alcune domande e risposte sui test manuali complicati
- 25 migliori domande e risposte per l'intervista al test agile