Java
/* La empresa proporciona un servicio de envío masivo de notificaciones a otros negocios. Un propietario de producto se acercó con la tarea de crear un sistema de filtrado de notificaciones considerando las preferencias de los usuarios. ## Definiciones Notificación: - id de la notificación - tipo de notificación (EMAIL, SMS, PUSH) - destinatario (id del usuario) - texto del mensaje El destinatario puede tener configuraciones de preferencias: - canales de notificación permitidos (lista de tipos) - remitentes bloqueados (lista de ids de remitentes) Historial de notificaciones enviadas: - lista de notificaciones enviadas al usuario ## Importante Las configuraciones de los usuarios y el historial de notificaciones son proporcionados por otros componentes del sistema. Debe diseñar contratos para obtener estos datos. No es necesario implementar el almacenamiento. ## Tarea Escribir un sistema de filtrado de notificaciones que: - recibe una lista de notificaciones para filtrar y el id del remitente - excluye notificaciones que no cumplen con las preferencias del usuario - implementa protección contra mensajes duplicados, incluyendo los enviados en las últimas 24 horas. Se consideran duplicados los mensajes con el mismo id dirigidos a un mismo usuario - devuelve la lista filtrada de notificaciones listas para enviar. El envío de notificaciones no es parte de su tarea; otro equipo se encargará de enviar la lista filtrada. Su tarea es solo filtrar. */ class NotificationFilter { UserSettingsService userSettingsService; NotificationHistoryService notificationHistoryService; public ??? filter(??? senderId, List<???> msgs) { // TODO implement } } interface UserSettingsService { // TODO any functions } interface NotificationHistoryService { // TODO any functions }
¿Tienes experiencia en optimización de consultas SQL? ¿Sabes analizar el plan de la consulta?
¿Cuál es el propósito de la programación orientada a objetos en el desarrollo de sistemas de software?
¿Qué decisiones tuvo que tomar en cuanto a la sustitución o implementación de la pila tecnológica? Dé un ejemplo.
¿Qué tipo de solicitud HTTP debe utilizarse para obtener los datos del cliente por número de tarjeta a través de la API?
¿Estás preparado para realizar entrevistas prácticas y sabes cómo responder a las preguntas típicas que aparecen en un sistema de contratación real?
¿Cuáles son las ventajas y desventajas de usar el alcance de prototipo en el diseño de sistemas?
¿Cómo organizar la reversión de una transacción o operación en un sistema distribuido utilizando microservicios?
¿Cuáles son las ventajas y desventajas de usar la división de código en funciones?
¿Puedes contarme sobre el mentorazgo de los novatos? ¿Cómo era eso?
¿En qué casos debería usarse la anotación @Service en la aplicación en desarrollo?
¿Por qué se utilizaron dos brokers de mensajes, Kafka y RabbitMQ, al mismo tiempo?
¿Qué tipos de índices conoces en PostgreSQL? Explica el índice B-tree, cómo funciona. ¿Qué es un índice GIN?
Integer i = 300, j = 300; System.out.println(i == j);
¿Cómo realizaste cambios en la base de datos en producción? ¿Usaste Liquibase?
¿En qué se diferencia map de flatMap en la API Stream?
¿Qué nivel de alcance debe especificarse para el controlador para que pueda rastrear la ejecución de las solicitudes?
¿Qué es REST y en qué se diferencia de una API HTTP convencional?
¿Qué puede causar una disminución en la velocidad de inserción de datos en la base de datos después de crear índices?
¿Cuándo se recomienda usar el comando install durante el trabajo con el sistema?