Interviewfrage in C #

7

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?

    
amutha 01.04.2010, 13:29
quelle

10 Antworten

11
  1. Sie haben eine Objektreferenz verwendet, die Sie explizit auf null gesetzt haben, oder
  2. Sie haben eine Objektreferenz verwendet, die Sie implizit auf null oder
  3. gesetzt haben
  4. Irgendwo in Ihrem Code oder in Code, den Sie aufgerufen haben, gibt es die Anweisung 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.

    
erikkallen 01.04.2010 13:33
quelle
8

Wenn es sich um eine Multithread-App handelt, könnte ein anderer Thread mitkommen und das Objekt auf eine Nullreferenz setzen.

    
Matthew Groves 01.04.2010 13:32
quelle
7

Stapelüberlauf?

{◕ ◡ ◕}

    
Darth Continent 01.04.2010 13:33
quelle
7

Ein paar Möglichkeiten, die ich mir vorstellen kann:

  • Der Konstruktor kann eine NullReferenceException vor dem Abschluss werfen.
  • Wenn Sie auf eine Eigenschaft zugreifen, kann die Eigenschaft NullReferenceException .
  • ausgeben
  • Wenn Sie eine 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.
  • Es könnte eine implizite Konvertierung während der Zuweisung geben und der Code für die Konvertierung wirft ein NullReferenceException .

Hier ist ein Beispielcode für die letzte:

%Vor%     
Mark Byers 01.04.2010 13:35
quelle
6
  

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.

    
Juliet 01.04.2010 16:03
quelle
4

Nicht ein Experte, aber nur eine wilde Vermutung, nicht genügend Speicher?

    
Aaron Qian 01.04.2010 13:32
quelle
4

Sie können immer etwas mit einem Nullwert initialisieren;

%Vor%     
Justin Niessner 01.04.2010 13:32
quelle
1

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.

    
MusiGenesis 01.04.2010 13:42
quelle
1

In Multi-threaded-Code kann auf die Variable zugegriffen werden, nachdem das Objekt erstellt wurde, aber bevor die Variable ihrem Standort zugewiesen wurde.

    
C. Ross 01.04.2010 14:01
quelle
0

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.

    
Daniel Szabo 01.04.2010 14:45
quelle

Tags und Links