Se stessi progettando un GC, quali approcci di raccolta dei rifiuti conosci oltre alla traversata del grafo di raggiungibilità?
Java
Cos'è un deadlock? In cosa si differenzia da una condizione di race? Come evitare un deadlock, anche se non è possibile determinare in anticipo l'ordine di acquisizione dei lock?
Implementa RecommenderService con i metodi getTop(User user, int limit) e addDocument(Document document), utilizzando un archivio in memoria
Quanto pesa un puntatore? Cos'è?
A cosa serve lo stack e a cosa serve l'heap? Qual è la differenza?
Perché il test falliva con NullPointerException e come correggerlo?
Cos'è un heap (montículo)?
Come vengono eliminati gli oggetti dall'heap in Java? Parla del Garbage Collector.
Confronta le prestazioni dei seguenti frammenti di codice che copiano elementi da un array di Integer a un array di int e viceversa, incluso il caso in cui vengono creati nuovi oggetti Integer a partire da valori int: ```java int SIZE = 1000000; int[] x = new int[SIZE]; Integer[] y = new Integer[SIZE]; for (;;) { for (int i = 0; i < SIZE; ++i) { x[i] = y[i]; } } ``` ```java int SIZE = 1000000; int[] x = new int[SIZE]; Integer[] y = new Integer[SIZE]; for (;;) { for (int i = 0; i < SIZE; ++i) { y[i] = x[i]; } } ``` ```java int SIZE = 1000000; int[] x = new int[SIZE]; Integer[] y = new Integer[SIZE]; for (;;) { for (int i = 0; i < SIZE; ++i) { y[i] = new Integer(x[i]); } } ``` Analizza e spiega le differenze di prestazioni e comportamento tra questi approcci.
Qual principio SOLID viene violato nell'implementazione attuale, dove il servizio è strettamente legato a una specifica implementazione di storage (ArrayList)?
Quali metodi di comunicazione tra processi (IPC) conosci a livello delle interfacce del sistema operativo Unix?
int SIZE = 1000000; int[] x = new int[SIZE]; Integer[] y = new Integer[SIZE]; for (;;) { for (int i = 0; i < SIZE; ++i) { y[i] = new Integer(x[i]); } }
A cosa serve synchronized? Cosa useresti per implementare un contatore thread-safe invece di synchronized?
Quale problema può verificarsi in un ambiente di produzione quando più richieste REST accedono contemporaneamente al servizio?
/** * Ricerca di due numeri in un array la cui somma sia uguale a un numero dato * <p> * Scrivi una funzione che accetti come primo argomento un array di numeri positivi non ordinati * e come secondo argomento un numero positivo. La funzione deve restituire true se nell'array * ci sono 2 numeri la cui somma dà il secondo argomento. * <p> * Input: ([10, 15, 3, 7], 17) * Output: true */
Come appare un primitivo nello stack e come nell'heap?
Quali sono gli svantaggi dell'attuale approccio di ordinare l'intera lista ad ogni chiamata di getTop?
Decifra l'acronimo ACID e spiega ogni proprietà.
Come implementare correttamente le dipendenze (Dependency Injection) in un servizio — quale approccio è preferibile?
Cos'è la chiamata di sistema fork nei sistemi operativi della famiglia Unix?