C# und .NET Interview Fragen mit Antworten für Entwickler

C Sharp Interview Fragen prüfen, wie gut eine Kandidatin oder ein Kandidat für .NET das Typsystem, die Speicherverwaltung, asynchronen Code und die Architektur von ASP.NET Core versteht. Ich betreue seit 2012 Webprojekte und stelle diese Fragen selbst, wenn ich Backend Entwickler für ein Team auswähle. In diesem Beitrag teile ich die Fragen, die mir am häufigsten begegnen, nach Themen sortiert und mit kurzen Antworten.
Die Liste führt vom Junior zum Senior Niveau. Zunächst geht es um das Verhalten der Sprache, danach um Collections und asynchrone Programmierung und schließlich um ASP.NET Core, Entity Framework Core und Systemdesign. Zu jeder Frage erkläre ich außerdem, worauf die Interviewer tatsächlich achten. Kurz gesagt: Sie bereiten die Begründung vor, nicht nur die Antwort. Nichts davon ist eine Einstellungsgarantie; es ist ein Lernrahmen aus meiner Praxiserfahrung. Weitere Artikel finden Sie in der Kategorie Software.
Welche C Sharp Interview Fragen kommen am häufigsten vor?
C Sharp Interview Fragen decken fünf Bereiche ab: Typsystem und Speicher, objektorientiertes Design, Collections und LINQ, async und await sowie Dependency Injection in ASP.NET Core. Mit steigender Seniorität verschieben sich die Fragen weg von Definitionen. Stattdessen stehen Performance, Fehlersuche und die Gründe hinter Architekturentscheidungen im Mittelpunkt.
Beantworten Sie deshalb aus jedem Bereich einige Fragen in eigenen Worten. Schreiben Sie dann einen kurzen Codeausschnitt und erklären Sie laut, warum er funktioniert. Interviewer achten meist stärker auf Ihre Denkweise als auf eine perfekte Antwort. Ein ehrliches "Ich bin nicht sicher, aber so würde ich vorgehen" wirkt daher immer besser als eine erfundene Antwort.
- Junior Niveau: Werttypen und Referenztypen, Verhalten von string, Zugriffsmodifizierer.
- Mittleres Niveau: LINQ, IEnumerable gegenüber IQueryable, async und await, Fehlerbehandlung.
- Senior Niveau: Garbage Collection, Span, Lebensdauer von Services, Profiling.
Warum tauchen .NET Versionen in C Sharp Interview Fragen auf?
Diese Frage zeigt, ob Sie das Ökosystem verfolgen. Laut der offiziellen .NET Supportrichtlinie veröffentlicht Microsoft jedes Jahr im November eine neue Hauptversion. Versionen mit gerader Nummer sind LTS und erhalten drei Jahre kostenlosen Support. Versionen mit ungerader Nummer sind STS und erhalten zwei Jahre.
Dieselbe Seite nennt .NET 10 als LTS Version mit Support bis November 2028. Dagegen enden .NET 8 und .NET 9 beide im November 2026. Eine gute Antwort auf die Frage nach der Version für ein neues Projekt nennt also nicht nur eine Zahl. Sie berücksichtigt zudem den Supportkalender und die Kosten künftiger Upgrades.
Außerdem sollten Sie den Unterschied zwischen .NET Framework und modernem .NET erklären können. Das Framework läuft nur unter Windows und erhält nur noch Wartung. Modernes .NET läuft dagegen plattformübergreifend, auch in Linux Containern.
Was unterscheidet Werttypen von Referenztypen?
Das ist eine klassische Einstiegsfrage. Werttypen wie int, double, bool, struct und enum enthalten ihre Daten direkt. Weisen Sie eine Variable einer anderen zu, entsteht also eine Kopie. Referenztypen wie class, string, Arrays und Delegates enthalten dagegen einen Verweis auf ein Objekt. Nach der Zuweisung zeigen beide Variablen auf dasselbe Objekt.
Ein häufiger Fehler ist die Aussage "Werttypen liegen auf dem Stack, Referenztypen auf dem Heap" als feste Regel. Allerdings liegt ein int Feld innerhalb einer Klasse zusammen mit dieser Klasse auf dem Heap. Auch die Microsoft Dokumentation zu Werttypen definiert den Unterschied über das Kopierverhalten, nicht über den Speicherort.
Ein Beispiel: Point p2 = p1; p2.X = 5; verändert p1 nicht, wenn Point ein struct ist. Bei einer Klasse ändert sich p1 mit. Zeigen Sie dieses kleine Beispiel, dann ist die Frage erledigt.
Wie beeinflusst Boxing die Performance?
Beim Boxing verpackt die Laufzeit einen Werttyp in ein Objekt auf dem Heap, sobald Sie ihn object oder einem Interface zuweisen. Unboxing holt den Wert dann wieder heraus. Jedes Boxing erzeugt eine Allokation und belastet somit den Garbage Collector.
Fügen Sie zum Beispiel einen int in die alte ArrayList ein, verpackt die Laufzeit jedes Element. Eine generische List<int> vermeidet diese Kosten. Deshalb verknüpfen Interviewer das Thema gern mit der Frage, warum es Generics gibt. Eine starke Antwort endet mit einer Messung: Bei Verdacht auf Boxing in einer heißen Schleife messen Sie Allokationen mit BenchmarkDotNet, statt zu raten.
Warum ist string unveränderlich und wann brauchen Sie StringBuilder?
In C# ist string ein unveränderlicher Referenztyp. Verketten Sie zwei Strings, bleibt das bestehende Objekt gleich und ein neues entsteht. Dieses Design hilft vor allem bei Threadsicherheit und beim String Interning.
Andererseits erzeugen hunderte Verkettungen in einer Schleife auch hunderte Objekte. In diesem Fall arbeitet StringBuilder mit einem einzigen Puffer und senkt die Allokationen deutlich. Trotzdem macht StringBuilder bei zwei oder drei Verkettungen den Code nur länger. Der Compiler optimiert einfache Verkettungen ohnehin gut.
Danach fragen Interviewer meist nach dem Unterschied zwischen == und Equals. Bei string vergleichen beide den Inhalt, denn string überlädt den Operator ==. Bei den meisten anderen Klassen vergleicht == dagegen Referenzen, sofern der Typ ihn nicht überschreibt.
Wann wählen Sie eine abstrakte Klasse und wann ein Interface?
Diese Frage prüft Ihr Verständnis für objektorientiertes Design. Eine abstrakte Klasse kann gemeinsamen Zustand und gemeinsames Verhalten enthalten. Allerdings erbt eine Klasse nur von genau einer Basisklasse. Ein Interface definiert einen Vertrag, und eine Klasse kann beliebig viele Interfaces implementieren.
Standardmethoden in Interfaces, eingeführt mit C# 8, haben die Grenze etwas verwischt. Dennoch gilt die praktische Regel weiter:
- Eine abstrakte Klasse passt, wenn Objekte eine "ist ein" Beziehung und gemeinsamen Zustand teilen.
- Ein Interface passt, wenn Sie unabhängigen Klassen eine gemeinsame Fähigkeit geben möchten.
- Ein Interface passt meist auch dann, wenn Testbarkeit und Dependency Injection im Vordergrund stehen.
Anders gesagt: Der Interviewer möchte Begründungen hören, keine Definitionen. Ein Beispiel aus Ihrem eigenen Projekt macht die Antwort deutlich stärker.
Wie zeigen sich die SOLID Prinzipien in C# Code?
Fünf Buchstaben aufzuzählen reicht nicht. Sie sollten jedes Prinzip mit einer konkreten Entscheidung im Code verbinden. Das Single Responsibility Prinzip bedeutet zum Beispiel, dass ein Bestellservice keine E-Mail verschickt. Das Open Closed Prinzip bedeutet, dass Sie eine neue Zahlungsart als neue Klasse ergänzen, statt einen switch Block zu ändern.
Beim Liskov Prinzip dient meist das Quadrat als Beispiel, das von einem Rechteck erbt. Interface Segregation bevorzugt kleine, fokussierte Interfaces statt eines riesigen IRepository. Dependency Inversion passt schließlich direkt zur eingebauten Dependency Injection von ASP.NET Core.
Ehrlichkeit bringt hier zusätzliche Punkte. Wer jedes Prinzip überall anwendet, landet bei zu viel Abstraktion. Eine Architektur mit fünf Schichten für einen kleinen Service erhöht die Wartungskosten. Wer das offen sagt, wirkt erfahren.
Was ist der Unterschied zwischen IEnumerable und IQueryable?
Jedes Team mit Entity Framework Core stellt diese Frage. IEnumerable arbeitet auf einer Collection im Speicher, also laufen Filter in C#. IQueryable trägt dagegen einen Ausdrucksbaum, und der Query Provider übersetzt diesen Baum in SQL.
Die praktische Folge ist wichtig. Rufen Sie ToList() zu früh auf einem DbSet auf, laden Sie die ganze Tabelle in den Speicher und filtern erst danach. Schreiben Sie Where vor ToList(), läuft der Filter in der Datenbank. Somit kann eine einzige Zeile in falscher Reihenfolge die Produktion spürbar bremsen.
| Merkmal | IEnumerable | IQueryable |
|---|---|---|
| Ausführung | Arbeitsspeicher der Anwendung | Datenquelle, zum Beispiel SQL |
| Filter | C# Delegates | Ausdrucksbaum, übersetzt in SQL |
| Geeignet für | Listen im Speicher | Datenbankabfragen |
| Typisches Risiko | Zu viele Daten laden | Nicht übersetzbare Ausdrücke |
Was bedeutet verzögerte Ausführung in LINQ?
Eine LINQ Abfrage läuft erst, wenn Sie das Ergebnis tatsächlich verbrauchen. Where oder Select erstellen zunächst nur ein Rezept. Die Abfrage startet konkret erst mit foreach, ToList() oder Count().
Interviewer mögen folgende Falle: Durchlaufen Sie dieselbe IEnumerable Variable zweimal, läuft die Abfrage auch zweimal. Bei einer Datenbank bedeutet das zwei getrennte SQL Aufrufe. Brauchen Sie das Ergebnis also mehrfach, materialisieren Sie es einmal mit ToList().
Zudem sollten Sie das Verhalten von Closures kennen. Eine äußere Variable in der Abfrage trägt den Wert zum Zeitpunkt der Ausführung, nicht zum Zeitpunkt der Definition. Dieses Detail erklärt viele verwirrende Fehler.
Wie funktionieren async und await wirklich?
Mit async und await setzen Sie Arbeit fort, ohne einen Thread zu blockieren. Der Compiler macht aus einer async Methode eine Zustandsmaschine. Ist die Aufgabe beim await noch nicht fertig, kehrt die Methode zum Aufrufer zurück. Sobald die Aufgabe endet, läuft der Rest der Methode weiter.
Das häufigste Missverständnis lautet "async startet einen neuen Thread". Tatsächlich wartet bei I/O Arbeit wie einem HTTP Aufruf oder einer Datenbankabfrage gar kein Thread. Der Microsoft Leitfaden zur asynchronen Programmierung erklärt das anhand von I/O gebundener und CPU gebundener Arbeit.
Danach fragt der Interviewer nach typischen Fehlern:
- .Result oder .Wait() aufrufen: Das kann dort, wo ein Synchronisationskontext existiert, zu einem Deadlock führen.
- async void schreiben: Ausnahmen lassen sich nicht abfangen, daher nur für Event Handler.
- Erwarten, dass await CPU gebundene Arbeit beschleunigt: Dafür brauchen Sie Task.Run.
Was unterscheidet Task von Thread?
Ein Thread ist eine Ausführungseinheit des Betriebssystems und teuer in der Erstellung. Ein Task steht dagegen für "Arbeit, die später fertig ist". Er läuft meist im Thread Pool und manchmal ganz ohne Thread. Deshalb erstellt moderner C# Code selten Threads von Hand.
Danach kommt oft ValueTask. Er spart Allokationen auf heißen Pfaden, auf denen das Ergebnis häufig sofort bereitsteht. Allerdings dürfen Sie ihn nicht zweimal awaiten, daher bleibt Task der Standard. Bereiten Sie sich zudem auf Fragen zu CancellationToken vor, denn ein Token verhindert, dass der Server für einen längst getrennten Client weiterarbeitet.
Wie sorgen Sie in .NET für Threadsicherheit?
Die Frage beginnt oft mit einem kleinen Zähler. Zwei Threads erhöhen denselben int, und am Ende fehlt ein Teil. Warum? Weil das Erhöhen aus Lesen, Addieren und Schreiben besteht. Dazwischen kann ein anderer Thread eingreifen, man spricht dann von einer Race Condition.
Die Lösungen folgen einer Kostenleiter. Für einfache Zähler genügt Interlocked.Increment. Ändern Sie mehrere Felder gemeinsam, nutzen Sie einen lock Block. Für gemeinsam genutzte Dictionaries bietet ConcurrentDictionary eine fertige Struktur.
Allerdings erlaubt der Compiler kein await innerhalb von lock. In asynchronem Code greifen Sie deshalb zu SemaphoreSlim mit WaitAsync. Interviewer bemerken dieses Detail sofort, denn es zeigt, dass Sie ein echtes Sperrproblem in einem asynchronen Service gelöst haben.
Wofür sind Span und Memory gut?
Mit Span<T> schneiden Sie Teile aus einem Array, einem string oder Stack Speicher heraus, ohne zu kopieren. Substring erzeugt zum Beispiel einen neuen string, AsSpan dagegen keine Allokation. Da Span ein ref struct ist, lebt er nur auf dem Stack. Er kann also kein Klassenfeld sein und keine await Grenze überqueren. Memory<T> löst das, denn es darf auf dem Heap liegen und bei Bedarf zu einem Span werden.
Wie arbeiten Garbage Collector und IDisposable zusammen?
Der Garbage Collector von .NET räumt verwalteten Speicher auf und teilt Objekte in die Generationen 0, 1 und 2 ein. Kurzlebige Objekte verschwinden schnell in Generation 0. Überlebende steigen dann auf. Große Objekte landen auf einem eigenen Large Object Heap. Details finden Sie in den Grundlagen der Garbage Collection.
Trotzdem kennt der GC nur Speicher. Dateihandles, Datenbankverbindungen und Sockets sind nicht verwaltete Ressourcen, die Sie selbst freigeben. Dafür gibt es IDisposable und die using Anweisung. Ein using Block garantiert den Aufruf von Dispose am Ende des Blocks.
Eine gute Antwort erwähnt außerdem Finalizer. Ein Finalizer gehört nur in Klassen, die eine nicht verwaltete Ressource direkt halten, und er verzögert das Aufräumen. Genau deshalb rufen Sie in Dispose GC.SuppressFinalize auf.
Was unterscheidet Singleton, Scoped und Transient?
ASP.NET Core bringt einen eingebauten Container für Dependency Injection mit. Beim Registrieren eines Services wählen Sie eine von drei Lebensdauern. Die Microsoft Dokumentation zu Dependency Injection beschreibt sie so:
- Transient: Bei jeder Anforderung entsteht eine neue Instanz.
- Scoped: Pro HTTP Anfrage lebt genau eine Instanz.
- Singleton: Für die ganze Anwendung lebt genau eine Instanz.
Die eigentliche Frage folgt danach. Was passiert, wenn Sie einen Scoped DbContext in einen Singleton injizieren? Man nennt das eine Captive Dependency. Der DbContext bleibt im ersten Scope hängen, und da er nicht threadsicher ist, bricht er bei parallelen Anfragen. In der Entwicklungsumgebung erkennt die Scope Validierung das schon beim Start.
Wie funktioniert die Middleware Pipeline in ASP.NET Core?
Middleware ist eine Kette von Komponenten, die jede HTTP Anfrage der Reihe nach durchläuft. Jede Komponente verarbeitet die Anfrage, reicht sie weiter oder beendet die Kette und liefert selbst eine Antwort. Auf dem Rückweg läuft die Antwort dann in umgekehrter Reihenfolge durch die Kette.
Die Reihenfolge ist daher entscheidend. UseAuthentication muss zum Beispiel vor UseAuthorization stehen. Sonst prüft die Autorisierung, ohne den Nutzer zu kennen. Der Exception Handler gehört weit nach oben, damit er Fehler aller folgenden Komponenten abfängt.
Manchmal sollen Sie eine eigene Middleware schreiben. Eine Komponente, die die Dauer einer Anfrage misst und protokolliert, ist ein gutes Beispiel. Trennen Sie klar den Code vor und nach await next(context), dann zeigen Sie, dass Sie den Ablauf verstehen.
Wie lösen Sie das N+1 Problem in Entity Framework Core?
Das N+1 Problem entsteht, wenn Sie eine Abfrage für eine Liste ausführen und danach für jedes Element eine weitere Abfrage für verknüpfte Daten. Aus hundert Bestellungen entstehen so hunderteins Abfragen. Meist versteckt sich das Problem hinter Lazy Loading.
Es gibt mehrere Lösungen. Mit Include laden Sie verknüpfte Daten vorab. Alternativ projizieren Sie mit Select nur die benötigten Felder in ein DTO. Bei großen Joins hilft AsSplitQuery. Auf reinen Leseseiten spart AsNoTracking zudem die Kosten der Änderungsverfolgung.
Vor allem beginnt die überzeugendste Antwort mit der Diagnose. Erzählen Sie, dass Sie das erzeugte SQL im Log gelesen und die Abfragen gezählt haben. Dann weiß der Interviewer, dass Sie ein echtes Problem aus der Produktion gelöst haben.
Welche Fehler vermeiden Sie bei der Fehlerbehandlung?
Diese Frage trennt schnell, wer schon produktiven Code ausgeliefert hat. Erste Regel: Fangen Sie keine Ausnahme, die Sie nicht sinnvoll behandeln können. Ein leerer catch Block versteckt den Fehler, und das Problem taucht später an einer viel teureren Stelle wieder auf.
Die zweite Regel betrifft das erneute Auslösen. Im catch Block setzt throw ex; den Stack Trace zurück, während throw; den ursprünglichen behält. Dieser kleine Unterschied spart Stunden, wenn Sie nachts einen Fehler in der Produktion suchen.
Außerdem gehören Ausnahmen nicht in die Ablaufsteuerung. Ist eine Nutzereingabe ungültig, geben Sie ein Ergebnisobjekt oder einen Validierungsfehler zurück. Das ist günstiger und besser lesbar. In ASP.NET Core bietet ein zentraler Exception Handler mit ProblemDetails Antworten den Nutzern Ihrer API einen einheitlichen Vertrag.
- Fangen Sie den spezifischsten möglichen Ausnahmetyp.
- Schreiben Sie Kontext ins Log: Nutzer, Anfrage ID und Eingabe.
- Geben Sie Ressourcen mit finally oder using in jedem Fall frei.
Wie schreiben Sie Unit Tests in einem C# Projekt?
Interviewer formulieren das oft so: "Wie würden Sie diesen Code testen?" Verbreitete Frameworks sind xUnit, NUnit und MSTest. Wichtiger als die Marke ist allerdings der Aufbau des Tests. Das Muster Arrange, Act, Assert zeigt, dass jeder Test genau ein Verhalten prüft.
Abhängigkeiten ersetzen Sie mit Bibliotheken wie Moq oder NSubstitute. Dabei zählt die Balance. Ein Test, der alles simuliert, prüft nur seinen eigenen Aufbau. Für die Datenschicht setzen viele Teams daher auf Integrationstests mit einer echten Datenbank über Testcontainers statt auf einen Provider im Speicher.
Zudem bietet ASP.NET Core die WebApplicationFactory, die Ihre Anwendung innerhalb eines Tests startet. So prüfen Sie einen Endpunkt auf HTTP Ebene, inklusive Middleware Pipeline. Wer Unit Tests, Integrationstests und End to End Tests klar unterscheidet, zeigt Reife.
Was fragen Interviewer zu generischen Einschränkungen und Varianz?
Oft beginnt es mit "Was bewirkt where T : class?" Einschränkungen sagen dem Compiler, was Sie mit einem generischen Typ tun dürfen. So erlaubt where T : new() das Erzeugen einer neuen Instanz von T in der Methode. Ebenso ermöglicht where T : IComparable<T> Vergleiche.
Danach folgen Kovarianz und Kontravarianz. IEnumerable<out T> ist kovariant, also können Sie eine IEnumerable<string> dort übergeben, wo eine IEnumerable<object> erwartet ist. Action<in T> ist kontravariant und wirkt in die andere Richtung.
Warum kann eine List<string> dann nicht als List<object> dienen? Weil List sowohl liest als auch schreibt. Wäre die Umwandlung erlaubt, könnten Sie einen int in eine Liste von Strings einfügen. Wer diese Begründung liefert, beweist echtes Verständnis für Typsicherheit.
Wie hängen Delegates, Events und Lambdas zusammen?
Ein Delegate ist ein typsicherer Verweis, der eine Methode wie eine Variable trägt. Func und Action sind fertige generische Delegates. Ein Lambda Ausdruck ist also nur eine kurze Schreibweise, um eine Delegate Instanz zu erzeugen.
Ein Event ist eine Zugriffsbeschränkung auf Basis eines Delegates. Fremder Code kann nur mit += abonnieren oder mit -= abbestellen. Auslösen darf das Event dagegen nur die deklarierende Klasse. Das verhindert, dass eine andere Klasse alle Abonnenten löscht.
Die übliche Anschlussfrage betrifft Speicherlecks. Abonniert ein kurzlebiges Objekt einen langlebigen Publisher und meldet sich nie ab, kann der GC es nicht einsammeln. Zusammengefasst ist ein Event Abonnement ebenfalls eine Ressource, die Aufräumen braucht.
Wann nutzen Sie record, struct oder class?
Records kamen mit C# 9 und bringen Wertgleichheit mit. Zwei Records mit gleichen Werten sind gleich, während eine Klasse standardmäßig Referenzen vergleicht. Mit dem with Ausdruck erzeugen Sie eine Kopie mit einer kleinen Änderung, was unveränderliche Datenmodelle erleichtert.
In der Praxis sieht die Aufteilung so aus. DTOs und Event Nachrichten passen gut zu record. Kleine, kurzlebige Werte passen zu struct oder record struct. Entitäten mit Identität und veränderlichem Zustand bleiben dann Klassen. Das Kopieren großer structs kostet Performance, daher halten Sie structs klein.
Von hier aus wechseln Interviewer gern zu Pattern Matching. Switch Ausdrücke und Property Patterns ermöglichen zusammen mit Records gut lesbare Geschäftsregeln.
Welche Aufgaben erwarten Sie beim Live Coding?
Unter den C Sharp Interview Fragen hat das Live Coding meist einen mittleren Schwierigkeitsgrad. Es geht nicht um einen Algorithmuswettbewerb. Stattdessen möchte der Interviewer sauberen, testbaren Code sehen. Diese Aufgaben begegnen mir am häufigsten:
- Worthäufigkeiten in einem Text mit Dictionary oder GroupBy zählen.
- Zwei sortierte Listen in einem Durchlauf zusammenführen.
- Einen einfachen LRU Cache mit Dictionary und LinkedList bauen.
- Daten asynchron von einer API laden und Fehler sowie Timeouts behandeln.
Fragen Sie vor dem Programmieren nach Randfällen: leere Eingabe, null, sehr große Datenmengen. Schreiben Sie dann eine einfache Lösung und besprechen Sie danach die Komplexität. Diese Reihenfolge zeigt dem Interviewer, wie die Zusammenarbeit mit Ihnen aussieht.
Wie verändern sich die Fragen für Senior Rollen in .NET?
Mit wachsender Seniorität verschieben sich die Fragen zum Systemdesign. Nehmen Sie eine offene Frage wie "Wie bauen Sie einen Bestellservice für tausende Anfragen pro Sekunde?" Caching, Warteschlangen, Datenbankindizes und Observability kommen dann gemeinsam auf den Tisch.
In dieser Phase zählt die Erklärung von Zielkonflikten genauso viel wie technische Genauigkeit. Microservices oder modularer Monolith hat keine einzige richtige Antwort. Teamgröße und Release Frequenz bestimmen die Entscheidung. Eine ähnliche Debatte für das Frontend beschreibe ich im Beitrag über Micro Frontends.
Zudem hören Sie oft die Frage, wie Sie Performanceprobleme diagnostizieren. Konkrete Beispiele mit dotnet counters, dotnet trace oder der Analyse von Speicherabbildern machen dann einen echten Unterschied.
Warum helfen Wissen über Webperformance und SEO einem .NET Entwickler?
In Unternehmensprojekten verantwortet das Backend einen großen Teil der Ladezeit. Ist die Serverantwort langsam, wartet der Nutzer, egal wie gut das Frontend ist. Deshalb bevorzugen Teams mit Kundenkontakt Entwickler, die den Zusammenhang zwischen Geschwindigkeit und Sichtbarkeit in der Suche verstehen.
Antwortkomprimierung, Output Caching und korrekte HTTP Header in ASP.NET Core bringen zum Beispiel messbare Gewinne. Den Zusammenhang erkläre ich im Beitrag Wie beeinflusst die Ladezeit SEO. Für die Messung empfehle ich meinen Leitfaden zum Lighthouse Test.
Auch Weiterleitungen und Crawling Regeln leben im Backend. Nach einer Migration prüfen Sie 301 Ketten mit dem Redirect Checker und entwerfen Crawling Regeln mit dem robots.txt Generator. Für das Gesamtbild lesen Sie meine Tipps zu technischem SEO.
Wie bereiten Sie sich in der letzten Woche auf C Sharp Interview Fragen vor?
Nutzen Sie die letzte Woche, um Ihr Wissen gut erklärbar zu machen, statt neue Themen zu lernen. Aus meiner Praxiserfahrung funktioniert der folgende Plan gut. Sehen Sie ihn als Startpunkt, nicht als Garantie:
- Beantworten Sie aus jedem Abschnitt zwei Fragen laut und nehmen Sie sich dabei auf.
- Lösen Sie täglich eine kurze Live Coding Aufgabe mit laufender Stoppuhr.
- Bereiten Sie zu jedem Projekt im Lebenslauf einen schwierigen Fehler und Ihre Lösung vor.
- Finden Sie über Stellenanzeige oder Techblog heraus, welche .NET Version und Architektur die Firma nutzt.
Stellen Sie schließlich selbst Fragen. Fragen zu Code Reviews, Testkultur und Release Frequenz zeigen echtes Interesse am Team. Sitzen Sie auf der Seite des Auftraggebers und suchen einen technischen Partner für ein Webprojekt, finden Sie Details auf meiner Seite zum Webdesign.




