Voici une cheatsheet d'entretien technique C# en français :
Questions théoriques fréquentes
Q: Qu'est-ce qu'une collection générique en C# ? Une collection générique est un type de collection qui peut stocker des objets d'un seul type. Elle offre des avantages tels que l'optimisation des performances et la sécurité du typage.
List<int> numbers = new List<int>();
numbers.Add(1);
int firstNumber = numbers[0];
Q: Quelle est la différence entre ref et out en C# ?
ref: doit être initialisée avant d'être passé et doit être modifiée.out: peut être non-initialisée avant de passer, doit être modifiée et peut retourner une valeur.
int result;
bool success = TryParse("123", out result);
Exercices de code classiques
Q1: Inverser les éléments d'un tableau
void ReverseArray(int[] array)
{
int start = 0;
int end = array.Length - 1;
while (start < end)
{
int temp = array[start];
array[start] = array[end];
array[end] = temp;
start++;
end--;
}
}
Q2: Trouver le plus grand élément d'une liste
int FindMaxElement(List<int> list)
{
if (list.Count == 0) throw new ArgumentException("List cannot be empty");
int max = list[0];
foreach (int num in list)
{
if (num > max)
{
max = num;
}
}
return max;
}
Q3: Afficher les entiers pairs d'un tableau
void PrintEvenNumbers(int[] array)
{
foreach (int num in array)
{
if (num % 2 == 0)
{
Console.WriteLine(num);
}
}
}
Q4: Supprimer tous les doublons d'une liste
List<int> RemoveDuplicates(List<int> list)
{
HashSet<int> seen = new HashSet<int>();
List<int> result = new List<int>();
foreach (int num in list)
{
if (!seen.Contains(num))
{
seen.Add(num);
result.Add(num);
}
}
return result;
}
Q5: Vérifier si une chaîne est un palindrome
bool IsPalindrome(string str)
{
int left = 0;
int right = str.Length - 1;
while (left < right)
{
if (str[left] != str[right])
{
return false;
}
left++;
right--;
}
return true;
}
Pieges courants en entretien
P1: Ne pas comprendre la différence entre == et Equals()
== compare les valeurs, tandis que Equals() est défini dans le type objet et peut être surchargé.
P2: Utiliser des variables de instance au lieu de propiétés en lecture seule Cela rend le code plus difficile à maintenir et peut introduire des bugs.
// Ne faire pas ça
private int _age;
public int Age { get => _age; }
P3: Ignorer les exceptions Si une exception est ignorée, elle peut masquer un problème de code sous-jacent.
try
{
// Code qui lève une exception
}
catch
{
// Ne pas faire ça
}
P4: Utiliser des méthodes statiques pour tout Les méthodes instanciées offrent plus de flexibilité et permettent un meilleur respect du principe d'encapsulation.
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
P5: Ignorer le garbage collector Cela peut entraîner une fragmentation de la mémoire et des performances dégradées.
// Ne pas faire ça
int[] largeArray = new int[1000000];
largeArray = null;
GC.Collect();
Complexité algorithmique
O(1): Accès direct à un élément dans un tableau O(n): Parcourir tous les éléments d'une liste O(log n): Recherche dichotomique O(n^2): Double boucle imbriquée
Concepts avancés à connaître
Q1: Les générateurs et le yield
Les générateurs permettent de créer des séquences de valeurs de manière éfficace.
public static IEnumerable<int> GetNumbers(int count)
{
for (int i = 0; i < count; i++)
{
yield return i;
}
}
Q2: Les délégués et les fonctions lambda Les délégués permettent de passer des méthodes comme des paramètres à d'autres méthodes.
Func<int, int> square = x => x * x;
int result = square(5);
Q3: Les expressions régulières Les expressions régulières offrent une puissance pour traiter et analyser les chaînes de caractères.
Regex pattern = new Regex(@"\d+");
MatchCollection matches = pattern.Matches("abc123def456");
Q4: Les interfaces Les interfaces définissent un contrat que les classes doivent respecter.
public interface IShape
{
double GetArea();
}
public class Circle : IShape
{
public double Radius { get; set; }
public double GetArea()
{
return Math.PI * Radius * Radius;
}
}
Q5: Les énumérations Les énumérations offrent une façon plus lisible et sûre de travailler avec un ensemble limité de valeurs.
public enum Color
{
Red,
Green,
Blue
}
Color myColor = Color.Green;
Conseils pratiques
T1: Maîtrisez les bases Comprendre les concepts fondamentaux est essentiel pour réussir l'entretien.
T2: Soyez préparé Pratiquez régulièrement et apprenez de nouvelles techniques et langages.
T3: Montrez votre créativité Proposez des solutions innovantes et optimisées.
T4: Demandez des explications N'hésitez pas à demander des explications sur les concepts complexes.
T5: Soyez professionnel Arrivez en retard, présentez-vous de manière professionnelle et soyez respectueux avec vos interlocuteurs.