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. .
(Regex) Write a regular expression which removes all tags from a block of HTML.
-He encontrado estas listas en de Scott Hanselman 's Blog :
Esto es lo que creo que son las preguntas más importantes de estas publicaciones divididas en categorías. Los edité y los reorganicé. Afortunadamente para la mayoría de estas preguntas, ya hay una buena respuesta en Stack Overflow. Simplemente siga los enlaces (los actualizaré todos lo antes posible) .
Preguntas independientes de la plataforma .NET
a.Equals(b)
ya == b
?Assembly.LoadFrom
oAssembly.LoadFile
sería apropiado?Finalize()
yDispose()
? ( artículo externo )Debug.Write
yTrace.Write
? ¿Cuándo se debe usar cada uno?catch (Exception e) {throw e;}
y catch(Exception e) {throw;}
?typeof(foo)
ymyFoo.GetType()
?ASP.NET
q=
excepto dondeq=5
(como enhttp://localhost/page.aspx?q=5
)?fuente
Es posible que esto no sea lo que desea escuchar, pero recomendaría no centrarse en tecnologías limitadas, sino en habilidades generales de programación y resolución de problemas. Los desarrolladores sólidos pueden aprender lo que quieras que hagan rápidamente.
Yo, por ejemplo, no soy un tipo de Compact Framework, por lo que podría fallar su entrevista si fue en esa dirección. Pero si tuviera que usarlo, podría investigar un poco y comenzar de inmediato.
El libro de Joel, Smart and Gets Things Done , tiene excelentes consejos para contratar desarrolladores y hay grandes secciones jugosas sobre el tipo de preguntas que hacer. Lo recomiendo altamente.
fuente
Creo que si me estaban entrevistando a alguien que tenía experiencia LINQ, yo posiblemente simplemente pedirles que expliquen LINQ. Si pueden explicar la ejecución diferida, la transmisión, las interfaces IEnumerable / IEnumerator, foreach, bloques iteradores, árboles de expresión (para puntos de bonificación, de todos modos), entonces probablemente puedan hacer frente al resto. (Es cierto que podrían ser desarrolladores "ok" y no "obtener" LINQ todavía; realmente estoy pensando en el caso en el que afirman que conocen suficiente LINQ para que sea una pregunta justa).
En el pasado, he hecho varias de las preguntas ya enumeradas, y algunas otras:
fuente
Estoy con los muchachos que buscan habilidades para resolver problemas en lugar del tipo de cosas que puedes buscar y memorizar de '101 preguntas y respuestas de la entrevista .NET superior ".
Solo para citarme a mí mismo como ejemplo, tiendo a 'conocer' las cosas que necesito usar día a día. Tiendo a olvidar (y luego tengo que volver a buscar) cosas que uso raramente.
Si quisieras hacerme tropezar en una entrevista, sería muy fácil.
Sin embargo, he diseñado y codificado gran parte de la infraestructura para un sistema que utiliza capas de datos y objetos comerciales idénticos para sus encarnaciones WinForms y ASP.NET, y nuestra base de código es lo suficientemente robusta y reutilizable para que podamos admitir y desarrollar más de 20 versiones configuradas de manera diferente del sitio web, así como un número creciente (actualmente 5) de la aplicación WinForms ...
... con un equipo de desarrollo de dos.
Solía trabajar en un equipo como líder tecnológico, y mi trabajo implicaba mucho reclutamiento y entrevistas. Mi error más espectacular fue contratar a un tipo que sabía más sobre la tecnología que estábamos usando que todos los demás juntos, incluyéndome a mí, y me consideré un experto. Lo sabía todo ...
... excepto cómo escribir código que cumpla con los requisitos o que nadie más pueda entenderlo. Cuando finalmente convencí al primer ministro para que no renovara su contrato, cada cosa que escribió tuvo que ser reescrita.
Estructura tus entrevistas sabiamente ...
fuente
Quien es Jon Skeet?
fuente
Las buenas preguntas que me han hecho son
Sería interesante ver qué se le ocurriría a un candidato y seguramente aprenderá un poco sobre cómo utiliza el marco.
fuente
Siempre buscaría las habilidades blandas, sin juego de palabras. Por lo tanto, un buen diseño de OO, un desarrollo impulsado por pruebas, un buen fondo lingual multi (programación) y una inteligencia general general (¡y hacer las cosas, supongo!).
Un desarrollador inteligente no debería tener problemas para aprender las tecnologías individuales que necesita saber, incluso si nunca las ha visto antes, por lo que no me preocuparía demasiado sobre preguntas específicas sobre WCF / marco compacto y similares.
Me gustaría que escribieran algún código, la mejor manera de averiguar lo que saben y cómo funcionan. Cualquiera puede memorizar la respuesta a '¿Cuál es la diferencia entre un tipo de referencia y un tipo de valor?'
fuente
¿Honestamente?
"¿Qué es .NET?"
Si pueden darle una respuesta clara sobre qué es .NET y qué no es, cómo se usa, de qué elementos está compuesto, etc. Si pueden convencerlo de que saben lo que es, entonces es probable que Lo sé bastante bien.
El hecho es que muchas personas realmente no saben qué es .NET. Incluso aquellos que escriben programas para ello.
fuente
Ninguno, de verdad. Probablemente hay preguntas muy simples que las personas más inteligentes del mundo no conocen las respuestas. No porque sean difíciles, sino simplemente porque no lo han encontrado. Debería mirar todo el paquete y la habilidad del desarrollador, no si pueden responder una pregunta arbitraria.
Si la pregunta es fácil de responder en una o dos oraciones cortas, es fácil decirle a alguien que no sabe. Debe buscar su comprensión de los conceptos y la capacidad de razonamiento, no su capacidad para responder preguntas "todos los desarrolladores de .NET deberían poder responder".
fuente
Conozca la diferencia entre los tipos de referencia y valor.
Sepa que los eventos se almacenan como referencias físicas (es decir, recuerde anular el registro de eventos o la aplicación perderá memoria).
Las cuerdas son inmutables.
fuente
Martin Fowler prefiere las habilidades de diseño sobre el conocimiento de la plataforma . Por otro lado, puede hacer una pregunta que mostrará el conocimiento de los patrones de diseño y la plataforma .NET como esta:
fuente
Sugiero preguntar sobre los blogs que leen regularmente y los proyectos de programación personal en los que han trabajado, ya que esto mostrará una disposición a aprender y una pasión por la programación.
fuente
Aquí hay algunos que he usado para filtrar a los programadores que solicitan trabajos como programadores de C #:
¿Cuál es la diferencia entre un tipo de referencia y un tipo de valor?
Explique la interfaz IDisposable, qué construcción de lenguaje C # lo requiere y cómo lo implementaría.
¿Qué excepción lanzaría si se pasa un valor nulo como argumento a un método que tiene un contrato que no permite valores nulos para ese parámetro?
fuente
"¿Cuál de los ASP: los controles que usarías en la producción y por qué?"
Eso le dirá rápidamente si su sujeto realmente ha construido y mantenido un proyecto grande durante el tiempo suficiente para que DataGrids y LinkButtons lo hayan quemado, o si todavía está en la fase de Arrastrar / Soltar "enseñarse en 21 días".
(la respuesta es asp: Repeater, asp: PlaceHolder, asp: Literal y asp: Content)
fuente
¿Qué es un hilo?
¿Qué es el GC?
fuente
Esta es una pregunta un poco variable, y no realmente una que debería poder contestar completamente ahora, sino una que debería poder responder cuando sea apropiado:
"¿Qué ofrece .NET Framework para realizar la tarea X?"
O más específicamente:
"¿El marco .NET incluye un objeto que hace X?"
Por ejemplo, recientemente pasé unas horas desarrollando un objeto que está optimizado para almacenar una matriz de booleanos y operar en él, como hacer un NOT, OR, XOR y AND en conjunto, establecer todos los valores, etc. Hasta que terminé de escribir todas mis pruebas unitarias y ajustarlas para obtener el mejor rendimiento posible, me di cuenta de que mi objeto "BoolArray" ya existía en el marco .NET con el nombre "BitArray".
Esto puede ser difícil de responder, ya que muchas veces la mejor respuesta sobre qué objeto / ayuda utilizar es la que no conoce o no comprende completamente. Qué maravilloso sería el mundo .NET si todo el mundo supiera incluso sobre el simple StringBuilder, una herramienta básica que puede aumentar significativamente el rendimiento.
fuente
Sugeriré algunas preguntas centradas en la comprensión de los conceptos de programación usando dotnet como
¿Cuál es la diferencia entre un entorno gestionado y no gestionado? Pros y contras de GC Pros y contras de JIT Si necesitamos desarrollar la aplicación X, ¿podemos usar dotnet? ¿Por qué? (Esto identificará cómo ve el dotnet)
Sugiero también escribir métodos pequeños y pedirle que los reescriba con un mejor rendimiento utilizando mejores clases de dotnet o formas estándar. También escriba métodos incorrectos (en términos de cualquiera) lógicos o lo que sea y pídale que los corrija.
fuente
Soy fanático de lo siguiente, además de algunas de las preguntas ya mencionadas:
fuente
Esto es interesante, y con el riesgo de que este voto sea rechazado por poner en mi opinión, ya que nazco sordo, que me hagan una pregunta como esa requeriría más esfuerzo para comunicar personalmente mis pensamientos.
Para ser franco, realmente no leería demasiado las preguntas típicas, ya que el paradigma subyacente es ' ¿Qué tan bien puedes vocalizar tus pensamientos y comprensión? ', eso es realmente lo que el entrevistador está buscando. La comunicación es siempre mi mayor debilidad debido a mi forma de ser y puede frustrarse con bastante facilidad.
Sería ideal tener el conocimiento y ser del tipo sabelotodo, pero desafortunadamente, hay algunas cosas que no sé, pero no tener miedo si realmente no sabes la respuesta y la admites en lugar de farolear a traves de. Si un entrevistador me hiciera una pregunta como una de las anteriores, de la que no estaría seguro o no entendería / interpretaría mal la pregunta, lo diría por adelantado, lo que personalmente puede ser vergonzoso, pero he aprendido a manejar eso.
Te sorprendería saber cuántos realmente se enredarían y fanfarronearían en lo que al final del día quedarían atrapados con sus 'pantalones bajados' metafóricamente hablando.
Mis 2 centavos, Saludos cordiales, Tom.
fuente
Un poco mas:
fuente
No haría esas preguntas de "saber algo del libro de texto", sino más bien hacer algunas preguntas como:
Estos no son 100% seguros, dependiendo de la persona que les pregunte:
También le preguntaría cómo aprendió sus cosas y qué está leyendo (qué blogs, libros).
fuente
Un poco mas:
¿Cuáles son las limitaciones de la recolección de basura?
Conozca los finalizadores e IDisposable.
Tenga en cuenta el grupo de subprocesos y cuándo usarlo.
Si está haciendo aplicaciones GUI, tenga en cuenta que la GUI de Windows es de un solo subproceso.
Use foreach (veo mucha gente haciendo MoveNext, etc.)
fuente
Creo que no deberían ser solo preguntas, conozco a algunos tipos que son brillantes cuando los entrevistas, pero una vez que llegan a la realidad son demasiado perfeccionistas, diría que no pueden codificar la tarea de manera miserable.
Una vez me entrevistaron y me gustó el enfoque en el que el primer empleador me dio un cuestionario técnico para completar en 30 minutos. Si uno tiene éxito, lo llamarán para una entrevista de 1 hora que abarque preguntas sobre el juicio de la personalidad y la búsqueda de personajes, además de jergas técnicas.
Luego me pidieron que desarrolle una aplicación web de tres páginas en 6 horas. Las restricciones impuestas en la aplicación cubrían de manera inteligente aspectos importantes del desarrollo de la aplicación, como un pequeño ERD, Diseño de capa, Consistencia de la interfaz de usuario, controlan problemas específicos como usar botones de radio en GridView y Fetching y mostrar tipos de imágenes desde DB en una página web, desarrollo de un algoritmo, seguridad, cifrado, hash, representación y manipulación de datos.
Luego, al día siguiente, siguieron una discusión de 30 minutos sobre la aplicación desarrollada que cubre áreas de cuellos de botella de rendimiento y mejoras en el diseño y los algoritmos utilizados. Y una prueba opcional de 1 hora para mejorar su algoritmo desarrollado en el paso anterior con una condición específica.
Por lo tanto, tomó bastante tiempo, pero de esta manera puede asegurarse de que la persona que está contratando conozca, al menos, los conceptos que son esenciales para un buen desarrollador.
fuente
Preferiría darle un problema y pedirle que lo resuelva utilizando las características de .net que conoces y por qué crees que es la mejor solución.
Esto agrietará casi todas las capacidades de un candidato en términos de habilidades técnicas, analíticas y de resolución de problemas junto con su enfoque para resolver un problema.
fuente