Volver a QA Manual

1. Fundamentos de HTTP y Web

1. ¿Qué es HTTP?
HTTP (Protocolo de Transferencia de Hipertexto) es el protocolo utilizado para transferir datos a través de la web. Define cómo se formatean y transmiten los mensajes, y cómo deben responder los servidores web y los navegadores a varios comandos.
2. ¿Cuál es la diferencia entre HTTP y HTTPS?
HTTPS (Protocolo de Transferencia de Hipertexto Seguro) es la versión segura de HTTP. Utiliza cifrado SSL/TLS para proteger los datos transmitidos entre el cliente y el servidor.
3. ¿Cómo envía HTTPS las solicitudes de forma segura?
HTTPS utiliza TLS (Seguridad de la Capa de Transporte) o SSL (Capa de Sockets Seguros) para cifrar los datos. Implica un proceso de 'handshake' donde el servidor presenta un certificado para probar su identidad, y luego se establece una sesión segura y cifrada.
4. ¿Cómo se clasifican los códigos de estado HTTP (1xx, 2xx, 3xx, 4xx, 5xx)?
1xx: Informativo (Solicitud recibida, proceso en curso). 2xx: Éxito (Solicitud recibida, entendida y aceptada con éxito). 3xx: Redirección (Se debe tomar una acción adicional). 4xx: Error del cliente (La solicitud contiene una sintaxis incorrecta o no se puede cumplir). 5xx: Error del servidor (El servidor no pudo cumplir con una solicitud aparentemente válida).
5. ¿Qué es JSON y cómo se utiliza?
JSON (Notación de Objetos JavaScript) es un formato de intercambio de datos ligero. Es fácil de leer y escribir para los humanos y fácil de analizar y generar para las máquinas. Se utiliza comúnmente para transmitir datos en aplicaciones web (por ejemplo, enviar datos del servidor al cliente).
6. ¿Cuál es la diferencia entre cookies y caché?
Las cookies son pequeños archivos de texto almacenados en el lado del cliente utilizados para rastrear sesiones de usuario y preferencias. La caché es un almacenamiento temporal utilizado para almacenar recursos de páginas web (imágenes, scripts) para acelerar los tiempos de carga en visitas posteriores.
¿Qué es un Oráculo de Prueba?
Un mecanismo, diferente del programa en sí, utilizado para determinar si el resultado de una ejecución de prueba es correcto (por ejemplo, una especificación, un programa separado o juicio humano).
¿Qué se puede esperar de una evaluación de live challenge en Coderbyte?
Un live challenge de Coderbyte generalmente incluye preguntas teóricas de opción múltiple seguidas de ejercicios de código. La parte de codificación puede abarcar algoritmos, JavaScript, React u otras tecnologías según la empresa que administre la prueba. Hay muchos videos en YouTube con ejemplos y recorridos para ayudarte a prepararte.
Si x personas están en una reunión y cada persona se da la mano con todas las demás exactamente una vez, ¿cuántos apretones de manos ocurren en total?
El número total de apretones de manos es x*(x-1)/2. Cada una de las x personas se da la mano con (x-1) personas, produciendo x*(x-1) pares ordenados. Como cada apretón de manos involucra a dos personas, el resultado se divide entre 2. Esto es equivalente a la fórmula de combinaciones C(x, 2) = x! / (2! * (x-2)!).
¿Qué se puede esperar típicamente en una entrevista de live coding?
Las entrevistas de live coding suelen consistir en un desafío técnico corto diseñado para observar cómo el candidato aborda un problema, más que para evaluar la perfección del resultado. Los formatos más comunes incluyen: resolver un problema de algoritmos o estructuras de datos, implementar una pequeña feature o microservicio, construir un componente de frontend sencillo, o depurar y corregir código existente. En muchos casos el entrevistador proporciona un repositorio ya armado junto con un README que describe los requisitos, y se le pide al candidato que agregue una nueva funcionalidad desde cero, frecuentemente sin el uso de herramientas de IA. El objetivo principal es evaluar el razonamiento y la capacidad de resolución de problemas en condiciones realistas.
Dado un diccionario de servicios donde cada servicio tiene un campo `dur` (duración en unidades de tiempo) y una lista `deps` (nombres de dependencias), escribí una función que encuentre el camino crítico — la cadena más larga de servicios dependientes — y devuelva su duración total junto con la lista de servicios que forman el cuello de botella. Ejemplo de entrada: ```python services = { "db": { "dur": 5, "deps": [] }, "cache": { "dur": 2, "deps": [] }, "api": { "dur": 3, "deps": ["db", "cache"] }, "gateway": { "dur": 4, "deps": ["api"] } } ```
Se puede modelar el grafo de servicios como un árbol y aplicar una búsqueda en profundidad (DFS). Para cada servicio se calcula recursivamente su tiempo total de finalización como su propia duración más el máximo tiempo de finalización entre sus dependencias. Durante el recorrido se registra qué rama de dependencia produjo el tiempo máximo, para poder reconstruir el camino crítico. python def FindCriticalPath(services): time = 0 bottleNeck = [] def getTimeOfService(name, services, path): serv = services[name] duration = serv['dur'] if len(serv['deps']) == 0: return duration maxTime = 0 maxDep = '' for d in serv['deps']: tempTime = getTimeOfService(d, services, path) if tempTime > maxTime: maxTime = tempTime maxDep = d path.append(maxDep) return duration + maxTime for key in services: path = [] tempTime = getTimeOfService(key, services, path) path.append(key) if tempTime > time: time = tempTime bottleNeck = path return (time, bottleNeck) Para el ejemplo dado, gateway depende de api, que a su vez depende de db (5) y cache (2). La rama más larga pasa por db con tiempo 5, por lo que api tarda 3 + 5 = 8 y gateway tarda 4 + 8 = 12. El camino crítico es ["db", "api", "gateway"] con una duración total de 12.
¿Cómo se evalúa a los candidatos sobre el uso de herramientas de IA durante entrevistas técnicas y pruebas técnicas para llevar a casa, y cómo debería responderse a las preguntas al respecto?
En entrevistas técnicas recientes, se le pregunta frecuentemente a los candidatos si usan herramientas de IA, cuáles utilizan y cómo las usan. El criterio de evaluación clave no es simplemente si usas IA, sino si la usas con conciencia y con plena comprensión del código que genera. Algunas pruebas técnicas para llevar a casa requieren explícitamente entregar un archivo AI_PROCESS.md que documente cómo se usó la IA durante el proyecto. Una respuesta sólida demuestra que se aprovecha la IA para acelerar tareas que ya se dominan, que se revisa y comprende cada línea del código generado, y que no se acepta el resultado de la IA sin evaluación crítica.
¿Qué tipos de ejercicios se suelen pedir en entrevistas de live coding y cómo debería prepararse un candidato?
Los ejercicios de live coding tienden a variar considerablemente entre empresas y entrevistadores; es habitual enfrentarse a un problema completamente diferente en cada sesión. Algunos ejemplos de ejercicios que han aparecido en entrevistas son: implementar la secuencia de Fibonacci, encontrar el camino más corto hacia un nodo en un grafo o árbol, y problemas de manipulación de cadenas (por ejemplo, dado un string, contar cuántas veces se puede formar una palabra específica con sus caracteres). Para prepararse de forma efectiva, se recomienda practicar problemas de dificultad media y alta en plataformas como LeetCode o HackerRank, poner atención en cubrir los casos borde y buscar siempre la solución más óptima posible.
¿Qué consejos tienes para prepararse para una entrevista técnica en la plataforma HackerRank?
Algunos consejos prácticos: (1) Tener dos computadoras disponibles si es posible, para poder consultar documentación o probar código localmente mientras resolvés el ejercicio en la plataforma. (2) Familiarizarte con HackerRank repasando sus propios tutoriales antes de la entrevista real. (3) Repasar los algoritmos y patrones de estructuras de datos más comunes (por ejemplo, ordenamiento, búsqueda, ventana deslizante, grafos) y practicar al menos un par de ejercicios de nivel medium de cada categoría con anticipación.
¿Cómo incorporas herramientas de IA en tu flujo de trabajo de desarrollo o pruebas?
Las herramientas de IA se pueden aprovechar de varias maneras: (1) Para tareas repetitivas como generar mocks, DTOs, datos de prueba o módulos boilerplate, procesando pocos métodos o funciones a la vez para que el resultado sea fácil de revisar. (2) Para acelerar la documentación, incluyendo guías de diseño, PRDs y planes de prueba usando un enfoque de Desarrollo Guiado por Especificaciones. (3) Para acelerar la generación de pruebas unitarias y de integración. (4) A nivel más avanzado, implementando agentes orquestadores que delegan subtareas a sub-agentes especializados. Claude y Cursor son ejemplos de herramientas de uso común. La profundidad de la respuesta puede adaptarse según si el rol requiere explícitamente habilidades de IA.
Durante una entrevista técnica de RRHH, te muestran un pseudocódigo y te preguntan: ¿qué calcula esta función y cuál es su complejidad temporal? ¿Cómo abordas la respuesta?
Para identificar qué calcula una función, recorre su lógica paso a paso, prestando atención a las operaciones que realiza sobre la entrada. Por ejemplo, una función que acumula la suma de todos los elementos de una colección y luego divide entre la cantidad de elementos está calculando el promedio aritmético (media). Para determinar la complejidad temporal, cuenta cuántas veces se ejecutan las operaciones principales en relación con el tamaño de la entrada n. Si la función visita cada elemento exactamente una vez en un único bucle, la complejidad temporal es O(n) — tiempo lineal — porque el trabajo crece proporcionalmente al tamaño de la entrada.