7
votes

Question d'entretien en c #

Un plomb technique m'a demandé ce qui suit:
Il a créé une classe, a déclaré un objet et initialisé. Mais dans certaines circonstances, nous pouvons obtenir une exception "null référence".
Il a commenté qu'il y a 1 000 raisons possibles à une telle exception et m'a demandé de deviner une seule raison.
Je suis incapable de le comprendre. Ce qui est (sont) la (s) raison (s), nous pouvons obtenir une telle exception?


5 commentaires

J'espère qu'il a expliqué la question mieux que vous ...


Quelle question d'entretien muet.


Ce n'est pas vraiment stupide, il l'a amené à penser et aura donné à l'intervieweur une idée de la façon dont il pense et comment il gère des questions "Dames". Je doute que l'intervieweur était intéressé par sa réponse réelle, mais plus quant à son arrivée.


Presque tous les cas de NullReferenceException sont les mêmes. S'il vous plaît voir " Qu'est-ce qu'une nullreferenceException à .NET? " Pour certaines notes.


Quelqu'un veuillez fermer cela comme un duplicata de Stackoverflow. com / questions / 4660142 / ... ? J'ai déjà voté pour le fermer, alors je ne peux plus la refermer.


10 Réponses :


4
votes

Pas un expert, mais juste une supposition sauvage, en mémoire de mémoire?


4 commentaires

En .NET, je crois qu'il y a une exception exceptionnelle, ce que vous obtiendrez (à moins que vous ne manipuliez pas la sortie de MemororyException et que vous continuiez comme rien n'était faux: D)


@Mike vous ne pouvez pas faire une telle chose;)


Hein? Je ne vois pas pourquoi les conditions d'oom ne peuvent pas être traitées gracieusement.


Je ne crois pas que vous puissiez attraper plus de MemororyException.



8
votes

Si c'est une application multi-threadée, un autre thread pourrait s'allonger et définir l'objet sur une référence null.


0 commentaires

4
votes

Vous pouvez toujours initialiser quelque chose à une valeur null; xxx


0 commentaires

7
votes

Overflow de pile?

{◕ ◡ ◕}


2 commentaires

J'aimerais +1. mais je ne veux pas


@Mithat: ça va, j'ai un +1 de moi de toute façon pour votre avatar faaabulous!



11
votes
  1. Vous avez utilisé une référence d'objet que vous avez explicitement définie sur NULL ou
  2. Vous avez utilisé une référence d'objet que vous avez implicitement définie sur NULL ou
  3. Quelque part dans votre code ou dans le code appelé par vous, il y a la déclaration jette nouvelle NullReferenceException () (que vous ne devriez pas faire, à la manière). Je ne sais pas si cela compte, puisque ce n'est pas une vraie référence nulle.

    Je ne peux penser à aucune des autres raisons 997.

    edit: Merci, Mark Byers, pour le point 3.


0 commentaires

7
votes

Quelques façons de penser:

  • Le constructeur peut lancer un NullReferenceException avant de terminer.
  • Lorsque vous accédez à une propriété, la propriété peut lancer un NullReferenceException .
  • Si vous avez un ESSAY {} enfin {} autour du code, s'il jette une exception, le code est enfin et le code dans le code enfin pourrait lancer un NullReferenceException .
  • Il pourrait y avoir une conversion implicite pendant l'affectation et le code de la conversion jette un NullReferenceException .

    ICI est l'exemple de code pour le dernier: xxx


0 commentaires

1
votes

L'objet en question peut contenir d'autres objets qui ne sont pas initialisés dans le constructeur principal de l'objet. La question ne spécifie pas où ou lorsque l'exception de référence NULL est survenue.

999 à aller.


0 commentaires

1
votes

Dans le code multi-threadé La variable est accessible une fois que l'objet a été créé, mais avant que la variable ait été attribuée à son emplacement.


0 commentaires

0
votes

Je pense que l'intervieweur était en train de rechercher comment vous allez résoudre le problème, c'est-à-dire quelles étapes de dépannage que vous prendriez pour résoudre un problème pouvant être causé par mille choses différentes.


0 commentaires

6
votes

Il a créé une classe, a déclaré un objet et l'initialisé. Mais dans certains circonstances que nous pouvons obtenir "null référence "exception. Il a commenté qu'il y a 1000 raisons possibles Pour une telle exception et m'a demandé de Devinez une seule raison. Je suis incapable de comprendre. Ce qui est (sont) le Raison (s), nous pouvons obtenir un tel exception?

réponse directe : je dirais à l'intervieweur que vous ne pouvez pas déboguer du code que vous ne pouvez pas voir. Demandez à voir une ligne de code offensante et un débogueur.

réponse non aussi simple : En supposant que votre intervieweur n'est pas un idiot, il vous sentait probablement de vous pour vos compétences de débogage. Si vous obtenez un rapport de bogue de merde, lancez-vous vos bras et vous rendez-vous immédiatement, ou essayez-vous de le résoudre.

deviner est pas un moyen acceptable de déboguer l'erreur. La première étape serait reproduire le bogue sur votre machine.

Est-ce qu'il reproduit de manière fiable? Si oui, obtenez votre débogueur.

Si non, pouvez-vous le reproduire de manière intermittenante ou non déterministe? L'exception se produit-elle au hasard dans différents endroits dans le code ou sur différents threads? Si oui, vous avez probablement une sorte de condition de race, ou peut-être un pointeur corrompu.

Si non, demandez quiconque a trouvé le bogue de reproduire. Lorsque vous suivez les mêmes étapes que la personne qui a trouvé le bogue à l'origine, pouvez-vous reproduire? Si oui, voir ci-dessus.

Si non, il y a une différence dans les environnements? Fichiers de configuration? Données dans les bases de données? L'environnement est-il mis à jour avec les derniers packs de services, les mises à jour logicielles, etc.

Vous ne pourrez pas donner à votre intervieweur une réponse, mais vous pouvez lui donner une liste de mesures que vous allez prendre pour éventuellement arriver à une réponse.


1 commentaires

+1 pour "deviner n'est pas un moyen acceptable de déboguer". C'est incroyable à quelle fréquence cela se produit.