Κορυφαίες 40 ερωτήσεις συνέντευξης πολλαπλών νημάτων Java για το 2021


Αυτό το σεμινάριο καλύπτει σημαντικές ερωτήσεις συνέντευξης πολλαπλών νημάτων Java, καθώς και ερωτήσεις συνέντευξης java thread και ερωτήσεις συνέντευξης java.

Πίνακας περιεχομένων

1. Τι είναι το νήμα;

Ένα νήμα είναι μια υποεπεξεργασία που ακολουθεί μια ξεχωριστή διαδρομή εκτέλεσης. Κάθε νήμα εκτελείται ανεξάρτητα, παρόλο που μοιράζονται τους ίδιους πόρους διεργασίας. Κάθε νήμα εκτελείται ή εκτελείται σε διαφορετικό πλαίσιο στοίβας.

2. Τι είναι το multithreading στην Java;

Το Multithreading είναι το διαδικασία εκτέλεσης ενός ή περισσοτέρων νημάτων ταυτόχρονα που βοηθά στην εκτέλεση πολλαπλών εργασιών ταυτόχρονα. Κάθε νήμα εκτελείται ανεξάρτητα μοιράζοντας τους ίδιους πόρους.

3. Ποια είναι τα πλεονεκτήματα του multithreading;

  • Καταναλώνει λιγότερη μνήμη
  • Η απόδοση είναι γρήγορη
  • Πιο αποτελεσματικό
  • Υποστηρίζει πολλαπλές εργασίες
  • Η εξαίρεση σε ένα νήμα δεν επηρεάζει το άλλο αφού τα νήματα είναι ανεξάρτητα

4. Ποιες είναι οι διάφορες καταστάσεις σε έναν κύκλο ζωής ενός νήματος;

  • Νέο
  • Δυνατότητα εκτέλεσης
  • Τρέξιμο
  • Χωρίς δυνατότητα εκτέλεσης
  • Τερματίστηκε

5. Ποιοι είναι οι διαφορετικοί τρόποι δημιουργίας ενός νήματος;

Υπάρχουν 2 τρόποι για να δημιουργήσετε ένα νήμα:

  • Επέκταση τάξης νήματος
  • Εφαρμογή κλάσης με δυνατότητα εκτέλεσης

6. Ποια είναι η χρήση της μεθόδου Thread.start ();

Η μέθοδος Thread.start () ξεκινά τη διαδικασία νήματος και χρησιμοποιείται για την εκτέλεση της μεθόδου run ().

7. Ποιοι είναι οι διαφορετικοί κατασκευαστές μιας κλάσης νήματος στην Java;

  • Νήμα()
  • Νήμα (Όνομα συμβολοσειράς)
  • Νήμα (Runnable r)
  • Νήμα (Runnable r, String name)

8. Είναι δυνατόν να ξεκινήσετε ένα νήμα δύο φορές;

Αυτό είναι ένα από τα κοινά multithreading συνέντευξη java ερωτήσεις.

Όχι, μπορούμε να ξεκινήσουμε ένα νήμα δύο φορές. Όταν προσπαθούμε να επανεκκινήσουμε το ίδιο νήμα με το παρακάτω παράδειγμα, θα λάβουμε το IllegalThreadStateException όταν εκτελεί τη δεύτερη μέθοδο έναρξης () του ίδιου νήματος.

public class ThreadDemo extends Thread {
  
  public void run() {
    System.out.println("THread running");
  }

  public static void main(String[] args) {
    ThreadDemo t = new ThreadDemo();
    t.start();
    t.start();
  }

}
Exception in thread "main" THread running
java.lang.IllegalThreadStateException
  at java.base/java.lang.Thread.start(Thread.java:790)
  at ThreadDemo.main(ThreadDemo.java:11)

9. Ποιες είναι οι διαφορετικές μέθοδοι ενός νήματος που χρησιμοποιείται για την επικοινωνία μεταξύ τους;

  • Περιμένετε () μέθοδος
  • κοινοποίηση () μέθοδος
  • μέθοδος notifyAll ()

10. Ποια είναι η διαφορά μεταξύ ενός νήματος χρήστη και ενός νήματος δαίμονα;

