Realmente depende del tipo de entrevista. ¿Estarás haciendo desarrollo de aplicaciones? Desarrollo móvil? ¿Desarrollo web?
En general, si conoce lo siguiente, debería estar bastante bien (para ser sincero, tener una amplia comprensión de CS es útil):
Ingeniería de Software / General
- Cómo ordenar una matriz de N elementos por no más de N swaps
- Dada una matriz entera y un número constante X, imprima todos los pares de números en la matriz cuyo producto es igual a X. Seguimiento: ¿cómo lo hará en O (n)? ¿Cómo manejarás los pares duplicados?
- Dado un flujo continuo de enteros, ¿podemos encontrar el máximo dado cualquier rango arbitrario (a, b) en el tiempo O (log t)?
- ¿Para qué debo estar preparado en una entrevista técnica de codificación?
- ¿Qué tan difícil es una entrevista de programación en sillicon valley?
- MVC (Modelo-Vista-Controlador)
- Aspecto del ciclo de vida del software (algo así como: [Universo del discurso] -> Formulación del problema -> [Especificación del problema] -> Ingeniería de requisitos -> [Especificación de requisitos] -> Arquitectura -> [Especificación de arquitectura] -> Diseño -> [ Especificación de diseño] -> Programación -> [Componentes de software] -> Integración -> [Sistema de software] -> Entrega / Implementación -> [Software entregado])
- Cómo usar la recursividad
- Los pros y los contras de los algoritmos recursivos
- Cómo escribir un algoritmo recursivo como algoritmo iterativo
- SÓLIDO (diseño orientado a objetos)
- Depuración
Complejidad
- Cómo leer el código y determinar su complejidad Big-O
- Cómo comparar el rendimiento de algoritmos que tienen la misma complejidad Big-O
Nivel bajo
- Manipulación de bits (And, Or, Not, Shifts, etc.)
- Enmascaramiento de bits
- Big-endian versus little-endian
- Cachés y cómo funcionan
Estructuras de datos
(Sepa cómo usar, las complejidades Big-O de varias operaciones, cómo implementar, etc.)
- Tablas Hash
- Listas enlazadas individualmente y doblemente
- Matrices
- Árboles binarios / Árboles en general
- B-Trees (solo tenga una comprensión muy básica de estos)
- Muchísimo
- Pilas
- Colas
- Intentos
Algoritmos / Técnicas
- Trayectoria más corta
- Búsqueda de amplitud
- Búsqueda de profundidad primero
- Recorrido en orden / pedido anticipado / post pedido
- Búsqueda binaria
- Ordenar fusión
- Ordenación rápida
- Tipo de inserción
- Ordenamiento de burbuja
- Divide y conquistaras
- Programación dinámica
OOP
- Interfaces
- Clases abstractas
- Polimorfismo
- Herencia
- Encapsulamiento
- Primordial
- Sobrecarga
Concurrencia
- ¿Qué es multihilo?
- Qué tener en cuenta con el subprocesamiento múltiple
- Mutexes / semáforos
Resolución de problemas / codificación de pizarra blanca
- Cómo hablar todo lo que estás pensando
- Cómo verificar que su código funciona (y verificar que maneja entradas inesperadas correctamente)
- Cómo dividir un problema en partes
- Cómo determinar si usar una solución iterativa o una solución recursiva
- Cómo relacionar un problema con otros problemas que has visto / resuelto
- Cómo probar un problema contra varias estructuras de datos para ver si se puede resolver de manera más inteligente
- Cómo abarcar un problema (definirlo, identificar / cuestionar supuestos, determinar entradas y salidas)
- Cómo escribir una solución de fuerza bruta
- Cómo mejorar la eficiencia de una solución.
- Cómo exteriorizar tus pensamientos
- Cómo comentar el código de manera útil y organizada
- Cómo rastrear el código para verificar que funciona para entradas de muestra
- Cómo identificar en qué parte de su código cometió un error si no obtiene el resultado que espera
- Cómo probar partes individuales por separado
- Cómo identificar patrones en problemas pasando por entradas de muestra y considerando salidas esperadas
Esta lista no incluye todo. Necesitará saber mucho más para entrevistas más específicas del dominio, pero esto debería ayudarlo a comenzar.