2010-04-19 36 views
16

que no quiero a pedir a los candidatos questions, sino más bien darles varios problemas por resolver. La razón de esto es que he visto gente excelente con la teoría, pero cuando se enfrenta a un problema de C# del mundo real, simplemente no podía hackearlo.Buscando algunas buenas C# problemas entrevista

Estos problemas de C# deberían ser lo suficientemente simples como para que no tome más de 1-20 minutos resolverlos, pero lo suficientemente complicados como para eliminar a los candidatos que no pueden codificar.

En este momento, típicamente les pido a los solicitantes que inviertan una cadena y eliminen duplicados de una lista. Esto solo elimina a un gran número de personas.

¿Algún otro ejemplo que podría usar?

Editar: Debería haber mencionado que esto es para un concierto estándar de C#, donde escribirán código comercial en lugar de encontrar la forma más óptima de implementar una lista vinculada.

+0

Este tipo de pregunta/discusión es mejor para LinkedIn – Jaider

+0

Si dices "elimina a un gran número de personas", entonces en realidad puedes hacerlo de una manera mucho más eficiente. Pruebe https://tests4geeks.com/test/c-sharp; esta es la prueba de habilidades C# que permitirá eliminar a las personas incluso sin verlas. A pesar de que se trata de un cuestionario, la prueba utiliza principalmente ejemplos de código en lugar de preguntas teóricas. –

Respuesta

23

me gusta recoger problemas sencillos que en realidad tenía que resolver en algún momento; no es más relevante para el trabajo que eso.

Cuando trabajaba en VBScript preguntaba a los candidatos de la universidad cómo escribir una versión simplificada de DateDiff, ya que hacerlo era lo que hice en mi primer día de trabajo real en Microsoft. A los candidatos más avanzados les preguntaría cómo crear un dispositivo que rastree la relación entre los identificadores de 32 bits y un puntero asociado de 64 bits, lo que de nuevo tuve que hacer cuando trabajaba en VBScript.

Más recientemente tiendo a hacer preguntas sobre los algoritmos de manipulación de árboles, ya que el compilador se trata de manipulación de árboles. O sobre cómo codificar nuevos operadores usando mónadas, ya que así es como funciona LINQ.

Mi punto no es que deba usar preguntas en estas áreas, mi punto es que seguramente debe haber tenido problemas que tuvo que resolver en su trabajo diario. Pregúntales a los candidatos sobre esos problemas, luego aprenderás cómo resuelven un problema realista y aprenderán qué tipo de problemas resolverían si vinieran a trabajar contigo.

+0

Entonces, solo por curiosidad, ¿Cómo implementa uno DateDiff para usar en VBScript? – AngryHacker

+0

@angryhacker: http://blogs.msdn.com/ericlippert/archive/2009/06/01/bug-psychology.aspx –

+1

lippert. Guau, muy interesante. No soy un experto en estas cosas de ninguna manera, pero ¿por qué no utilizar un número entero de 64 bits para contar la cantidad de segundos desde 30 de diciembre de 1899. En lugar de utilizar dobles con números significativos? Parece que sería mucho más simple y obtendría un beneficio de rendimiento debido a las matemáticas enteras. – AngryHacker

19

dont solicite el conocimiento de las bibliotecas de clases o las esquinas oscuras del idioma (inseguro, dinámico, ...); las personas inteligentes pueden recogerlas o buscarlas.

Me gustaría pedir diseñar una jerarquía de clases para representar algo del mundo real (vehículos, animales, ...). Esto generalmente elimina a las personas que no reciben objetos. Haz que lo hagan con interfaces también. También hágales invertir una cadena - no hay daño en oldies pero goldies

+2

A mucha gente no le gusta el tipo de "diseñar un modelo de objeto para un automóvil". El problema principal es que normalmente no dan un contexto de por qué quieres el modelo OO. Encontré este artículo con un poco de ayuda de Google: http://www.nomachetejuggling.com/2010/04/06/avoiding-the-big-design-interview-question/ –

+0

Pero eso es muy cierto que no deberías pregunte sobre cosas que cualquiera podría buscar en Google en un minuto, u oculte cosas que una persona inteligente podría aprender rápidamente cuando tenía que saber. La única excepción a esto es si se anuncian como un maestro de C#, en cuyo caso es razonable hacerles preguntas poco claras, ya que debieron haber encontrado muchas cosas oscuras. –

+0