Νήμα χρήστηΝήμα Daemon
Νήμα υψηλής προτεραιότηταςΝήμα χαμηλής προτεραιότητας
Τρέχει σε πρώτο πλάνοΤρέχει στο παρασκήνιο
Εκτελεί συγκεκριμένη πολύπλοκη εργασίαΕκτελεί υποστηρικτική εργασία
Το JVM περιμένει πάντα να ολοκληρωθεί το ενεργό νήμα χρήστη πριν από το κλείσιμοΤο JVM δεν περιμένει να ολοκληρωθεί το νήμα δαίμονα πριν από το κλείσιμο
Δημιουργήθηκε από την εφαρμογή Java για την εκτέλεση ορισμένων εργασιώνΔημιουργήθηκε από την JVM
Είναι ανεξάρτητοΕξαρτάται από τα θέματα του χρήστη

11. Πώς να διακόψετε την εκτέλεση του νήματος για συγκεκριμένο χρόνο;

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο sleep () για να κάνουμε το νήμα να θέσει σε παύση την εκτέλεση του για συγκεκριμένο χρόνο. Μόλις ξυπνήσει, αλλάζει την κατάσταση σε τρέξιμο και εκτελείται με βάση τον προγραμματιστή νήματος.

12. Τι είναι η προτεραιότητα του νήματος;

Κάθε νήμα έχει προτεραιότητα με τιμή που κυμαίνεται από 1 έως 10 όπου 1 είναι το χαμηλότερο και 10 είναι το υψηλότερο. Το νήμα με την υψηλότερη προτεραιότητα έχει πάντα την προτεραιότητα της εκτέλεσης πρώτα αλλά εξαρτάται επίσης από την εφαρμογή του Thread Scheduler.

13. Τι είναι ο προγραμματιστής νημάτων και ο χρόνος κοπής;

Ο προγραμματιστής νημάτων είναι μια υπηρεσία που ανήκει στο το λειτουργικό σύστημα που προγραμματίζει ή εκχωρεί χρόνο CPU για εκτέλεση νήματος. Μόλις δημιουργήσουμε ένα νήμα και το ξεκινήσουμε, ο προγραμματιστής νημάτων αποφασίζει πότε θα εκτελέσει το νήμα με βάση την εφαρμογή του.

Ο χρόνος κοπής είναι η διαδικασία κατάδυσης του διαθέσιμου χρόνου CPU για τα νήματα με δυνατότητα εκτέλεσης. Αυτό μπορεί να εξαρτάται από την προτεραιότητα του νήματος και τον χρόνο αναμονής του νήματος.

14. Τι είναι η αλλαγή περιβάλλοντος στο multithreading;

Η εναλλαγή περιβάλλοντος είναι μια διαδικασία που χρησιμοποιείται στο multitasking ή στο multithreading όπου μπορούμε να αποθηκεύσουμε και να επαναφέρουμε την κατάσταση της CPU ενός νήματος. Αυτό βοηθά στη συνέχιση της εκτέλεσης του νήματος από το ίδιο σημείο όπου σταμάτησε μετά από μια συγκεκριμένη ώρα.

15. Γιατί ονομάζουμε τις μεθόδους αναμονής (), ειδοποίησης () και ειδοποίησηςAll () από τη συγχρονισμένη μέθοδο ή αποκλεισμό;

Όλες αυτές οι μέθοδοι έχουν εξάρτηση από την οθόνη αντικειμένου επειδή εάν ένα νήμα βρίσκεται σε κατάσταση αναμονής, τότε αφήνει την οθόνη αντικειμένου και επιστρέφει έως ότου καλέσει τη μέθοδο ειδοποίησης (). Δεδομένου ότι όλες αυτές οι μέθοδοι απαιτούν συγχρονισμό μεταξύ τους, πρέπει να τις καλέσουμε μόνο από τη συγχρονισμένη μέθοδο ή μπλοκ.

16. Πώς να επιτύχετε την ασφάλεια των νημάτων στην Java;

  • Συγχρονισμός
  • Ατομική ταυτόχρονη τάξη
  • Διεπαφή ταυτόχρονης κλειδαριάς
  • ευμετάβλητη λέξη-κλειδί
  • αμετάβλητες τάξεις
  • Μαθήματα ασφαλή για νήματα

17. Ποια είναι η χρήση μιας ευμετάβλητης λέξης-κλειδιού;

