Un técnico me preguntó lo siguiente:
Creó una clase, declaró un objeto y lo inicializó. Pero en algunas circunstancias podemos obtener una excepción de "referencia nula".
Comentó que hay 1000 posibles razones para tal excepción y me pidió que adivinara una sola razón.
No puedo resolverlo. ¿Cuál es (son) la (s) razón (es), podemos obtener tal excepción?Pregunta de entrevista en C#
Respuesta
¿No es un experto, pero solo una suposición descabellada, sin memoria?
En .NET Creo que hay una OutOfMemoryException, que es lo que obtendrías (a menos que manejases la OutOfMemoryException y continuaras como si nada estuviera mal: D) –
@Mike no puedes hacer tal cosa;) – Maghis
¿Eh? No veo por qué las condiciones de OOM no se pueden manejar con elegancia. –
Si se trata de una aplicación de subprocesos múltiples, puede aparecer algún otro subproceso y establecer el objeto como una referencia nula.
Siempre puede inicializar algo con un valor nulo;
public class MyClass
{
// initialized to null
private string _myString = null;
// _myString is initialized, but this throws null reference
public int StringLength { get { return _myString.Length(); } }
}
- usted ha utilizado una referencia de objeto que se ha establecido explícitamente en null, o
- Ha utilizado una referencia de objeto que haya configurado de forma implícita a nulo, o
- En alguna parte en su código, o en el código que usted llama, existe la declaración
throw new NullReferenceException()
(que no debe hacer, por cierto). No sé si esto cuenta, ya que no es una referencia real nula.
No puedo pensar en ninguna de las otras 997 razones.
Editar: Gracias, Mark Byers, para el punto 3.
Algunas maneras que se me ocurren:
- El constructor puede lanzar una
NullReferenceException
antes de que se complete. - Al acceder a una propiedad, la propiedad puede arrojar un
NullReferenceException
. - Si tiene un
try { } finally { }
alrededor del código, si arroja una excepción, finalmente se ejecuta y el código en el finalmente podría arrojar unNullReferenceException
. - Puede haber una conversión implícita durante la asignación y el código para la conversión arroja un
NullReferenceException
.
Aquí es código de ejemplo para el último:
class Foo {}
class Bar
{
public static implicit operator Foo(Bar bar)
{
throw new NullReferenceException();
}
}
class Program
{
public static void Main()
{
Foo foo = new Bar(); // This causes a NullReferenceException to be thrown.
}
}
El objeto en cuestión puede contener otros objetos que no se inicializan en el constructor del objeto principal. La pregunta no especifica dónde o cuándo se produce la excepción de referencia nula.
999 ir.
En el código de subprocesos múltiples, se puede acceder a la variable después de que se haya creado el objeto, pero antes de que la variable se haya asignado a su ubicación.
Creo que el entrevistador en realidad estaba buscando cómo que resolvería el problema, es decir, qué pasos de solución de problemas tomaría para resolver un problema que podría ser causado por mil cosas diferentes.
Creó una clase, declaró un objeto y lo inicializó. Pero en alguna circunstancia podemos obtener la excepción de "nulo referencia". Comentó que hay 1000 posibles razones para tal excepción y me pidió que adivine una sola razón. No puedo resolverlo. ¿Cuál es (son) el (los) motivo (s) , podemos obtener tal excepción ?
respuesta directa: Le diría al entrevistador que no se puede depurar el código no se puede ver. Pida ver la línea ofensiva de código y un depurador.
No tan sencillo respuesta: asumiendo que su entrevistador no es un idiota, probablemente lo está presionando por sus habilidades de depuración. Si recibes un informe de error, levantas los brazos y te rindes de inmediato o intentas resolverlo.
Adivinar es no una forma aceptable de corregir el error. El primer paso sería reproducir el error en su máquina.
¿Se reproduce con fiabilidad? En caso afirmativo, saque su depurador.
Si no, ¿puede reproducirlo de forma intermitente o no determinista? ¿La excepción ocurre al azar en diferentes lugares en el código o en diferentes hilos? Si es así, probablemente tengas algún tipo de condición de carrera, o tal vez un puntero corrupto.
Si no, pregúntale a quien encontró el error para reproducir. Cuando sigues los mismos pasos que la persona que originalmente encontró el error, ¿puedes reproducir? Si es así, mira arriba.
Si no, ¿hay alguna diferencia en los entornos? ¿Archivos de configuración? Datos en las bases de datos? ¿El ambiente está actualizado con los últimos service packs, actualizaciones de software, etc.?
No podrá darle una respuesta al entrevistador, pero puede darle una lista de los pasos que tomaría para eventualmente obtener una respuesta.
+1 para "Adivinar no es una forma aceptable de depuración". Es sorprendente la frecuencia con la que esto sucede. –
- 1. C# genéricos - Entrevista pregunta extraña
- 2. Odd C pregunta de la entrevista
- 3. C# Potencial Pregunta de entrevista ... ¿Demasiado difícil?
- 4. Pregunta de entrevista SQL
- 5. Pregunta de entrevista HTML
- 6. Pregunta de entrevista SQL
- 7. Google Entrevista Pregunta
- 8. necesitan pensamientos en mi pregunta de la entrevista - .NET, C#
- 9. pregunta de la entrevista en C# conversión implícita
- 10. Pregunta de la entrevista sobre funciones virtuales en C++
- 11. Pregunta de la entrevista en java hashcode()
- 12. Java Entrevista Pregunta: método finalize()
- 13. Entrevista pregunta: factoriales y almacenamiento en caché
- 14. Implementación de interfaz de pregunta de entrevista
- 15. pregunta de la entrevista de Microsoft ASM?
- 16. Pregunta De la Entrevista: Reverse pares
- 17. Pregunta de entrevista sobre .NET Threading
- 18. WPF/Silverlight Entrevista ¿Tiene alguna pregunta?
- 19. Solución óptima para la pregunta de la entrevista
- 20. suma más grande subarreglo contigua (Pregunta De la Entrevista)
- 21. Respuesta a una pregunta de la entrevista de práctica
- 22. Extracto del código de Singleton, una pregunta de la entrevista
- 23. Los límites del paralelismo (pregunta de entrevista de trabajo)
- 24. Pregunta de la entrevista: programa C para ordenar una matriz binaria en O (n)
- 25. Pregunta De la Entrevista-concatenar dos cadenas sin utilizar strcat en C
- 26. Pregunta complicada de la entrevista sobre la búsqueda
- 27. jQuery Pregunta De la Entrevista (desde principiantes hasta Avance)
- 28. Pregunta técnica de la entrevista: ¿Mi enfoque es correcto?
- 29. Pregunta de la entrevista: ¿Qué es un hashmap?
- 30. Pregunta de entrevista: cuando Control.InvokeRequired utiliza Control.Invoke o Control.BeginInvoke?
Espero que haya explicado la pregunta mejor que usted ... –
¡Qué pregunta tan tonta! – spoulson
No es realmente tonto, lo hizo pensar y le habrá dado al entrevistador una idea de cómo piensa y cómo maneja las preguntas "poco fiables". Dudo que el entrevistador estuviera interesado en su respuesta real, sino en cómo llegó a ella. – AndrewC