¿Cuáles son algunas preguntas de tipo FizzBuzz para desarrolladores web o SQL? [cerrado]

10

Después de un tiempo, estamos contratando nuevamente, y estoy revisando las pruebas para programadores; algunos de ellos están un poco desactualizados. ¿Cuáles son algunas de las preguntas de tipo FizzBuzz para desarrolladores web y SQL? Es decir, no es demasiado trivial, pero puede resolverse en cinco a diez minutos con lápiz y papel y sin Google.

Por lo general, elimino alrededor de dos tercios o más de los candidatos en función de su CV, y luego todos menos algunos candidatos realmente buenos en una entrevista de una hora (que puede ser por teléfono). En este punto, el candidato está escribiendo una prueba de personalidad y tiene la oportunidad de escribir un poco de código similar a FizzBuzz. Por lo tanto, no estoy tratando de eliminar a un grupo de candidatos, pero estoy tratando de validar mi evaluación inicial de que el candidato es contratable y capaz de codificar.

Domchi
fuente
2
¿Qué habilidades buscas en un desarrollador web?
Oded
Supongo que estoy buscando la comprensión de HTML / CSS / JSON / HTTP; como Rachel mencionó, FizzBuzz está bien para probar Javascript / PHP / etc.
Domchi

Respuestas:

12

Veo FizzBuzz como una prueba para ver si las personas realmente saben lo que dicen saber en su currículum. No lo usaría como otra cosa que una pregunta para descartar candidatos que no saben de qué están hablando.

Un reemplazo adecuado de SQL sería simplemente pedirle al candidato que escriba una declaración SQL, como seleccionar los campos Nombre de dos tablas unidas que comienzan con A. Es simple y demuestra que el candidato realmente tiene algún conocimiento de SQL.

SELECT Table1.Name, Table2.Name
FROM Table1 
INNER JOIN Table2 ON Table1.Id = Table2.Id
WHERE Table1.Name LIKE 'A%' OR Table2.Name LIKE 'A%'

Para un desarrollador web, simplemente les pediría FizzBuzz. El hecho de que esté programando para la web no significa que deba carecer de la capacidad de hacer una lógica de programación básica.

Si está buscando preguntas de entrevistas reales, hay muchas buenas en línea que puede encontrar con una búsqueda rápida. Encontré más de lo que me importa enumerar al tomar 10 segundos con Google.

Rachel
fuente
2
Las uniones son una buena manera de separar a los novatos de los programadores SQL más avanzados, ya que en la programación SQL generalmente se requiere un paradigma diferente para pensar que la programación del lado del servidor, que generalmente es imprescindible. Las uniones y subconsultas solían confundirme hasta que comencé a pensar en las declaraciones SQL en términos de conjuntos.
Chris C
@CCRicers Estoy de acuerdo. Y si está entrevistando para un desarrollador avanzado de SQL, en realidad también agregaría un requisito de GRUPO a eso, ya que trabajé bastante con SQL antes de entender completamente lo que significaban los grupos y cómo funcionan
Rachel
Considere solicitar una autoinscripción: "CREAR EMPLEADO DE TABLA (NÚMERO DE IDENTIFICACIÓN, TEXTO DE NOMBRE, NÚMERO DE ID DE ADMINISTRADOR)" y luego "¿Cómo puedo enumerar a los empleados y sus gerentes?"
Kevin Cline
Dependiendo del tipo de base de datos / posición de SQL que esté contratando (y los antecedentes del desarrollador / su entorno), puede solicitar una respuesta real de 'FizzBuzz'.
Clockwork-Muse
Y tiene la ventaja adicional de que es una especificación deficiente, por lo que prueba si el candidato aclara los requisitos antes de escribir el código.
Peter Taylor
4

Aquí hay una respuesta que di a una pregunta muy similar (posiblemente duplicada) que se cerró en este sitio.

Nivel extremadamente fácil: dada una tabla de empleados con las columnas EmpID, FirstName, Lastname, HireDate y TerminationDate: escriba una consulta para devolver a todos los empleados que aún trabajan para la empresa con apellidos que comienzan con "Smith" ordenados por apellido y luego nombre.

Nivel fácil Dada la tabla de empleados anterior, más una nueva tabla "Revisiones anuales" con las columnas EmpID y ReviewDate: escriba una consulta para devolver a todos los empleados que nunca tuvieron una revisión ordenada por HireDate.

