Backend - Senior

0/20 preguntas respondidas 0%
Información del candidato
Formatos aceptados: PDF, DOC, DOCX. Máximo 5MB

Preguntas de conocimiento

Pregunta 1 de 20: Este código Eloquent tiene un problema de rendimiento: `$posts = Post::all(); foreach ($posts as $post) { echo $post->author->name; }`. ¿Cuál es el problema?
Pregunta 2 de 20: Este middleware Laravel no funciona: `public function handle($request, Closure $next) { if (!$request->user()->isAdmin()) { abort(403); } $next($request); }`. ¿Qué falta?
Pregunta 3 de 20: ¿Cómo funciona el Container de DI en Symfony y qué son los services tagged?
Pregunta 4 de 20: Este código asyncio tiene race condition: `counter = 0 async def increment(): global counter temp = counter await asyncio.sleep(0) counter = temp + 1`. Con 100 tareas concurrentes, ¿qué pasa?
Pregunta 5 de 20: Endpoint FastAPI devuelve 422: `@app.post("/users") async def create(user: UserCreate): ...` con body `{"name": "John", "age": "twenty"}` y `class UserCreate(BaseModel): name: str; age: int`. ¿Por qué?
Pregunta 6 de 20: ¿Cuándo usar asyncio vs threading vs multiprocessing en Python?
Pregunta 7 de 20: Memory leak en Express: `app.post("/upload", (req, res) => { const data = req.body; processLater(() => { analyze(data); }); res.send("ok"); });` donde `processLater` guarda en array global. ¿Por qué?
Pregunta 8 de 20: ¿Cómo escalar una aplicación Node.js?
Pregunta 9 de 20: Deadlock en Go: `func main() { ch := make(chan int); ch <- 42; fmt.Println(<-ch) }`. ¿Por qué?
Pregunta 10 de 20: ¿Cuál es el manejo idiomático de errores en Go y cuándo usar panic vs error returns?
Pregunta 11 de 20: Esta query es lenta: `SELECT * FROM orders WHERE total > (SELECT AVG(total) FROM orders WHERE user_id = orders.user_id)`. ¿Cómo optimizarla?
Pregunta 12 de 20: ¿Cuáles son los niveles de aislamiento de transacciones SQL y qué problemas previene cada uno?
Pregunta 13 de 20: ¿Cómo modelar una relación many-to-many en MongoDB? ¿Embedding vs referencing?
Pregunta 14 de 20: Race condition en cache-aside con Redis: Thread A lee cache (miss), Thread B actualiza DB e invalida cache, Thread A escribe dato viejo en cache. ¿Cómo prevenirlo?
Pregunta 15 de 20: ¿Cómo implementar un rate limiter distribuido con Redis? ¿Sliding window vs token bucket?
Pregunta 16 de 20: ¿Cuáles son las ventajas y desventajas de Event Sourcing vs CRUD tradicional?
Pregunta 17 de 20: ¿Cómo implementar una Saga distribuida para un flujo de pago? ¿Orquestación vs coreografía?
Pregunta 18 de 20: Del OWASP Top 10, ¿cuáles son 5 vulnerabilidades comunes y cómo prevenirlas?
Pregunta 19 de 20: ¿Cuál es la diferencia entre unit, integration y e2e tests, y qué es la pirámide de testing?
Pregunta 20 de 20: Este código tiene un bottleneck: `async function exportUsers() { const users = await db.query("SELECT * FROM users"); return JSON.stringify(users); }` con 10K+ registros. ¿Cuál es el problema?

Desafío de código

Diseña e implementa un sistema de notificaciones en tiempo real que combine REST API con WebSockets, cola de mensajes con Redis pub/sub, y retry con backoff exponencial. Incluye tests de integración y documenta las decisiones arquitectónicas.

Requisitos

  1. REST API para gestionar suscripciones y consultar historial de notificaciones
  2. WebSocket server para entrega en tiempo real con reconexión automática
  3. Cola de mensajes con Redis pub/sub para desacoplar productores y consumidores
  4. Retry con backoff exponencial para entregas fallidas (max 5 intentos)
  5. Tests de integración que cubran el flujo completo (envío → cola → entrega)

Ejemplos

Entrada: POST /api/notifications { "userId": "123", "type": "order_update", "payload": { "orderId": "456", "status": "shipped" } }
Salida: Notificación encolada en Redis, entregada via WebSocket al usuario conectado, con confirmación de recepción

Tecnologías aceptadas

  • Node.js + Socket.io/ws
  • Python + FastAPI + websockets
  • Go + gorilla/websocket
  • TypeScript + NestJS
  • Elixir + Phoenix Channels

Envío de solución

Plataformas soportadas: GitHub, GitLab, Bitbucket Introduce una URL válida de repositorio (https://github.com, gitlab.com o bitbucket.org seguido de usuario/repositorio)