En ese momento, yo era estudiante de último año de Ciencias de la Computación de Tier 3 College en Mumbai. Tenía algo de experiencia en programación competitiva y algunas contribuciones de código abierto. Había estado en algunos hackatones. Uno de mis seniors me refirió para la vacante para el puesto de ingeniero de software.
Ronda 1: Ronda
en línea La ronda en línea se llevó a cabo en hackerearth, fue una prueba de codificación de 2 horas que constaba de 3 preguntas
- 100 puntos: Diseñe un proxy inverso para el escenario dado. Recibirá n servidores y sus direcciones IP, m puntos finales, el proxy inverso tiene una lista de direcciones IP para cada punto final. Cada solicitud que llega a un punto final va por turnos a esta dirección IP. También obtiene un tipo especial de visitas al proxy inverso desde el monitor del servidor que dice que
- un servidor en particular se ha caído y no puede aceptar ninguna solicitud
- un servidor en particular está activo ahora y no puede aceptar ninguna solicitud
Una vez que un servidor vuelve a funcionar, debe agregarse al final de la cola en turno rotativo correspondiente a cada uno de los puntos finales de los que es responsable.
Al final de las consultas q dan una lista de las requests recibidas por cada servidor. - 50 puntos: dada una array de números, devuelve 1 si la array está ordenada en espiral o 0 en caso de que no esté ordenada en espiral. Para que una array se ordene en espiral, sus valores deben estar en orden ascendente cuando se organizan en el siguiente orden 0, n-1, 1, n-2, 2, n-3……
- 50 puntos: Dada una lista de palabras, devuelva 1 y 0 para cada palabra dependiendo de si tienen como máximo n repetición de un solo carácter en ellas
Pude obtener un puntaje completo de 200 en esta ronda, pero las personas que obtuvieron 120 puntos también fueron consideradas en función de la evaluación realizada por Recursos Humanos utilizando el currículum y el perfil.
Los candidatos preseleccionados de alrededor de Mumbai fueron llamados en el sitio para las rondas adicionales y las personas de otras ciudades tuvieron la ronda en línea por videollamada.
Como estaba en Mumbai, me llamaron al lugar. Se nos informó que trajéramos nuestras propias computadoras portátiles para las rondas de codificación de máquinas.
Ronda 2: Ronda de codificación de máquinas – I
Esta fue una ronda de 2 horas, con el siguiente enunciado del problema. Al final del tiempo asignado, hizo una demostración y explicó su implementación.
Este problema requiere que implemente una solución de observación de registros (similar al comando tail -f en UNIX). Sin embargo, en este caso, el archivo de registro está alojado en una máquina remota (la misma máquina que su código de servidor). El archivo de registro está en modo de solo agregar.
Debe implementar lo siguiente:
1. Un programa del lado del servidor para monitorear el archivo de registro dado y capaz de transmitir las actualizaciones que ocurren en él. Esto se ejecutará en la misma máquina que el archivo de registro. Puede implementar el servidor en cualquier lenguaje de programación.
2. Un cliente basado en la web (accesible a través de una URL como http://localhost/log) que imprime las actualizaciones en el archivo a medida que ocurren y NO al actualizar la página. La página debe cargarse una vez y debe seguir actualizándose en tiempo real. El usuario ve las últimas 10 líneas del archivo cuando aterriza en la página.
Restricciones del problema
El servidor debe enviar actualizaciones a los clientes, ya que tenemos que hacerlo en tiempo real tanto como sea posible.
El servidor no debe retransmitir el archivo completo cada vez. Solo debe enviar las actualizaciones.
El servidor debe poder manejar múltiples clientes al mismo tiempo.
La página web no debe permanecer en estado de carga después de la primera carga y tampoco debe volver a cargarse a partir de entonces.
No puede usar bibliotecas comerciales o herramientas que brinden funcionalidades similares a las de la cola.
Lo evaluaremos en cuanto a la calidad del código, la capacidad de prueba, la modularidad, los casos de esquina, etc.
Puede realizar la tarea en cualquier idioma de su elección y utilizar la ayuda de Internet. Usé node.js, express.js para esta tarea y completé toda la funcionalidad, pero no pude obtener la implementación más eficiente posible.
Utilicé el método fs watch para actualizaciones en vivo y sockets para transferir datos al cliente.
Ronda 3: Ronda de codificación de máquinas – II
Esta fue nuevamente una ronda de 2 horas, con el siguiente enunciado del problema. Al final del tiempo asignado, hizo una demostración y explicó su implementación.
En este problema, debe crear una pequeña base de conocimiento sobre las N películas principales enumeradas en los gráficos de IMDb y proporcionar un mecanismo para consultar lo mismo.
Su programa debe aceptar N como parámetro de entrada y hacer lo siguiente:
Obtener la lista de N películas principales del sitio web de IMDb y crear una base de conocimiento en memoria que incluya
los nombres de las películas
los nombres del elenco de cada película
Esto debería ser Construido en tiempo de ejecución y almacenado en una estructura de datos adecuada de su elección.
Proporcione una interfaz de consulta (la línea de comando sería suficiente) para consultar esta base de conocimiento por el nombre del actor. Para un actor determinado y un número M (< N), debería devolver las M mejores películas en las que ha actuado.
Puede intentar este problema en cualquier idioma y biblioteca de su elección. No puede usar ninguna API externa para obtener películas de IMDb.
Por ejemplo, si N=3, entonces el programa debe analizar las páginas individuales de las primeras 3 películas de los gráficos de IMDb y crear la base de conocimiento del elenco (hay alrededor de 15 a 20 nombres por página). Al consultar «Morgan Freeman» y M=1, debe devolver «The Shawshank Redemption».
Realicé esta tarea usando python construyendo una interfaz CLI simple y usando hermosas sopas y requests.
Después de esta ronda, se llevó a cabo la eliminación y solo las personas que se habían desempeñado bien en ambas tareas que estaban cerca de completar la funcionalidad máxima fueron seleccionadas para la siguiente ronda.
Ronda 4: Ronda del Gerente de Ingeniería
- ¿Cómo encontraste las últimas n líneas del archivo de registro? y si se le diera más tiempo, ¿cómo lo haría de manera eficiente?
- Entre las pasantías enumeradas en su currículum, ¿qué proyecto fue el más interesante? algunas preguntas de seguimiento sobre ese proyecto
- Cosas que no aprendiste durante esta pasantía y errores que cometiste durante ella
- ¿Cómo contaría la frecuencia de las palabras en un archivo muy grande? (mapa reducir)
Ronda 5: Director de Ingeniería Ronda
- Guíame a través de tu currículum
- ¿Qué fue lo que más disfrutaste en la universidad?
- Qué haces los fines de semana ?
- ¿Qué parámetro consideraría cuando decida usar su pieza de código en un entorno de producción?
- Algunas preguntas conductuales basadas en la situación
- Diferencia entre http y https. ¿Qué son los encabezados de http, los códigos de estado de http y el agente de usuario de http?
- ¿Cuáles son algunas organizaciones de código abierto que conoce o en las que ha contribuido?
Después de estas 2 rondas, se llevaron a cabo más eliminaciones y las personas seleccionadas se enviaron a la ronda de recursos humanos.
Ronda 6: Ronda de recursos humanos
- ¿Cómo estuvo todo tu día? ¿Qué opinas de nuestro proceso de entrevista?
- ¿Por qué BrowserStack?
- ¿Cuál es la propuesta de valor de BrowserStack?
- ¿Cuántas contribuciones tienes en Github? ¿Te gusta el código abierto?
- ¿Cuál es tu calificación de Codechef? ¿Te gusta la programación competitiva?
- Entre los proyectos enumerados, ¿cuál es el proyecto más interesante que ha realizado y por qué?
Después de esta ronda, nos dijeron que eso era todo por el día y que los resultados se anunciarían en uno o dos días.
Dentro de 2 días recibí una llamada de Recursos Humanos diciendo que les gustaría extender una oferta.
Publicación traducida automáticamente
Artículo escrito por nurdtechie98 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA