una trabajo software sistemas qué que programador programacion preguntas net entrevista empresa ejemplos desarrollador curso basico analista .net

trabajo - ¿Preguntas que todo buen desarrollador de.NET debería poder responder?



programador net que es (25)

Mi empresa está a punto de contratar desarrolladores .NET . Trabajamos en una variedad de plataformas .NET: ASP.NET, Compact Framework, Windowsforms, Web Services. Me gustaría compilar una lista / catálogo de buenas preguntas, una especie de estándar mínimo para ver si los solicitantes tienen experiencia. Entonces, mi pregunta es:

¿Qué preguntas crees que debería responder un buen programador de .NET ?

También lo vería como una lista de verificación para mí mismo, para ver dónde están mis propios déficits (hay muchos ...) .

* ACTUALIZACIÓN: Queremos aclarar que no estamos probando solo para el conocimiento de .NET, y que las capacidades de resolución de problemas y las habilidades de programación en general son aún más importantes para nosotros.


"¿Cuál de los ASP: cualesquiera controles usarías en la producción y por qué?"

Eso le dirá rápidamente si su sujeto alguna vez realmente construyó y mantuvo un proyecto grande durante el tiempo suficiente para quemarse con DataGrids y LinkButtons, o si aún se encuentra en la fase de "enseñe a sí mismo en 21 días".

(la respuesta es asp: Repeater, asp: PlaceHolder, asp: Literal, y asp: Content)


¿Honestamente?

"¿Qué es .NET?"

Si pueden darle una respuesta clara sobre qué es .NET y qué no, cómo se usa, de qué elementos se compone, etc ... Si pueden convencerlo de que saben qué es, entonces es probable que lo hagan. sé muy bien

El hecho es que muchas personas no saben realmente qué es .NET. Incluso aquellos que escriben programas para ello.


¿Qué es un hilo?

¿Qué es el GC?


¿Quién es Jon Skeet?


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 nulo como argumento a un método que tiene un contrato que no permite nulos para ese parámetro?


Buenas preguntas que me han hecho son

  • ¿Qué crees que es bueno sobre .NET?
  • ¿Qué crees que es malo acerca de .NET?

Sería interesante ver qué se le ocurriría a un candidato y, ciertamente, aprenderá bastante sobre cómo usa el marco.


Conozca la diferencia entre los tipos de referencia y valor.

Sepa que los eventos se almacenan como referencias duras (es decir, recuerde cancelar el registro de los eventos o la aplicación perderá memoria).

Las cuerdas son inmutables.


Creo que no deberían ser solo preguntas, conozco a algunos tipos que son brillantes cuando los entreviste, pero una vez que llegan a la realidad, son demasiado perfeccionistas, diría que no logran codificar la tarea miserablemente.

Una vez me entrevistaron y me gustó un poco el enfoque donde el primer empleador me dio un cuestionario técnico para completar en 30 minutos. Si uno tiene éxito, se lo llamará para una entrevista de 1 hora que cubra las preguntas sobre el juicio de la personalidad y la búsqueda del carácter, además de jerga técnica.

Luego me pidieron que desarrollara una aplicación web de tres páginas en 6 horas. Las restricciones impuestas en la aplicación cubrían inteligentemente un aspecto importante del desarrollo de la aplicación como un ERD pequeño, Layerd Design, UI Consistency, controla problemas específicos como el uso de los botones de Radio en GridView y la obtención y visualización de tipos de imágenes de DB en una página web, un desarrollo de 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 cubría las áreas de cuellos de botella de rendimiento y las mejoras en el diseño y los algoritmos utilizados. Y prueba opcional de 1 hora para mejorar su algoritmo desarrollado en el paso anterior con una condición específica.

Así que tomó bastante tiempo, pero de esta manera puede asegurarse de que la persona que está contratando conoce, al menos, los conceptos que son esenciales para que un buen desarrollador lo sea.


Creo que si estuviera entrevistando a alguien que tuviera experiencia con LINQ, posiblemente solo les pediría que me explicaran LINQ. Si pueden explicar la ejecución diferida, la transmisión, las interfaces IEnumerable / IEnumerator, foreach, los bloques de iteradores, los árboles de expresión (para los 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 afirmaron saber que LINQ es suficiente para que sea una pregunta justa).

En el pasado he hecho algunas de las preguntas ya enumeradas, y algunas otras:

  • Diferencia entre tipos de referencia y valor.
  • Pase por referencia vs pase por valor
  • Idisponible y finalizadores.
  • Cuerdas, inmutabilidad, codificaciones de caracteres.
  • Punto flotante
  • Delegados
  • Genéricos
  • Tipos anulables

Encontré estas listas en el blog Scott Hanselman :

Aquí están las que creo que son las preguntas más importantes de estas publicaciones divididas en categorías. Los edité y reordené. Afortunadamente para la mayoría de estas preguntas, ya hay una buena respuesta en . Simplemente siga los enlaces (los actualizaré a todos lo antes posible) .

Plataforma independiente de preguntas .NET

ASP.NET


