Creo que hay preguntas fáciles como fizzbuzz, invertir una cadena, etc., y luego hay ciertas preguntas, mientras que si no las ha visto antes, es difícil obtener la solución óptima deseada con la presión adicional de la entrevista y el corto tiempo restricciones La peor parte es que a veces los reclutadores sin conocimientos técnicos hacen algunas de estas preguntas y están buscando una respuesta muy específica ... Si no das la respuesta óptima, piensan que eres un idiota absoluto. Incluso si su respuesta funciona, resuelve el problema, y aunque puede no ser óptimo, no es demasiado ineficiente ...
Algunos ejemplos:
¿Cómo barajarías una baraja de cartas? Buscan el método Fisher-Yates http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffleotras respuestas son "incorrectas" ... Esto no es algo que probablemente sepa a menos que desee barajar cartas antes y específicamente lo haya buscado. Podría tropezar con eso en el curso de la respuesta, pero por lo que he visto, esperan que conozca este frío, por lo que es dudoso que haya mucho tiempo para permitir encontrar la solución. Otra forma menos eficiente (pero quizás más obvia) es crear una nueva matriz con un puntero a la matriz original y un número que sea un número aleatorio y luego ordenar la matriz por el número aleatorio. Luego use la matriz ordenada para construir una nueva matriz de tarjetas. En cualquier caso, obtuve 0 créditos por presentar eso a un reclutador.
Otro ejemplo es la pregunta sobre cómo detectaría un número duplicado en una lista de n números, todos del 1 al n-1. La respuesta obvia (que es relativamente eficiente en una perspectiva de tiempo) es usar una tabla hash para insertar cada elemento y si encuentra uno ya insertado, entonces encontró el duplicado. La respuesta óptima es porque los números están entre 1 yn si no hay duplicados, puede obtener la suma esperada como n (n + 1) / n. Luego, si sumas la matriz, obtienes la suma real, que es nd menor que la suma esperada. Así que básicamente n - (Suma esperada - Suma real) = número duplicado ... Es un caso bastante especial ... En realidad, vi algo antes en una publicación en línea sobre problemas de entrevistas hace mucho tiempo sobre un tema relacionado con el mismo truco, así que Estaba bien ...
Otro, invierte todas las palabras en una cadena sin usar ningún espacio adicional. Tuve que pensarlo y el reclutador se mostró bastante impaciente en los 5 minutos que pensé (dividir y volver a unir la cadena en reversa, o ir palabra por palabra en una nueva matriz son muy fáciles). Se me ocurrió encontrar el borde de la última palabra, encontrar el final de la primera palabra y desplazar constantemente la lista completa por 1 y luego insertar la letra correspondiente. Luego repite hasta que hayas llegado al final de la lista. Este método funcionó y el entrevistador estuvo de acuerdo (era un poco técnico), pero es bastante ineficiente. Cuando llegué a casa busqué la respuesta óptima, y es simplemente revertir la lista, luego revertir cada palabra individual. Algunas personas pueden pensar en eso,
Ahora es cierto una vez que haya visto algunos de estos problemas, puede resolverlos más fácilmente. Porque hay algunas preguntas similares con algunos de los mismos trucos. Sé especialmente que la fórmula n (n-1) / 2 y la lista de números tiene varias variaciones. Pero aún no sé qué prueban estas preguntas. Un FizzBuzz es algo que todos deberían poder hacer (aunque he visto variaciones que no son tan simples, en cuyo caso empiezo a cuestionar si incluso eso es realista para una situación de entrevista sin poder escribir / depurar el código). Algunas de estas preguntas son obvias una vez que las ve, pero si no las ha visto, no lo son. Después de todo lo que alguien mencionó, tardó años en aparecer la primera implementación correcta de la búsqueda binaria ... En este momento, la búsqueda binaria es tan obvia porque todos pueden leer sobre ella.
Sin embargo, creo que la peor parte es cuando las personas no técnicas hacen las preguntas porque no pueden apreciar que su solución es correcta, aunque no óptima. Simplemente saben que su solución no es la presentada y, por lo tanto, todo está mal, no obtiene crédito por el intento. Incluso las soluciones no óptimas a menudo muestran un conocimiento de construcciones de programación. A menos que esté programando juegos de póker, no me importa lo bien que alguien pueda barajar una baraja de cartas. E incluso si lo fuera, después de mostrarles el algoritmo eficiente, estoy seguro de que cualquiera que sea medio decente podría seguirlo.
Las preguntas de plantilla parecen dar una ventaja a los candidatos que han estado entrevistando durante más tiempo, ya que es más probable que hayan visto más de las preguntas de plantilla. Incluso FizzBuzz, la primera vez que lo ves, puedes enloquecer, pero a medida que lo ves una y otra vez te acostumbras más. Lo mejor que puede hacer es presentar un desafío de codificación que requiere una lógica empresarial personalizada. Por ejemplo, cree un conjunto de datos (matriz de objetos / registros) y luego cree algunas reglas comerciales para aplicar a cada objeto y devuelva una respuesta ... por ejemplo, algún tipo de calificación, etc. pero reglas muy personalizadas). Si bien es probable que hayan visto los registros en bucle y apliquen la lógica muchísimas veces, sus reglas serán únicas, por lo que al menos tendrían que comprender e implementar con éxito las reglas que creó.
Digamos el salario proyectado y una lista de candidatos y sus 3 mejores videojuegos favoritos, y tal vez un salario inicial. Los candidatos a los que les gusta Zelda reciben una penalización de 300, los candidatos a los que les gusta la sirenita obtienen una bonificación de 200. Los candidatos que gustan de Donkey Kong y Super Mario Brothers pero no el Dr. Mario obtienen un bono de 300. Los candidatos a los que les gusta Metroid o Kid Icarus obtienen un bono de 200, etc. Parece un poco loco, pero les mostrará su capacidad para traducir las reglas de negocios en construcciones lógicas de programas y probar su comprensión de la lógica booleana. En general, no es muy diferente a fizzbuzz, excepto que no usa módulos y bucles. Por supuesto, podría darles la lista y hacer que la recorran e impriman los resultados en la pantalla utilizando también criterios de salida específicos.