Οταν εμείς δηλώστε μια μεταβλητή ως πτητικό, διαβάζει την τιμή της μεταβλητής απευθείας από τη μνήμη αντί της προσωρινής μνήμης.

18. Πώς να δημιουργήσετε ένα νήμα δαίμονα;

Μπορούμε να δημιουργήσουμε ένα νήμα δαίμονα χρησιμοποιώντας τη μέθοδο setDaemon (true) της κλάσης Thread. Πρέπει να χρησιμοποιήσουμε αυτήν τη μέθοδο πριν καλέσουμε τη μέθοδο έναρξης () αλλιώς θα ρίξει το IllegalThreadStateException.

19. Τι είναι το Thread Dump στην Java;

Το Thread Dump είναι μια ομάδα ενεργών νημάτων που χρησιμοποιούνται για την ανάλυση σημείων συμφόρησης και αδιεξόδων. Μπορούμε να δημιουργήσουμε νήμα ντάμπινγκ χρησιμοποιώντας ένα προφίλ, εντολή kill-3, εργαλείο jstack κ.λπ.

20. Τι είναι το αδιέξοδο; Πώς να αναλύσετε και να αποφύγετε μια κατάσταση αδιεξόδου;

Ένα αδιέξοδο είναι μια κατάσταση στην οποία τα νήματα είναι αποκλεισμένα για πάντα. Αυτό συμβαίνει όταν δύο ή περισσότερα νήματα έχουν πρόσβαση στον ίδιο πόρο που εξαρτάται το ένα από το άλλο. Με άλλα λόγια, κανένα από τα νήματα δεν εκτελείται όπου το ένα νήμα περιμένει να εκτελεστεί το άλλο νήμα που είναι ήδη σε κατάσταση αναμονής.

Μπορούμε να αναλύσουμε μια κατάσταση αδιεξόδου κοιτάζοντας το ντάμπινγκ και ψάχνοντας για νήματα στην κατάσταση BLOCKED.

Μπορούμε να αποφύγουμε το αδιέξοδο αποφεύγοντας τη χρήση ένθετων κλειδαριών, περιμένοντας απεριόριστα και κλειδώνοντας μόνο ό, τι απαιτείται.

21. Ποια είναι η διαφορά μεταξύ των μεθόδων αναμονής () και ύπνου ();

Η μέθοδος wait () είναι μέρος του Κατηγορία αντικειμένων και χρησιμοποιείται για την απελευθέρωση της κλειδαριάς, ενώ η μέθοδος sleep () είναι μέρος της κλάσης Thread και δεν απελευθερώνει κανένα κλείδωμα.

22. Ποια είναι η μέθοδος join ();

Η μέθοδος join () περιμένει την τρέχουσα εκτέλεση της εργασίας να σταματήσει την εκτέλεση έως ότου ενταχθεί στην ολοκληρωμένη λίστα εργασιών. Με άλλα λόγια, περιμένει το νήμα να πάει στην κατάσταση τερματισμού.

23. Τι είναι η επικοινωνία μεταξύ των νημάτων;

Η επικοινωνία μεταξύ νημάτων είναι η διαδικασία επικοινωνίας μεταξύ των συγχρονισμένων νημάτων και χρησιμοποιείται για να αποφευχθεί η ανίχνευση νημάτων. Αυτό είναι χρήσιμο όταν ένα νήμα σταματά την εκτέλεση του σε κρίσιμη κατάσταση και επιτρέπει σε ένα άλλο νήμα να εισέλθει στην εκτέλεση στην ίδια κρίσιμη κατάσταση.

24. Ποιες είναι οι διαφορές μεταξύ μιας διαδικασίας και ενός νήματος;

ΔιαδικασίαΝήμα
Μια διαδικασία είναι ένα πρόγραμμα σε εκτέλεσηΤο νήμα είναι ένα υποσύνολο μιας διαδικασίας
Οι διαδικασίες διατηρούν διαφορετικό χώρο διευθύνσεωνΤα νήματα διατηρούν την ίδια διεύθυνση ίδια
Η εναλλαγή περιβάλλοντος είναι πιο αργήΗ εναλλαγή περιβάλλοντος είναι ταχύτερη
Η επικοινωνία μεταξύ διεργασιών είναι πιο αργήΗ επικοινωνία μεταξύ νημάτων είναι ταχύτερη
Οποιαδήποτε αλλαγή στη γονική διαδικασία δεν επηρεάζει τη διαδικασία του παιδιούΟποιαδήποτε αλλαγή στο γονικό νήμα θα επηρεάσει το θυγατρικό νήμα

