Αν σχεδιάζατε ένα GC, ποιες προσεγγίσεις συλλογής απορριμμάτων γνωρίζετε εκτός από τη διαδρομή του γράφου προσβασιμότητας;
Java
Τι είναι το deadlock; Πώς διαφέρει από μια κατάσταση αγώνα; Πώς να αποφύγετε το deadlock, ακόμη και αν δεν είναι δυνατόν να προσδιορίσετε τη σειρά κατάκτησης των κλειδώσεων εκ των προτέρων;
Υλοποιήστε το RecommenderService με τις μεθόδους getTop(User user, int limit) και addDocument(Document document), χρησιμοποιώντας αποθήκευση στη μνήμη
Πόσο ζυγίζει ένας δείκτης; Τι είναι αυτό;
Γιατί χρειάζεται η στοίβα και γιατί χρειάζεται το σωρό; Ποια είναι η διαφορά;
Γιατί το τεστ απέτυχε με NullPointerException και πώς το διορθώνουμε;
Τι είναι το heap;
Πώς γίνεται η διαγραφή αντικειμένων από το heap στην Java; Μίλησε για τον Garbage Collector.
Συγκρίνετε την απόδοση των ακόλουθων αποσπασμάτων κώδικα που αντιγράφουν στοιχεία από έναν πίνακα Integer σε έναν πίνακα int και το αντίστροφο, συμπεριλαμβανομένης της περίπτωσης όπου δημιουργούνται νέα αντικείμενα Integer από τιμές 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]); } } ``` Αναλύστε και εξηγήστε τις διαφορές στην απόδοση και τη συμπεριφορά μεταξύ αυτών των προσεγγίσεων.
Ποια αρχή SOLID παραβιάζεται στην τρέχουσα υλοποίηση, όπου η υπηρεσία είναι στενά συνδεδεμένη με μια συγκεκριμένη υλοποίηση αποθήκευσης (ArrayList);
Ποιους τρόπους επικοινωνίας μεταξύ διεργασιών (IPC) γνωρίζετε σε επίπεδο διεπαφών του λειτουργικού συστήματος 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]); } }
Γιατί χρειάζεται το synchronized; Τι θα χρησιμοποιούσες για να υλοποιήσεις έναν ασφαλή με νήματα μετρητή αντί για synchronized;
Ποιο πρόβλημα μπορεί να προκύψει σε ένα περιβάλλον παραγωγής με πολυνηματική πρόσβαση στην υπηρεσία (πολλαπλά παράλληλα αιτήματα REST);
Ποια είναι τα μειονεκτήματα της τρέχουσας προσέγγισης με την ταξινόμηση ολόκληρης της λίστας σε κάθε κλήση του getTop;
Πώς εμφανίζεται ένα primitive στη στοίβα και πώς στο σωρό;
/** * Αναζήτηση δύο αριθμών σε έναν πίνακα των οποίων το άθροισμα είναι ίσο με έναν δοσμένο αριθμό * <p> * Γράψτε μια συνάρτηση που δέχεται ως πρώτο όρισμα έναν πίνακα μη ταξινομημένων θετικών αριθμών * και ως δεύτερο όρισμα έναν θετικό αριθμό. Η συνάρτηση πρέπει να επιστρέφει true αν στον πίνακα * υπάρχουν 2 αριθμοί των οποίων το άθροισμα δίνει το δεύτερο όρισμα. * <p> * Είσοδος: ([10, 15, 3, 7], 17) * Έξοδος: true */
Πώς να ενσωματώσετε σωστά τις εξαρτήσεις (Dependency Injection) σε μια υπηρεσία — ποια προσέγγιση είναι προτιμότερη;
Ανάλυσε το ακρωνύμιο ACID και εξήγησε κάθε ιδιότητα.
Τι είναι η κλήση συστήματος fork στα λειτουργικά συστήματα της οικογένειας Unix;