Las preguntas básicas incluyen:
Creo que generalmente ayuda pedirles a sus solicitantes que completen un ejercicio de codificación simple como:
- Escriba su propia clase de lista vinculada sin usar las clases integradas.
- Escriba su propia clase de tabla hash sin usar las clases integradas.
- Escribe una clase que represente un árbol binario. Escriba un método que atraviese todos los nodos del árbol.
- Escriba un método para realizar una búsqueda binaria en una matriz sin usar métodos integrados.
- Dibuja un esquema de base de datos para un blog. Cada usuario solo tiene un blog, cada blog tiene muchas categorías, cada categoría tiene muchas publicaciones y cada publicación puede pertenecer a más de una categoría. Pídale a su solicitante que escriba consultas para extraer información específica.
A continuación, busque conocimientos técnicos específicos:
- (Controladores de eventos) Cree una clase con un controlador de eventos personalizado, cree otra clase que se enganche en el controlador de eventos personalizado.
- (XML) Cargue un documento XML y seleccione todos los nodos con propiedades x, y y z.
- (Programación funcional) Cree una función que acepte otra función como parámetro. Una función de mapa o plegado funciona realmente bien para esto.
- (Reflexión) Escriba una función que determine si una clase tiene un atributo particular.
- (Regex) Escriba una expresión regular que elimine todas las etiquetas de un bloque de HTML.
Ninguna de estas preguntas es particularmente difícil de responder para un programador competente de C #, y deberían darle una buena idea de las fortalezas particulares de sus solicitantes. También es posible que desee trabajar en algunas preguntas / ejemplos de código que hacen uso de patrones de diseño específicos.
[Editar para aclarar] :
Parece que mucha gente no entiende por qué haría este tipo de preguntas. Permítanme mencionar los comentarios de algunas personas (no estoy citando directamente, sino parafraseando):
P: ¿ Cuándo fue la última vez que alguien usó volátiles o referencias débiles?
R: Cuando doy entrevistas técnicas, miro para ver si una persona comprende las características de alto y bajo nivel de .NET. Los volátiles y las referencias débiles son dos características de bajo nivel proporcionadas por .NET, incluso si estas características no se usan con frecuencia en la práctica, las respuestas a estas preguntas son extremadamente reveladoras:
Una buena comprensión de los volátiles demuestra que una persona comprende cómo las optimizaciones del compilador cambian la corrección del código, cómo los subprocesos mantienen copias locales del estado compartido que pueden estar fuera de sincronización en cualquier momento dado, y es mínimamente consciente de algunas de las complejidades del código multiproceso .
Una buena comprensión de las referencias débiles demuestra que una persona conoce los detalles íntimos del recolector de basura y cómo decide cuándo liberar memoria. Claro, podría preguntar a los candidatos "cómo funciona un recolector de basura", pero preguntar sobre referencias débiles obtiene una respuesta mucho mejor y más reflexiva.
.NET es un lenguaje bastante abstracto, pero los desarrolladores estrella casi siempre tienen una comprensión profunda del CLR y los detalles de bajo nivel del tiempo de ejecución de .NET.
P: ¿Por qué alguien necesitaría implementar su propia tabla hash o lista vinculada?
R: No estoy insinuando que la clase Diccionario sea inferior o que la gente deba lanzar su propia tabla hash. Esta es una pregunta básica que evalúa si una persona tiene una comprensión mínima de las estructuras de datos. Eso es lo que prueban estas preguntas: comprensión mínima mínima.
Aprenderá sobre estas tablas hash y listas vinculadas el primer día de Data Structures 101. Si alguien no puede escribir una tabla hash o una lista vinculada desde cero, entonces tienen una gran brecha en su conocimiento técnico.
P: ¿Por qué estas preguntas están tan orientadas a la basura?
R: Debido a que el título de este hilo es "preguntas que todo buen desarrollador de .NET debe saber". Todos los desarrolladores de .NET comienzan su carrera escribiendo aplicaciones crud, y el 90% de todas las personas de desarrollo de aplicaciones que se dedican a la vida se preocupan por las aplicaciones de línea de negocio.
Creo que las preguntas que prueban el conocimiento de una persona sobre las aplicaciones de línea de negocio son apropiadas en la mayoría de los casos, a menos que esté buscando desarrolladores en nichos muy específicos, como el desarrollo de compiladores, el desarrollo de motores de juegos, la prueba de teoremas, el procesamiento de imágenes, etc. .