25. Τι είναι ο γάντζος τερματισμού;

Ένα άγκιστρο τερματισμού είναι ένα νήμα που καλείται σιωπηρά από την JVM για να καθαρίσει τους πόρους πριν από το κλείσιμο του JVM είτε κανονικά είτε απότομα.

26. Πότε μπορούμε να διακόψουμε ένα νήμα;

Μπορούμε να διακόψουμε ένα νήμα όταν θέλουμε το νήμα να ξυπνήσει από την κατάσταση αναμονής ή αναμονής. Μπορούμε να το κάνουμε αυτό καλώντας τη μέθοδο interrupt () που ρίχνει το InterruptExeception.

27. Τι είναι ο συγχρονισμός;

Ο συγχρονισμός είναι η διαδικασία ελέγχου της πρόσβασης πολλαπλών νημάτων στον κοινόχρηστο πόρο. Με άλλα λόγια, όταν ένα νήμα χρησιμοποιεί τον κοινόχρηστο πόρο, το κλειδώνει έτσι ώστε το άλλο νήμα να μην μπορεί να το χρησιμοποιήσει έως ότου αποδεσμευτεί το κλείδωμα. Αυτό είναι πολύ σημαντικό, καθώς μπορεί να οδηγήσει σε σφάλματα, εάν πολλά νήματα προσπαθούν να κάνουν την ίδια εργασία ταυτόχρονα. Για να αποφευχθεί αυτό το ζήτημα, η Java παρουσίασε την έννοια συγχρονισμού.

Μπορούμε να επιτύχουμε συγχρονισμό με τους παρακάτω 3 τρόπους:

  • Με τη μέθοδο συγχρονισμού
  • Μπλοκ συγχρονισμού
  • στατικός συγχρονισμός

28. Τι είναι η κατάσταση του αγώνα;

Η κατάσταση του αγώνα είναι ένα σοβαρό πρόβλημα που προκύπτει λόγω της ακατάλληλης χρήσης συγχρονισμού όπου πολλά νήματα εκτελούν την ίδια εργασία ταυτόχρονα.

29. Τι είναι ένα νήμα πισίνα;

Μια ομάδα νημάτων αντιπροσωπεύει μια ομάδα νημάτων που περιμένουν μια εργασία. Ο πάροχος υπηρεσιών τραβά ένα νήμα τη φορά και του αναθέτει μια εργασία. Μόλις ολοκληρωθεί, το νήμα επιστρέφει ξανά στο νήμα. Χρησιμοποιώντας ένα νήμα, μπορούμε να επιτύχουμε καλύτερη σταθερότητα συστήματος και καλύτερη απόδοση.

30. Ποια είναι τα κύρια στοιχεία του Concurrency API;

Το API Concurrency μπορεί να εφαρμοστεί χρησιμοποιώντας τις διάφορες κατηγορίες και τη διεπαφή του πακέτου Concurrency που παρατίθενται παρακάτω:

  • Εκτελεστής διαθήκης
  • Εξυπηρέτηση
  • Προγραμματισμένη υπηρεσία Exxor
  • Μελλοντικός
  • TimeUnit
  • Εργοστάσιο νήματος
  • Κλειδαριές
  • Καθυστέρηση
  • BlockingQueue
  • Σηματοφόρος
  • Phaser
  • Κυκλικός φραγμός
  • CountDownLatch
  • FarkJoinPool

31. Ποια είναι η διεπαφή του Executor στο API Concurrency;

Η διεπαφή Executor χρησιμοποιείται για την εκτέλεση μιας συγκεκριμένης εργασίας. Ανήκει στο πακέτο java.util.concurrent που περιέχει μια μέθοδο εκτέλεσης ().

32. Τι είναι το BlockingQueue;

Το BlockingQueue είναι η θυγατρική διεπαφή της διεπαφής ουράς όπου περιέχει μεθόδους για να περιμένετε τον διαθέσιμο χώρο πριν εισαγάγετε μια νέα τιμή και περιμένετε να γίνει η ουρά μη κενή πριν ανακτήσετε μια τιμή.

33. Ποια είναι η διαφορά μεταξύ του Java Callable και του Runnable interface;

