¿Cuántos problemas de entrevista necesito resolver aproximadamente antes de estar listo para una entrevista con las principales compañías de software?

Más que un número de preguntas, es una cuestión de “amplitud” y “profundidad” de sus preguntas y qué quiere decir con “resolverlas”. Tomemos estos uno por uno.

1. Amplitud
Esencialmente, estamos viendo tres cosas muy importantes: estructuras de datos, algoritmos en esas estructuras de datos, arquitecturas que usan estos algoritmos. Por lo tanto, realmente debe sentirse cómodo con diferentes tipos de contenedores, algoritmos y arquitecturas.

1.1 Estructuras de datos / Contenedores
Esto significa conocer diferentes estructuras de datos que optimizan la eficiencia de espacio y tiempo. Algunos tienen un agregar / quitar O (1) pero una recuperación más lenta, mientras que otros están diseñados para una recuperación más rápida. Algunos son contenedores de memoria contigo mientras que otros no. Lea la arquitectura central y el diseño de STL (y luego aplíquelo a cualquier otro idioma). La mayoría de los tutoriales / libros de programación van directamente a conceptos específicos de implementación, pero debes comenzar desde abajo para ser un buen programador. Tabla de contenido: la Biblioteca de plantillas estándar es una referencia MUY buena. Debe saber cuándo usar qué contenedor. Codifique lo suficiente para sentirse cómodo con cada uno de estos y que no tenga que pensar en estos. Digamos, estas estructuras que debería poder obtener en O (1) en su cerebro.

1.2 Algoritmos
Esto puede variar y, probablemente, aprender las estructuras de datos vendrá con alguna implementación de algoritmos. Si bien la mayoría de los entrevistadores se mantienen alejados de preguntar algoritmos complejos como Kruskul’s o Floyd’s, debe conocer los elementos esenciales: algoritmo basado en la cola de prioridad, la profundidad, la amplitud, la prioridad, el montón / hash, la clasificación y la búsqueda.

1.3 Arquitecturas
Ahora me preguntaron esto en la primera entrevista en el sitio en Hooli (* wink * wink). Fui devuelto. No me habia preparado. Por lo tanto, es mejor repasar diferentes tipos de arquitecturas y problemas en un nivel fundamental. Básicamente, todos estamos trabajando en sistemas no paralelos, pero ¿qué pasa si ha compartido memoria y procesos paralelos haciendo algún algoritmo? Estos son más difíciles de implementar, por lo que probablemente solo desee leerlos (o implementarlos en algún problema del mundo real). Aprenda Map / Reduce, lector / escritor y otros algoritmos / arquitectura de computación paralela.

2. Profundidad
Saber cómo usar un contenedor directo no contagioso es una cosa (lista vinculada). Hacer uno es otro. Saber cómo se implementa una estructura de datos en particular es * a veces * importante, así que asegúrese de al menos “conocerlo”. ¿Cómo se implementa un mapa hash? ¿Cómo se implementa un “conjunto”? ¿Por qué usar una lista de adyacencia y no una estructura basada en nodos para problemas de gráficos? ¿Cuándo no usar la profundidad primero? Cuando la búsqueda binaria falla? etc.

3. Resolver
Resuelve tantas preguntas que te hagan sentir cómodo con el concepto. Me gusta mucho el libro de Gayle Laakmann McDowell Cracking the Coding Interview (libro de 2011). La sección “Preguntas técnicas” enumera suficientes preguntas de práctica para familiarizarse con la amplitud. La introducción a los algoritmos (libro de Cormen, Leiserson, Rivest y Stein) y el manual de diseño de estructuras de datos hacen un buen trabajo en profundidad. Asegúrese de ir a la documentación de su SDK favorito (JDK, .NET, STL, Python) y cómo se implementan ciertas estructuras de datos y qué está disponible.

Hacer 5-10 preguntas sobre el código leet en cada categoría es bueno para hacer 4-6 semanas antes de la entrevista.