@DavidJohnstone - Estoy de acuerdo, si alguien me dice que es un experto en C++ (siempre les pido que se puntúen de 10) les pregunto qué significa "mutable". 100% tasa de falla hasta el momento :-(Lo mismo para 'dinámico' con C# - aunque he tenido 1 respuesta correcta para ese – pm100

3

Una pregunta que me formularon, y posteriormente pregunté a los entrevistados, es "Describa cómo haría que este teléfono fuera una aplicación". Haga que describan las clases, sus propiedades, métodos, interfaces, etc. Luego, pregúnteles por qué eligieron implementarlos de esa manera específica. Le da una buena idea si ellos entienden cómo codificar, y les da una idea de cómo abordan y resuelven problemas. Además, si ofrece una sugerencia de cómo podrían haberlo implementado de una manera diferente, puede mostrarle si están abiertos a nuevas ideas, críticas, si son jugadores de equipo o no.

10

Muéstreles una pequeña sección de código o diagrama de arquitectura de uno de sus proyectos y pídales que sugieran cómo podrían refactorizarlo. Incluso si no termina de contratarlos, es posible que obtenga algunas sugerencias interesantes sobre cómo mejorar su código.

+4

esto es una práctica común y es deplorable en mi opinión. Lo he visto llevado a extremos extremos. simplemente huele. EN MI OPINIÓN –

+0

después de ver tu fraseo de nuevo, me doy cuenta de que puedo haber reaccionado emocionalmente con mi voto negativo. Permítanme remediar eso. Pero todavía creo que las esperanzas de un trabajo libre mancharían el proceso y tal vez dejarían el candidato con mal gusto en la boca. –

+1

Ciertamente, no recomendar el software equivalente a licitar un contrato y robar los planos para construirlo usted mismo, pero creo que es una buena pregunta si lo enmarca correctamente. –

2
+0

[Enterprise Fizz Buzz] (http://codermike.com/if- algo que vale la pena hacer) –

3

Algo ligeramente algorítmica.

  1. Escriba un método que devuelva verdadero si una cadena es un palíndromo, y falso en caso contrario.
  2. Vuelva a implementar el método String.Substring (int, int).

Algo sobre el diseño orientado a objetos también.

  1. Diseña un juego de damas (es decir, define las clases y algunos de los métodos).
15

Estoy de acuerdo contigo, es sorprendente la cantidad de personas afirman que ser experimentado y se entera de que todo lo que hicieron fue leída la caja ...

No sé si la prueba para C# es tan valioso como parece al principio ... seguro que podría pedirles que describan un ejemplo de cuándo necesitaron usar la herencia, o por qué el lanzamiento podría tener un problema de rendimiento, etc. Pero estos son fáciles de estudiar. Te sorprendería saber cuántos entrevistados dan el ejemplo usando "automóvil" o "color" cuando dan su ejemplo de herencia en el mundo real ... Supongo que están en un libro en alguna parte.

Cuando veo este problema, me ayuda cuando comparo la experiencia en desarrollo con el aprendizaje del español. Un corto tiempo en la clase, todos están conjugando verbos y pueden pasar una prueba con esto ... pero aún nadie habla español. Quieres al hombre que dice hablar español y puede hacerlo.

Así que me gusta ser más específico con las otras tecnologías que me dirán si han viajado por el camino desgastado del desarrollo. Si dicen que son desarrolladores de ASP.Net, les hago preguntas simples, pero que están en la ruta

EJEMPLOS: Dame un ejemplo de dónde podría vivir la cadena de conexión. Si necesita pasar una identificación de una página a otra, ¿cuáles son sus opciones? Si una página tarda 5 minutos en cargarse, dígame cómo solucionarla. Si tuviera una página web que tuviera un solo botón, ¿cómo centraría ese botón? ¿Cuál es la diferencia entre almacenar variables en el estado de sesión de versos de viewstate?

No tiene que saber todo, pero el ochenta por ciento de las personas que se entrevistan para un puesto de nivel superior obtendrá el 10% de este tipo de preguntas correctamente. (Y en el 70% de las entrevistas telefónicas, las escuchará buscando en Google las respuestas; bueno, estos no son los tipos de preguntas que puede buscar fácilmente en Google).

SQL Server es casi lo mismo. Dicen que se calificarían a sí mismos como 8 o 9 en el desarrollo de SQL Sever, pero luego obtendrían el 10% de las preguntas. Las preguntas nuevamente son para ver si has estado en el camino desgastado.

EJEMPLOS: Si tuviera una tabla de clientes y una tabla de pedidos, ¿cómo encontraría los clientes que no tenían pedidos? ¿Qué es un índice agrupado? Si tuviera una tabla de desarrolladores y una tabla de proyectos, ¿cómo la configuraría para que los proyectos tuvieran múltiples desarrolladores y los desarrolladores podrían estar en múltiples proyectos?

¿Cómo podría desarrollarse en SQL Server por "años" y no tener estos conceptos? ¡Un alto porcentaje de candidatos no obtiene casi ninguna de estas respuestas! (Supongo que el cuadro de SQL Server no es tan informativo.)

Así que si dices que eres un chico de alto nivel y puedes decir "soy un revelador de software" (soy un desarrollador de software), pero no puedo decir "He hecho eso antes" (lo he hecho antes), no creo que seas la persona de alto nivel que dices ser.

Ahora esto le dice si han estado en el camino desgastado, pero no si son inteligentes y tienen buenas habilidades para resolver problemas. Después de haber pasado por un montón de este tipo de entrevistas, puedo decirles que para cuando termine el proceso, estarán satisfechos con tener suficiente información para tener una opinión firme sobre estos dos temas. También es posible que veas que para entonces darles un problema establecido para resolver es innecesario.

+0

+1 Grandes ejemplos de preguntas sencillas –

6

Building Eric's y otras respuestas aquí, pero respondiendo como el único que siempre ha sido entrevistado, lo que me gustaría en una entrevista es una especie de "prueba" de programación de parejas, donde te sientas juntas frente al pantalla, y hablar a través de un problema del mundo real.

creo que habría muchas ventajas:

  • Para el entrevistado, estar frente a una pantalla en lugar de enfrentar el entrevistador hace que sea más fácil pensar en el problema en lugar de la entrevista.
  • Para el entrevistador, estar con el entrevistado mientras revisan el código y hacen preguntas sobre el espacio problemático daría una idea mucho mayor de cómo piensa el entrevistado, cómo abordan los problemas y cómo se comunican e interactúan con los demás.

yo esperaría que es más importante e interesante para ver un candidato a pensar alrededor de los bordes de su problema del mundo real, incluso si no resuelven por completo, que tener a conseguir 10 de 10 en ven prueba algorítmica.

+0

También creo que así es como deberían realizarse las entrevistas de programación. – Krythic

Cuestiones relacionadas