Τόσο Java Callable όσο και Runnable διεπαφές χρησιμοποιούνται για την εκτέλεση πολλαπλών εργασιών. Ακολουθούν οι διαφορές:

Τηλεφωνική διεπαφήΔιεπαφή με δυνατότητα εκτέλεσης
Επιστρέφει μια τιμήΔεν επιστρέφει καμία τιμή
ρίχνει το CheckedExceptionδεν ρίχνει το CheckedException
Δεν είναι διαθέσιμο πριν από την Java 5Διαθέσιμο πριν από την Java 5

34. Τι είναι η ατομική δράση στο Concurrency;

Η ατομική ενέργεια είναι μια λειτουργία όπου εκτελεί μία μόνο εργασία χωρίς καμία παρέμβαση άλλων μεθόδων. Είναι μέρος του πακέτου ταυτόχρονων. Μόλις ξεκινήσει η ατομική δράση, δεν μπορούμε να την σταματήσουμε ή να την σταματήσουμε ενδιάμεσα. Πρέπει να περιμένουμε μέχρι να ολοκληρώσει την πλήρη δράση. Όλες οι περιοχές και οι εργασίες εγγραφής πρωτόγονων μεταβλητών και πτητικών μεταβλητών είναι ατομικές πράξεις.

35. Τι είναι μια διεπαφή κλειδώματος στο Concurrency;

Μια διεπαφή κλειδώματος χρησιμοποιείται για την εφαρμογή συγχρονισμού. Είναι παρόμοιο με ένα συγχρονισμένο μπλοκ, ωστόσο υπάρχουν λίγες διαφορές. Μια διεπαφή κλειδώματος περιέχει τη μέθοδο κλειδώματος () και ξεκλειδώματος () και εγγυάται τη σειρά με την οποία τα νήματα περιμένουν την εκτέλεση. Επίσης, υποστηρίζει λειτουργίες χρονικού ορίου.

36. Τι είναι μια διεπαφή ExecutorService;

Μια διεπαφή ExecutorService είναι μια υποσύνδεση της διεπαφής Executor που έχει ειδικές λειτουργίες για τη διαχείριση του κύκλος ζωής.

37. Ποια είναι η διαφορά μεταξύ του συγχρονισμένου και του ασύγχρονου προγραμματισμού;

Σε σύγχρονο προγραμματισμό, όταν ένα νήμα αρχίζει να λειτουργεί σε μια εργασία, είναι διαθέσιμο για άλλες εργασίες μόνο όταν ολοκληρωθεί η εκχωρημένη εργασία.

Στον ασύγχρονο προγραμματισμό, πολλά νήματα μπορούν να εκτελέσουν την ίδια εργασία.

38. Ποια είναι η διαφορά μεταξύ της μεθόδου έναρξης και εκτέλεσης;

Μια μέθοδος εκκίνησης δημιουργεί ένα νέο νήμα και καλεί εσωτερικά τη μέθοδο εκτέλεσης για την εκτέλεση του κώδικα για το νέο νήμα

Η μέθοδος εκτέλεσης εκτελεί τον κώδικα για το υπάρχον νήμα.

39. Ποια είναι η διαφορά μεταξύ της μεθόδου notify () και notifyAll ();

Η μέθοδος notify () ξεκλειδώνει ένα νήμα αναμονής ενώ η μέθοδος notifyAll () ξεκλειδώνει όλα τα νήματα αναμονής.

40. Σκεφτείτε ότι υπάρχουν 3 νήματα T1, T2 και T3. Πώς μπορούμε να διασφαλίσουμε ότι το T2 τρέχει μετά το T1 και το T3 τρέχει μετά το T2;

Αυτή είναι μια από τις κοινές ερωτήσεις συνέντευξης για το multithreading. Η απάντηση είναι ότι μπορούμε να το διασφαλίσουμε χρησιμοποιώντας τη μέθοδο join ().

Συμπέρασμα

Σε αυτό το σεμινάριο, έχουμε καλύψει τις κορυφαίες ερωτήσεις πολλαπλών νημάτων java, ερωτήσεις συνέντευξης για multithreading, ερωτήσεις συνέντευξης java thread, ερωτήσεις συνέντευξης java multithreading, ερωτήσεις πολλαπλών νημάτων java, ερωτήσεις συνέντευξης java concurrency