Java
/* L'azienda fornisce un servizio di invio massivo di notifiche ad altre aziende. Un product owner ha richiesto di creare un sistema di filtraggio delle notifiche considerando le preferenze degli utenti. ## Definizioni Notifica: - id della notifica - tipo di notifica (EMAIL, SMS, PUSH) - destinatario (id dell'utente) - testo del messaggio Il destinatario può avere impostazioni di preferenza: - canali di notifica consentiti (lista di tipi) - mittenti bloccati (lista di id mittenti) Storia delle notifiche inviate: - lista delle notifiche inviate all'utente ## Importante Le impostazioni degli utenti e la storia delle notifiche sono fornite da altri componenti del sistema. Devi progettare contratti per ottenere questi dati. Non è necessario implementare lo storage. ## Compito Scrivere un sistema di filtraggio delle notifiche che: - riceve una lista di notifiche da filtrare e l'id del mittente - esclude le notifiche che non corrispondono alle preferenze dell'utente - implementa protezione contro i duplicati, considerando anche i messaggi inviati nelle ultime 24 ore. I duplicati sono considerati messaggi con lo stesso id indirizzati allo stesso utente - restituisce la lista filtrata di notifiche pronte all'invio. L'invio delle notifiche non è parte del vostro compito; un altro team si occuperà di inviare la lista filtrata. Il vostro compito è solo il filtraggio. */ class NotificationFilter { UserSettingsService userSettingsService; NotificationHistoryService notificationHistoryService; public ??? filter(??? senderId, List<???> msgs) { // TODO implement } } interface UserSettingsService { // TODO any functions } interface NotificationHistoryService { // TODO any functions }
Hai esperienza nell'ottimizzazione delle query SQL? Sai analizzare il piano della query?
Qual è lo scopo della programmazione orientata agli oggetti nello sviluppo di sistemi software?
Quali decisioni hai dovuto prendere riguardo alla sostituzione o all'implementazione di uno stack tecnologico? Fornisci un esempio.
Quale tipo di richiesta HTTP deve essere utilizzata per ottenere i dati del cliente tramite il numero di carta tramite API?
Sei preparato per colloqui pratici e sai rispondere alle domande tipiche che si incontrano in un sistema di assunzione reale?
Quali sono i vantaggi e gli svantaggi dell'utilizzo dello Scope Prototype nella progettazione dei sistemi?
Come organizzare l'esecuzione di un rollback di una transazione o operazione in un sistema distribuito con microservizi?
Quali sono i vantaggi e gli svantaggi dell'utilizzo della suddivisione del codice in funzioni?
Parlami del mentoring dei junior — come era?
In quali casi è necessario utilizzare l'annotazione @Service nell'applicazione in sviluppo?
Perché sono stati usati due broker di messaggi, Kafka e RabbitMQ, contemporaneamente?
Quali tipi di indici conosci in PostgreSQL? Spiega l'indice B-tree, come funziona. Cos'è un indice GIN?
Integer i = 300, j = 300; System.out.println(i == j);
Come hai effettuato le modifiche al database in produzione? Hai usato Liquibase?
Qual è la differenza tra map e flatMap nell'API Stream?
Quale livello di visibilità dovrebbe essere specificato per il controller affinché possa monitorare l'esecuzione delle richieste?
Cos'è REST e come si differenzia da una normale API HTTP?
Cosa può causare un peggioramento della velocità di inserimento dei dati nel database dopo la creazione degli indici?
Quando è consigliato usare il comando install durante il lavoro con il sistema?