Esta es una pregunta un poco variable, y en realidad no debería ser capaz de responder completamente ahora, pero sí debería ser capaz de responder cuando sea apropiado:

"¿Qué ofrece el marco .NET para realizar la tarea X?"

O más específicamente:

"¿El .NET framework incluye un objeto que hace X?"

Por ejemplo, recientemente pasé unas horas desarrollando un objeto que está optimizado para almacenar una matriz de valores booleanos y operar sobre él, como hacer una recopilación de NOT, OR, XOR, AND, establecer todos los valores, etc. No fue así. Hasta que terminé de escribir todas mis pruebas unitarias y de 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".

Esta puede ser una pregunta difícil de responder, ya que muchas veces la mejor respuesta sobre qué objeto / ayudante usar es la que no conoce o no comprende completamente. Qué maravilloso sería el mundo .NET si todos supieran realmente incluso sobre el simple StringBuilder, una herramienta básica que puede aumentar el rendimiento en cantidades significativas.


Esto es interesante, y ante el riesgo de que esto sea menos votado por mi opinión, ya que nací sordo, se me hace una pregunta como esa que requeriría un mayor esfuerzo para comunicar mis pensamientos personalmente.

Para ser franco, realmente no leería demasiado las preguntas típicas, ya que el paradigma subyacente es '' ¿Qué tan bien puede vocalizar sus pensamientos y comprensión? '', eso es realmente lo que el entrevistador está buscando. Comunicarme siempre es mi mayor debilidad debido a mi forma de ser y puedo frustrarme con bastante facilidad.

Sería ideal tener el conocimiento y ser el tipo de sabelotodo, pero desafortunadamente, hay algunas cosas que no sé, pero no tener miedo si realmente no sabes la respuesta y lo admites en lugar de farolear. a traves de. Si un entrevistador me hiciera una pregunta como una de las anteriores, de la cual no estaría seguro o malinterpretaré la pregunta, lo diría por adelantado, lo que personalmente puede ser vergonzoso, pero he aprendido a manejar eso.

Usted se sorprendería de la cantidad de waffles y faroles en los que al final del día queden atrapados con sus ''pantalones abajo'' metafóricamente hablando.

Mis 2centos, saludos cordiales, Tom.


Estoy con los chicos que están buscando habilidades para resolver problemas en lugar del tipo de cosas que puedes buscar y memorizar en las 101 preguntas y respuestas más importantes de .NET ".

Solo para citarme como ejemplo, tiendo a "saber" las cosas que necesito usar día a día. Tiendo a olvidar (y luego tengo que volver a mirar) las cosas que uso raramente.

Si quisieras hacerme 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 Business Objects y Data idénticas para sus encarnaciones WinForms y ASP.NET, y nuestra base de código es lo suficientemente robusta y reutilizable para que podamos respaldar 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 consistía en reclutar y entrevistar bastante. 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. Él lo sabía todo ...

... excepto cómo escribir código que cumpla con los requisitos, o que pueda ser entendido por cualquier persona, excepto él mismo. Cuando finalmente persuadí al primer ministro para que no renovara su contrato, cada cosa que escribía tenía que ser reescrita.

Estructure sus entrevistas sabiamente ...


Las preguntas básicas incluyen:

Creo que, por lo general, es útil pedir a los solicitantes que realicen un ejercicio de codificación simple como:

  • Escriba su propia clase de lista vinculada sin utilizar las clases integradas.
  • Escriba su propia clase de tabla hash sin usar las clases integradas.
  • Escribe una clase que represente un árbol binario. Escribe un método que atraviese todos los nodos del árbol.
  • Escriba un método para realizar una búsqueda binaria en una matriz sin utilizar métodos incorporados.
  • 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 preguntas 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 las 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 Pliegue funciona muy 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 de C # competente, y deben darle una buena idea de las fortalezas particulares de sus solicitantes. Es posible que también desee trabajar en algunas preguntas / ejemplos de código que utilicen patrones de diseño específicos.

[Editar para aclarar] :

Parece que mucha gente no entiende por qué me gustaría hacer este tipo de preguntas. Permítame tocar algunos comentarios de la gente (no cito directamente, sino parafraseando en su lugar):

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 entiende las características de alto y bajo nivel de .NET. Las referencias débiles y volátiles son dos características de bajo nivel proporcionadas por .NET; incluso si estas características no se usan a menudo en la práctica, las respuestas a estas preguntas son extremadamente reveladoras:

  • Una buena comprensión de los volátiles demuestra que una persona entiende cómo las optimizaciones del compilador cambian la corrección del código, cómo los hilos mantienen copias locales del estado compartido que puede estar desincronizado en un momento dado, y es mínimamente consciente de algunas de las complejidades del código de 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 la 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 un profundo conocimiento 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 hashtable o lista enlazada?

R: No estoy insinuando que la clase del Diccionario sea inferior o que las personas deban lanzar su propia tabla hash. Esta es una pregunta básica que comprueba 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.

Aprenderá sobre estas tablas hash y listas vinculadas el primer día de las Estructuras de datos 101. Si alguien no puede escribir una tabla hash o una lista enlazada desde cero, tendrá un gran vacío en su conocimiento técnico.