Nivel medio
Dada la tabla de empleados anterior, ¿escribe una consulta para calcular la diferencia (en días) entre el empleado más y el menos ocupado que aún trabajan para la empresa?

Nivel difícil Dada la tabla de empleados anterior, escriba una consulta para calcular el período más largo (en días) que la compañía ha pasado sin contratar ni despedir a nadie.

Nivel
más difícil Nuevamente, utilizando las mismas tablas, escriba una consulta que devuelva a cada empleado y para cada fila / empleado incluya la mayor cantidad de empleados que trabajaron para la compañía en cualquier momento durante su mandato y la primera fecha en que se alcanzó el máximo. Puntos extra por no usar cursores.

JohnFx
fuente
1
Interesante pregunta. Sin embargo, el nivel "Difícil" / "Más difícil" me parece realmente difícil. Incluso con una experiencia SQL decente, creo que probablemente sea demasiado difícil de resolver en una situación de entrevista. Tal vez si deja al candidato solo durante media hora más o menos.
sleske
Me di cuenta de que la pregunta "más difícil" fue difícil cuando me di cuenta de que ni siquiera sé qué es un cursor ... ¡y usé MySQL todos los días! : - /
thesunneversets
@Johnfx Puede ver estas respuestas para sus problemas que entrevisté
pasado
¿Por qué necesitas que lo mire? Puede probarlo usted mismo y ver si obtiene la respuesta correcta.
JohnFx
3

¿Qué tal fizzbuzz en sí? Aquí hay una versión de Oracle:

select case when mod(level,35) = 0 then 'fizzbuzz'
            when mod(level,7) = 0 then 'buzz'
            when mod(level,5) = 0 then 'fizz'
            else to_char(level) end fizzbuzz
from dual connect by level <= 100

fuente
1
+1 por genialidad, pero creo que las tablas de números virtuales no aparecen con la frecuencia suficiente para estar en la caja de herramientas SQL de todos. Tendrías que verlos así
Conrad Frix, el
0

Me parece que las personas tienden a tener muchos problemas para trabajar con el tiempo por alguna razón, por lo que puede ser un buen lugar para hacer una pequeña prueba.

Algo como esto:

Parte 1: Cree una función que calcule el enésimo o último día de la semana en un mes determinado, es decir; el primero, tercero, el martes pasado en el próximo mes.

Parte 2 (si lo desea): Diseñe tablas para contener expresiones temporales para programaciones recurrentes. Los horarios pueden ser cualquiera de "el enésimo día de la semana de uno o más meses" o "el enésimo día de uno o más meses" o "cada N días desde la fecha".

Ejemplo, el 15 de cada mes, el último miércoles de cada marzo, el último día de cada mes, cada 17 días a partir del 2 de diciembre de 2008, etc.

Eli
fuente
2
-1: Trabajar con el tiempo y hacerlo bien ES realmente difícil. Adivina por qué existen bibliotecas como JodaTime y no son solo una pieza trivial de software.
sebastiangeiger
@sebastiangeiger Estoy de acuerdo. Trabajo con SQL casi a diario y, aunque puedo usar las funciones de fecha de SQL de manera eficiente, no podría hacer algo así de manera rápida o fácil sin la ayuda de Google. De hecho, necesitaba hacer esto hace unos meses y después de unos minutos de tratar de resolverlo en SQL, simplemente lo busqué en Google y obtuve algunos scripts que utilizo con algunas modificaciones para satisfacer mis necesidades.
Rachel
No estoy buscando áreas problemáticas; Estoy buscando algo con lo que cualquier desarrollador promedio trabaje a diario y pueda recordar sin ningún problema y en un entorno desconocido (no hay computadora disponible). Si bien su ejemplo no es tan difícil, es más un problema que le daría a alguien que codifique frente a mí para ver cómo está pensando.
Domchi
1
@Eli Creo que se espera que FizzBuzz se resuelva / codifique en consecuencia.
Aaron McIver
1
No creo que la Parte 2 sea una buena pregunta. De hecho, este tema tiene una solución extraña que no ocurre casi en ningún otro problema de diseño de bases de datos en los negocios. no saber la respuesta no es una indicación de poco conocimiento de SQL.
NoChance