top 50 c interview questions with answers
Questions d'entretien de base C # fréquemment posées sur la programmation et le codage:
C # est un langage de programmation qui s'est développé rapidement et est également largement utilisé. Il est très demandé, polyvalent et prend également en charge plusieurs plates-formes.
Il n'est pas seulement utilisé pour Windows mais pour de nombreux autres systèmes d'exploitation. Par conséquent, il est très important d'avoir une bonne compréhension de cette langue pour décrocher un emploi dans l'industrie des tests de logiciels.
Vous trouverez ci-dessous non seulement un ensemble de questions les plus fréquemment posées sur C #, mais également des sujets très importants à comprendre pour se démarquer de la foule de la population C #.
Comme C # est un vaste sujet, pour faciliter la prise en compte de tous les concepts, j'ai divisé ce sujet en trois parties, comme indiqué ci-dessous:
- Questions sur les concepts de base
- Questions sur les tableaux et les chaînes
- Concepts avancés
Cet article comprend un ensemble des 50 principales questions et réponses d'entrevue C # couvrant presque tous ses sujets importants en termes simples, afin de vous aider à préparer votre entretien.
Ce que vous apprendrez:
Questions et réponses d'entrevue C # les plus populaires
Concepts de base
Q # 1) Qu'est-ce qu'un objet et une classe?
Répondre: La classe est une encapsulation de propriétés et de méthodes utilisées pour représenter une entité en temps réel. C'est une structure de données qui rassemble toutes les instances dans une seule unité.
L'objet est défini comme une instance d'une classe. Techniquement, c'est juste un bloc de mémoire alloué qui peut être stocké sous forme de variables, de tableau ou d'une collection.
Q # 2) Quels sont les concepts fondamentaux de la POO?
Réponse: Les quatre concepts fondamentaux de la programmation orientée objet sont:
- Encapsulation : Ici, la représentation interne d'un objet est masquée de la vue en dehors de la définition de l'objet. Seules les informations requises sont accessibles tandis que le reste de l'implémentation des données est masqué.
- Abstraction: Il s'agit d'un processus d'identification du comportement et des données critiques d'un objet et d'élimination des détails non pertinents.
- Héritage : C'est la possibilité de créer de nouvelles classes à partir d'une autre classe. Cela se fait en accédant, modifiant et étendant le comportement des objets de la classe parent.
- Polymorphisme : Le nom signifie, un nom, plusieurs formes. Il est réalisé en ayant plusieurs méthodes avec le même nom mais des implémentations différentes.
Q # 3) Qu'est-ce que le code géré et non géré?
Répondre: Le code géré est un code exécuté par CLR (Common Language Runtime), c'est-à-dire que tout le code d'application est basé sur la plate-forme .Net. Il est considéré comme géré en raison du framework .Net qui utilise en interne le garbage collector pour effacer la mémoire inutilisée.
Le code non managé est tout code exécuté par le runtime d'application de tout autre framework en dehors de .Net. Le runtime de l'application se chargera de la mémoire, de la sécurité et d'autres opérations de performances.
Q # 4) Qu'est-ce qu'une interface?
Répondre: Interface est une classe sans implémentation. La seule chose qu'il contient est la déclaration des méthodes, des propriétés et des événements.
Q # 5) Quels sont les différents types de classes en C #?
Réponse: Les différents types de classe en C # sont:
- Classe partielle: Il permet à ses membres d'être divisés ou partagés avec plusieurs fichiers .cs. Il est désigné par le mot-clé Partiel.
- Classe scellée: C'est une classe qui ne peut pas être héritée. Pour accéder aux membres d'une classe scellée, nous devons créer l'objet de la classe. Il est désigné par le mot-clé Scellé .
- Classe abstraite : C'est une classe dont l'objet ne peut pas être instancié. La classe ne peut être héritée que. Il doit contenir au moins une méthode. Il est désigné par le mot-clé abstrait .
- Classe statique : C'est une classe qui n'autorise pas l'héritage. Les membres de la classe sont également statiques. Il est désigné par le mot-clé statique . Ce mot clé indique au compilateur de rechercher toutes les instances accidentelles de la classe statique.
Q # 6) Expliquez la compilation de code en C #.
Réponse: La compilation de code en C # comprend les quatre étapes suivantes:
- Compilation du code source en code managé par le compilateur C #.
- Combiner le code nouvellement créé dans des assemblys.
- Chargement du Common Language Runtime (CLR).
- Exécution de l'assemblage par CLR.
Q # 7) Quelles sont les différences entre une classe et une structure?
Réponse: Voici les différences entre une classe et une structure:
Classer | Struct |
---|---|
Prend en charge l'héritage | Ne prend pas en charge l'héritage |
La classe est Pass by reference (type de référence) | Struct est Pass by Copy (type valeur) |
Les membres sont privés par défaut | Les membres sont publics par défaut |
Convient aux objets complexes plus volumineux | Convient aux petits modèles isolés |
Peut utiliser un collecteur de déchets pour la gestion de la mémoire | Impossible d'utiliser le garbage collector et donc pas de gestion de la mémoire |
Q # 8) Quelle est la différence entre la méthode virtuelle et la méthode abstraite?
Répondre: La méthode virtuelle doit toujours avoir une implémentation par défaut. Cependant, il peut être remplacé dans la classe dérivée, bien que ce ne soit pas obligatoire. Il peut être remplacé à l'aide du passer outre mot-clé.
Une méthode abstraite n'a pas d'implémentation. Il réside dans la classe abstraite. Il est obligatoire que la classe dérivée implémente la méthode abstraite. Une passer outre Le mot-clé n'est pas nécessaire ici bien qu'il puisse être utilisé.
Q # 9) Expliquez les espaces de noms en C #.
Répondre: Ils sont utilisés pour organiser de grands projets de code. «System» est l'espace de noms le plus utilisé en C #. Nous pouvons créer notre propre espace de noms et également utiliser un espace de noms dans un autre, appelé Espaces de noms imbriqués.
Ils sont désignés par le mot clé «namespace».
Q # 10) Qu'est-ce que l'instruction «using» en C #?
Répondre: Le mot-clé «Using» indique que l'espace de noms particulier est utilisé par le programme.
Par exemple, en utilisant le système
Ici, Système est un espace de noms. La classe Console est définie sous System. Ainsi, nous pouvons utiliser la console.writeline («….») Ou readline dans notre programme.
Q # 11) Expliquez l'abstraction.
Répondre: L'abstraction est l'un des concepts de la POO. Il est utilisé pour afficher uniquement les fonctionnalités essentielles de la classe et masquer les informations inutiles.
Prenons un exemple de voiture:
Un conducteur de voiture doit connaître les détails de la voiture tels que la couleur, le nom, le rétroviseur, la direction, la vitesse, les freins, etc. Ce qu’il n’a pas à savoir, c’est un moteur interne, un système d’échappement.
Ainsi, l'abstraction aide à savoir ce qui est nécessaire et à cacher les détails internes du monde extérieur. Le masquage des informations internes peut être obtenu en déclarant des paramètres comme Privé en utilisant le privé mot-clé.
Q # 12) Expliquez le polymorphisme?
Répondre: Par programme, le polymorphisme signifie la même méthode mais des implémentations différentes. Il est de 2 types, à la compilation et à l'exécution.
- Polymorphisme à la compilation est obtenu par surcharge de l'opérateur.
- Polymorphisme d'exécution est obtenu en remplaçant. Les fonctions d'héritage et virtuelles sont utilisées pendant le polymorphisme d'exécution.
Par exemple ,Si une classe a une méthode Void Add (), le polymorphisme est obtenu en surchargeant la méthode, c'est-à-dire que void Add (int a, int b), void Add (int add) sont toutes des méthodes surchargées.
Q # 13) Comment la gestion des exceptions est-elle implémentée en C #?
Réponse: La gestion des exceptions est effectuée à l'aide de quatre mots clés en C #:
- essayer : Contient un bloc de code pour lequel une exception sera vérifiée.
- capture : C'est un programme qui intercepte une exception à l'aide du gestionnaire d'exceptions.
- finalement : C'est un bloc de code écrit pour s'exécuter indépendamment du fait qu'une exception soit interceptée ou non.
- Lancer : Lève une exception lorsqu'un problème survient.
Q # 14) Que sont les classes d'E / S C #? Quelles sont les classes d'E / S couramment utilisées?
Répondre: C # a un espace de noms System.IO, composé de classes utilisées pour effectuer diverses opérations sur des fichiers telles que la création, la suppression, l'ouverture, la fermeture, etc.
Certaines classes d'E / S couramment utilisées sont:
- Déposer - Aide à manipuler un fichier.
- StreamWriter - Utilisé pour écrire des caractères dans un flux.
- StreamReader - Utilisé pour lire des caractères dans un flux.
- StringWriter - Utilisé pour lire un tampon de chaîne.
- StringReader - Utilisé pour écrire un tampon de chaîne.
- Chemin - Utilisé pour effectuer des opérations liées aux informations de chemin.
Q # 15) Qu'est-ce que la classe StreamReader / StreamWriter?
Répondre: StreamReader et StreamWriter sont des classes d'espace de noms System.IO. Ils sont utilisés lorsque nous voulons lire ou écrire charact90, des données basées sur Reader, respectivement.
Certains des membres de StreamReader sont: Fermer (), Lire (), Readline ().
Les membres de StreamWriter sont: Fermer (), Écrire (), 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) Qu'est-ce qu'un destructeur en C #?
Répondre: Destructor est utilisé pour nettoyer la mémoire et libérer les ressources. Mais en C #, cela est fait par le garbage collector seul. System.GC.Collect () est appelé en interne pour le nettoyage. Mais parfois, il peut être nécessaire d'implémenter les destructeurs manuellement.
Par exemple:
~Car() { Console.writeline(“….”); }
Q # 17) Qu'est-ce qu'une classe abstraite?
Répondre: Une classe abstraite est une classe qui est désignée par un mot-clé abstrait et qui ne peut être utilisée que comme classe de base. Cette classe doit toujours être héritée. Une instance de la classe elle-même ne peut pas être créée. Si nous ne voulons pas qu'un programme crée un objet d'une classe, alors ces classes peuvent être rendues abstraites.
Toute méthode de la classe abstraite n'a pas d'implémentations dans la même classe. Mais ils doivent être implémentés dans la classe enfant.
Par exemple:
abstract class AB1 { Public void Add(); } Class childClass : AB1 { childClass cs = new childClass (); int Sum = cs.Add(); }
Toutes les méthodes d'une classe abstraite sont implicitement des méthodes virtuelles. Par conséquent, le mot clé virtual ne doit être utilisé avec aucune méthode de la classe abstraite.
Q # 18) Que sont la boxe et le déballage?
Répondre: La conversion d'un type valeur en type référence s'appelle Boxing.
Par exemple:
int Valeur1 - = 10;
//----Boxe------//
object boxedValue = Value1;
La conversion explicite du même type de référence (créée par boxing) en type valeur est appelée Déballage .
Par exemple:
//----Déballage------//
int UnBoxing = int (boxedValue);
comment testeriez-vous un stylo
Q # 19) Quelle est la différence entre l'instruction Continue et Break?
Répondre: L'instruction Break rompt la boucle. Il fait le contrôle du programme pour sortir de la boucle. L'instruction Continue permet au programme de ne quitter que l'itération en cours. Cela ne rompt pas la boucle.
Q # 20) Quelle est la différence entre le bloc finally et finalize?
Répondre: finalement block est appelé après l'exécution du bloc try and catch. Il est utilisé pour la gestion des exceptions. Indépendamment du fait qu'une exception soit interceptée ou non, ce bloc de code sera exécuté. Habituellement, ce bloc aura un code de nettoyage.
La méthode finalize est appelée juste avant le garbage collection. Il est utilisé pour effectuer des opérations de nettoyage du code non managé. Il est automatiquement appelé lorsqu'une instance donnée n'est pas appelée ultérieurement.
Tableaux et chaînes
Q # 21) Qu'est-ce qu'un tableau? Donnez la syntaxe d'un tableau unique et multidimensionnel?
Répondre: Un tableau est utilisé pour stocker plusieurs variables du même type. Il s'agit d'un ensemble de variables stockées dans un emplacement mémoire contigu.
Par exemple:
nombres doubles = nouveau double (10);
int () score = new int (4) {25,24,23,25};
Un tableau unidimensionnel est un tableau linéaire dans lequel les variables sont stockées sur une seule ligne. Au dessus Exemple est un tableau unidimensionnel.
Les tableaux peuvent avoir plusieurs dimensions. Les tableaux multidimensionnels sont également appelés tableaux rectangulaires.
Par exemple , int (,) nombres = new int (3,2) {{1,2}, {2,3}, {3,4}};
Q # 22) Qu'est-ce qu'une matrice dentelée?
Répondre: Un tableau Jagged est un tableau dont les éléments sont des tableaux. Il est également appelé tableau de tableaux. Il peut s'agir de dimensions simples ou multiples.
int () jaggedArray = new int (4) ();
Q # 23) Nommez certaines propriétés de Array.
Réponse: Les propriétés d'un tableau incluent:
- Longueur: Obtient le nombre total d'éléments dans un tableau.
- IsFixedSize: Indique si le tableau est de taille fixe ou non.
- IsReadOnly : Indique si le tableau est en lecture seule ou non.
Q # 24) Qu'est-ce qu'une classe Array?
Répondre: Une classe Array est la classe de base de tous les tableaux. Il fournit de nombreuses propriétés et méthodes. Il est présent dans le système d'espaces de noms.
Q # 25) Qu'est-ce qu'une chaîne? Quelles sont les propriétés d'une classe String?
Répondre: Un String est une collection d'objets char. Nous pouvons également déclarer des variables de chaîne en c #.
string name = 'Questions C #';
Une classe de chaîne en C # représente une chaîne. Les propriétés de la classe de chaînes sont:
- Caractères obtenir l'objet Char dans la chaîne actuelle.
- Longueur obtient le nombre d'objets dans la chaîne actuelle.
Q # 26) Qu'est-ce qu'une séquence d'échappement? Nommez des séquences d'échappement String en C #.
Répondre: Une séquence d'échappement est indiquée par une barre oblique inverse (). La barre oblique inverse indique que le caractère qui le suit doit être interprété littéralement ou qu'il s'agit d'un caractère spécial. Une séquence d'échappement est considérée comme un caractère unique.
Les séquences d'échappement de chaîne sont les suivantes:
- n - Caractère de nouvelle ligne
- b - Retour arrière
- \ - Barre oblique inverse
- ' - Simple citation
- '' - Double citation
Q # 27) Que sont les expressions régulières? Rechercher une chaîne à l'aide d'expressions régulières?
Répondre: L'expression régulière est un modèle correspondant à un ensemble d'entrées. Le modèle peut être composé d'opérateurs, de constructions ou de littéraux de caractères. Regex est utilisé pour analyser la chaîne et remplacer la chaîne de caractères.
Par exemple:
* correspond au caractère précédent zéro ou plusieurs fois. Ainsi, a * b regex équivaut à b, ab, aab, aaab et ainsi de suite.
Recherche d'une chaîne à l'aide de 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 ci-dessus recherche «Python» par rapport à l'ensemble des entrées du tableau des langues. Il utilise Regex.IsMatch qui retourne true au cas où le modèle serait trouvé dans l'entrée. Le modèle peut être n'importe quelle expression régulière représentant l'entrée à laquelle nous voulons faire correspondre.
Q # 28) Quelles sont les opérations de base sur les chaînes? Expliquer.
Réponse: Certaines des opérations de base sur les chaînes sont:
- Enchaîner : Deux chaînes peuvent être concaténées en utilisant un System.String.Concat ou en utilisant l'opérateur +.
- Modifier : Replace (a, b) est utilisé pour remplacer une chaîne par une autre chaîne. Trim () est utilisé pour couper la chaîne à la fin ou au début.
- Comparer : System.StringComparison () est utilisé pour comparer deux chaînes, soit une comparaison sensible à la casse, soit non sensible à la casse. Prend principalement deux paramètres, la chaîne d'origine et la chaîne à comparer.
- Chercher : Les méthodes StartWith, EndsWith sont utilisées pour rechercher une chaîne particulière.
Q # 29) Qu'est-ce que l'analyse? Comment analyser une chaîne de date et d'heure?
Répondre: L'analyse convertit une chaîne en un autre type de données.
Par exemple:
texte de chaîne = '500';
int num = int.Parse (texte);
500 est un entier. Ainsi, la méthode Parse convertit la chaîne 500 en son propre type de base, c'est-à-dire int.
Suivez la même méthode pour convertir une chaîne DateTime.
string dateTime = '1er janvier 2018';
DateTime parsedValue = DateTime.Parse (dateTime);
Concepts avancés
Q # 30) Qu'est-ce qu'un délégué? Expliquer.
Répondre: Un Delegate est une variable qui contient la référence à une méthode. Il s'agit donc d'un pointeur de fonction ou d'un type de référence. Tous les délégués sont dérivés de l'espace de noms System.Delegate. Le délégué et la méthode à laquelle il fait référence peuvent avoir la même signature.
- Déclarer un délégué: délégué public void AddNumbers (int n);
Après la déclaration d'un délégué, l'objet doit être créé par le délégué à l'aide du mot clé new.
AddNumbers an1 = new AddNumbers (nombre);
Le délégué fournit une sorte d'encapsulation à la méthode de référence, qui sera appelée en interne lorsqu'un délégué est appelé.
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; } }
Dans l'exemple ci-dessus, nous avons un délégué myDel qui prend une valeur entière comme paramètre. Le programme de classe a une méthode de la même signature que le délégué, appelée AddNumbers ().
S'il existe une autre méthode appelée Start () qui crée un objet du délégué, alors l'objet peut être affecté à AddNumbers car il a la même signature que celle du délégué.
Q # 31) Que sont les événements?
Répondre: Les événements sont des actions de l'utilisateur qui génèrent des notifications à l'application à laquelle il doit répondre. Les actions de l'utilisateur peuvent être des mouvements de souris, une pression sur une touche, etc.
Par programme, une classe qui déclenche un événement est appelée un éditeur et une classe qui répond / reçoit l'événement est appelée un abonné. L'événement doit avoir au moins un abonné sinon cet événement n'est jamais déclenché.
Les délégués sont utilisés pour déclarer des événements.
Délégué public void PrintNumbers ();
Event PrintNumbers myEvent;
Q # 32) Comment utiliser les délégués avec des événements?
Répondre: Les délégués sont utilisés pour déclencher des événements et les gérer. Un délégué doit toujours être déclaré en premier, puis les événements sont déclarés.
Voyons un exemple:
Pensez à une classe appelée Patient. Considérez deux autres classes, assurance et banque, qui nécessitent des informations sur le décès du patient de la classe du patient. Ici, l'Assurance et la Banque sont les abonnés et la classe Patient devient l'éditeur. Il déclenche l'événement de mort et les deux autres classes devraient recevoir l'événement.
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) Quels sont les différents types de délégués?
Réponse: Les différents types de délégués sont:
- Délégué unique : Un délégué qui peut appeler une seule méthode.
- Délégué de multidiffusion : Un délégué qui peut appeler plusieurs méthodes. Les opérateurs + et - sont respectivement utilisés pour s'abonner et se désabonner.
- Délégué générique : Il ne nécessite pas la définition d'une instance du délégué. Il est de trois types, Action, Funcs et Predicate.
- action - Dans l'exemple ci-dessus de délégués et d'événements, nous pouvons remplacer la définition de délégué et d'événement à l'aide du mot clé Action. Le délégué Action définit une méthode qui peut être appelée sur des arguments mais ne renvoie pas de résultat
Délégué public void deathInfo ();
Événement public deathInfo deathDate;
// Remplacement par une action //
Événement public Action deathDate;
Action fait implicitement référence à un délégué.
-
- les fonctions - Un délégué Func définit une méthode qui peut être appelée sur des arguments et renvoie un résultat.
Func myDel est le même que delegate bool myDel (int a, string b);
-
- Prédicat - Définit une méthode qui peut être appelée sur des arguments et renvoie toujours le booléen.
Prédicat myDel est le même que delegate bool myDel (string s);
Q # 34) Que signifient les délégués multicast?
Répondre: Un délégué qui pointe vers plusieurs méthodes est appelé un délégué de multidiffusion. La multidiffusion est obtenue en utilisant les opérateurs + et + =.
Prenons l'exemple de la Q # 32.
Il y a deux abonnés pour deathEvent, GetPatInfo , et GetDeathDetails . Et par conséquent, nous avons utilisé l'opérateur + =. Cela signifie chaque fois que le myDel est appelé, les deux abonnés sont appelés. Les délégués seront appelés dans l'ordre dans lequel ils sont ajoutés.
Q # 35) Expliquez les éditeurs et les abonnés dans les événements.
Répondre: Publisher est une classe chargée de publier un message de différents types d'autres classes. Le message n'est rien d'autre qu'un événement comme discuté dans les questions ci-dessus.
Du Exemple dans Q # 32, Classe Patient est la classe Publisher. Il génère un événement deathEvent , qui est reçu par les autres classes.
Les abonnés capturent le message du type qui l'intéresse. Là encore, à partir du Exemple de Q # 32, l'Assurance collective et la Banque sont des souscripteurs. Ils sont intéressés par l'événement deathEvent de type annuler .
Q # 36) Que sont les opérations synchrones et asynchrones?
Répondre: La synchronisation est un moyen de créer un code thread-safe où un seul thread peut accéder à la ressource à un moment donné. L'appel asynchrone attend que la méthode se termine avant de poursuivre le déroulement du programme.
La programmation synchrone affecte gravement les opérations de l'interface utilisateur lorsque l'utilisateur tente d'effectuer des opérations chronophages car un seul thread sera utilisé. En fonctionnement asynchrone, l'appel de méthode sera immédiatement renvoyé afin que le programme puisse effectuer d'autres opérations pendant que la méthode appelée termine son travail dans certaines situations.
En C #, les mots clés Async et Await sont utilisés pour réaliser une programmation asynchrone. Regardez Q # 43 pour plus de détails sur la programmation synchrone.
Q # 37) Qu'est-ce que la réflexion en C #?
Répondre: La réflexion est la capacité d'un code à accéder aux métadonnées de l'assembly pendant l'exécution. Un programme réfléchit sur lui-même et utilise les métadonnées pour informer l'utilisateur ou modifier son comportement. Les métadonnées font référence aux informations sur les objets, les méthodes.
L'espace de noms System.Reflection contient des méthodes et des classes qui gèrent les informations de tous les types et méthodes chargés. Il est principalement utilisé pour les applications Windows, Par exemple , pour afficher les propriétés d'un bouton dans un formulaire Windows.
L'objet MemberInfo de la réflexion de classe est utilisé pour découvrir les attributs associés à une classe.
La réflexion est implémentée en deux étapes, d'abord, nous obtenons le type de l'objet, puis nous utilisons le type pour identifier les membres tels que les méthodes et les propriétés.
Pour obtenir le type d'une classe, nous pouvons simplement utiliser,
Tapez mytype = myClass.GetType ();
Une fois que nous avons un type de classe, les autres informations sur la classe sont facilement accessibles.
System.Reflection.MemberInfo Info = mytype.GetMethod («AddNumbers»);
L'instruction ci-dessus essaie de trouver une méthode avec un nom Ajouter des numéros dans la classe Ma classe .
Q # 38) Qu'est-ce qu'une classe générique?
Répondre: Les classes génériques ou génériques permettent de créer des classes ou des objets qui n'ont aucun type de données spécifique. Le type de données peut être attribué pendant l'exécution, c'est-à-dire lorsqu'il est utilisé dans le programme.
Par exemple:
Ainsi, à partir du code ci-dessus, nous voyons 2 méthodes de comparaison au départ, pour comparer string et int.
Dans le cas d'autres comparaisons de paramètres de type de données, au lieu de créer de nombreuses méthodes surchargées, nous pouvons créer une classe générique et passer un type de données de remplacement, c'est-à-dire T. Donc, T agit comme un type de données jusqu'à ce qu'il soit utilisé spécifiquement dans la méthode Main () .
Q # 39) Expliquez Obtenir et définir les propriétés de l'accesseur?
Répondre: Get et Set sont appelés accesseurs. Ceux-ci sont utilisés par Properties. La propriété fournit un mécanisme pour lire, écrire la valeur d'un champ privé. Pour accéder à ce champ privé, ces accesseurs sont utilisés.
Get Property est utilisé pour renvoyer la valeur d'une propriété
L'accesseur Set Property est utilisé pour définir la valeur.
L'utilisation de get and set est la suivante:
Q # 40) Qu'est-ce qu'un fil? Qu'est-ce que le multithreading?
Répondre: Un Thread est un ensemble d'instructions qui peuvent être exécutées, ce qui permettra à notre programme d'effectuer un traitement simultané. Le traitement simultané nous aide à effectuer plus d'une opération à la fois. Par défaut, C # n'a qu'un seul thread. Mais les autres threads peuvent être créés pour exécuter le code en parallèle avec le thread d'origine.
Le fil a un cycle de vie. Il démarre chaque fois qu'une classe de thread est créée et se termine après l'exécution. System.Threading est l'espace de noms qui doit être inclus pour créer des threads et utiliser ses membres.
Les threads sont créés en étendant la classe Thread. Début() est utilisée pour commencer l'exécution du thread.
//CallThread is the target method// ThreadStart methodThread = new ThreadStart(CallThread); Thread childThread = new Thread(methodThread); childThread.Start();
C # peut exécuter plus d'une tâche à la fois. Cela se fait en gérant différents processus par différents threads. Cela s'appelle MultiThreading.
Il existe plusieurs méthodes de thread qui sont utilisées pour gérer les opérations multi-thread:
Démarrer, mettre en veille, abandonner, suspendre, reprendre et rejoindre.
La plupart de ces méthodes sont explicites.
Q # 41) Nommez certaines propriétés de Thread Class.
Réponse: Peu de propriétés de la classe de thread sont:
- Est vivant - contient la valeur True lorsqu'un thread est actif.
- Nom - Peut renvoyer le nom du fil. Vous pouvez également définir un nom pour le fil.
- Priorité - renvoie la valeur prioritaire de la tâche définie par le système d'exploitation.
- IsBackground - obtient ou définit une valeur qui indique si un thread doit être un processus d'arrière-plan ou de premier plan.
- ThreadState - décrit l'état du thread.
Q # 42) Quels sont les différents états d'un thread?
Réponse: Les différents états d'un thread sont:
- Non démarré - Le fil est créé.
- Fonctionnement - Le thread démarre l'exécution.
- AttendreSleepRejoindre - Thread appelle sleep, appelle wait sur un autre objet et appelle join sur un autre thread.
- Suspendu - Le fil de discussion a été suspendu.
- Avorté - Le thread est mort mais n'a pas changé à l'état arrêté.
- Arrêté - Le fil de discussion s'est arrêté.
Q n ° 43) Que sont Async et Await?
comment imprimer un élément d'un tableau en java
Répondre: Les mots clés Async et Await sont utilisés pour créer des méthodes asynchrones dans C.
La programmation asynchrone signifie que le processus s'exécute indépendamment des processus principaux ou autres.
L'utilisation d'Async et Await est comme indiqué ci-dessous:
- Le mot clé Async est utilisé pour la déclaration de méthode.
- Le décompte est d'une tâche de type int qui appelle la méthode CalculateCount ().
- Calculatecount () démarre l'exécution et calcule quelque chose.
- Un travail indépendant est effectué sur mon fil, puis la déclaration d'attente de comptage est atteinte.
- Si le Calculatecount n'est pas terminé, myMethod retournera à sa méthode d'appel, ainsi le thread principal ne sera pas bloqué.
- Si le Calculatecount est déjà terminé, nous avons le résultat disponible lorsque le contrôle atteint le nombre d'attente. La prochaine étape se poursuivra donc dans le même fil. Cependant, ce n'est pas le cas dans le cas ci-dessus où le délai de 1 seconde est impliqué.
Q # 44) Qu'est-ce qu'une impasse?
Répondre: Un blocage est une situation dans laquelle un processus ne peut pas terminer son exécution car deux processus ou plus attendent l'un l'autre pour se terminer. Cela se produit généralement dans le multi-threading.
Ici, une ressource partagée est détenue par un processus et un autre processus attend que le premier processus le libère et le thread contenant l'élément verrouillé attend qu'un autre processus se termine.
Considérez l'exemple ci-dessous:
- Effectuer des tâches accède à objB et attend 1 seconde.
- Pendant ce temps, PerformtaskB tente d'accéder à ObjA.
- Après 1 seconde, PeformtaskA essaie d'accéder à ObjA qui est verrouillé par PerformtaskB.
- PerformtaskB tente d'accéder à ObjB qui est verrouillé par PerformtaskA.
Cela crée un blocage.
Q # 45) Expliquez L ock , Moniteurs , et Mutex Objet dans Threading.
Répondre: Le mot clé Lock garantit qu'un seul thread peut entrer une section particulière du code à un moment donné. Au dessus Exemple , lock (ObjA) signifie que le verrou est placé sur ObjA jusqu'à ce que ce processus le libère, aucun autre thread ne peut accéder à ObjA.
Mutex est également comme un verrou, mais il peut fonctionner sur plusieurs processus à la fois. WaitOne () est utilisé pour verrouiller et ReleaseMutex () est utilisé pour libérer le verrou. Mais Mutex est plus lent que le verrouillage car il faut du temps pour l'acquérir et le libérer.
Monitor.Enter et Monitor.Exit implémentent le verrouillage en interne. un verrou est un raccourci pour les moniteurs. lock (objA) appelle en interne.
Monitor.Enter(ObjA); try { } Finally {Monitor.Exit(ObjA));}
Q # 46) Qu'est-ce qu'une condition de course?
Ans: Une condition de concurrence se produit lorsque deux threads accèdent à la même ressource et tentent de la modifier en même temps. Le thread qui pourra accéder à la ressource en premier ne peut pas être prédit.
Si nous avons deux threads, T1 et T2, et qu'ils essaient d'accéder à une ressource partagée appelée X. Et si les deux threads essaient d'écrire une valeur dans X, la dernière valeur écrite dans X sera enregistrée.
Q # 47) Qu'est-ce que le pool de threads?
Ans: Le pool de threads est une collection de threads. Ces threads peuvent être utilisés pour effectuer des tâches sans perturber le thread principal. Une fois que le thread a terminé la tâche, le thread retourne dans le pool.
L'espace de noms System.Threading.ThreadPool a des classes qui gèrent les threads dans le pool et ses opérations.
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(SomeTask));
La ligne ci-dessus met une tâche en file d'attente. Les méthodes SomeTask doivent avoir un paramètre de type Object.
Q # 48) Qu'est-ce que la sérialisation?
Répondre: La sérialisation est un processus de conversion du code en son format binaire. Une fois converti en octets, il peut être facilement stocké et écrit sur un disque ou tout autre périphérique de stockage. Les sérialisations sont principalement utiles lorsque nous ne voulons pas perdre la forme originale du code et qu'il peut être récupéré à tout moment dans le futur.
Toute classe marquée avec l'attribut (Serializable) sera convertie en sa forme binaire.
Le processus inverse de récupération du code C # à partir de la forme binaire est appelé désérialisation.
Pour sérialiser un objet, nous avons besoin que l'objet soit sérialisé, un flux qui peut contenir l'objet sérialisé et l'espace de noms System.Runtime.Serialization peut contenir des classes pour la sérialisation.
Q # 49) Quels sont les types de sérialisation?
Réponse: Les différents types de sérialisation sont:
- Sérialisation XML - Il sérialise toutes les propriétés publiques dans le document XML. Puisque les données sont au format XML, elles peuvent être facilement lues et manipulées dans divers formats. Les classes résident dans System.sml.Serialization.
- SAVON - Les classes résident dans System.Runtime.Serialization. Similaire à XML mais produit une enveloppe complète compatible SOAP qui peut être utilisée par tout système qui comprend SOAP.
- Sérialisation binaire - Permet à n'importe quel code d'être converti en sa forme binaire. Peut sérialiser et restaurer des propriétés publiques et non publiques. Il est plus rapide et occupe moins d'espace.
Q # 50) Qu'est-ce qu'un fichier XSD?
Répondre: Un fichier XSD signifie XML Schema Definition. Il donne une structure pour le fichier XML. Cela signifie qu'il décide des éléments que le XML doit avoir et dans quel ordre et quelles propriétés doivent être présents. Sans un fichier XSD associé à XML, le XML peut avoir n'importe quelle balise, n'importe quel attribut et n'importe quel élément.
L'outil Xsd.exe convertit les fichiers au format XSD. Lors de la sérialisation du code C #, les classes sont converties au format compatible XSD par xsd.exe.
Conclusion
C # se développe rapidement de jour en jour et joue un rôle majeur dans l'industrie des tests logiciels.
Je suis sûr que cet article facilitera grandement votre préparation à l'entrevue et vous donnera une bonne connaissance de la plupart des sujets C #.
J'espère que vous serez prêt à affronter toute interview C # en toute confiance !!
lecture recommandée
- Questions et réponses d'entrevue
- Questions et réponses d'entrevue de test ETL
- Top 50 des questions et réponses d'entretiens CCNA les plus populaires
- Top 51 des questions et réponses d'entrevue Bootstrap
- Top 20+ Questions et réponses d'entrevue .NET
- Top 50+ questions et réponses d'entretien de base de données
- Quelques questions et réponses difficiles sur les tests manuels
- 25 meilleures questions et réponses d'entrevue de test Agile