Ronda 1: La ronda 1 fue una prueba en línea, en la plataforma cocubes que consta de dos secciones.
Aptitud (30 preguntas en 30 minutos): nuevamente, tenía dos subsecciones.
- razonamiento logico. 20 preguntas, 20 minutos. Todas las preguntas estaban basadas en párrafos.
- Razonamiento cuantitativo: 10 preguntas, 10 minutos. Nuevamente, preguntas basadas en párrafos.
Sección de codificación: dos preguntas, muy fácil, 30 minutos. Cada uno tiene conjuntos diferentes. Algunas de las preguntas fueron:
- Suma de todos los dígitos de un número hasta que la suma sea de un dígito. ( https://www.geeksforgeeks.org/finding-sum-of-digits-of-a-number-until-sum-becomes-single-digit/ )
- Dado un número n, encuentra el número de cartas requeridas para hacer una pirámide de cartas de nivel n.
- Verificador de contraseña simple con restricciones dadas como al menos una mayúscula, al menos dos números y un carácter especial, etc.
- Rotación de una lista enlazada en grupos de k. ( https://www.geeksforgeeks.org/rotate-linked-list-block-wise/ ) y algunas otras preguntas simples.
Ronda 2: 35 personas fueron preseleccionadas para esta ronda de lápiz, papel y código. Las personas se dividieron en grupos de nueve y fueron llamados grupo por grupo. A cada grupo se le dio una pregunta que era completamente abierta y teníamos que escribir el código en cualquier idioma de nuestra elección. A cada individuo se le dio 45 minutos. las cuatro preguntas eran:
- Declaración del problema: dada una implementación gráfica como, por ejemplo, Facebook, encuentre el grado mínimo de separación entre dos personas dadas. También se da que el grafo se implementa mediante el uso de listas enlazadas. Las personas que pudieron ver que la pregunta exigía una ruta mínima entre dos Nodes dados en un gráfico representado a través de una lista de adyacencia resolvieron el problema aplicando el algoritmo de Djikstra después de tomar cualquiera de los Nodes dados como fuente.
- Declaración del problema: encuentre las palabras de tendencia en Twitter. Nuevamente, una pregunta muy contundente y abierta que no definió mucho. Querían probar las habilidades analíticas y de codificación, así como el proceso de pensamiento de los estudiantes. Esperaban características como la clasificación de las palabras basada en la frecuencia dando prioridad a las marcas de tiempo (¡eso es lo que son las tendencias, cierto!), eliminar los caracteres especiales como #, $, @, etc., no cuente las palabras comunes como es, am, are, the, preositiions y todo. Dos o más palabras similares, por ejemplo, #metooo y #meeeeeetoooouuuuuu.. se considerarán iguales y muchas cosas más.
- Declaración del problema: maximice las ganancias en acciones dado que puede comprar y vender acciones dadas k veces. https://www.geeksforgeeks.org/maximum-profit-by-buying-and-selling-a-share-at-most-k-times/
- Declaración del problema: Krithika tiene una nueva suscripción principal y ha visto k películas. Ayuda a las personas principales a sugerirle la (k+1)ésima película. Básicamente, diseñar un motor de recomendación personalizado. (¡Sin usar bibliotecas ML obviamente! Querían un código C/C++/Java/Python). Esta es la pregunta que me hicieron. Una vez más, una pregunta muy abierta. Habían venido con planes para interrogarnos y verificar nuestro proceso de pensamiento. La forma en que abordé este problema fue que tomé ambas condiciones para filtrar las películas restantes, que son:
- 1. Filtrado basado en elementos: ha visto esta película, por lo que es más probable que vea películas de este tipo. Para esto, había creado una estructura en C++ llamada películas, que contenía diferentes componentes como Género, Calificación, Estudio, una array de Actores, fecha de lanzamiento y una array de struct (Personas) que contenía la lista de personas que habían visto el película.
- 2. Filtrado basado en el usuario: las personas que han visto esta película también han visto estas películas. Para la implementación de esta función, creé una estructura de persona que contenía el nombre, la edad, la nacionalidad, la profesión y una serie de películas de estructura que ha visto. Ahora, el proceso fue que, para cada una de las películas que vio, las comparé primero con todas las características de cada película presente en la base de datos, que ahora mismo no es más que una serie de películas, y generé una puntuación de acuerdo con un prioridad asignada arbitrariamente en este momento. Para el filtrado basado en el usuario, para cada una de las películas que ella ha visto, debe haber una serie de personas que también han visto esa película, así que nuevamente, recorra esa serie y luego dentro de esa serie, debe haber una serie de películas que hubiera visto, compárelo con esos y luego genere el puntaje máximo final de todos estos. Finalmente, de todas las puntuaciones generadas se recomienda la película con mayor puntuación.
Ronda 3 (Entrevista técnica): Después de escribir el código para la última ronda y enviarlo, todos fueron llamados uno por uno y se les pidió que explicaran el código y luego discutieron sobre los proyectos realizados y algunas consultas SQL. En mi caso, había tres personas juntas a las que primero les tuve que explicar mi lógica, luego empezaron a cuestionar.
- Ha asignado la prioridad de forma arbitraria para generar la puntuación. ¿Qué pasa si esta prioridad es incorrecta para la persona? Si la recomendación es incorrecta, obviamente la persona no verá la película o la dejará en el medio. Entonces, tomemos un límite de tiempo, y si hasta ese momento no se ve la película, se dará prioridad a alguna otra característica y se recomendará alguna otra película y las diferentes características se pondrán en una cola circular. Aparte de esto, todas las películas recomendadas y no vistas deben mantenerse en una array de opciones y seguir recomendándolas de vez en cuando. Como darles descanso por ahora, y luego compararlos nuevamente, con las películas de puntaje máximo para recomendar.
- Aunque ha cubierto muchas características excelentes, para hacerlo, la complejidad del tiempo es O (n ^ 3), y para una base de datos tan grande, calcular y mostrar esto dinámicamente será imposible. ¿Cómo vas a mejorar esto? Bueno, a modo de comparación, puedo dividir las películas en diferentes cubos para reducir la exhaustividad y ponerlas en diferentes conjuntos, lo que funciona en el inicio de sesión para la búsqueda. Así es como dos niveles de bucles se convierten en logn, lo que reduce la complejidad del tiempo a n(logn)^2.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA