Wenn Sie einen .NET-Entwickler einstellen, sollten Sie zumindest keine Zeit mit einer verstreuten, unorganisierten Vorgehensweise verschwenden. Stattdessen können Sie sich darauf konzentrieren, die richtigen Fragen zu stellen, um sicherzustellen, dass Sie die richtige Person für die Rolle des .NET-Entwicklers einstellen. Die Verwendung der falschen Ressourcen birgt für den Arbeitgeber das Risiko, den Einstellungsprozess zu verlangsamen und Zeit und Geld zu verschwenden.
Wir sprechen ausführlich mit Alexandra Țigău-Almăşan, Senior Fullstack Engineer bei Proxify, und anderen Fachleuten, die eng mit .NET-Entwicklern zusammengearbeitet haben. Sie hat uns sorgfältig dabei geholfen, eine Checkliste für Vorstellungsgespräche mit .NET-Bewerbern zu erstellen.
Die Fragen und Antworten des Interviews
Um alles so prägnant und relevant wie möglich zu gestalten, haben wir die zehn wichtigsten Fragen zusammengestellt, die ein erfolgreiches Vorstellungsgespräch garantieren. Für ein erfolgreiches Vorstellungsgespräch müssen Sie den Prozess so gestalten, dass die Bewerber verstehen, was von ihnen verlangt wird. So können sie alle Fragen rechtzeitig und effizient beantworten und sich möglicherweise in die engere Wahl der Bewerber einreihen.
1. Erläuterung der Funktionsweise von "async await" in .NET
Hier ist es am besten, dem Bewerber einen Codeausschnitt zur Verfügung zu stellen, damit er ihn überprüfen und seine Meinung dazu abgeben kann. Der Kandidat sollte in der Lage sein, uns die Reihenfolge zu nennen, in der die Meldungen zur Laufzeit auf dem Bildschirm angezeigt werden.
Der folgende Codeausschnitt ist ein einsatzbereites Beispiel für die Bewerber, auf das sie die Antwort geben müssen:
static void Main()
{
Task task = new Task(ReadFileMethod);
task.Start();
task.Wait();
}
static async void ReadFileMethod()
{
var filePath = "C:\\text.txt";
var length = await ReadFile(filePath);
Console.WriteLine(" Total length: " + length);
}
static async Task<int> ReadFile(string file)
{
var length = 0;
using (StreamReader reader = new StreamReader(file))
{
var s = await reader.ReadToEndAsync();
length = s.Length;
}
return length;
}
2. Erläuterung des Unterschieds zwischen IQueryable und IEnumerable
Diese Frage ist von grundlegender Bedeutung, da sie zeigt, wie gut ein Bewerber mit den Grundlagen vertraut ist.
Das eine funktioniert besser als das andere, da die Filter auf die Datenbank angewendet werden (IQueryable), während das andere die Daten erst nach dem Filtern aus der Datenbank übernimmt. Diese Datenfilterung führt zu vielen Elementen im Speicher, die wir möglicherweise nicht benötigen.
Darüber hinaus kann die Antwort des Kandidaten weitere Informationen enthalten, z. B. wann es sinnvoll ist, IEnumerable zu verwenden, was beim Filtern von Daten, die wir bereits im Speicher haben, nützlich ist. Gleichzeitig ist die IQueryable nützlich, wenn Linq für SQL-Abfragen verwendet wird.
3. Erläuterung der Unterschiede zwischen "dispose" und "finalize"
Vielleicht haben nicht viele Leute von den beiden Möglichkeiten gehört, nicht verwaltete Ressourcen freizugeben, also wollen wir auch sie behandeln.
Der Hauptunterschied besteht darin, dass wir dispose im Code aufrufen müssen, während wir die finalize-Methode automatisch durch die Garbage Collection aufrufen müssen. Wenn der Kandidat Beispiele nennen möchte, ist es am besten, eine Antwort zu erhalten, die erklärt, wie und warum wir dispose verwenden, wenn wir einen close() -Methodenaufruf haben. Wir verwenden sie zum Beispiel, wenn wir das Lesen einer Datei oder eines Streams beenden, und gleichzeitig existiert die andere Methode automatisch, wenn wir eine using-Anweisung beenden.
4. Prüfung, wie ein Kandidat Lösungen für mögliche Probleme anbietet
“Stellen Sie sich vor, wir haben eine Anwendung, die verschiedene E-Mails synchron versendet, und nach einer Weile stellen die Entwickler fest, dass die Benutzer zu lange auf den Erhalt von E-Mails warten - dies ist eine übliche Situation, in der viele Benutzer versuchen, diese Aktion gleichzeitig durchzuführen. Fragen Sie die Kandidaten, wie sie dieses Problem lösen würden. Dieses Szenario ist nützlich, weil es die Bewerber dazu bringt, über die Skalierbarkeit des Projekts nachzudenken”
Es gibt mehrere gültige Lösungen für dieses Problem, und die einfachste wäre, dass wir den E-Mail-Versandprozess async machen und jede E-Mail, die versendet werden muss, in eine Warteschlange stellen. Diese Warteschlange kann überwacht werden, und wenn etwas schief geht, können wir leicht erkennen, was nicht funktioniert, so dass ein erneuter Versuch möglich und leicht zu bewerkstelligen ist.
5. Erklären, wann und warum wir Reflexion verwenden und welche Funktion sie in einem .NET-Codebeispiel sehen
Wir Entwickler wollen oft Baugruppen inspizieren oder überprüfen, was wir bisher mit Reflexion gemacht haben. Neben den Baugruppen können wir auch Informationen über Typen, Mitglieder, Methoden und sogar Testteile des Codes sehen, die von einer privaten Klasse abhängen.
Allerdings gibt es einen Nachteil bei der Verwendung der Reflexion. Es wäre schön zu sehen, ob der Kandidat den Nachteil kennt, z. B. ob die Verwendung von Reflexion langsamer ist als direkte Aufrufe. Außerdem bedeutet die Verwendung von Reflection , dass die vom Compiler erzwungene Typsicherheit aufgehoben wird.
Hier ist ein Beispiel für Reflexion - in diesem Fall sollte ein Kandidat selbst erkennen, dass es sich bei einem Codeschnipsel um Reflexion handelt, und anschließend mehr dazu sagen:
string aString = "this is a string";
var type = aString.GetType();
6. Überarbeitung von Codebeispielen
“Da .NET ständig neue Funktionen hinzufügt, sollte der Kandidat über Datensätze und deren Funktionsweise Bescheid wissen. Wir möchten sehen, wie gut ein Kandidat die Unveränderlichkeit versteht, was bedeutet, dass wir das Objekt nicht mehr ändern können, nachdem es erstellt wurde. In diesem Fall können wir den Namen des Mitarbeiters nicht in der dritten Zeile ändern, wie im folgenden Codebeispiel gezeigt. Wenn der Kandidat weiß, wie man diese Unveränderlichkeit beheben kann, ist das ein großer Vorteil.”
record Employee(int Id, string Name, int Age);
var employee = new Employee(1, “John Doe”, 25);
employee.Name = “John D. Doe”;
Und die Lösung für die Unveränderlichkeit, die Sie erwarten konnten:
employee = employee with {Name = “Mark Doe”};
7. Erläutern, was zu tun ist, um die Sicherheit einer Anwendung zu erhöhen
In einem Projekt können viele Dinge getan werden, um die Sicherheit der jeweiligen Anwendung zu verbessern. Einige von ihnen sind:
-
Verschlüsselung von Daten
-
Vermeidung von Verbindungsstrings und anderen Passwörtern, die in den Einstellungsdateien hinzugefügt werden
-
Verwendung der Autorisierung auf allen API-Endpunkten
-
Wir halten die von uns verwendeten Pakete auf dem neuesten Stand (diese beheben in der Regel Sicherheitsprobleme, wenn Aktualisierungen vorgenommen werden).
Antworten, die reale Lösungen für reale Probleme bieten, werden am meisten geschätzt, weil sie praktisch sind. Achten Sie auch auf Antworten, die genau erklären, wie das Problem gelöst wurde.
8. Fragen zur Speicherverwaltung von .NET
“Entwickler müssen immer darauf achten, wie sie den Speicher verwalten und sicherstellen, dass es nirgendwo zu Speicherverlusten kommt. Außerdem müssen sie verstehen, was .NET in diesem Speicherkontext tut, und sicherstellen, dass sie alles aus dem Speicher zum richtigen Zeitpunkt entsorgen. Wenn der Kandidat über Garbage Collectors, die Zustände des Speichers und die Zuweisung und Freigabe des Speichers Bescheid weiß, ist das ein großer Vorteil.”
9. Erläuterung des DDD (domain-driven design) und seiner Verwendung
Zum Beispiel sollte ein Kandidat hier wissen, dass DDD bedeutet, dass ein bestimmtes Ereignis in der Domäne stattfindet und dass andere Teile der Domäne davon "wissen" und möglicherweise andere Aktionen aufgrund dieses Ereignisses durchführen sollten.
Die Kandidaten erhalten zusätzliche Punkte, wenn sie die Nachteile von DDD kennen, z. B. die Nichteinhaltung bestimmter SOLID-Grundsätze, und diese genau auflisten. All dies wird Ihnen zeigen, wie gut ein Bewerber dies bei der Programmierung einer Anwendung erreichen würde.
10. Erläuterung der Bedeutung und Verwendung von SQL-Abfragen
Nehmen wir an, wir haben eine Tabelle mit Produktinformationen wie ID, Name, Quantity und Price für bestimmte Produkte.
Die Kandidaten sollten folgende Frage beantworten: Was genau bewirkt die folgende Abfrage?
SELECT Name
FROM Products A
WHERE (
SELECT COUNT(*)
FROM Products B
WHERE B.Name = A.Name
) > 1;
Die Abfrage gibt alle doppelten Produktnamen aus der Liste zurück, allerdings nicht optimal. Hier sollten die Kandidaten herausfinden, wie sie die optimale Version erreichen können, wie unten gezeigt:
SELECT Name
FROM Products
GROUP BY Name
HAVING COUNT(*) > 1;
Und unabhängig von der verwendeten Programmiersprache ist es für einen .NET-Entwickler unerlässlich zu wissen, wie man grundlegende SQL-Skripte wie diese erstellt und liest.
Beziehen Sie sich auch auf eine Checkliste für die Hard- und Soft Skills
Sie haben nun eine Liste mit den wichtigsten Fragen, die Sie stellen müssen, aber um das Vorstellungsgespräch noch wertvoller zu machen, sollten Sie auch eine Checkliste für die Hard- und Soft Skills verwenden, die Hand in Hand gehen.
Wenn Sie sich auf die Hard Skills beziehen, bestätigen Sie, ob ein Bewerber alles richtig beantwortet hat, und Sie kreuzen die Anforderungen an das erforderliche Fachwissen an. Und wenn Sie dies auch bei den Soft Skills tun, schätzen Sie die Persönlichkeit und die Kommunikation der Bewerber und sehen darin ein Potenzial, das in Ihr Team und Ihr Unternehmen passt.
Harte Skills
Ein .NET-Kandidat verfügt über außergewöhnliche Kenntnisse dieses Frameworks, wenn er die meisten/alle der folgenden Anforderungen in der Liste der Hard Skills erfüllt:
-
ein abgeschlossenes Studium der Ingenieurwissenschaften, der Informatik oder ähnlicher, für die Stelle relevanter Fachrichtungen
-
Mehr als drei Jahre Erfahrung mit .NET / Backend
-
ausgezeichnete Kenntnisse in mindestens einer oder zwei .NET-Programmiersprachen (C#, Visual Basic, F#)
-
Kenntnisse in ASP.NET und SQL Server
-
Erfahrung in der Arbeit mit Entwurfs-/Architekturmustern wie MVC (Model-View-Controller)
-
Gutes Verständnis von Agile
-
Erfahrung mit APIs und Architekturen; RPC und REST.
“Ein Kandidat sollte auch die SOLID-Prinzipien und SQL beherrschen. Die Fähigkeiten zur Fehlerbehebung sollten ausgezeichnet sein, und der Code sollte so geschrieben sein, dass er leicht zu warten und zu skalieren ist. Und schließlich müssen sie gut im Debugging sein und sich immer über die neuesten .NET-Updates auf dem Laufenden halten.”
How AI is shaping the future of programming
Discover the responses of developers from our network about their use of AI in their development work, the benefits and challenges they face, and their predictions for the future of AI in software development.
Soft Skills
Eine erfolgreiche Einstellung ist erst dann abgeschlossen, wenn der in die engere Wahl gekommene Bewerber über hervorragende Soft Skills verfügt. Sie können so professionell und erfahren sein, wie Sie es wünschen, aber Sie müssen ein paar Schritte vorausdenken - würden Sie jemanden in Ihrem Team haben wollen, der unkooperativ und zu individualistisch ist?
Benachrichtigen Sie die Kandidaten:
-
Gutes Englisch verwenden
-
Für ein professionelles Aussehen sorgen (ihr Zimmer und sich selbst)
-
Genau zuhören
-
Neugierde für die Rolle zeigen
-
Teamplayer-Qualitäten zeigen
-
Zeige die allgemeine Pünktlichkeit, einschließlich deren Aufgabenantworten
-
Eine problemlösende Denkweise haben
“Wenn ein Entwickler neugierig auf die neuesten .NET-Updates ist und sich gut informiert, ist das ein Zeichen dafür, dass er sich nicht mit dem Status quo zufrieden gibt und seine Fähigkeiten ständig weiterentwickelt. Ein großartiger Entwickler wird immer nach mehr Wissen über neue .NET-Versionen suchen. Sie wissen zum Beispiel, dass das .NET-Framework auf .NET Core umgestellt wurde, oder was auch immer sie wissen und herausfinden, sie würden es weitergeben, wenn es für sie und das Team nützlich ist.”
Warum brauchen Sie einen guten .NET-Entwickler?
Die Einstellung eines guten .NET-Entwicklers wird Ihnen bald zeigen, warum es sich auszahlt. Zum Beispiel werden sie:
- Qualitätscode mit .NET-Sprachen schreiben
- Aufrüstung, Konfiguration und Fehlerbehebung von Systemen
- Verbesserung der Übertragbarkeit
- Unterstützung für alle Desktop-, Mobil- und Webanwendungen
- Verbesserung der Wartungsfreundlichkeit
- Deutliche Verbesserung der bestehenden Software
- Verwalten Sie die extra-schnelle Entwicklung
- Erzielen Sie erstklassige Sicherheit
- Skalierbarkeit erhöhen
Die Vorteile von .NET sind auf lange Sicht erheblich und zu wichtig, um sie zu ignorieren. Ataur Rahman, Gründer und CEO von GetGenie, teilte großzügig einige wesentliche Vorteile der Einstellung von .NET-Entwicklern,
-
Robuste App-Entwicklung – Gute .NET-Entwickler verfügen über fundierte Kenntnisse dieses Frameworks. So können sie skalierbare und robuste Anwendungen erstellen, die den geschäftlichen Anforderungen gerecht werden. Dadurch können sie auch komplexe Datenverarbeitungen kontinuierlich durchführen.
-
Plattformübergreifende Kompatibilität – Eine bemerkenswerte Stärke von .NET-Entwicklern ist die Erstellung leistungsfähiger plattformübergreifender Anwendungen, die auf mehreren Geräten und Betriebssystemen laufen. Organisationen und Unternehmen können ihre Reichweite vergrößern und eine konsistente Nutzererfahrung über verschiedene Plattformen hinweg sicherstellen.
-
Nahtlose Integration in bestehende Systeme – Mit ihrer umfangreichen Erfahrung bei der Integration unterschiedlicher Systeme können .NET-Entwickler die technologische Infrastruktur Ihres Unternehmens verbinden, indem sie einen effizienten Datenaustausch ermöglichen und die betriebliche Effizienz verbessern.
-
Zugang zu einer breiten Community – Dieses Framework verfügt über ein umfangreiches und breit gefächertes Netzwerk von Entwicklern, das Zugang zu einer Fülle von Bibliotheken, Ressourcen und Best Practices bietet, die für alle hilfreich sind. Wenn Sie also einen .NET-Entwickler beauftragen, kann Ihr Unternehmen auf diese reichhaltige Wissensbasis zurückgreifen, was in Zukunft viel schnellere Entwicklungszyklen und eine mühelose, reibungslosere Fehlerbehebung ermöglicht.
Es gibt noch eine andere Sichtweise, die Sie sich ansehen sollten, und zwar die von Norbert Raus, Mitbegründer und CEO von Alphamoon. In seiner unverwechselbaren Art spielt er die Qualität eines guten .NET-Entwicklers nicht herunter und zeigt, was dies für Ihr Budget bedeuten kann.
“Es wäre nicht zu abwegig zu sagen, dass ein .NET-Entwickler Ihnen JEDE App erstellen kann, die Sie sich wünschen - vom interaktiven Web und KI-gestützten Apps über cloudbasierte SaaS-Lösungen bis hin zu nativen und plattformübergreifenden mobilen Apps. Es ist, als würde man eine Sache kaufen und durch die plattformübergreifende Kompatibilität, die das Budget für die Softwareentwicklung optimiert, viele bekommen.”
Die Relevanz des Interviews erhöhen
Wenn Sie ein Vorstellungsgespräch für den nächsten .NET-Entwickler führen, können Ihnen einige Dinge helfen, den Prozess prägnant und relevant zu gestalten.
Erstens müssen Sie sicherstellen, dass alles rationalisiert und gut organisiert ist, um Herausforderungen bei der Personalbeschaffung im Voraus zu erkennen.
Wie Alexandra erklärt, ist das Wissen um die Unterschiede in den Fachkenntnissen ein weiterer wichtiger Faktor bei all dem. In der Regel sind die Senior-Entwickler gut darin, ein paar Schritte voraus zu denken, aber das bedeutet nicht, dass es den Medior-Entwicklern an Wissen fehlt.
“Bei der Unterscheidung zwischen Senior-, Junior- und Mid-Entwicklern hilft es, zu wissen, welcher Code in einer aktuellen Situation gut funktioniert und welcher Code veraltet wäre. Mit mehr Jahren an Erfahrung gibt es wahrscheinlich auch weniger Fehler im Code und eine bessere Codeleistung. Ein erfahrener .NET-Entwickler wird auch mehr Randfallszenarien abdecken, die sonst erst nach der Implementierung der Funktion/Aufgabe entdeckt werden müssten.”
Der Mitbegründer und CEO von SocialPlug, Mark Voronov, hielt sich nicht damit zurück, seine aufschlussreiche Sicht der Dinge darzulegen. Als Unternehmer, der eng mit .NET-Entwicklern zusammenarbeitet, fiel es ihm nicht schwer zu beschreiben, was einen Entwickler aus einem großen Pool von Bewerbern heraushebt. Er rät, bei Vorstellungsgesprächen darauf zu achten, dass die Person ebenso teamfähig wie neugierig und erfahren ist.
“Bei der Bewertung von .NET-Entwickler-Kandidaten müssen mehrere Schlüsseleigenschaften berücksichtigt werden. Sie sollten über ein solides technisches .NET-Fundament und eine Leidenschaft für kontinuierliches Lernen und das Verfolgen von Branchentrends verfügen. Sie werden kritisch denken, komplexe Probleme lösen und effektiv im Team kommunizieren. Außerdem haben sie eine Erfolgsbilanz erfolgreicher Projekte, sind anpassungsfähig und arbeiten gerne mit anderen zusammen; sie werden einen großen Einfluss auf Ihr Entwicklungsteam haben.”
Insgesamt sollte die Mischung aus allen Fähigkeiten, nicht nur den technischen, abgedeckt werden. Sie sollten auch auf Soft Skills, Kommunikationsstile, Schnelligkeit und andere Faktoren achten, die einen Bewerber zu einer wertvollen Bereicherung für das Team machen.