P: ¿Por qué estas preguntas están tan orientadas a la basura?

R: Porque el título de este hilo es "preguntas que todo buen desarrollador de .NET debería saber". Cada desarrollador de .NET comienza su carrera escribiendo aplicaciones crudas, y el 90% de todas las personas que trabajan en el desarrollo de aplicaciones se ocupan de las aplicaciones de línea de negocio.

Creo que las preguntas que prueban el conocimiento de una persona sobre el conocimiento de 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 desarrollo de compiladores, desarrollo de motores de juegos, prueba de teoremas, procesamiento de imágenes, etc. .



Ninguno, de verdad Probablemente hay preguntas muy simples a las 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 el paquete completo y la habilidad del desarrollador, no si pueden responder una pregunta arbitraria.

Si la pregunta es lo suficientemente fácil como para ser respondida en una o dos oraciones cortas, es bastante fácil simplemente 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 "todo desarrollador de .NET debería poder responder".


No haría esas preguntas de "saber algo del libro de texto", sino más bien algunas preguntas como:

  • ¿Qué hace el bucle foreach en C #? (Esperando que escriba un bucle de iterador.)
  • ¿Qué es un singleton?
  • Deje que él / ella analice una cadena a Datetime (esperando que use TryParse en lugar de try / catch)
  • Implementar los patrones singleton, estrategia y comando.
  • Deje que él / ella refactorice una pieza de código para la prueba. Esperando que él / ella abstraiga los servicios externos de la Unidad bajo Prueba e implemente su propia Prueba-doble del servicio (sin proporcionar un marco de burla)

Estos no son 100% seguros, dependiendo de la persona que les pueda preguntar:

  • deje que él / ella proteja un método desde la entrada nula (esperando que él / ella use múltiples retornos para reducir el anidamiento)
  • ¿Cómo funciona un inicializador de objetos? (Esperando que él / ella escriba la asignación segura para subprocesos)

También le preguntaría cómo aprendió sus cosas y qué está leyendo (qué blogs, libros).


Preferiría darle un problema y pedirle que lo resuelva utilizando las características de .net que usted conoce y por qué cree 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.


Puede que esto no sea lo que quiere escuchar, pero recomendaría no centrarse en tecnologías limitadas, sino en programación general y habilidades de 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 Marco Compacto, por lo que podría fallar en tu entrevista si siguieras esa dirección. Pero si tuviera que usarlo, podría investigar un poco y saltar directamente.

El libro de Joel, Smart and Gets Things Done , tiene un gran consejo para la contratación de desarrolladores y hay secciones muy variadas sobre el tipo de preguntas que se deben hacer. Lo recomiendo altamente.


Soy fanático de lo siguiente, además de algunas de las preguntas ya mencionadas:

  • ¿Qué es un delegado?
  • ¿Cuál es el dominio de la aplicación?
  • ¿Cuándo usarías la palabra clave de bloqueo?
  • ¿Son seguras las hebras de clases de colección genéricas estándar?
  • ¿Qué es un método de extensión?
  • ¿Cuál es la diferencia entre XmlDocument y XmlReader?
  • ¿Cómo lees en los ajustes de configuración del archivo de configuración de la aplicación?

Sugeriré algunas preguntas centradas en la comprensión de los conceptos de programación usando dotnet como

¿Cuál es la diferencia entre el ambiente administrado y el no administrado? 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)

También sugiero 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 cualquier) lógicos o lo que sea y pídale que los corrija.


Sugiero consultar sobre los blogs que leen regularmente y sobre los proyectos de programación personal en los que han trabajado, ya que esto mostrará una voluntad de aprender y una pasión por la programación.


Un poco mas:

  1. Clases parciales. ¿Y sus limitaciones?
  2. Clases selladas
  3. ¿Cómo se puede hacer la localización en .NET?
  4. Conectividad de base de datos
  5. Varios archivos de configuración
  6. Delegados vs eventos
  7. Acceso dll no administrado
  8. Reflexiones
  9. Clases genéricas
  10. Más caliente en .NET 3.5
  11. Unidades de prueba de los marcos que ha utilizado.

Un poco mas:

Cuáles son las limitaciones de la recolección de basura.

Conocer sobre finalizadores e IDisposable.

Tenga en cuenta el grupo de subprocesos y cuándo usarlo.

Si está realizando aplicaciones GUI, tenga en cuenta que la GUI de Windows es de un solo hilo.

Use foreach (veo a mucha gente haciendo MoveNext, etc.)


Yo siempre buscaría las habilidades blandas yo mismo, sin juego de palabras. Por lo tanto, un buen diseño de OO, un desarrollo basado en pruebas, un buen fondo lingual multi (programación) y toda la inteligencia general (y, ¡supongo!

Un desarrollador inteligente no debería tener ningún problema en aprender las tecnologías individuales que necesita que conozcan, incluso si nunca las han visto antes, por lo que no me preocuparía demasiado por preguntas específicas sobre WCF / marco compacto y similares.

Me gustaría que escribieran algún código, la mejor manera de averiguar qué 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?"