Primary key
La columna o columnas que identifican de forma única cada fila de una tabla. Única y nunca NULL.
745 definiciones cortas de términos que salen en entrevistas de ingeniería de software.
Los dos métodos que convierten un objeto en un context manager para with. __enter__ corre al principio; __exit__ corre siempre al final, incluso tras un error.
__eq__ define ==. Si lo defines, define también __hash__ de forma coherente (los objetos iguales deben tener hashes iguales) o el objeto se comportará mal en sets y como clave de dict.
El método inicializador que corre al crear un objeto nuevo. Define los atributos iniciales: def __init__(self, name): self.name = name.
El protocolo de iteradores. __iter__ devuelve el iterator; __next__ devuelve el siguiente elemento y lanza StopIteration cuando no quedan.
__repr__ da una descripción exacta del objeto, orientada a desarrolladores; __str__ da un texto amable para usuarios. print() usa __str__; las listas y el depurador usan __repr__.
Un ajuste de clase que lista los únicos nombres de atributo que pueden tener sus objetos. Elimina el diccionario por objeto para ahorrar memoria.
Pide a Spring que inyecte una dependencia. Mejor la inyección por constructor; con un solo constructor @Autowired es opcional.
Guarda en caché el resultado de un método según sus argumentos. La siguiente llamada con los mismos argumentos devuelve el valor guardado sin ejecutar el método.
Una clase que declara beans con métodos @Bean.
Enlaza grupos de propiedades de application.yml con una clase Java tipada, en lugar de leer valores sueltos con @Value.
Una clase que aplica la gestión de excepciones (y otros consejos) a todos los controllers en un solo lugar.
Marca una clase como entidad JPA: Hibernate la asocia a una tabla de la base de datos y sus campos a columnas.
Formas de cargar una entidad junto con sus relaciones en una sola consulta, lo que soluciona el problema N+1.
Le dice al compilador que este método debe sobrescribir uno de una clase padre o interface. Si la firma no coincide, la compilación falla.
Enlaza una parte de la ruta de la URL con un parámetro del método: /users/{id}.
Convierte un método en un atributo que se lee sin paréntesis: circle.area. Permite calcular o validar valores manteniendo una sintaxis simple.
Enlaza el cuerpo de la petición HTTP (JSON) con un parámetro de un método Java.
Un controller cuyos métodos devuelven datos que se escriben directamente en el cuerpo de la respuesta HTTP (normalmente JSON), no un nombre de vista.
Ejecuta un método dentro de una transacción de base de datos: commit si va bien, rollback con una RuntimeException por defecto.
En Python 3, / siempre da un float (7 / 2 es 3.5). // es la división entera y redondea hacia abajo (7 // 2 es 3). % da el resto (7 % 2 es 1).
Un archivo que lista patrones de archivos que Git no debe seguir, como salida del build, ajustes del IDE y secretos.
== convierte los tipos antes de comparar (0 == "" es true). === compara valor Y tipo sin convertir (0 === "" es false). Mejor ===.
Una clase base que no se puede instanciar y obliga a las subclases a implementar ciertos métodos (marcados con @abstractmethod).
Mostrar solo lo esencial y ocultar los detalles. Conduces un coche con volante y pedales sin saber cómo funciona el motor.
Un patrón con una interface que crea familias de objetos relacionados sin nombrar sus clases concretas.
Hacer que las apps sirvan para todas las personas, incluidas quienes usan teclado, lectores de pantalla o tienen discapacidad visual.
Cuatro garantías de las transacciones: Atomicity (todo o nada), Consistency (las reglas se cumplen), Isolation (sin interferencias), Durability (los datos confirmados sobreviven a una caída).
Cuánto depende un módulo de las interioridades de otro. Bajo acoplamiento = puedes cambiar uno sin romper el otro.
Advanced Encryption Standard: el cifrado simétrico estándar. Una misma clave cifra y descifra. Lo usan TLS, el cifrado de disco y el almacenamiento cloud.
Una forma de construir software en iteraciones cortas con feedback frecuente, que valora el software que funciona y responder al cambio por encima de los planes rígidos.
Cada test prepara y limpia sus propios datos, para que los tests no se afecten entre sí y puedan correr en cualquier orden.
Azure Kubernetes Service: el Kubernetes gestionado de Microsoft. Azure se encarga del control plane.
Load balancers de AWS. ALB trabaja en la capa 7 (HTTP) y puede enrutar por ruta o host. NLB trabaja en la capa 4 (TCP/UDP) a muy alta velocidad.
Un conjunto finito y ordenado de pasos que resuelve un problema o realiza una tarea.
Encuentra el camino más corto de un nodo a todos los demás en un grafo con pesos no negativos, usando un min-heap.
Un algoritmo O(n) para la suma máxima de un subarray contiguo: en cada elemento, amplía el tramo actual o vuelve a empezar.
Un método para poner elementos en orden. Comunes: merge sort, quicksort, heapsort, Timsort (Python). Las buenas ordenaciones generales son O(n log n).
Almacenamiento para archivos (objetos) al que se accede por una API HTTP, como S3. Muy durable y escalable, pero no es un sistema de archivos normal.
Almacenamiento para archivos completos (objetos) a los que se accede por clave o URL, como Amazon S3 y Azure Blob Storage. No es una base de datos.
Diseñar un sistema para que siga funcionando pese a los fallos, con redundancia y failover automático.
Servidores virtuales de AWS (máquinas virtuales) que configuras y gestionas tú.
El servicio de almacenamiento de objetos de AWS para archivos de cualquier tamaño, organizados en buckets.
Una etiqueta que empieza por @ unida al código (@Override, @Service) y que el compilador o un framework lee para cambiar el comportamiento.
@Component, @Service, @Repository, @Controller y @RestController: marcas que registran una clase como bean y describen su papel.
Una técnica para aplicar comportamiento transversal (logging, seguridad, transacciones) alrededor de muchos métodos sin editarlos.
Application Programming Interface: el conjunto de operaciones que un sistema expone a otros programas, y el formato para usarlas. Una API web se usa por HTTP.
Un único punto de entrada delante de los servicios backend que gestiona enrutamiento, autenticación, rate limiting y TLS.
El archivo principal de configuración de Spring Boot: puerto del servidor, URL de la base de datos y ajustes propios. Los profiles pueden sobrescribirlo por entorno.
Elige un error real, asúmelo sin culpar a nadie, explica qué cambiaste después (un test, una checklist, un proceso) y qué aprendiste.
Muestra un método: documentación oficial, un prototipo pequeño, preguntar a alguien con experiencia y luego aplicarlo a trabajo real. Da el resultado y cuánto tardaste.
Una estructura jerárquica de nodos: una raíz, cada nodo tiene hijos, sin ciclos. Los nodos sin hijos son hojas.
Un árbol en el que cada nodo tiene hasta dos hijos, con las claves menores a la izquierda y las mayores a la derecha. Búsqueda rápida si está balanceado.
Un archivo Java compilado que contiene bytecode. La JVM lo carga y lo ejecuta en cualquier sistema operativo.
Web Application Archive: una app web Java empaquetada que se despliega en un servlet container como Tomcat. Spring Boot suele construir en su lugar un JAR ejecutable.
Un argumento que se pasa por nombre: f(size=10). El orden no importa y las llamadas se leen mejor.
Un valor que se usa cuando quien llama no pasa ese parámetro: def f(x=10). En Python se crea una sola vez, cuando se define la función.
Un argumento que se pasa por posición: f(10, 20). El primer valor va al primer parámetro, y así sucesivamente.
Una estructura de test: preparar (arrange), ejecutar la acción (act) y comprobar el resultado (assert).
Elementos guardados uno junto a otro en memoria, con acceso por índice en O(1). Una lista de Python es un array dinámico que crece automáticamente.
Un array que duplica su capacidad al llenarse (list de Python, ArrayList de Java). Un append es O(n) de vez en cuando, pero el coste amortizado es O(1).
Un deque rápido basado en un array redimensionable en Java. Es la opción habitual para una pila o una cola en lugar de Stack o LinkedList.
Una List respaldada por un array redimensionable: acceso rápido por índice, añadir al final rápido, memoria compacta. La opción por defecto para listas.
Sintaxis corta de función en JS: x => x * 2. No tiene su propio this.
age = 30 crea el nombre age y hace que se refiera al valor 30. Las variables de Python son etiquetas pegadas a objetos, no cajas que guardan valores.
Una instrucción de un test que comprueba una condición; si es falsa, el test falla.
async def define una función que puede pausarse. await la pausa hasta que termina una operación lenta, y mientras tanto corren otras tareas.
Ejecuta varias coroutines de forma concurrente y espera a todas, devolviendo sus resultados en orden.
Ejecuta una función bloqueante en un hilo worker para que no congele el event loop.
Darle a una app datos serializados manipulados para que, al reconstruir los objetos, ejecute código controlado por el atacante (gadget chains).
Probar cantidades enormes de contraseñas o claves posibles hasta que una funcione.
Un valor guardado en un objeto al que se accede con un punto: user.name. Los métodos también son atributos.
Verificar quién es un usuario o sistema (contraseña, token, MFA).
El mecanismo de Spring Boot para registrar beans automáticamente según las librerías del classpath y tus propiedades; se retira cuando defines los tuyos.
Conversión automática entre un primitivo y su objeto wrapper (int a Integer y viceversa). Hacer unboxing de un wrapper null lanza NullPointerException.
Una interface con un método, close(). Cualquier clase que la implemente se puede usar en try-with-resources.
Decidir qué puede hacer o a qué puede acceder un usuario autenticado.
Añadir o quitar instancias o Pods automáticamente según la carga.
Una opción de los mocks para copiar las firmas de los métodos del objeto real, de modo que las llamadas no válidas fallen en los tests.
Un centro de datos aislado (o grupo de ellos) dentro de una región cloud, con energía y red independientes.
La plataforma cloud de Amazon: servidores de alquiler (EC2), almacenamiento (S3), bases de datos (RDS), redes (VPC) y cientos de servicios más, facturados por uso.
La estructura de árbol balanceado que usan la mayoría de los índices de bases de datos. Mantiene los valores ordenados para que búsquedas, rangos y ordenaciones tarden unos log(n) pasos.
La parte de una aplicación que corre en servidores: lógica de negocio, acceso a la base de datos, seguridad y APIs. Los usuarios nunca la ven directamente.
Trabajo que corre fuera del ciclo de petición y respuesta, en un proceso worker aparte, por ejemplo enviar correos o generar informes.
Explorar todas las soluciones candidatas tomando una decisión, recursando, deshaciendo la decisión y probando la siguiente.
Una colección organizada de datos guardados en disco para que los programas puedan buscarlos, actualizarlos y compartirlos de forma segura.
Una base de datos que guarda los datos en tablas con filas y columnas, unidas por claves, y que se consulta con SQL (PostgreSQL, MySQL, Oracle, SQL Server).
Un objeto creado y gestionado por el contenedor de Spring. Se obtienen anotando clases (@Component, @Service) o declarando métodos @Bean.
Reglas declarativas sobre campos (@NotBlank, @Email, @Size) que se comprueban al añadir @Valid a un parámetro.
Explorar un grafo nivel por nivel con una cola: todos los nodos a 1 paso, luego a 2, etc. Encuentra caminos más cortos en grafos sin pesos.
Un pom que fija las versiones de muchas librerías para que sean compatibles y no tengas que repetir números de versión.
Cada elemento es una caja formada por contenido, padding, border y margin. box-sizing decide si el ancho incluye padding y border.
Con border-box, width incluye padding y border, así que una caja de 200px se queda en 200px. Con el valor por defecto content-box, padding y border se suman.
Una línea de desarrollo independiente en Git. Te permite trabajar en una función sin tocar el código principal hasta hacer el merge.
Una estructura que repite un bloque de código, por ejemplo for (una vez por elemento) o while (mientras una condición sea verdadera).
Un bug es un defecto que hace que el software se comporte mal. Depurar es encontrar y corregir su causa.
Un patrón que construye un objeto complejo paso a paso: Request().url(u).header(h).timeout(5).build().
Una herramienta de build que transpila, combina y minifica los archivos fuente en archivos optimizados para el navegador, con un servidor de desarrollo con hot reload.
Encontrar un elemento en una lista ORDENADA mirando el centro y descartando la mitad una y otra vez. O(log n).
Revisar los elementos uno a uno desde el principio hasta encontrar el buscado. O(n).
Las instrucciones intermedias, neutras respecto a la plataforma, que javac genera a partir de tus archivos .java (guardadas en archivos .class). Las ejecuta la JVM.
Una cabecera que dice qué formato tiene el cuerpo, como application/json.
Un par nombre: valor que lleva información extra con una petición o respuesta, por ejemplo Authorization: Bearer <token> o Content-Type: application/json.
Una cabecera que se envía con 429 o 503 e indica al cliente cuántos segundos esperar antes de reintentar.
Una capa de almacenamiento rápido (normalmente memoria) que guarda copias de datos caros de obtener o calcular.
Docker reutiliza el resultado de cada paso del build si sus entradas no cambiaron, lo que acelera las reconstrucciones.
Una caché de tamaño fijo que elimina el elemento usado menos recientemente (Least Recently Used) cuando necesita espacio.
Muchas peticiones fallan en la caché al mismo tiempo (a menudo al expirar una clave muy usada) y todas golpean la base de datos a la vez.
Cada escritura va tanto a la caché como a la base de datos, así que la caché siempre está al día.
La app mira primero la caché; si falla, carga de la base de datos y guarda el resultado en la caché.
La zona de memoria que lleva el registro de las llamadas a funciones activas. Cada llamada añade un frame; al retornar se quita. Demasiadas llamadas anidadas → stack overflow / RecursionError.
Una función que le pasas a otro código para que la llame después, por ejemplo cuando ocurre un clic o llegan datos.
Los campos guardan los datos de un objeto (estado). Los métodos son las acciones (comportamiento) que puede realizar.
Enviar primero un pequeño porcentaje del tráfico a una versión nueva, observar las métricas y aumentar poco a poco.
La capa 4 balancea conexiones TCP/UDP en crudo; la capa 7 entiende HTTP y puede enrutar por ruta de URL o nombre de host.
Autoservicio bajo demanda, acceso amplio por red, puesta en común de recursos, elasticidad rápida, servicio medido.
La entrada más simple de una función recursiva, que se responde directamente sin otra llamada recursiva. Detiene la recursión.
Un caso de test comprueba un escenario frente a un resultado esperado. Una suite es un grupo de casos que se ejecutan juntos.
Content Delivery Network: servidores por todo el mundo que guardan en caché contenido estático cerca de los usuarios.
Un documento digital, firmado por una autoridad de confianza, que demuestra que una clave pública pertenece a un dominio concreto.
Una petición pasa por una secuencia de handlers; cada uno puede procesarla o pasarla al siguiente. Los filtros de servlets funcionan así.
Una excepción que el compilador te obliga a capturar o declarar con throws, como IOException.
Las fases ordenadas de un build: validate, compile, test, package, verify, install, deploy. Ejecutar una fase ejecuta todas las anteriores.
Mezclar datos de forma que solo alguien con la clave correcta pueda leerlos. Reversible con la clave, a diferencia del hashing.
Cifrado en el que la misma clave secreta cifra y descifra (por ejemplo, AES). Rápido.
Un patrón que deja de llamar a un servicio que falla durante un tiempo tras errores repetidos, y falla rápido en lugar de esperar timeouts.
Un plano que define qué datos (atributos) y comportamiento (métodos) tienen sus objetos.
Una clase que no se puede instanciar directamente. Puede tener campos, constructores y métodos listos, además de métodos abstract que las subclases deben implementar.
Una clase cuyos objetos nunca cambian tras construirse (campos final, sin setters). Se puede compartir de forma segura entre hilos.
AtomicInteger, AtomicLong... ofrecen operaciones thread-safe como incrementAndGet() sin locks explícitos.
Un identificador artificial (id autoincremental o UUID) sin significado de negocio, usado como primary key estable.
El código client-side corre en el dispositivo del usuario (normalmente el navegador). El código server-side corre en un servidor y responde peticiones.
Una función que recuerda variables del lugar donde se creó, incluso después de que esa función exterior haya terminado. Recuerda la variable en sí, no una copia congelada de su valor.
Alquilar recursos de cómputo y servicios gestionados a un proveedor (AWS, Azure, GCP) bajo demanda por internet.
Una métrica de Core Web Vitals que mide cuánto salta el layout de la página mientras carga. Cuanto más bajo, mejor.
Clúster: el conjunto de máquinas que gestiona Kubernetes. Nodo: una máquina. Pod: la unidad desplegable más pequeña, con uno o más contenedores.
El porcentaje de líneas o ramas de código que ejecuta la suite de tests.
Un compañero lee tus cambios antes de integrarlos, para detectar problemas y compartir conocimiento.
Una señal en el código que sugiere un problema de diseño más profundo: clases enormes, funciones largas, lógica duplicada, demasiados parámetros.
La codificación (base64, UTF-8) solo cambia la representación; cualquiera puede revertirla. El cifrado necesita una clave para leer los datos.
Un número de 3 dígitos en cada respuesta HTTP: 2xx éxito, 3xx redirección, 4xx error del cliente, 5xx error del servidor.
Conversión automática de un valor de un tipo a otro, por ejemplo JavaScript convirtiendo "5" en 5 al comparar con ==.
Lo relacionadas que están las partes dentro de un módulo. Alta cohesión = un módulo centrado con un propósito claro.
Una colección FIFO (first in, first out): se añade por el final y se quita por el principio. Como una fila de personas.
Cuando dos claves distintas caen en el mismo hueco de una tabla hash. Se resuelve con chaining o probing; demasiadas ralentizan todo.
El conjunto de estructuras de datos e interfaces integradas en Java: List, Set, Map, Queue, Deque y sus implementaciones (ArrayList, HashSet, HashMap, ArrayDeque...).
Una instantánea guardada de cambios en un repositorio Git, con un ID y un mensaje que describe el cambio.
Una interface con compareTo que da a una clase su único orden natural.
NULL significa 'desconocido', así que = NULL nunca es verdadero. Usa IS NULL e IS NOT NULL.
Un objeto aparte con compare(a, b) que define un orden personalizado, por ejemplo ordenar personas por edad o por nombre.
Un programa que traduce código fuente a otra forma, por ejemplo Java a bytecode o TypeScript a JavaScript.
Cuánta memoria extra necesita un algoritmo a medida que crece la entrada, escrita en Big-O.
Cómo crece el número de pasos de un algoritmo con el tamaño de la entrada, normalmente escrito en Big-O.
Un resultado que estará disponible más tarde, con métodos para encadenar pasos (thenApply, thenCompose, thenCombine) sin bloquear.
Spring busca en un paquete y sus subpaquetes clases con anotaciones estereotipo para registrarlas como beans.
Una pieza de UI reutilizable y autónoma. En React, una función que recibe props y devuelve JSX.
Construir un objeto a partir de otros que guarda como atributos ('tiene un'): un Car tiene un Engine.
Una estructura de árbol en la que los elementos individuales y los grupos comparten una interface, como archivos y carpetas.
Empieza por el objetivo y el impacto, evita la jerga, usa una analogía o un ejemplo y comprueba que se entendió. Di qué necesitas de ellas.
Concurrencia: atender varias tareas en tiempos solapados alternando entre ellas (un cocinero, muchas ollas). Paralelismo: ejecutar literalmente en el mismo instante en varios núcleos de CPU (muchos cocineros).
Un Map thread-safe pensado para muchos hilos a la vez, con lecturas sin bloqueo y locks finos en las escrituras. Ofrece métodos atómicos como merge y computeIfAbsent.
Se lanza cuando una colección se modifica estructuralmente mientras un iterator la recorre (incluso en un solo hilo). Usa removeIf o Iterator.remove.
Conectar redes on-premises con el cloud mediante una VPN site-to-site o una línea dedicada (Direct Connect, ExpressRoute).
Un objeto de Kubernetes con configuración no sensible que se inyecta en los Pods como variables de entorno o archivos.
Un archivo de pytest cuyos fixtures están disponibles automáticamente para todos los tests de su carpeta y subcarpetas.
Un conjunto de conexiones a la base de datos ya abiertas que la app toma y devuelve, en lugar de abrir una nueva en cada consulta.
Cada lectura ve la escritura más reciente, sin importar qué servidor responda.
Una forma de asignar claves a servidores en un 'anillo', de modo que añadir o quitar un servidor solo mueva una pequeña parte de las claves.
Una petición escrita para una base de datos con el fin de obtener o cambiar datos, normalmente en SQL.
Un servicio que guarda imágenes de contenedores para hacer push y pull: Docker Hub, AWS ECR, Azure ACR.
Un proceso ligero y aislado empaquetado con su app y dependencias, que comparte el kernel del sistema operativo anfitrión.
Una cabecera HTTP que lista desde qué orígenes puede cargar el navegador scripts, estilos y otro contenido.
Un objeto que se usa con with y ejecuta código de preparación al principio y de limpieza al final, aunque ocurra un error. Lo usan archivos, locks y transacciones de base de datos.
Automatizar el proceso de publicación para que los cambios puedan llegar (Delivery, con aprobación) o lleguen (Deployment, automáticamente) a producción.
Construir y probar automáticamente cada cambio de código que se sube al repositorio compartido.
Un test que comprueba que la API de un servicio sigue coincidiendo con lo que esperan sus consumidores.
equals dice si dos objetos son lógicamente iguales. hashCode da un número que usan las colecciones hash. Si dos objetos son iguales, deben devolver el mismo hashCode.
Las reglas y comprobaciones que deciden quién puede ver o cambiar qué datos y funciones.
Un flag de cookie que la oculta a JavaScript, de modo que los scripts inyectados no pueden robarla.
groupId, artifactId y version: los tres valores que identifican de forma única un artefacto de Maven.
Copiar un objeto mutable al recibirlo o devolverlo, para que nadie de fuera pueda cambiar tu estado interno.
Las métricas de experiencia de usuario de Google: LCP (carga), INP (capacidad de respuesta), CLS (estabilidad visual).
El objeto que se crea al llamar a una función async def. Es una unidad de trabajo pausable que solo corre cuando se le hace await o se programa.
Cross-Origin Resource Sharing: cabeceras con las que un servidor indica a los navegadores qué otros sitios web (orígenes) pueden leer sus respuestas.
El coste medio por operación en una secuencia larga, cuando las pocas operaciones caras se compensan con muchas baratas.
COUNT(*) cuenta todas las filas. COUNT(column) cuenta solo las filas donde esa columna NO es NULL.
Un índice que contiene todas las columnas que necesita una consulta, de modo que la base de datos responde sin leer la tabla.
Central Processing Unit: el chip que ejecuta las instrucciones de los programas. El trabajo 'CPU-bound' lo limita lo rápido que calcula el chip.
Trabajo que pasa su tiempo calculando (procesar imágenes, bucles matemáticos, compresión). Lo limita la velocidad del procesador, no la espera.
Command Query Responsibility Segregation: modelos separados (y a menudo almacenes separados) para escribir y para leer datos.
Un estado de Pod que significa que el contenedor sigue cayendo y Kubernetes reintenta con esperas cada vez mayores.
Probar automáticamente pares de usuario y contraseña filtrados de otros sitios, aprovechando que la gente reutiliza contraseñas.
Usa un par de claves: una pública (se puede compartir) y una privada (secreta). Se usa para intercambiar claves y para firmas digitales (RSA, ECDSA).
Las cuatro operaciones básicas con datos: Create, Read, Update, Delete (en SQL: INSERT, SELECT, UPDATE, DELETE).
Un sitio malicioso hace que el navegador de la víctima envíe una petición a otro sitio donde tiene la sesión iniciada, usando sus cookies.
Cascading Style Sheets: reglas que controlan el aspecto del HTML (colores, fuentes, espaciado, layout).
Un modelo de layout CSS para colocar elementos en filas y columnas a la vez.
Un resultado temporal con nombre definido con WITH que hace más legibles las consultas complejas; puede ser recursivo.
El componente más lento o limitado, que pone un tope al rendimiento de todo el sistema.
Common Vulnerabilities and Exposures: un identificador público (por ejemplo CVE-2024-1234) para un fallo de seguridad conocido.
Directed Acyclic Graph: un grafo con aristas de un solo sentido y sin ciclos. Los grafos de dependencias son DAG.
Una clase que oculta cómo se guarda y recupera una tabla o entidad concreta, normalmente con métodos CRUD.
Un atributo HTML añadido solo para tests, de modo que un selector siga estable cuando cambian los estilos o el texto.
Una clase decorada con @dataclass que obtiene automáticamente __init__, __repr__ y __eq__ a partir de sus campos declarados. Muy útil para objetos de datos simples.
Database Management System: el software que guarda los datos y ejecuta consultas, como PostgreSQL, MySQL u Oracle Database.
DDL (CREATE, ALTER, DROP) define la estructura. DML (INSERT, UPDATE, DELETE) cambia los datos.
Dos o más transacciones esperan cada una un lock que tiene la otra, así que ninguna avanza. La base de datos aborta una de ellas.
Retrasar una función hasta que los eventos paren durante cierto tiempo, para que corra una sola vez tras una ráfaga (por ejemplo, al escribir).
Un envoltorio con la misma interface que el objeto envuelto y que añade comportamiento, como BufferedReader envolviendo a FileReader.
Una función que recibe otra función y devuelve una versión modificada. @timer encima de def f significa f = timer(f). Se usa para logging, caché, permisos, reintentos.
Una copia totalmente independiente, incluidas copias de todos los objetos anidados: copy.deepcopy(a).
Superponer varios controles de seguridad independientes para que un fallo no rompa toda la defensa.
Una checklist de calidad común a todo el equipo que cada elemento de trabajo debe cumplir para contar como completo.
Una librería externa que tu código necesita, como requests o Django. Las versiones se suelen fijar en requirements.txt, pyproject.toml o un lock file.
Una librería que se trae automáticamente porque una de tus dependencias la necesita.
Darle a un objeto lo que necesita (base de datos, cliente de API, reloj) desde fuera, normalmente por el constructor, en lugar de crearlo dentro.
El código de negocio de alto nivel debe depender de abstracciones (interfaces), no de detalles concretos de bajo nivel.
Poner una versión de la aplicación en un servidor o entorno cloud para que corra para usuarios reales (o testers).
Un objeto que mantiene en marcha el número deseado de Pods idénticos y gestiona rolling updates y rollbacks.
'Double-ended queue' de collections. Añadir y quitar en O(1) por ambos extremos; ideal para colas.
Un objeto que personaliza el acceso a atributos definiendo __get__, __set__ o __delete__. Las properties y los métodos se basan en él.
Duplicar algunos datos a propósito para que las lecturas sean más rápidas, a costa de escrituras más complejas.
Dos entornos idénticos: despliegas en el que está inactivo y luego pasas todo el tráfico a él de golpe. Rollback fácil.
Dos punteros avanzan por una lista enlazada, uno de a un paso y otro de a dos. Si hay un ciclo se encuentran; si no, el rápido llega al final. Usa O(1) de espacio extra.
Que siempre produce la misma salida para la misma entrada, sin depender del tiempo, del azar ni del orden.
El coste futuro de soluciones rápidas o desordenadas tomadas ahora. Frena los cambios posteriores hasta que se paga.
Una combinación de cultura, prácticas y herramientas que une desarrollo y operaciones para entregar software más rápido y con más fiabilidad.
Explorar un grafo yendo lo más hondo posible por un camino antes de retroceder, con recursión o una pila.
Una colección de pares clave → valor con búsqueda rápida por clave: {"name": "Ana"}. Las claves deben ser hashable.
Un número que identifica un dispositivo en una red, como 192.168.1.10 (IPv4). DNS traduce nombres a direcciones IP.
Decidir los componentes principales de un sistema y cómo trabajan juntos para cumplir requisitos de escala, fiabilidad y velocidad.
Diseñar páginas que adaptan su layout a distintos tamaños de pantalla, de teléfonos a escritorios.
El front controller de Spring MVC: el único punto de entrada que enruta cada petición HTTP al método de controller correcto.
La parte del tiempo en que un sistema está activo y responde peticiones, a menudo escrita en 'nueves' (99,9%).
Quita las filas duplicadas del resultado: SELECT DISTINCT country FROM users devuelve cada país una vez.
Domain Name System: traduce nombres de dominio legibles a direcciones IP.
Herramienta de línea de comandos: docker build (crear una imagen), run (arrancar un contenedor), ps (listar), logs, exec (shell dentro), stop, rm.
Una herramienta para definir y ejecutar varios contenedores juntos desde un archivo YAML.
Un archivo de texto con instrucciones (FROM, COPY, RUN, CMD...) que Docker sigue para construir una imagen.
Document Object Model: el árbol de objetos que el navegador construye a partir del HTML. JavaScript lo lee y lo cambia para actualizar la página.
Don't Repeat Yourself: cada pieza de conocimiento debe vivir en un solo lugar, para que un cambio necesite una sola edición.
Una clase simple (a menudo un record) con la forma de una petición o respuesta de la API, separada de la entidad de base de datos.
'Si camina como un pato y grazna como un pato, es un pato.' Al código le importa lo que un objeto puede hacer (sus métodos), no su clase.
Elastic Block Store: discos de red para instancias EC2. Los datos se conservan cuando la instancia se detiene, como un disco duro virtual.
Registries de contenedores gestionados: Amazon Elastic Container Registry y Azure Container Registry. Guardan tus imágenes Docker de forma privada.
ECS: el orquestador de contenedores de AWS. EKS: Kubernetes gestionado. Fargate: cómputo serverless para contenedores, sin nodos que gestionar.
Una entrada inusual o extrema en el límite de lo que maneja una función: vacío, cero, tamaño máximo, None.
Mantener juntos los datos y los métodos que los usan y ocultar los detalles internos, para que el resto del código use solo una interface pública segura.
Una URL + método HTTP concretos que maneja tu API, por ejemplo GET /users/{id}, normalmente asociados a una función.
Un entorno parecido a producción que se usa para probar las versiones antes de que lleguen a usuarios reales.
Una carpeta autónoma con sus propios paquetes Python para un proyecto, creada con python -m venv .venv.
Preguntas de entrevista sobre cómo actuaste en situaciones reales del pasado. Se responden con una historia estructurada como STAR.
Implementar un Singleton como un enum de Java con un solo valor; la JVM garantiza exactamente una instancia y es thread-safe.
EC2 = VM; S3 = Blob Storage; Lambda = Functions; EKS = AKS; RDS = Azure SQL; DynamoDB = Cosmos DB; IAM = Entra ID + RBAC; CloudWatch = Azure Monitor.
Añadir más servidores que comparten el trabajo, normalmente detrás de un load balancer. Requiere que la app no guarde estado.
Hacer más potente un servidor (más CPU, RAM, disco). Simple pero limitado, y sigue siendo un punto único de fallo.
El peso que usa CSS para elegir entre reglas en conflicto: inline > id > clase > elemento.
La estructura de los datos: qué tablas o documentos existen, sus campos, tipos y relaciones.
Datos propios de un componente que pueden cambiar con el tiempo; al cambiarlos se provoca un re-render.
Datos que cualquier parte del programa puede leer y cambiar. Crea conexiones ocultas en el código y dificulta las pruebas.
Las reglas de un equipo para las ramas: Git Flow (develop/release/hotfix) o trunk-based (merges frecuentes a main).
La estructura estándar: src/main/java (código), src/main/resources (configuración), src/test/java (tests). La salida del build va a target/.
Una forma de organizar datos en memoria para que ciertas operaciones sean eficientes: lista, diccionario, set, pila, cola, árbol, grafo.
Un identificador de versión de un recurso que envía el servidor. Permite al cliente preguntar '¿ha cambiado?' y recibir 304 Not Modified si no.
Calcular los valores solo cuando hacen falta, en lugar de todos de antemano. Ahorra memoria y tiempo cuando no se usa todo.
Un evento en un elemento se dispara también en su padre, luego en el padre de este, y así hasta el documento.
Gestionar los eventos de muchos elementos hijos con un solo listener en su padre común, gracias al bubbling.
El motor de asyncio. Corre muchas tareas en un hilo y cambia a otra tarea cuando la actual está esperando (en un await).
El mecanismo que corre JS en un solo hilo: ejecuta el código síncrono, luego todas las microtasks (promises), luego la siguiente macrotask (timers, eventos).
Las copias de los datos pueden diferir un breve tiempo tras una escritura, pero todas acaban siendo iguales si no llegan más escrituras.
Un objeto de error que se lanza mientras corre el programa (ValueError, KeyError...). Si nadie lo captura con try/except, el programa se detiene y muestra un traceback.
ValueError: tipo correcto, valor incorrecto. TypeError: tipo incorrecto. KeyError: falta una clave del diccionario. IndexError: índice fuera de rango.
La API de Java para enviar tareas a un thread pool y obtener un Future con el resultado.
Una prueba SQL que es verdadera si una subconsulta devuelve al menos una fila (EXISTS) o ninguna (NOT EXISTS).
Un número que devuelve un proceso al terminar: 0 significa éxito, cualquier otro indica un error o una señal.
Un comando SQL que muestra cómo planea la base de datos ejecutar una consulta (índices usados, scans, joins). EXPLAIN ANALYZE además la ejecuta y muestra tiempos reales.
Esperar hasta que se cumpla una condición concreta (elemento visible, clicable) con un timeout, en lugar de dormir un tiempo fijo.
Una función anónima corta escrita como (args) -> expression, por ejemplo n -> n * 2. Se puede usar donde se espere una interface funcional.
Una función o clase cuyo trabajo es crear objetos eligiendo el tipo concreto correcto: create_parser("json") devuelve un JsonParser.
Cambiar automáticamente a un componente de respaldo cuando falla el principal.
Una implementación simple y funcional que se usa en tests en lugar de la real, por ejemplo una base de datos en memoria.
Un interruptor de configuración que activa o desactiva una función en tiempo de ejecución, para todos o para algunos usuarios, sin volver a desplegar.
La API del navegador para peticiones HTTP. Devuelve una Promise, NO lanza error con 404 o 500 (comprueba res.ok) y res.json() también es asíncrono.
FIFO: first in, first out, como una fila en una tienda. LIFO: last in, first out, como una pila de platos.
Un modificador que impide cambios: una variable final se asigna una vez, un método final no se puede sobrescribir, una clase final no se puede extender.
Un bloque que corre después de try/catch pase lo que pase, incluso tras un return o una excepción. Se suele usar para limpiar.
Un control de red que permite o bloquea conexiones según reglas (dirección, puerto, protocolo).
Una función que prepara algo que un test necesita (datos, conexión, cliente) y opcionalmente lo limpia después.
Un test que a veces pasa y a veces falla sin ningún cambio en el código.
Un modelo de layout CSS para colocar elementos en una dirección (fila o columna), con alineación y espaciado fáciles.
Ahorra memoria compartiendo objetos inmutables idénticos, como la caché de Integer y el string pool.
Una columna que guarda la primary key de una fila de otra tabla, creando una relación que la base de datos puede hacer cumplir.
Reglas progresivas de diseño de tablas que eliminan redundancia: valores atómicos (1NF), dependencia total de la clave (2NF), sin dependencias entre columnas que no son clave (3NF).
Fortalezas: elige 2 o 3 relevantes con un ejemplo breve. Debilidad: una real que no sea crítica para el puesto, y qué haces para mejorarla.
Base de código reutilizable que da estructura a una aplicación y llama a tu código en puntos definidos (por ejemplo Spring Boot, Django, React).
La parte de una aplicación que corre en el dispositivo del usuario (navegador o app) y que la gente ve y usa: diseño, botones, formularios.
Resolver un problema probando todas las posibilidades. Simple y correcto, pero a menudo demasiado lento con entradas grandes.
Un bloque de código reutilizable con nombre. Recibe entradas (parámetros), hace algo y puede devolver un resultado con return.
Una función que resume muchas filas en un solo valor: COUNT, SUM, AVG, MIN, MAX.
Una función que recibe funciones como argumentos o devuelve una función. Los decorators, map y sorted(key=...) son ejemplos.
Una función de un solo sentido que convierte cualquier entrada en una huella de tamaño fijo. La misma entrada siempre da la misma salida.
Un decorator que recuerda los resultados de una función para los mismos argumentos (memoization). Los argumentos deben ser hashable, así que pasar una lista lanza TypeError.
Un decorator para decorators: copia el nombre y el docstring de la función original en el wrapper, para que la depuración y la introspección sigan funcionando.
Garbage collectors modernos de la JVM. G1 es el de por defecto: trabaja por regiones y busca pausas predecibles. ZGC busca pausas de pocos milisegundos incluso con heaps enormes.
At-most-once (puede perder mensajes), at-least-once (puede duplicarlos), exactly-once (difícil; suele lograrse con procesamiento idempotente).
La parte del runtime de un lenguaje que libera automáticamente la memoria que ya no se usa. En Python, el módulo gc limpia sobre todo ciclos de referencias.
El componente de la JVM que libera automáticamente los objetos que ya no se pueden alcanzar, para que no haya que llamar a free a mano.
La plataforma cloud de Google. Ofrece equivalentes a los servicios de AWS y Azure: Compute Engine (máquinas virtuales), Cloud Storage (almacenamiento de objetos) y GKE (Kubernetes gestionado).
Una función que usa yield para producir valores de uno en uno, pausándose entre ellos. No construye todo el resultado en memoria y solo se puede consumir una vez.
Tipos parametrizados como List<String> que permiten al compilador comprobar los tipos de los elementos y evitan los casts.
Haz preguntas aclaratorias, declara tus suposiciones, divide el trabajo en pasos pequeños, entrega algo pronto e itera con feedback.
Una herramienta que descarga y registra las librerías que necesita un proyecto: Maven o Gradle (Java), pip (Python), npm (JavaScript).
Un lock dentro de CPython (el Python estándar) que permite que solo un hilo ejecute código Python a la vez. Mantiene simple y segura la gestión de memoria, pero impide que los hilos hagan cálculos pesados en paralelo.
Un sistema de control de versiones distribuido que registra el historial de tus archivos y admite ramas y merges.
add prepara cambios, commit guarda una instantánea en local, push sube commits al remoto, pull descarga e integra los commits remotos.
Copia los cambios de un commit concreto en la rama actual como un commit nuevo.
Un registro local de todos los puntos a los que ha apuntado HEAD, que sirve para recuperar commits "perdidos" tras un reset o rebase.
reset mueve una rama hacia atrás y reescribe el historial; revert añade un commit nuevo que deshace uno anterior, seguro en ramas compartidas.
Guarda temporalmente los cambios sin commit para que puedas cambiar de tarea y recuperarlos después.
Un antipatrón: una clase enorme que sabe y hace demasiado. Divídela por responsabilidades.
Los cuatro autores del libro "Design Patterns" (1994), que catalogó 23 patrones clásicos de diseño orientado a objetos.
Un conjunto de nodos (vértices) conectados por aristas. Las aristas pueden ser dirigidas o no, y con peso o sin él.
Un lenguaje de consulta para APIs en el que el cliente pide exactamente los campos que necesita en una sola petición, a través de un único endpoint.
Agrupa las filas que comparten un valor para calcular funciones de agregación por grupo.
Un framework RPC de alto rendimiento que usa mensajes binarios Protobuf sobre HTTP/2, con código generado a partir de un esquema compartido.
Un número calculado a partir de un valor, que sirve para encontrarlo rápido en sets y claves de dict. Los valores iguales deben tener hashes iguales. Normalmente solo los valores inmutables son hashable.
Guardar un hash lento, con salt y de un solo sentido de la contraseña (Argon2id, bcrypt, scrypt) en lugar de la contraseña.
Un Map que encuentra valores aplicando un hash a la clave para elegir un bucket. get y put en O(1) de media. No es thread-safe; admite una clave null.
Un Set de Java respaldado por una tabla hash: sin duplicados, sin orden, add y contains en O(1) de media. Necesita equals y hashCode correctos.
Una estructura basada en un árbol que da acceso rápido al elemento más pequeño (min-heap) o más grande. En Python: heapq. Push/pop en O(log n).
La zona de memoria compartida donde viven todos los objetos. La limpia el garbage collector. Cuando se llena: OutOfMemoryError.
El gestor de paquetes de Kubernetes: charts de manifiestos con plantillas que se instalan con valores por entorno.
Una clase (hija) reutiliza y amplía otra (padre): class Dog(Animal). La hija recibe los métodos del padre y puede sobrescribirlos.
Una clase con más de un padre: class D(B, C). Python resuelve los conflictos con el MRO.
Jenkins, GitHub Actions, GitLab CI y Azure DevOps Pipelines ejecutan pasos de build, test y deploy definidos como código.
La implementación de JPA más popular. Genera SQL, gestiona el estado de las entidades y guarda en caché los objetos cargados.
Una secuencia de instrucciones que corre dentro de un programa. Un programa (proceso) puede tener varios hilos que comparten la misma memoria, como varios cocineros en una cocina.
Una firma calculada a partir de un mensaje y una clave secreta. Quien tenga la clave puede verificar que el mensaje es auténtico y no ha cambiado.
El comportamiento de JavaScript de mover las declaraciones al inicio de su scope antes de ejecutar el código.
Un objeto de Kubernetes que cambia el número de réplicas de Pods según la CPU o métricas personalizadas.
HTTP Strict Transport Security: una cabecera que indica a los navegadores que usen siempre HTTPS para un dominio.
HyperText Markup Language: las etiquetas que definen la estructura y el contenido de una página web (títulos, párrafos, enlaces, formularios).
Usar los elementos HTML por su significado (button, nav, main, label) en lugar de divs genéricos, lo que ayuda a la accesibilidad y al SEO.
El protocolo que usan navegadores y apps para hablar con servidores web: un cliente envía una petición (método, URL, cabeceras, cuerpo) y recibe una respuesta (código de estado, cabeceras, cuerpo).
Una versión más nueva de HTTP que envía muchas peticiones a la vez por una conexión y comprime las cabeceras.
HTTP dentro de una conexión TLS cifrada. Impide que los datos se lean o se cambien y verifica la identidad del servidor.
Conectar en el navegador el comportamiento de JavaScript al HTML renderizado en el servidor para que sea interactivo.
Trabajo que pasa la mayor parte del tiempo esperando entrada y salida: llamadas de red, lecturas de disco, consultas a la base de datos. La CPU está casi ociosa mientras espera.
Infrastructure, Platform y Software as a Service: servidores alquilados; una plataforma que ejecuta tu código; una aplicación terminada.
Identity and Access Management: el sistema de AWS (u otro cloud) para usuarios, roles y permisos.
Integrated Development Environment: un editor con herramientas extra como autocompletado, depurador y botones para ejecutar y probar (IntelliJ IDEA, Eclipse, PyCharm).
Una operación que tiene el mismo efecto se haga una vez o muchas. Asignar x = 5 es idempotente; sumar 1 a x no lo es.
A qué objeto exacto de la memoria se refiere una variable. id(x) la muestra e is la compara. Dos listas iguales pueden ser dos objetos distintos.
Insecure Direct Object Reference: acceder a datos ajenos cambiando un ID en la petición, porque no se comprueba a quién pertenecen.
Una plantilla de solo lectura, por capas, que contiene una app y todo lo que necesita para correr. Los contenedores se arrancan desde imágenes.
Cierra cada historia con un resultado y, si puedes, un número: tiempo ahorrado, errores reducidos, usuarios ayudados. Convierte 'trabajé en eso' en 'sirvió de algo'.
Espacios al inicio de una línea. En Python definen qué líneas pertenecen a un bloque (if, bucle, función).
Una estructura de búsqueda ordenada sobre una o más columnas que permite a la base de datos encontrar filas rápido sin recorrer toda la tabla.
Un índice sobre varias columnas en un orden concreto, por ejemplo (last_name, first_name). Solo sirve cuando las consultas filtran por sus columnas más a la izquierda.
Reemplazar los servidores por imágenes recién construidas en cada cambio, en lugar de modificarlos en caliente.
Definir servidores, redes y bases de datos en archivos de código, para que la infraestructura se versione, se revise y se pueda reproducir.
Reglas de Kubernetes que enrutan el tráfico HTTP(S) externo por host y ruta hacia Services, implementadas por un Ingress Controller.
Un objeto que no puede cambiar tras crearse, como int, str, tuple o frozenset. 'Cambiarlo' en realidad crea un objeto nuevo.
Devuelve solo las filas que tienen coincidencia en ambas tablas.
Un campo de formulario cuyo valor viene del estado de React y se actualiza con onChange.
Un objeto concreto creado a partir de una clase. rex = Dog() hace que rex sea una instancia de Dog. La clase es el plano; la instancia es la casa.
El conjunto de métodos que un objeto promete ofrecer, sin decir cómo funcionan por dentro. En Python se suele expresar con una ABC o un Protocol.
Preferir varias interfaces pequeñas y centradas a una grande, para que las clases implementen solo lo que usan.
Un programa que lee código fuente y lo ejecuta directamente. El código Python corre con el intérprete python.
Un diseño en el que un framework o contenedor controla la creación y conexión de objetos, en lugar de que tu código llame a new.
Pasar las dependencias como parámetros del constructor. Permite campos final, requisitos claros y unit tests fáciles.
Cualquier cosa que puedes recorrer con for: listas, strings, dicts, archivos, ranges. Al llamar a iter() sobre ella obtienes un iterator.
Un objeto que devuelve el siguiente elemento cada vez que llamas a next() y recuerda por dónde va. Cuando no quedan elementos, lanza StopIteration.
La librería Java por defecto que convierte objetos a JSON y JSON a objetos.
El sucesor de Java EE. Desde Spring Boot 3 los paquetes son jakarta.* en lugar de javax.*.
Java ARchive: un archivo basado en ZIP que agrupa clases compiladas y recursos. Las librerías y las apps Spring Boot se distribuyen como JAR.
Un lenguaje de programación de propósito general y orientado a objetos, muy común en backend y software empresarial. No tiene relación con JavaScript.
javac compila el código .java a bytecode .class. java arranca la JVM y ejecuta ese bytecode, o un JAR completo con java -jar.
El lenguaje de programación que corre en los navegadores (y en servidores con Node.js) para hacer interactivas las páginas.
La API estándar de bajo nivel de Java para ejecutar SQL en bases de datos relacionales mediante drivers.
Un helper de Spring que ejecuta SQL por JDBC y elimina el código repetitivo: se encarga de conexiones, statements y limpieza.
JRE (Java Runtime Environment) = JVM + librerías estándar, suficiente para ejecutar programas. JDK (Java Development Kit) = JRE + herramientas de desarrollo como el compilador javac.
Combinar filas de dos tablas a partir de una columna relacionada, por ejemplo orders.customer_id = customers.id.
El estándar de Java para mapear objetos a tablas relacionales (ORM): @Entity, @Id, relaciones y consultas JPQL.
Una interface de Spring Data que da métodos listos de CRUD, paginación y ordenación para una entidad. Solo declaras la interface.
Un formato de datos en texto con objetos {"key": value} y arrays [...]. El formato estándar de las APIs web.
json.loads convierte un string JSON en objetos Python. json.dumps convierte objetos Python en un string JSON.
Una sintaxis que permite escribir marcado parecido a HTML dentro de JavaScript (React). El paso de build lo compila a llamadas de función normales.
El framework estándar de unit testing en Java: @Test, @BeforeEach, @ParameterizedTest, assertions y extensiones.
El programa que carga y ejecuta el bytecode de Java, gestiona la memoria (garbage collection) y optimiza el código más usado mientras corre. Cada sistema operativo tiene su propia JVM.
Un token compacto con tres partes (header.payload.signature). El payload lleva claims como el ID de usuario y la expiración; la firma demuestra que lo emitió el servidor.
Una plataforma distribuida de streaming de eventos: los mensajes se guardan en un log ordenado y reproducible, dividido en particiones.
Un método de tablero visual con límites de trabajo en curso y flujo continuo, en lugar de sprints fijos.
Servicios gestionados que crean, guardan y controlan claves de cifrado (AWS KMS, Azure Key Vault).
La herramienta de línea de comandos de Kubernetes: apply, get, describe, logs, exec, rollout.
Un sistema que automatiza el despliegue, el escalado, la recuperación y la red de contenedores en un clúster de máquinas.
Una pequeña función anónima escrita en una expresión: lambda x: x * 2 es lo mismo que def f(x): return x * 2.
El tiempo que tarda una operación de principio a fin, por ejemplo cuánto espera una petición su respuesta.
Cargar los datos relacionados solo cuando se accede a ellos por primera vez. Eficiente, pero fuera de una sesión lanza LazyInitializationException.
Devuelve todas las filas de la tabla izquierda y las coincidentes de la derecha (NULL donde no hay coincidencia).
Un lenguaje que etiqueta el contenido para describir su estructura o significado, como HTML. No es un lenguaje de programación: no tiene lógica.
Un lenguaje formal para escribir instrucciones que una computadora puede ejecutar, como Python, Java o JavaScript.
'Habla solo con tus amigos inmediatos.' Un método no debe atravesar una cadena de objetos (a.b.c.d()); las cadenas acoplan tu código a la estructura interna de otras clases.
Una colección de código reutilizable que tu programa llama cuando la necesita (por ejemplo requests, Jackson).
Límite de work in progress: una regla de Kanban que pone un tope a los elementos que puede haber a la vez en una columna, para que el equipo termine antes de empezar más.
Familia de sistemas operativos libres y de código abierto que hace correr la mayoría de los servidores, contenedores y máquinas cloud.
Una subclase debe funcionar en cualquier lugar donde se espere su clase padre, sin sorprender a quien la llama.
Una forma compacta de construir una lista a partir de un bucle: [x * 2 for x in nums if x > 0]. Con paréntesis en lugar de corchetes se convierte en una generator expression.
Una colección ordenada y modificable: [1, 2, 3]. Se accede a los elementos por posición, empezando en 0.
Una representación de grafos donde cada nodo apunta a una lista de sus vecinos: {"A": ["B", "C"]}.
Una secuencia de nodos donde cada uno guarda un valor y un puntero al siguiente. Insertar y quitar es fácil; acceder por índice es lento.
Una llamada que hace esperar al hilo sin hacer nada más hasta que termina, como time.sleep() o requests.get(). Dentro de código async lo congela todo.
Un componente que reparte las peticiones entrantes entre varios servidores y se salta los que no están sanos.
Almacenamiento clave-valor del navegador que JavaScript puede leer. localStorage persiste; sessionStorage dura lo que una pestaña.
La forma en que un test encuentra un elemento: por id, name, selector CSS, XPath o texto del enlace. Los locators estables hacen los tests menos frágiles.
Una herramienta que deja que solo un hilo a la vez ejecute un trozo de código protegido: with lock: .... Evita race conditions.
Logs: eventos de texto con marca de tiempo. Métricas: medidas numéricas a lo largo del tiempo. Traces: el recorrido cronometrado de una petición por los servicios.
Un contador de Java para muchos hilos: reparte las actualizaciones en varias celdas y las suma al leer, así que escala mejor que AtomicLong con mucha contención.
Una versión que recibe actualizaciones y correcciones durante varios años. Java 8, 11, 17, 21 y 25 son versiones LTS.
Software malicioso: virus, gusanos, ransomware, spyware y otros programas pensados para dañar o robar.
Una identidad que Azure gestiona para un recurso, para que pueda llamar a otros servicios con tokens en lugar de contraseñas guardadas. Equivalente en AWS: IAM roles.
Trabajar directamente con los dígitos binarios de los números usando operadores como & (and), | (or), ^ (xor), << y >> (desplazamientos).
Métodos de array que devuelven resultados nuevos: map transforma cada elemento, filter conserva los que coinciden, reduce combina los elementos en un solo valor.
Una emulación por software de una computadora completa, con su propio sistema operativo sobre un hipervisor.
Una herramienta Java de build y gestión de dependencias. Lee pom.xml, descarga librerías, compila, prueba y empaqueta el proyecto.
Una condición CSS (ancho de pantalla, modo oscuro, etc.) que aplica reglas solo cuando se cumple.
Guardar en caché los resultados de una función según sus argumentos, para que las llamadas repetidas con la misma entrada respondan al instante. En Python: @functools.lru_cache.
Objetos que siguen referenciados (el GC no puede liberarlos) pero que nunca se volverán a usar, lo que hace crecer el heap.
Ayudar a alguien a crecer: explica el porqué, da tareas pequeñas con feedback, trabaja en pareja y deja que se apropie de la solución. Describe cómo mejoró.
Combinar los cambios de una rama en otra. Conserva ambos historiales y añade un merge commit cuando hace falta.
Ocurre cuando dos ramas cambiaron las mismas líneas. Debes elegir a mano el contenido final y marcarlo como resuelto.
Una ordenación que divide la lista en mitades, ordena cada una y las fusiona. Siempre O(n log n), estable, usa memoria extra.
El software de servidor que recibe, guarda y entrega mensajes entre servicios (RabbitMQ, Kafka, SQS).
Un búfer donde un servicio deja mensajes y otro los recoge más tarde, para que no tengan que estar disponibles a la vez.
La 'clase de una clase': crea clases igual que las clases crean objetos. La de por defecto es type. Rara vez hace falta en el día a día.
Datos sobre datos. En una función: su nombre (__name__), su docstring (__doc__), su módulo, etc.
Una función definida dentro de una clase. Recibe automáticamente el objeto (self) como primer argumento.
Métodos con 'double underscore' como __init__, __eq__, __len__. Python los llama automáticamente para el comportamiento integrado (creación, comparación, len(), impresión).
El verbo de una petición: GET (leer), POST (crear), PUT (reemplazar), PATCH (actualización parcial), DELETE (eliminar).
Situation, Task, Action, Result: una estructura para responder preguntas conductuales con una historia breve y concreta.
Autenticación multifactor: exigir dos o más tipos distintos de prueba de identidad, como una contraseña y un código en el teléfono.
Una arquitectura en la que una aplicación se divide en servicios pequeños que se despliegan de forma independiente y se comunican por la red.
El servicio cloud de identidad y acceso de Microsoft, antes llamado Azure Active Directory (Azure AD).
Las microtasks (callbacks de promises) corren justo después del código actual, antes de cualquier macrotask (setTimeout, I/O, eventos de UI).
Código que corre alrededor de cada petición y respuesta en una app web, para tareas transversales como logging, auth, CORS o medir tiempos.
Dar a cada usuario, servicio y clave solo los permisos mínimos que necesita.
Un doble de test que reemplaza una dependencia real, devuelve lo que configures y registra las llamadas para que puedas verificarlas.
Los clientes (navegadores, apps) envían peticiones por la red; los servidores las procesan y envían respuestas.
Una palabra clave que controla quién ve un miembro de una clase: public (todos), protected (paquete y subclases), ninguno (solo el paquete), private (solo la misma clase).
Un módulo es un archivo de código que puedes importar; un paquete es una carpeta de módulos.
Vigilar métricas (errores, latencia, CPU) a lo largo del tiempo y avisar cuando el sistema no está sano.
Una aplicación construida y desplegada como una sola unidad. Puede estar bien organizada por dentro (monolito modular).
Conecta tus objetivos con el puesto y la empresa: qué quieres aprender, qué puedes aportar y algo concreto que hayas investigado sobre su producto o equipo.
El orden en que Python busca un método o atributo entre las clases cuando hay herencia. Se ve con ClassName.__mro__.
Un Dockerfile con varias etapas FROM, donde las últimas copian de las anteriores solo los resultados necesarios.
Ejecuta código Python en procesos separados, cada uno con su intérprete y su GIL, para que el trabajo CPU-bound use varios núcleos. Coste: arrancar procesos y hacer pickle de los datos que se envían.
Un objeto que se puede cambiar después de crearlo, como una lista, un dict o un set. Si dos variables apuntan al mismo objeto mutable, un cambio por una se ve por la otra.
Plantar pequeños bugs en el código para comprobar si la suite de tests los detecta.
Model-View-Controller: separa datos y reglas (model), presentación (view) y gestión de peticiones (controller).
clean borra target/, test ejecuta los unit tests, package construye el JAR, install además lo copia a ~/.m2.
Minimum Viable Product: la versión más pequeña de un producto que aporta valor y permite al equipo aprender de usuarios reales.
Una partición lógica de un clúster (dev, staging, team-a) con sus propios nombres, cuotas y permisos.
Network Address Translation: permite que hosts con IP privadas lleguen a internet a través de una dirección pública compartida.
Una app (Chrome, Firefox, Safari, Edge) que pide páginas web a los servidores y las muestra. Es el cliente HTTP más común.
El National Institute of Standards and Technology de EE. UU. Publica estándares de seguridad y cloud muy usados, como la definición de cloud computing.
Cuánto se protegen entre sí las transacciones concurrentes: Read Uncommitted, Read Committed, Repeatable Read, Serializable.
Un runtime de JavaScript que permite ejecutar JavaScript fuera del navegador, por ejemplo para crear servidores y herramientas de línea de comandos.
Organizar las tablas para que cada hecho se guarde una vez, unido por claves. Evita datos duplicados y errores de actualización.
Bases de datos que no son tablas relacionales: documentales, clave-valor, wide-column o de grafos, a menudo con esquemas flexibles.
Una forma de describir cómo crecen el tiempo o la memoria de un algoritmo cuando crece el tamaño de la entrada n, ignorando constantes: O(1), O(log n), O(n), O(n log n), O(n²).
Escribir un rango de red como dirección/prefijo, por ejemplo 10.0.1.0/24 = 256 direcciones. Un número de prefijo menor significa una red mayor.
npm es el gestor de paquetes de Node. package.json lista metadatos, scripts y dependencias; npm install las descarga a node_modules.
Una marca de 'valor ausente o desconocido' en SQL. No es 0 ni un string vacío, y las comparaciones con él nunca son verdaderas (usa IS NULL).
El valor de una referencia que no apunta a ningún objeto. Llamar a un método sobre ella lanza NullPointerException.
Un estándar que permite a una app obtener acceso limitado a la cuenta de un usuario en otro servicio sin ver su contraseña ('Iniciar sesión con Google').
Responde con crecimiento en habilidades y responsabilidad (más profundidad técnica, liderar proyectos pequeños) que encaje con lo que ofrece la empresa. Con honestidad, sin sonar ensayado.
Cualquier valor en Python (un número, una lista, una función, una clase). Todo objeto tiene un tipo, un valor y una identidad.
Lo bien que puedes entender qué hace un sistema en marcha a partir de sus salidas: métricas, logs y traces.
Una capa de login sobre OAuth 2.0. Le dice a la app quién es el usuario mediante un ID token (un JWT).
Out Of Memory killer: un mecanismo del kernel de Linux que mata un proceso que usa más memoria de la permitida.
Programación orientada a objetos: organizar el código en objetos que agrupan datos (campos) y comportamiento (métodos).
El código debe estar abierto a la extensión (añadir comportamiento nuevo) pero cerrado a la modificación (no editar código ya probado para añadirlo).
& AND, | OR, ^ XOR, << y >> desplazan bits. n & (n - 1) borra el bit activo más bajo, así que da 0 solo con potencias de dos.
No bloquear al leer; al guardar, comprobar un número de versión para detectar si otro cambió la fila entretanto.
Un contenedor que puede tener un valor o estar vacío. Se usa como tipo de retorno para dejar claro que "puede faltar", en lugar de devolver null.
Desde Python 3.7 un dict mantiene las claves en el orden en que se insertaron, y el lenguaje lo garantiza (en la 3.6 era solo un detalle de CPython).
La forma estándar de evitar deadlocks: todas las transacciones toman los locks en el mismo orden global, y se mantienen cortas.
Ordenar los nodos de un DAG de modo que cada nodo vaya después de los nodos de los que depende.
La combinación de esquema, dominio y puerto de una página web, por ejemplo https://app.example.com:443. Otro origen = otro sitio para el navegador.
Object-Relational Mapper (Django ORM, SQLAlchemy): permite trabajar con filas de la base de datos como objetos Python en lugar de escribir SQL a mano.
Varios métodos con el mismo nombre pero distintas listas de parámetros en la misma clase. El compilador elige en tiempo de compilación.
Una subclase aporta su propia implementación de un método heredado con la misma firma. La JVM elige la versión en tiempo de ejecución según el tipo real del objeto.
Una lista muy usada, publicada por la fundación OWASP, de los riesgos de seguridad más críticos para aplicaciones web.
Mostrar que asumiste responsabilidad más allá de tu tarea: viste el problema, actuaste, le diste seguimiento y respondiste por el resultado. Di 'yo', no solo 'nosotros'.
Un patrón en el que cada página es una clase con sus locators y acciones, lo que mantiene legibles los tests y los cambios de UI en un solo lugar.
Devolver una lista grande en páginas más pequeñas (por ejemplo, 20 elementos cada vez), con limit/offset o un cursor.
Un namespace que organiza clases e interfaces relacionadas, como una carpeta: java.util, com.mycompany.shop.
Un decorator de pytest que ejecuta el mismo test con varios conjuntos de entradas.
Un parámetro es una variable en la definición de una función (def greet(name)). Un argumento es el valor que pasas al llamarla (greet("Ana")).
Una parte variable de la ruta de la URL que identifica un recurso: en /users/42, 42 es el ID del usuario.
Una actualización que corrige un bug o una vulnerabilidad de seguridad en el software.
Un fallo en el que partes de un sistema distribuido no pueden comunicarse entre sí, aunque cada parte sigue funcionando.
Usar secuencias ../ en una ruta de archivo para acceder a archivos fuera de la carpeta prevista.
Un envoltorio que convierte una interface en otra que tu código espera, como un adaptador de enchufe de viaje.
Envuelve una petición como un objeto para poder encolarla, registrarla, reintentarla o deshacerla. Encaja muy bien con undo/redo y colas de trabajos.
Una solución probada y con nombre a un problema de diseño recurrente (Factory, Strategy, Observer...). Una idea que se adapta, no una librería.
Una clase de entrada sencilla que oculta un subsistema complicado detrás de unos pocos métodos fáciles.
Los suscriptores se registran en un sujeto y reciben un aviso automático cuando ocurre un evento (publish/subscribe).
Un objeto que sustituye a otro con la misma interface para controlar el acceso o añadir comportamiento (transacciones, caché, lazy loading).
Algoritmos intercambiables detrás de una interface, elegidos en tiempo de ejecución (por ejemplo, distintas reglas de coste de envío).
Un momento en que la JVM pausa todos los hilos de la aplicación para que el garbage collector trabaje con seguridad. Las pausas largas causan picos de latencia.
El número de formas de ordenar n elementos distintos es n! (n factorial). Generarlas todas lleva al menos n! pasos, que crecen rapidísimo.
El conjunto de entidades que gestiona en ese momento una sesión JPA. Sus cambios se detectan (dirty checking) y se escriben en el commit.
Conservar los datos después de que el programa se detenga, guardándolos en disco (por ejemplo, en una base de datos) en lugar de solo en memoria.
PV: una porción de almacenamiento del clúster. PVC: la petición de almacenamiento de un Pod; se enlaza a un PV para que los datos sobrevivan a los reinicios del Pod.
Bloquear las filas al leerlas (SELECT ... FOR UPDATE) para que nadie más pueda cambiarlas hasta que termines.
Mensajes fraudulentos que se hacen pasar por organizaciones de confianza para engañar a la gente y que entregue credenciales o instale malware.
La forma integrada de Python de convertir objetos en bytes y viceversa. Se usa para enviar datos entre procesos. Nunca hagas unpickle de datos no confiables.
Process ID: el número que el sistema operativo da a cada proceso en marcha. En un contenedor, el PID 1 es el proceso principal; cuando termina, el contenedor se detiene.
Personally Identifiable Information: datos que pueden identificar a una persona, como nombre, correo, número de identificación o dirección.
Una colección LIFO (last in, first out): push añade arriba, pop quita de arriba. Como una pila de platos.
Una pila mantenida en orden creciente o decreciente, que sirve para encontrar el siguiente elemento mayor o menor de cada elemento en O(n).
El instalador de paquetes de Python. Descarga paquetes de PyPI (el Python Package Index).
Una secuencia automatizada de pasos (lint, test, build, deploy) que se dispara con los cambios de código.
Guía para la mezcla de tests: muchos unit tests rápidos en la base, menos tests de integración y muy pocos tests end-to-end lentos arriba.
La unidad más pequeña que ejecuta Kubernetes: uno o más contenedores que comparten red y almacenamiento.
Clases distintas responden a la misma llamada de método a su manera. Quien llama solo usa x.area() sin comprobar el tipo.
El cliente pregunta al servidor una y otra vez '¿hay algo nuevo?' a intervalos. Simple, pero derrochador frente a push.
Project Object Model: el archivo de Maven que describe el proyecto (coordenadas, dependencias, plugins, propiedades).
Un análisis escrito tras un incidente: qué pasó, por qué y qué cambiará para evitarlo.
Pregunta por el equipo, cómo se planifica y revisa el trabajo, el onboarding, cómo se ve el éxito a los 6 meses y los principales retos técnicos. No preguntes solo por salario o beneficios.
Una estructura sencilla para 'Háblame de ti': qué haces ahora, cómo llegaste aquí (1 o 2 pasos clave) y por qué este puesto es el siguiente. Entre 1 y 2 minutos.
La columna o columnas que identifican de forma única cada fila de una tabla. Única y nunca NULL.
print muestra un valor en pantalla y la función devuelve None. return entrega un valor a quien llamó para que otro código lo use, y termina la función.
Aclara qué es urgente y qué es importante, acuerda el alcance con los stakeholders, entrega primero lo más valioso, comunica pronto los riesgos y di que no al resto.
Da a un servicio cloud una IP privada en tu red, para que el tráfico nunca cruce la internet pública.
Ejecutar 1 consulta para obtener una lista de N elementos y luego 1 consulta más por cada elemento. Se resuelve cargando los datos relacionados de una vez (JOIN o IN).
Un programa en marcha con su propia memoria privada. Dos procesos no comparten variables; para intercambiar datos deben enviárselos. Como dos cocinas separadas.
Resolver un problema dividiéndolo en subproblemas solapados y guardando la respuesta de cada uno para calcularla una sola vez.
Un objeto que representa el resultado futuro de una operación asíncrona: pending, y luego fulfilled con un valor o rejected con un error.
Ejecuta promises en paralelo y resuelve con todos los resultados, pero rechaza en cuanto UNA rechaza. Promise.allSettled espera a todas e informa de cada resultado.
Comprobar que una regla se cumple para muchas entradas generadas automáticamente (por ejemplo, con Hypothesis).
Entradas que un componente padre pasa a un componente hijo. Son de solo lectura para el hijo.
Un tipo que describe métodos requeridos. Cualquier clase que tenga esos métodos encaja, sin heredar de él.
Una empresa que alquila recursos de cómputo por internet. Los mayores: AWS, Microsoft Azure, Google Cloud.
Mensajería publish/subscribe: los publicadores envían a un topic; cada suscriptor de ese topic recibe una copia.
Un número (0-65535) que identifica un servicio concreto en una máquina, por ejemplo 443 para HTTPS, 5432 para PostgreSQL.
Una petición para integrar una rama, con code review y comprobaciones automáticas, alojada en GitHub o GitLab (en GitLab se llama merge request).
Un componente sin respaldo cuyo fallo detiene todo el sistema.
El archivo de configuración estándar de un proyecto Python: metadatos, dependencias y ajustes de herramientas en un solo lugar.
El framework de testing más popular de Python: assert simples, fixtures, parametrización y plugins.
Quality Assurance: actividades (testing, automatización, mejoras de proceso) que ayudan a asegurar que el software cumple las expectativas de calidad.
Queries (peticiones) por segundo: una medida básica de carga que se usa en las estimaciones de capacidad.
Pares clave=valor después de ? en una URL, usados para filtrar, ordenar y paginar: ?status=paid&limit=10.
Un protocolo de transporte moderno construido sobre UDP y usado por HTTP/3. Establece conexiones más rápido y evita el bloqueo head-of-line de TCP.
Una ordenación que elige un pivote, separa los elementos menores y mayores que él y ordena cada parte. Rápida de media, O(n²) en el peor caso.
Un bug en el que el resultado depende de la mala suerte en el orden con que hilos o procesos tocan los mismos datos. Difícil de reproducir porque ocurre solo a veces.
Memoria de acceso aleatorio: memoria rápida y temporal donde los programas en marcha guardan sus datos. Se borra al terminar el programa o reiniciar la computadora.
Limitar cuántas peticiones puede hacer un cliente por ventana de tiempo, para proteger el servicio de abusos y sobrecarga.
Role-Based Access Control: los permisos se dan a roles (admin, editor, viewer) y los usuarios reciben roles, en lugar de asignar permisos uno a uno.
Una vulnerabilidad que permite a un atacante ejecutar su propio código en tu servidor. El tipo de bug más grave.
RDS: bases de datos relacionales gestionadas. DynamoDB: almacén NoSQL serverless clave-valor y documental, para escala masiva y patrones de acceso simples.
Una librería de JavaScript para construir interfaces a partir de componentes que se vuelven a renderizar cuando cambian sus datos.
Una forma de hacer que un valor esté disponible para todos los componentes descendientes sin pasar props en cada nivel.
Funciones que empiezan por use (useState, useEffect, useMemo...) y dan a los componentes de función estado y funciones de ciclo de vida.
Una librería que renderiza componentes React en los tests y los consulta como lo haría un usuario (por rol o texto).
Una copia de la base de datos que recibe los cambios de la primaria y sirve consultas de lectura.
Comprobaciones de salud que Kubernetes hace a los Pods: readiness decide si un Pod recibe tráfico; liveness decide si hay que reiniciarlo.
Reaplicar tus commits sobre otra rama para obtener un historial en línea recta. Reescribe los ID de los commits.
Escucha sin defenderte, pregunta para entender, da las gracias, actúa y muestra el cambio. Los entrevistadores buscan una mentalidad de crecimiento.
El proceso de React que compara la nueva descripción de la UI con la anterior y actualiza solo lo que cambió.
Una clase de datos compacta e inmutable (Java 16+): record Point(int x, int y) {} genera constructor, accessors, equals, hashCode y toString.
Una función que resuelve un problema llamándose a sí misma con entradas más pequeñas, hasta llegar a un caso base.
Un almacén clave-valor en memoria muy rápido, usado para caché, contadores, sesiones, colas y rankings.
Mejorar la estructura interna del código (nombres, duplicación, organización) sin cambiar su comportamiento.
CPython cuenta cuántas variables o contenedores apuntan a cada objeto. Cuando la cuenta llega a 0, el objeto se libera de inmediato.
Una región es un área geográfica; una Availability Zone es una ubicación de centro de datos aislada dentro de ella. Repartir entre AZ da alta disponibilidad.
A: nombre a IPv4. AAAA: nombre a IPv6. CNAME: alias de otro nombre. MX: servidores de correo. TXT: texto libre, como verificaciones.
Un bug en el que algo que funcionaba deja de funcionar tras un cambio. Los tests de regresión protegen contra ello.
Reintentar una llamada fallida esperando más cada vez (1 s, 2 s, 4 s...), con algo de azar (jitter) para que los clientes no reintenten sincronizados.
Mantener copias de los mismos datos en varios servidores, para tener disponibilidad y repartir el tráfico de lectura.
Un nodo (leader) acepta las escrituras y las copia a los followers, que sirven lecturas y pueden reemplazar al leader.
La carpeta ~/.m2/repository donde Maven guarda en caché las librerías descargadas y los artefactos de mvn install.
Una copia compartida del repositorio Git alojada en otro lugar (GitHub, GitLab). origin es el nombre por defecto del remoto principal.
Una clase que oculta cómo se guardan los datos y ofrece al resto del código métodos simples como get, add, list.
Ajustes de CPU y memoria en Kubernetes: los requests se reservan para planificar; los limits son el máximo (superar el de memoria significa OOMKilled).
Escucha primero, encuentra el objetivo común, separa el problema de la persona, aporta datos, acuerda un siguiente paso. Muestra respeto y un resultado tranquilo, no quién ganó.
Un contenedor lógico para recursos que comparten ciclo de vida. Las suscripciones contienen resource groups; los resource groups contienen recursos.
Un estilo popular para APIs web: las URLs nombran recursos (/users/42), los métodos HTTP expresan acciones y las peticiones no guardan estado.
Una regla por la que dos filas no pueden tener el mismo valor en esa columna (por ejemplo, el correo).
El cliente HTTP clásico de Spring para llamar a otros servicios REST. En código más nuevo se prefiere RestClient o WebClient.
Una reunión periódica y sin culpas en la que el equipo revisa cómo ha trabajado y acuerda mejoras concretas.
Un servidor delante de tus servidores de aplicación que recibe las peticiones de los clientes y las reenvía, a menudo añadiendo TLS, caché y balanceo de carga.
Volver a la versión anterior que funcionaba tras una publicación mala.
Asociar las rutas y métodos de las peticiones entrantes a las funciones que las gestionan.
Un valor aleatorio que se añade a cada contraseña antes del hash para que contraseñas idénticas produzcan hashes distintos.
SAST analiza el código fuente de forma estática; DAST ataca una app en marcha; SCA revisa las dependencias de terceros en busca de vulnerabilidades conocidas.
Software Bill of Materials: una lista de todos los componentes y dependencias de tu software, que sirve para encontrar rápido las librerías vulnerables.
Dónde es visible el nombre de una variable. Python busca los nombres en este orden: Local (dentro de la función), Enclosing (función exterior), Global (módulo), Built-in (LEGB).
Le dice a Maven cuándo se necesita una dependencia: compile (por defecto), provided, runtime o test.
Cuántas instancias de un bean existen. Por defecto singleton (una por contenedor); también prototype, request, session.
Atributos de script que descargan JS sin bloquear el parseo del HTML. defer mantiene el orden y espera al parseo; async corre en cuanto está listo.
Un framework Agile con sprints fijos, tres roles (Product Owner, Scrum Master, Developers) y eventos (planning, daily, review, retrospective).
Software Development Kit: una librería y herramientas que da un proveedor para usar su servicio desde código, por ejemplo el AWS SDK.
Software Development Life Cycle: las fases desde los requisitos y el diseño hasta el código, las pruebas, el despliegue y el mantenimiento.
Un objeto para guardar valores sensibles e inyectarlos en los Pods. Por defecto está codificado, no cifrado.
Configuración sensible como contraseñas, API keys y claves privadas. Nunca debe guardarse en el código ni en los logs.
Un firewall virtual asociado a un recurso: stateful y solo de permisos (AWS Security Group, Azure NSG). Las NACL son filtros stateless a nivel de subred.
Las cláusulas SQL se evalúan en este orden lógico: FROM, WHERE (filtra filas), GROUP BY, HAVING (filtra grupos), SELECT (elige columnas), ORDER BY, LIMIT.
Un patrón que elige a qué elementos se aplica una regla: p (elementos), .card (clase), #main (id), a:hover (estado).
Una librería que controla un navegador real desde código (abrir páginas, encontrar elementos, hacer clic, escribir) para automatizar tests de UI.
Números de versión MAJOR.MINOR.PATCH: cambio incompatible, función nueva compatible, corrección compatible.
Un mensaje enviado a un proceso: SIGTERM (15) le pide amablemente que pare; SIGKILL (9) lo mata de inmediato.
Search Engine Optimization: hacer que las páginas sean fáciles de leer y posicionar para los buscadores. El HTML renderizado en servidor ayuda porque los crawlers ven el contenido de inmediato.
Ejecutar código sin gestionar servidores: el proveedor corre tu función bajo demanda y cobra por ejecución (por ejemplo, AWS Lambda).
Un nombre de red y una IP estables que balancean el tráfico hacia un conjunto cambiante de Pods.
Una computadora o un programa que espera peticiones de los clientes y devuelve respuestas.
Un servlet es una clase Java que gestiona peticiones HTTP; un contenedor (Tomcat, Jetty) los ejecuta y gestiona conexiones e hilos.
Memoria en el servidor de un usuario que inició sesión, identificada por un ID de sesión aleatorio que suele guardarse en una cookie.
Un ataque en el que se hace que la víctima inicie sesión con un ID de sesión que el atacante ya conoce.
Una colección sin orden de valores únicos con comprobaciones de pertenencia muy rápidas: {1, 2, 3}.
La familia Secure Hash Algorithm. SHA-256 convierte cualquier entrada en una huella fija de 256 bits. Es rápido y de un solo sentido, así que para contraseñas usa hashes lentos (Argon2, bcrypt).
Un contenedor nuevo que guarda los MISMOS objetos internos que el original: list(a), a.copy(), copy.copy(a).
Una clase o módulo debe tener un solo trabajo, para que solo un tipo de cambio te obligue a editarlo.
Una clase que permite una sola instancia, accesible desde cualquier parte. Se critica a menudo porque actúa como una variable global.
El software que gestiona el hardware y ejecuta otros programas (Linux, Windows, macOS). Da a los programas archivos, memoria, procesos y red.
Estático: el servidor envía a todos los mismos archivos ya preparados. Dinámico: el servidor construye la página en cada petición, normalmente con datos de una base de datos.
SLI: un indicador medido (por ejemplo, tasa de éxito). SLO: el objetivo interno (por ejemplo, 99,9%). SLA: una promesa contractual a los clientes.
seq[start:stop:step] toma una parte de una lista, tupla o string. start se incluye, stop NO. Los índices negativos cuentan desde el final: s[-1] es el último elemento, así que "python"[-1] es 'n'.
Una técnica que mantiene un rango móvil [left, right] sobre un array o string, ampliándolo y reduciéndolo en lugar de reiniciar; suele ser O(n).
Un pequeño conjunto de comprobaciones rápidas de que las funciones más importantes funcionan, normalmente tras un despliegue.
Cinco principios de diseño para código orientado a objetos mantenible: Single responsibility, Open/closed, Liskov substitution, Interface segregation, Dependency inversion.
Una app web que carga una vez y actualiza la vista con JavaScript y llamadas a la API en lugar de recargar toda la página.
Una capa sobre Spring que autoconfigura librerías, agrupa dependencias en starters e incluye un servidor web, para que las apps arranquen con java -jar.
Añade endpoints operativos (health, metrics, info) para monitorización y probes de orquestadores.
Un módulo de Spring que genera implementaciones de repository a partir de interfaces, incluidas consultas derivadas de los nombres de método.
Un gran framework Java para construir aplicaciones. Su núcleo es un contenedor que crea objetos (beans) y los conecta, con módulos para web, datos, seguridad y testing.
Un conjunto de configuración con nombre (dev, test, prod) que se activa con spring.profiles.active y permite usar distintos ajustes por entorno.
Un objeto envoltorio que Spring coloca alrededor de un bean para añadir comportamiento (transacciones, caché, seguridad). Las llamadas dentro de la misma clase se lo saltan.
El módulo de Spring para autenticación, autorización y protección frente a ataques comunes (CSRF, session fixation...), basado en una cadena de filtros de servlets.
Un periodo fijo (de 1 a 4 semanas) en Scrum tras el cual el equipo entrega un incremento usable.
Structured Query Language: el lenguaje para leer y cambiar datos en bases de datos relacionales (SELECT, INSERT, UPDATE, DELETE).
Un ataque en el que la entrada del usuario se inserta en una consulta SQL como código, y permite al atacante leer o cambiar datos. Se evita con consultas parametrizadas.
Mensajería de AWS: SQS es una cola de la que leen los workers; SNS publica cada mensaje a todos los suscriptores.
Secure Shell: un protocolo cifrado para iniciar sesión y ejecutar comandos en máquinas remotas.
Server-side rendering: el servidor genera el HTML de una página, de modo que llega ya con el contenido.
Server-Side Request Forgery: hacer que tu servidor envíe peticiones a direcciones internas o no previstas.
Una zona de memoria por hilo que guarda un frame por cada llamada a método activa con sus variables locales. Demasiadas llamadas anidadas causan StackOverflowError.
El conjunto de tecnologías usadas para construir una aplicación: por ejemplo React + Spring Boot + PostgreSQL.
StackOverflowError: el call stack está lleno, normalmente por recursión infinita o muy profunda. OutOfMemoryError: no queda espacio en el heap ni tras el garbage collection.
La zona de espera donde git add coloca los cambios que quieres en el siguiente commit.
Cualquiera afectado por un proyecto o interesado en él: usuarios, clientes, jefes, otros equipos.
Una sola dependencia de Maven o Gradle (como spring-boot-starter-web) que trae un grupo compatible de librerías para un propósito.
StatefulSet: Pods con identidad y almacenamiento estables (bases de datos). DaemonSet: un Pod por nodo. Job: una tarea que corre hasta terminar; CronJob: Jobs programados.
El servidor no recuerda las peticiones anteriores de un cliente; cada petición lleva todo lo que necesita (por ejemplo, un token).
Un miembro a nivel de clase: una copia compartida por todos los objetos, que se usa sin crear una instancia (Math.max(1, 2)).
Los story points son estimaciones relativas de esfuerzo; velocity es la cantidad de puntos que completa un equipo por sprint, y sirve para hacer previsiones.
Una forma de procesar colecciones como un pipeline (filter, map, collect). Los streams son lazy: nada corre hasta que se llama a una operación terminal como toList() o forEach.
Una zona de memoria especial donde Java guarda una copia de cada literal de string, de modo que los literales idénticos comparten el mismo objeto.
Un búfer de texto mutable para construir strings de forma eficiente. A diferencia de String, añadir no copia todo el texto cada vez.
Un doble de test que devuelve respuestas fijas programadas de antemano.
Un array donde cada posición guarda el total de todos los elementos anteriores, de modo que la suma de cualquier rango es una resta.
Una palabra clave que deja que solo un hilo a la vez ejecute un bloque o método para un objeto lock dado, y hace visibles sus cambios a los demás hilos.
Un conjunto de filas (registros) con las mismas columnas (campos), como una hoja de cálculo con tipos de columna estrictos.
Una estructura que guarda pares clave → valor en un array, usando un hash de la clave para encontrar el hueco. El dict y el set de Python. Búsqueda O(1) de media.
Una tabla con dos foreign keys que une dos tablas en una relación muchos a muchos.
El tag por defecto de Docker. Es solo un nombre que se mueve, no significa 'lo más nuevo'. En producción fija una versión exacta.
Transmission Control Protocol: una conexión fiable entre dos máquinas. Garantiza que los datos lleguen completos y en orden. HTTP, las bases de datos y SSH corren sobre él.
Escribir primero un test que falla, luego el código justo para que pase y después limpiar: red → green → refactor.
Una clase base fija los pasos de un algoritmo y deja que las subclases aporten pasos concretos.
En un sistema distribuido, durante una partición de red hay que elegir entre Consistency (todos ven el dato más reciente) y Availability (toda petición recibe respuesta).
El terminal es la ventana de texto; la shell (Bash, Zsh, PowerShell) interpreta los comandos que escribes.
Una herramienta popular de Infrastructure as Code que crea y actualiza recursos cloud a partir de archivos de configuración.
Simular muchos usuarios concurrentes para medir el rendimiento y encontrar los límites del sistema.
Un test que comprueba varios componentes reales trabajando juntos, como tu código con una base de datos real.
Un test que recorre todo el sistema desde el punto de vista del usuario, por ejemplo un navegador haciendo clic por la app.
Una anotación de test de Spring Boot que carga solo una parte de la app (@WebMvcTest, @DataJpaTest) para tests rápidos y centrados.
Manual: una persona ejecuta los pasos y juzga el resultado. Automático: el código ejecuta las comprobaciones de forma rápida y repetida.
Una palabra clave cuyo valor depende de cómo se llama a una función. Las arrow functions toman this del código que las rodea.
Un grupo fijo o limitado de hilos worker reutilizables que ejecutan tareas en cola, y evita el coste y el riesgo de un hilo por tarea.
Un análisis en la fase de diseño de lo que puede salir mal. STRIDE = Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege.
Limitar una función para que corra como mucho una vez por intervalo de tiempo, aunque los eventos sigan llegando (por ejemplo, al hacer scroll).
Cuánto trabajo completa un sistema por unidad de tiempo, por ejemplo peticiones por segundo.
Una unidad de trabajo con seguimiento (bug, tarea, story) en una herramienta como Jira, con responsable, estado y prioridad.
time.sleep bloquea todo el hilo. En código async usa await asyncio.sleep(...), que deja correr otras tareas mientras espera.
Compatibilidad de tipos basada en la forma (propiedades y métodos) de un valor, no en el nombre de su tipo.
El tipo de valor: entero, número decimal, texto (string), verdadero/falso (boolean), lista, diccionario, etc.
Un tipo con un marcador, como list[T], para que el mismo código funcione con muchos tipos sin perder la información de tipo.
Un tipo de valor básico integrado en Java: int, long, double, boolean, char, byte, short, float. No es un objeto y nunca puede ser null.
Transport Layer Security: el protocolo que cifra y autentica las conexiones de red. La S de HTTPS.
Un string que un cliente envía para demostrar quién es (como una entrada), normalmente en la cabecera Authorization. Evita enviar la contraseña cada vez.
Un algoritmo de rate limiting: los tokens se recargan a ritmo constante y cada petición gasta uno. Permite ráfagas cortas (hasta el tamaño del cubo) y mantiene controlado el ritmo medio.
Trabajar bien con otras personas: compartir información, ayudar a los compañeros, dar y aceptar comentarios de revisión, respetar otras opiniones y mantener una actitud positiva bajo presión.
Una decisión en la que mejorar una cualidad (velocidad) cuesta otra (simplicidad, consistencia, dinero).
Un grupo de operaciones de base de datos tratadas como una unidad: o todas tienen éxito (COMMIT) o todas se deshacen (ROLLBACK).
Los tres objetivos de la seguridad de la información: Confidentiality, Integrity, Availability.
Un árbol en el que cada camino desde la raíz forma un prefijo; se usa para autocompletar y buscar por prefijos.
Sintaxis para capturar errores: el código que puede fallar va en try; el que lo gestiona, en except SomeError:. finally corre siempre; else solo si no hubo error.
Una instrucción try que abre recursos entre paréntesis y los cierra automáticamente al final, incluso tras una excepción.
Cuánto tiempo sigue siendo válido un elemento en caché (o un registro DNS) antes de expirar y tener que obtenerse de nuevo.
Un conjunto de 12 prácticas para apps pensadas para el cloud, como configuración en variables de entorno, procesos stateless y logs a stdout.
Una técnica con dos índices que se mueven por los datos (desde ambos extremos, o uno rápido y otro lento) para evitar bucles anidados.
El compilador elimina los argumentos de tipo genéricos tras comprobarlos, así que en tiempo de ejecución List<String> y List<Integer> son ambos List a secas.
Anotaciones como def f(x: int) -> str: que documentan los tipos esperados. Python las ignora al ejecutar; herramientas como mypy y los editores las usan para encontrar bugs.
JavaScript con anotaciones de tipos estáticas, que se comprueban al compilar y se eliminan al generar JS.
Un tipo marcador para código genérico. T = TypeVar("T") permite a una función decir 'la salida tiene el mismo tipo que la entrada'.
Un protocolo más rápido, sin conexión y sin garantía de entrega. Se usa en videollamadas, juegos, consultas DNS y HTTP/3 (a través de QUIC).
UI (user interface) es lo que el usuario ve y usa. UX (user experience) es toda la experiencia de usar el producto.
Una excepción que extiende RuntimeException (NullPointerException, IllegalArgumentException...). El compilador no te obliga a gestionarla; suele indicar un bug.
Combina los resultados de dos consultas SELECT en una lista. UNION quita duplicados; UNION ALL los conserva.
Una estructura que registra qué elementos pertenecen al mismo grupo, con operaciones find y union casi O(1).
Un test automático de una pequeña pieza de código (una función o clase) de forma aislada, con las dependencias externas reemplazadas por dobles de test.
Uniform Resource Locator: la dirección de un recurso, formada por esquema (https), host (example.com), puerto opcional, ruta (/products) y query (?id=7).
Un hook de React para efectos secundarios (fetch, suscripciones, timers) que corren tras el render. El array de dependencias controla cuándo se repite; la función devuelta limpia.
Una descripción corta de una necesidad desde el punto de vista del usuario: "Como ..., quiero ..., para ...", con criterios de aceptación para confirmar que está hecha.
Un hook de React que conserva un valor mutable o un nodo del DOM entre renders sin provocar un re-render.
Un hook de React que da a un componente una pieza de estado: const [count, setCount] = useState(0). Llamar al setter programa un re-render.
Universally Unique Identifier: un ID aleatorio de 128 bits como 3f2b8c1e-.... Se puede generar en cualquier sitio sin coordinación, con una probabilidad de colisión insignificante.
Comprobar que los datos de entrada tienen la forma, los tipos y los valores correctos antes de usarlos. En FastAPI lo hacen los modelos de Pydantic.
Comprobar que los datos que llegan son los esperados (tipo, longitud, formato, rango) y rechazar todo lo demás.
Formas de declarar variables en JS. var: scope de función y hoisting (antiguo). let: scope de bloque, se puede reasignar. const: scope de bloque, no se puede reasignar.
Un nombre que se refiere a un valor guardado en memoria, para poder usarlo o cambiarlo después.
Un valor con nombre que el entorno da a un programa (os.environ["KEY"]), muy usado para configuración y secretos.
Una versión de desarrollo mutable (1.2.0-SNAPSHOT) que puede cambiar, a diferencia de una versión de release inmutable.
Etiquetar las versiones de una API (por ejemplo /v1, /v2) para introducir cambios incompatibles sin romper a los clientes existentes.
Una descripción ligera de la UI en memoria que React compara entre renders para calcular los cambios mínimos en el DOM real.
Un hilo ligero (Java 21) que planifica la JVM en lugar del sistema operativo. Pueden existir millones, lo que va bien a servidores con mucha I/O.
Una consulta guardada con nombre que se comporta como una tabla virtual. Una vista materializada guarda su resultado físicamente.
Un modificador de campo que garantiza que todos los hilos vean el último valor escrito. No hace atómicas las acciones compuestas como count++.
Almacenamiento que vive fuera del ciclo de vida de un contenedor, usado para conservar datos como los archivos de una base de datos.
Una red virtual privada y aislada en AWS (VPC) o Azure (VNet), dividida en subredes.
Virtual Private Network: un túnel cifrado entre redes o dispositivos por internet, para que se comporten como si estuvieran en la misma red privada.
Una debilidad en el software, la configuración o un proceso que un atacante podría explotar.
Web Application Firewall: filtra el tráfico HTTP y bloquea ataques comunes como SQL injection y XSS antes de que lleguen a la app.
Una llamada HTTP que un servicio hace a TU URL cuando ocurre un evento (por ejemplo, 'pago completado'), en lugar de que preguntes una y otra vez.
Una conexión que permanece abierta para que servidor y cliente se envíen mensajes en cualquier momento. Se usa para chat y actualizaciones en vivo.
Una función calculada sobre un conjunto de filas relacionadas conservando todas las filas: ROW_NUMBER, RANK, totales acumulados, con OVER (PARTITION BY ... ORDER BY ...).
Un proceso o hilo que gestiona peticiones o trabajos. Un servidor suele tener varios workers para atender el trabajo en paralelo.
Estándares de cómo los servidores web de Python ejecutan apps web. WSGI es síncrono (Flask, Django clásico); ASGI admite async y WebSockets (FastAPI).
Un ataque en el que JavaScript malicioso entra en tu sitio y corre en los navegadores de otros usuarios. Se evita escapando la salida y con CSP.
You Aren't Gonna Need It: no construyas una función hasta que de verdad haga falta.
Un formato de configuración legible basado en la indentación, usado por Kubernetes, Docker Compose, Spring y muchas herramientas de CI.
Convierte una función en un generator: se pausa y entrega un valor, y en la siguiente llamada continúa donde se quedó.