Ein Technical Lead hat mich gefragt:
Er hat eine Klasse erstellt, ein Objekt deklariert und initialisiert. Aber unter gewissen Umständen können wir eine "Nullreferenz" -Ausnahme bekommen.
Er kommentierte, dass es 1000 mögliche Gründe für eine solche Ausnahme gibt und bat mich, einen einzigen Grund zu erraten
Ich kann es nicht herausfinden. Was (sind) der Grund (die Gründe), können wir eine solche Ausnahme bekommen?
throw new NullReferenceException()
(die Sie übrigens nicht tun sollten). Ich weiß nicht, ob das zählt, da es kein echter Nullbezug ist. Ich kann mir keine der anderen 997 Gründe vorstellen.
Bearbeiten: Danke, Mark Byers, für Punkt 3.
Wenn es sich um eine Multithread-App handelt, könnte ein anderer Thread mitkommen und das Objekt auf eine Nullreferenz setzen.
Ein paar Möglichkeiten, die ich mir vorstellen kann:
NullReferenceException
vor dem Abschluss werfen. NullReferenceException
. try { } finally { }
um den Code herum haben, dann wird, wenn er eine Ausnahme auslöst, die finally ausgeführt, und der Code in der finally könnte eine NullReferenceException
werfen. NullReferenceException
. Hier ist ein Beispielcode für die letzte:
%Vor%Er hat eine Klasse erstellt, ein Objekt deklariert und initialisierte es. Aber in einigen Umstände können wir "null" bekommen Verweis "Ausnahme. Er kommentierte dass es 1000 mögliche Gründe gibt für eine solche Ausnahme und bat mich um einen einzigen Grund erraten. Ich kann nicht finde es heraus. Was ist (sind) die? Grund (e), wir können solch ein erhalten Ausnahme?
Einfache Antwort : Ich würde dem Interviewer sagen, dass Sie keinen Code debuggen können, den Sie nicht sehen können. Bitten Sie darum, eine fehlerhafte Codezeile und einen Debugger zu sehen.
Nicht ganz so einfache Antwort : Wenn Sie davon ausgehen, dass Ihr Interviewer kein Idiot ist, fühlt er Sie wahrscheinlich für Ihre Debugging-Fähigkeiten. Wenn du einen beschissenen Fehlerbericht bekommst, wirfst du deine Arme hoch und gibst dich sofort hin oder versuchst, es zu lösen.
Guessing ist nicht eine akzeptable Möglichkeit, den Fehler zu debuggen. Der erste Schritt wäre die Reproduktion des Fehlers auf Ihrem Computer.
Reproduziert es zuverlässig? Wenn ja, bringen Sie Ihren Debugger raus.
Wenn nein, können Sie es intermittierend oder nicht-deterministisch reproduzieren? Tritt die Ausnahme zufällig an verschiedenen Stellen im Code oder in verschiedenen Threads auf? Wenn ja, haben Sie wahrscheinlich eine Art Race-Condition oder vielleicht einen beschädigten Zeiger.
Wenn nein, fragen Sie, wer den Fehler gefunden hat, um ihn zu reproduzieren. Wenn Sie die gleichen Schritte wie die Person ausführen, die den Fehler ursprünglich gefunden hat, können Sie reproduzieren? Wenn ja, siehe oben.
Wenn nein, gibt es Unterschiede in den Umgebungen? Konfigurationsdateien? Daten in den Datenbanken? Wird die Umgebung mit den neuesten Service Packs, Softwareupdates usw. aktualisiert?
Sie werden Ihrem Interviewer keine Antwort geben können, aber Sie können ihm eine Liste von Schritten geben, die Sie unternehmen würden, um zu einer Antwort zu gelangen.
Nicht ein Experte, aber nur eine wilde Vermutung, nicht genügend Speicher?
Sie können immer etwas mit einem Nullwert initialisieren;
%Vor%Das fragliche Objekt kann andere Objekte enthalten, die nicht im Konstruktor des Hauptobjekts initialisiert sind. Die Frage gibt nicht an, wo oder wann die Null-Referenz-Ausnahme auftritt.
999 zu gehen.
Ich glaube, der Interviewer suchte tatsächlich nach wie Sie das Problem lösen würden, dh welche Schritte zur Fehlerbehebung Sie unternehmen würden, um ein Problem zu lösen, das durch tausend verschiedene Dinge verursacht werden könnte.
Tags und Links c# nullreferenceexception