top 40 java 8 interview questions answers
Σε αυτό το σεμινάριο, παρέχουμε τις πιο σημαντικές ερωτήσεις συνέντευξης Java 8 και τις απαντήσεις τους με παραδείγματα κώδικα και επεξήγηση:
Όλες οι σημαντικές ερωτήσεις που αναφέρονται σε αυτό το σεμινάριο αφορούν συγκεκριμένα την Java 8. Η Java έχει εξελιχθεί πολύ (με την πάροδο του χρόνου) με την εισαγωγή νέων εκδόσεων. Με κάθε έκδοση, έχουμε νέες δυνατότητες που σχετίζονται με την Java. Όλες αυτές οι σημαντικές δυνατότητες θα καλυφθούν σε αυτό το σεμινάριο.
Αυτά είναι πολύ συνηθισμένα ερωτήματα που θα σας ζητηθούν σε οποιεσδήποτε συνεντεύξεις Java που απαιτούν προηγμένες δεξιότητες. Αυτές οι έννοιες είναι υποχρεωτικές εάν πρόκειται να εμφανιστεί σε τυπικές εξετάσεις πιστοποίησης Java όπως το Oracle Certified Associate (OCA).
=> Ρίξτε μια ματιά στον οδηγό για αρχάριους Java εδώ.
Αυτό το άρθρο θα είναι πολύ κατάλληλο τόσο για Java Developers όσο και για Java Testers / Automation Testers ή για όσους αναζητούν υψηλότερες αμοιβές στον ίδιο τομέα, επειδή απαιτεί προηγμένες ικανότητες Java.
Οι πιο συχνές ερωτήσεις για τη συνέντευξη Java 8
Ε # 1) Καταγράψτε τις νέες δυνατότητες που εισήχθησαν στο Java 8;
Απάντηση: Παρακάτω αναφέρονται νέες δυνατότητες που εισάγονται στο Java 8:
- Εκφράσεις λάμδα
- Αναφορές μεθόδου
- Προαιρετική τάξη
- Λειτουργική διασύνδεση
- Προεπιλεγμένες μέθοδοι
- Ρινόκερος, μηχανή JavaScript
- API ροής
- API ημερομηνίας
Q # 2) Τι είναι οι λειτουργικές διεπαφές;
Απάντηση: Η λειτουργική διεπαφή είναι μια διεπαφή που έχει μόνο μία αφηρημένη μέθοδο. Η υλοποίηση αυτών των διεπαφών παρέχεται χρησιμοποιώντας μια έκφραση Lambda που σημαίνει ότι για να χρησιμοποιήσετε την έκφραση Lambda, πρέπει να δημιουργήσετε μια νέα λειτουργική διεπαφή ή μπορείτε να χρησιμοποιήσετε την προκαθορισμένη λειτουργική διεπαφή του Java 8 .
Ο σχολιασμός που χρησιμοποιείται για τη δημιουργία μιας νέας λειτουργικής διεπαφής είναι « @FunctionalInterface '.
Q # 3) Τι είναι μια προαιρετική τάξη;
Απάντηση: Η προαιρετική κλάση είναι μια ειδική τάξη περιτυλίγματος που εισήχθη στο Java 8 και χρησιμοποιείται για την αποφυγή του NullPointerExceptions. Αυτή η τελική τάξη είναι παρούσα στο πακέτο java.util. Το NullPointerExceptions παρουσιάζεται όταν δεν εκτελούμε τους ελέγχους Null.
Q # 4) Ποιες είναι οι προεπιλεγμένες μέθοδοι;
Απάντηση: Οι προεπιλεγμένες μέθοδοι είναι οι μέθοδοι της διασύνδεσης που έχει ένα σώμα. Αυτές οι μέθοδοι, όπως υποδηλώνει το όνομα, χρησιμοποιούν τις προεπιλεγμένες λέξεις-κλειδιά. Η χρήση αυτών των προεπιλεγμένων μεθόδων είναι 'Συμβατότητα προς τα πίσω' που σημαίνει ότι εάν το JDK τροποποιήσει οποιαδήποτε διεπαφή (χωρίς προεπιλεγμένη μέθοδο), τότε οι κλάσεις που εφαρμόζουν αυτήν τη διεπαφή θα διακόψουν.
Από την άλλη πλευρά, εάν προσθέσετε την προεπιλεγμένη μέθοδο σε μια διεπαφή, τότε θα μπορείτε να παρέχετε την προεπιλεγμένη εφαρμογή. Αυτό δεν θα επηρεάσει τις τάξεις εφαρμογής.
Σύνταξη:
public interface questions{ default void print() { System.out.println('www.softwaretestinghelp.com'); } }
Q # 5) Ποια είναι τα κύρια χαρακτηριστικά της Λειτουργίας Lambda;
Απάντηση: Τα κύρια χαρακτηριστικά της Λειτουργίας Lambda είναι τα εξής:
- Μια μέθοδος που ορίζεται ως Lambda Expression μπορεί να περάσει ως παράμετρος σε άλλη μέθοδο.
- Μια μέθοδος μπορεί να υπάρχει αυτόνομη χωρίς να ανήκει σε τάξη.
- Δεν χρειάζεται να δηλώσετε τον τύπο παραμέτρου επειδή ο μεταγλωττιστής μπορεί να πάρει τον τύπο από την τιμή της παραμέτρου.
- Μπορούμε να χρησιμοποιήσουμε παρενθέσεις όταν χρησιμοποιούμε πολλές παραμέτρους, αλλά δεν χρειάζεται να παρένθεση όταν χρησιμοποιούμε μία μόνο παράμετρο.
- Εάν το σώμα της έκφρασης έχει μία μόνο δήλωση, τότε δεν χρειάζεται να συμπεριληφθούν σγουρά τιράντες.
Q # 6) Τι ήταν λάθος με την παλιά ημερομηνία και ώρα;
Απάντηση: Παρακάτω αναφέρονται τα μειονεκτήματα της παλιάς ημερομηνίας και ώρας:
- Το Java.util.Date είναι μεταβλητό και δεν είναι ασφαλές για νήματα, ενώ το νέο Java 8 Date and Time API είναι ασφαλές για νήματα.
- Το Java 8 Date and Time API πληροί τα πρότυπα ISO, ενώ η παλιά ημερομηνία και ώρα δεν ήταν καλά σχεδιασμένα.
- Έχει εισαγάγει πολλές τάξεις API για μια ημερομηνία όπως το LocalDate, LocalTime, LocalDateTime, κ.λπ.
- Μιλώντας για την απόδοση μεταξύ των δύο, το Java 8 λειτουργεί πιο γρήγορα από το παλιό καθεστώς ημερομηνίας και ώρας.
Ε # 7) Ποια είναι η διαφορά μεταξύ του API συλλογής και του API ροής;
Απάντηση: Η διαφορά μεταξύ του API ροής και του API συλλογής μπορεί να γίνει κατανοητή από τον παρακάτω πίνακα:
API ροής | API συλλογής |
---|---|
Παρουσιάστηκε στην έκδοση Java 8 Standard Edition. | Εισήχθη στην Java έκδοση 1.2 |
Δεν υπάρχει χρήση του Iterator και του Spliterators. | Με τη βοήθεια του forEach, μπορούμε να χρησιμοποιήσουμε το Iterator και το Spliterators για να επαναλάβουμε τα στοιχεία και να εκτελέσουμε μια ενέργεια σε κάθε στοιχείο ή στο στοιχείο. |
Ένας άπειρος αριθμός χαρακτηριστικών μπορεί να αποθηκευτεί. | Ένας μετρήσιμος αριθμός στοιχείων μπορεί να αποθηκευτεί. |
Η κατανάλωση και η επανάληψη στοιχείων από το αντικείμενο ροής μπορούν να γίνουν μόνο μία φορά. | Η κατανάλωση και η επανάληψη στοιχείων από το αντικείμενο Συλλογή μπορεί να γίνει πολλές φορές. |
Χρησιμοποιείται για τον υπολογισμό δεδομένων. | Χρησιμοποιείται για την αποθήκευση δεδομένων. |
Ε # 8) Πώς μπορείτε να δημιουργήσετε μια λειτουργική διεπαφή;
Απάντηση: Αν και η Java μπορεί να αναγνωρίσει μια λειτουργική διεπαφή, μπορείτε να ορίσετε μια με τον σχολιασμό
@FunctionalInterface
Μόλις ορίσετε τη λειτουργική διεπαφή, μπορείτε να έχετε μόνο μία αφηρημένη μέθοδο. Εφόσον έχετε μόνο μία αφηρημένη μέθοδο, μπορείτε να γράψετε πολλές στατικές μεθόδους και προεπιλεγμένες μεθόδους.
Παρακάτω είναι το παράδειγμα προγραμματισμού του FunctionalInterface γραμμένο για πολλαπλασιασμό δύο αριθμών.
@FunctionalInterface // annotation for functional interface interface FuncInterface { public int multiply(int a, int b); } public class Java8 { public static void main(String args()) { FuncInterface Total = (a, b) -> a * b; // simple operation of multiplication of 'a' and 'b' System.out.println('Result: '+Total.multiply(30, 60)); } }
Παραγωγή:
Q # 9) Τι είναι η διασύνδεση SAM;
Απάντηση: Το Java 8 εισήγαγε την έννοια του FunctionalInterface που μπορεί να έχει μόνο μία αφηρημένη μέθοδο. Δεδομένου ότι αυτές οι διεπαφές καθορίζουν μόνο μία αφηρημένη μέθοδο, μερικές φορές ονομάζονται SAM Interfaces. Το SAM σημαίνει 'Single Abstract Method'.
Q # 10) Τι είναι η μέθοδος αναφοράς;
πώς να ανοίξετε αρχεία mkv στα παράθυρα
Απάντηση: Στην Java 8, εισήχθη ένα νέο χαρακτηριστικό γνωστό ως Method Reference. Αυτό χρησιμοποιείται για να αναφέρεται στη μέθοδο της λειτουργικής διεπαφής. Μπορεί να χρησιμοποιηθεί για να αντικαταστήσει το Lambda Expression ενώ αναφέρεται σε μια μέθοδο.
Για παράδειγμα: Αν το Lambda Expression μοιάζει
num -> System.out.println(num)
Τότε η αντίστοιχη μέθοδος αναφοράς θα ήταν,
System.out::println
όπου '::' είναι ένας τελεστής που διακρίνει το όνομα κλάσης από το όνομα της μεθόδου.
Ερ # 11) Εξηγήστε την ακόλουθη σύνταξη
String:: Valueof Expression
Απάντηση: Είναι μια στατική μέθοδος αναφοράς στο Αξία του μέθοδος του Σειρά τάξη. System.out :: println είναι μια στατική μέθοδος αναφοράς στη μέθοδο println εκτός αντικειμένου της κλάσης συστήματος.
Επιστρέφει την αντίστοιχη παράσταση συμβολοσειράς του ορίσματος που έχει περάσει. Το επιχείρημα μπορεί να είναι Character, Integer, Boolean και ούτω καθεξής.
Q # 12) Τι είναι το Predicate; Δηλώστε τη διαφορά μεταξύ ενός Predicate και μιας συνάρτησης;
Απάντηση: Το Predicate είναι μια προκαθορισμένη λειτουργική διεπαφή. Βρίσκεται στο πακέτο java.util.function.Predicate. Αποδέχεται μόνο ένα μόνο επιχείρημα που έχει τη μορφή όπως φαίνεται παρακάτω,
Κατηγορούμενο
Κατηγορούμενο | Λειτουργία |
---|---|
Έχει τον τύπο επιστροφής ως Boolean. | Έχει τον τύπο επιστροφής ως αντικείμενο. |
Είναι γραμμένο με τη μορφή Κατηγορούμενο που δέχεται ένα μόνο επιχείρημα. | Είναι γραμμένο με τη μορφή Λειτουργία το οποίο δέχεται επίσης ένα μόνο επιχείρημα. |
Είναι μια λειτουργική διασύνδεση που χρησιμοποιείται για την αξιολόγηση των εκφράσεων Lambda. Αυτό μπορεί να χρησιμοποιηθεί ως στόχος για μια μέθοδο αναφοράς. | Είναι επίσης μια λειτουργική διασύνδεση που χρησιμοποιείται για την αξιολόγηση των εκφράσεων Lambda. Στη συνάρτηση, το T είναι για τον τύπο εισαγωγής και το R είναι για τον τύπο αποτελέσματος. Αυτό μπορεί επίσης να χρησιμοποιηθεί ως στόχος για μια έκφραση και μέθοδο αναφοράς Lambda. |
Ερ. 13) Υπάρχει κάτι λάθος με τον παρακάτω κώδικα; Θα μεταγλωττίσει ή θα δώσει κάποιο συγκεκριμένο σφάλμα;
@FunctionalInterface public interface Test { public C apply(A a, B b); default void printString() { System.out.println('softwaretestinghelp'); } }
Απάντηση: Ναί. Ο κώδικας θα μεταγλωττιστεί επειδή ακολουθεί την προδιαγραφή λειτουργικής διεπαφής για τον ορισμό μόνο μίας αφηρημένης μεθόδου. Η δεύτερη μέθοδος, printString (), είναι μια προεπιλεγμένη μέθοδος που δεν υπολογίζεται ως αφηρημένη μέθοδος.
Ε # 14 Τι είναι το API ροής; Γιατί χρειαζόμαστε το API ροής;
Απάντηση: Το Stream API είναι μια νέα δυνατότητα που προστίθεται στην Java 8. Πρόκειται για μια ειδική κλάση που χρησιμοποιείται για την επεξεργασία αντικειμένων από μια πηγή όπως η Συλλογή.
Χρειαζόμαστε το API ροής επειδή,
- Υποστηρίζει συνολικές λειτουργίες που καθιστούν την επεξεργασία απλή.
- Υποστηρίζει προγραμματισμό λειτουργικού στυλ.
- Κάνει ταχύτερη επεξεργασία. Ως εκ τούτου, είναι κατάλληλο για καλύτερη απόδοση.
- Επιτρέπει παράλληλες λειτουργίες.
Q # 15) Ποια είναι η διαφορά μεταξύ ορίου και παράλειψης;
Απάντηση: Η μέθοδος limit () χρησιμοποιείται για την επιστροφή της ροής του καθορισμένου μεγέθους. Για παράδειγμα, Εάν έχετε αναφέρει το όριο (5), τότε ο αριθμός των στοιχείων εξόδου θα είναι 5.
Ας εξετάσουμε το ακόλουθο παράδειγμα. Η έξοδος εδώ επιστρέφει έξι στοιχεία καθώς το όριο έχει οριστεί σε «έξι».
import java.util.stream.Stream; public class Java8 { public static void main(String() args) { Stream.of(0,1,2,3,4,5,6,7,8) .limit(6) /*limit is set to 6, hence it will print the numbers starting from 0 to 5 */ .forEach(num->System.out.print('
'+num)); } }
Παραγωγή:
Ενώ, η μέθοδος παράλειψης () χρησιμοποιείται για παράλειψη του στοιχείου.
Ας εξετάσουμε το ακόλουθο παράδειγμα. Στην έξοδο, τα στοιχεία είναι 6, 7, 8 που σημαίνει ότι έχει παραλείψει τα στοιχεία μέχρι τον 6ο δείκτη (ξεκινώντας από 1).
import java.util.stream.Stream; public class Java8 { public static void main(String() args) { Stream.of(0,1,2,3,4,5,6,7,8) .skip(6) /* It will skip till 6th index. Hence 7th, 8th and 9th index elements will be printed */ .forEach(num->System.out.print('
'+num)); } }
Παραγωγή:
Q # 16) Πώς θα λάβετε την τρέχουσα ημερομηνία και ώρα χρησιμοποιώντας το Java 8 Date and Time API;
Απάντηση: Το παρακάτω πρόγραμμα γράφεται με τη βοήθεια του νέου API που εισήχθη στην Java 8. Έχουμε χρησιμοποιήσει το LocalDate, LocalTime και LocalDateTime API για να λάβουμε την τρέχουσα ημερομηνία και ώρα.
Στην πρώτη και δεύτερη δήλωση εκτύπωσης, έχουμε ανακτήσει την τρέχουσα ημερομηνία και ώρα από το ρολόι συστήματος με τη ζώνη ώρας να έχει οριστεί ως προεπιλογή. Στην τρίτη δήλωση εκτύπωσης, χρησιμοποιήσαμε το LocalDateTime API που θα εκτυπώσει τόσο την ημερομηνία όσο και την ώρα.
class Java8 { public static void main(String() args) { System.out.println('Current Local Date: ' + java.time.LocalDate.now()); //Used LocalDate API to get the date System.out.println('Current Local Time: ' + java.time.LocalTime.now()); //Used LocalTime API to get the time System.out.println('Current Local Date and Time: ' + java.time.LocalDateTime.now()); //Used LocalDateTime API to get both date and time } }
Παραγωγή:
Ε # 17) Ποιος είναι ο σκοπός της μεθόδου limit () στο Java 8;
Απάντηση: Η μέθοδος Stream.limit () καθορίζει το όριο των στοιχείων. Το μέγεθος που καθορίζετε στο όριο (X), θα επιστρέψει τη ροή του μεγέθους του 'X'. Είναι μια μέθοδος του java.util.stream.Stream
Σύνταξη:
limit(X)
Όπου «Χ» είναι το μέγεθος του στοιχείου.
Ε # 18) Γράψτε ένα πρόγραμμα για να εκτυπώσετε 5 τυχαίους αριθμούς χρησιμοποιώντας το Forach σε Java 8;
Απάντηση: Το παρακάτω πρόγραμμα δημιουργεί 5 τυχαίους αριθμούς με τη βοήθεια του forEach στην Java 8. Μπορείτε να ορίσετε τη μεταβλητή ορίου σε οποιονδήποτε αριθμό ανάλογα με τον αριθμό των τυχαίων αριθμών που θέλετε να δημιουργήσετε.
import java.util.Random; class Java8 { public static void main(String() args) { Random random = new Random(); random.ints().limit(5).forEach(System.out::println); /* limit is set to 5 which means only 5 numbers will be printed with the help of terminal operation forEach */ } }
Παραγωγή:
Ερ. 19) Γράψτε ένα πρόγραμμα για να εκτυπώσετε 5 τυχαίους αριθμούς σε ταξινομημένη σειρά χρησιμοποιώντας το Forach στο Java 8;
Απάντηση: Το παρακάτω πρόγραμμα δημιουργεί 5 τυχαίους αριθμούς με τη βοήθεια του forEach στην Java 8. Μπορείτε να ορίσετε τη μεταβλητή ορίου σε οποιονδήποτε αριθμό ανάλογα με τον αριθμό των τυχαίων αριθμών που θέλετε να δημιουργήσετε. Το μόνο που πρέπει να προσθέσετε εδώ είναι η μέθοδος ταξινόμησης ().
import java.util.Random; class Java8 { public static void main(String() args) { Random random = new Random(); random.ints().limit(5).sorted().forEach(System.out::println); /* sorted() method is used to sort the output after terminal operation forEach */ } }
Παραγωγή:
Ε # 20) Ποια είναι η διαφορά μεταξύ ενδιάμεσων και τερματικών λειτουργιών σε ροή;
Απάντηση: Όλες οι λειτουργίες ροής είναι είτε τερματικές είτε ενδιάμεσες. Ενδιάμεσες λειτουργίες είναι οι λειτουργίες που επιστρέφουν τη ροή έτσι ώστε ορισμένες άλλες λειτουργίες να μπορούν να πραγματοποιηθούν σε αυτήν τη ροή. Οι ενδιάμεσες λειτουργίες δεν επεξεργάζονται τη ροή στον ιστότοπο κλήσεων, επομένως ονομάζονται τεμπέλης.
Αυτοί οι τύποι λειτουργιών (Ενδιάμεσες λειτουργίες) επεξεργάζονται δεδομένα όταν εκτελείται μια λειτουργία τερματικού. Παραδείγματα της ενδιάμεσης λειτουργίας είναι χάρτης και φίλτρο.
Το Terminal Operations ξεκινά την επεξεργασία ροής. Κατά τη διάρκεια αυτής της κλήσης, η ροή υποβάλλεται σε όλες τις ενδιάμεσες λειτουργίες. Παραδείγματα του Terminal Operation είναι άθροισμα, Συλλογή και forEach.
Σε αυτό το πρόγραμμα, προσπαθούμε πρώτα να εκτελέσουμε ενδιάμεση λειτουργία χωρίς λειτουργία τερματικού. Όπως μπορείτε να δείτε, το πρώτο μπλοκ κώδικα δεν θα εκτελεστεί, επειδή δεν υποστηρίζεται λειτουργία Terminal.
Το δεύτερο μπλοκ εκτελέστηκε με επιτυχία λόγω του αθροίσματος λειτουργίας Terminal ().
import java.util.Arrays; class Java8 { public static void main(String() args) { System.out.println('Intermediate Operation won't execute'); Arrays.stream(new int() { 0, 1 }).map(i -> { System.out.println(i); return i; // No terminal operation so it won't execute }); System.out.println('Terminal operation starts here'); Arrays.stream(new int() { 0, 1 }).map(i -> { System.out.println(i); return i; // This is followed by terminal operation sum() }).sum(); } }
Παραγωγή:
Q # 21) Γράψτε ένα πρόγραμμα Java 8 για να λάβετε το άθροισμα όλων των αριθμών που υπάρχουν σε μια λίστα;
Απάντηση: Σε αυτό το πρόγραμμα, χρησιμοποιήσαμε το ArrayList για την αποθήκευση των στοιχείων. Στη συνέχεια, με τη βοήθεια της μεθόδου sum (), έχουμε υπολογίσει το άθροισμα όλων των στοιχείων που υπάρχουν στο ArrayList. Στη συνέχεια μετατρέπεται σε ροή και προστίθεται κάθε στοιχείο με τη βοήθεια των μεθόδων mapToInt () και sum ().
import java.util.*; class Java8 { public static void main(String() args) { ArrayList list = new ArrayList(); list.add(10); list.add(20); list.add(30); list.add(40); list.add(50); // Added the numbers into Arraylist System.out.println(sum(list)); } public static int sum(ArrayList list) { return list.stream().mapToInt(i -> i).sum(); // Found the total using sum() method after // converting it into Stream } }
Παραγωγή:
Q # 22) Γράψτε ένα πρόγραμμα Java 8 για να τετραγωνίσετε τη λίστα των αριθμών και στη συνέχεια να φιλτράρετε τους αριθμούς μεγαλύτερους από 100 και, στη συνέχεια, να βρείτε τον μέσο όρο των υπόλοιπων αριθμών;
Απάντηση: Σε αυτό το πρόγραμμα, έχουμε πάρει ένα Array of Integers και τους έχουμε αποθηκεύσει σε μια λίστα. Στη συνέχεια, με τη βοήθεια του mapToInt (), έχουμε τετράγωνα τα στοιχεία και φιλτράρουμε τους αριθμούς μεγαλύτερους από 100. Τέλος, υπολογίζεται ο μέσος όρος του υπόλοιπου αριθμού (μεγαλύτερος από 100).
import java.util.Arrays; import java.util.List; import java.util.OptionalDouble; public class Java8 { public static void main(String() args) { Integer() arr = new Integer() { 100, 100, 9, 8, 200 }; List list = Arrays.asList(arr); // Stored the array as list OptionalDouble avg = list.stream().mapToInt(n -> n * n).filter(n -> n > 100).average(); /* Converted it into Stream and filtered out the numbers which are greater than 100. Finally calculated the average */ if (avg.isPresent()) System.out.println(avg.getAsDouble()); } }
Παραγωγή:
Q # 23) Ποια είναι η διαφορά μεταξύ του FindFirst του Stream και του FindAny ();
Απάντηση: Όπως υποδηλώνει το όνομα, η μέθοδος findFirst () χρησιμοποιείται για την εύρεση του πρώτου στοιχείου από τη ροή, ενώ η μέθοδος findAny () χρησιμοποιείται για την εύρεση οποιουδήποτε στοιχείου από τη ροή.
Το findFirst () είναι προκαθορισμός στη φύση, ενώ το findAny () είναι μη ντετερμινιστικό. Στον προγραμματισμό, Ντετερμινιστική σημαίνει ότι η έξοδος βασίζεται στην είσοδο ή την αρχική κατάσταση του συστήματος.
Q # 24) Ποια είναι η διαφορά μεταξύ Iterator και Spliterator;
Απάντηση: Ακολουθούν οι διαφορές μεταξύ Iterator και Spliterator.
Επαναληπτής | Σχίστης |
---|---|
Εισήχθη στην Java έκδοση 1.2 | Παρουσιάστηκε στο Java SE 8 |
Χρησιμοποιείται για το API συλλογής. | Χρησιμοποιείται για το API ροής. |
Ορισμένες από τις μεθόδους iterate είναι οι επόμενες () και hasNext () που χρησιμοποιούνται για την επανάληψη στοιχείων. | Η μέθοδος Spliterator είναι tryAdvance (). |
Πρέπει να καλέσουμε τη μέθοδο iterator () στο Object Object Collection. | Πρέπει να καλέσουμε τη μέθοδο splitterator () στο Stream Object. |
Επαναλαμβάνει μόνο με διαδοχική σειρά. | Επαναλαμβάνει σε παράλληλη και διαδοχική σειρά. |
Q # 25) Τι είναι η λειτουργική διεπαφή καταναλωτή;
Απάντηση: Το Consumer Functional Interface είναι επίσης μια διεπαφή μεμονωμένου ορίσματος (όπως Predicate and Function). Εμπίπτει στο java.util.function.Consumer. Αυτό δεν επιστρέφει καμία τιμή.
Στο παρακάτω πρόγραμμα, χρησιμοποιήσαμε τη μέθοδο αποδοχής για να ανακτήσουμε την τιμή του αντικειμένου String.
import java.util.function.Consumer; public class Java8 { public static void main(String() args) Consumer str = str1 -> System.out.println(str1); str.accept('Saket'); /* We have used accept() method to get the value of the String Object */ } }
Παραγωγή:
Ερ. 26) Τι είναι η λειτουργική διεπαφή προμηθευτή;
Απάντηση: Η λειτουργική διεπαφή προμηθευτή δεν δέχεται παραμέτρους εισόδου. Περιλαμβάνει java.util.function.Supplier. Αυτό επιστρέφει την τιμή χρησιμοποιώντας τη μέθοδο get.
Στο παρακάτω πρόγραμμα, χρησιμοποιήσαμε τη μέθοδο get για να ανακτήσουμε την τιμή του αντικειμένου String.
import java.util.function.Supplier; public class Java8 { public static void main(String() args) { Supplier str = () -> 'Saket'; System.out.println(str.get()); /* We have used get() method to retrieve the value of String object str. */ } }
Παραγωγή:
Q # 27) Τι είναι το Nashorn στην Java 8;
Απάντηση: Το Nashorn στο Java 8 είναι μια μηχανή που βασίζεται σε Java για την εκτέλεση και την αξιολόγηση κώδικα JavaScript.
τι είναι ένα mac 7z αρχείο
Ε # 28 Γράψτε ένα πρόγραμμα Java 8 για να βρείτε τον χαμηλότερο και τον υψηλότερο αριθμό ροής;
Απάντηση: Σε αυτό το πρόγραμμα, χρησιμοποιήσαμε μεθόδους min () και max () για να λάβουμε τον υψηλότερο και τον χαμηλότερο αριθμό ροής. Πρώτα απ 'όλα, έχουμε ξεκινήσει μια ροή που έχει ακέραιους αριθμούς και με τη βοήθεια της μεθόδου Comparator.comparing (), έχουμε συγκρίνει τα στοιχεία της ροής.
Όταν αυτή η μέθοδος ενσωματωθεί με max () και min (), θα σας δώσει τους υψηλότερους και χαμηλότερους αριθμούς. Θα λειτουργήσει επίσης κατά τη σύγκριση των χορδών.
import java.util.Comparator; import java.util.stream.*; public class Java8{ public static void main(String args()) { Integer highest = Stream.of(1, 2, 3, 77, 6, 5) .max(Comparator.comparing(Integer::valueOf)) .get(); /* We have used max() method with Comparator.comparing() method to compare and find the highest number */ Integer lowest = Stream.of(1, 2, 3, 77, 6, 5) .min(Comparator.comparing(Integer::valueOf)) .get(); /* We have used max() method with Comparator.comparing() method to compare and find the highest number */ System.out.println('The highest number is: ' + highest); System.out.println('The lowest number is: ' + lowest); } }
Παραγωγή:
Q # 29) Ποια είναι η διαφορά μεταξύ λειτουργίας χάρτη και ροής flatMap;
Απάντηση: Η λειτουργία Stream Stream δίνει μία τιμή εξόδου ανά τιμή εισόδου, ενώ η λειτουργία FlatMap Stream δίνει μηδενική ή μεγαλύτερη τιμή εξόδου ανά τιμή εισόδου.
Παράδειγμα χάρτη- Η λειτουργία Map Stream χρησιμοποιείται γενικά για απλή λειτουργία σε Stream, όπως αυτή που αναφέρεται παρακάτω.
Σε αυτό το πρόγραμμα, έχουμε αλλάξει τους χαρακτήρες του 'Names' σε κεφαλαία χρησιμοποιώντας τη λειτουργία χάρτη αφού τους αποθηκεύσουμε σε μια ροή και με τη βοήθεια της λειτουργίας forEach Terminal, έχουμε εκτυπώσει κάθε στοιχείο.
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Map { public static void main(String() str) { List Names = Arrays.asList('Saket', 'Trevor', 'Franklin', 'Michael'); List UpperCase = Names.stream().map(String::toUpperCase).collect(Collectors.toList()); // Changed the characters into upper case after converting it into Stream UpperCase.forEach(System.out::println); // Printed using forEach Terminal Operation } }
Παραγωγή:
Παράδειγμα flatMap- Η λειτουργία flatMap Stream χρησιμοποιείται για πιο περίπλοκη λειτουργία Stream.
Εδώ έχουμε πραγματοποιήσει τη λειτουργία flatMap στη «Λίστα λίστας τύπου String». Έχουμε δώσει ονόματα εισόδου ως λίστα και στη συνέχεια τα έχουμε αποθηκεύσει σε μια ροή στην οποία έχουμε φιλτράρει τα ονόματα που ξεκινούν με «S».
Τέλος, με τη βοήθεια της λειτουργίας forEach Terminal, εκτυπώσαμε κάθε στοιχείο.
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class flatMap { public static void main(String() str) { List Names = Arrays.asList(Arrays.asList('Saket', 'Trevor'), Arrays.asList('John', 'Michael'), Arrays.asList('Shawn', 'Franklin'), Arrays.asList('Johnty', 'Sean')); /* Created a “List of List of type String” i.e. List Stored names into the list */ List Start = Names.stream().flatMap(FirstName -> FirstName.stream()).filter(s -> s.startsWith('S')) .collect(Collectors.toList()); /* Converted it into Stream and filtered out the names which start with 'S' */ Start.forEach(System.out::println); /* Printed the Start using forEach operation */ } }
Παραγωγή:
Q # 30) Τι είναι το MetaSpace στο Java 8;
Απάντηση: Στην Java 8, εισήχθη ένα νέο χαρακτηριστικό για την αποθήκευση τάξεων. Η περιοχή όπου όλες οι κλάσεις που είναι αποθηκευμένες στο Java 8 ονομάζονται MetaSpace. Το MetaSpace αντικατέστησε το PermGen.
Μέχρι το Java 7, το PermGen χρησιμοποιήθηκε από την Java Virtual Machine για την αποθήκευση των τάξεων. Δεδομένου ότι το MetaSpace είναι δυναμικό καθώς μπορεί να αναπτυχθεί δυναμικά και δεν έχει περιορισμό μεγέθους, το Java 8 αντικατέστησε το PermGen με το MetaSpace.
Ε # 31) Ποια είναι η διαφορά μεταξύ Εσωτερικής και Εξωτερικής Επανάληψης Java 8;
Απάντηση: Η διαφορά μεταξύ εσωτερικής και εξωτερικής επανάληψης παρατίθεται παρακάτω.
Εσωτερική επανάληψη | Εξωτερική επανάληψη |
---|---|
Παρουσιάστηκε στο Java 8 (JDK-8). | Παρουσιάστηκε και εφαρμόστηκε στην προηγούμενη έκδοση του Java (JDK-7, JDK-6 και ούτω καθεξής). |
Επαναλαμβάνεται εσωτερικά στα συγκεντρωτικά αντικείμενα όπως η Συλλογή. | Επαναλαμβάνει εξωτερικά τα συγκεντρωτικά αντικείμενα. |
Υποστηρίζει το λειτουργικό στυλ προγραμματισμού. | Υποστηρίζει το στυλ προγραμματισμού OOPS. |
Ο εσωτερικός επαναληπτής είναι παθητικός. | Το εξωτερικό Iterator είναι ενεργό. |
Είναι λιγότερο λανθασμένο και απαιτεί λιγότερη κωδικοποίηση. | Απαιτεί λίγο περισσότερη κωδικοποίηση και είναι πιο επιρρεπής σε σφάλματα. |
Q # 32) Τι είναι το JJS;
Απάντηση: Το JJS είναι ένα εργαλείο γραμμής εντολών που χρησιμοποιείται για την εκτέλεση κώδικα JavaScript στην κονσόλα. Στην Java 8, το JJS είναι το νέο εκτελέσιμο που είναι μια μηχανή JavaScript.
Q # 33) Τι είναι το ChronoUnits στο Java 8;
Απάντηση: Το ChronoUnits είναι το enum που εισάγεται για να αντικαταστήσει τις τιμές Integer που χρησιμοποιούνται στο παλιό API για την αναπαράσταση του μήνα, της ημέρας κ.λπ.
Q # 34) Εξηγήστε το StringJoiner Class στην Java 8; Πώς μπορούμε να επιτύχουμε συμμετοχή σε πολλές χορδές χρησιμοποιώντας το StringJoiner Class;
Απάντηση: Στην Java 8, εισήχθη μια νέα τάξη στο πακέτο java.util που ήταν γνωστό ως StringJoiner. Μέσω αυτής της τάξης, μπορούμε να ενώσουμε πολλές συμβολοσειρές που διαχωρίζονται από οριοθέτες μαζί με την παροχή προθέματος και επιθήματος σε αυτές.
Στο παρακάτω πρόγραμμα, θα μάθουμε για τη συμμετοχή πολλών χορδών χρησιμοποιώντας το StringJoiner Class. Εδώ έχουμε το ',' ως οριοθέτη μεταξύ δύο διαφορετικών χορδών. Στη συνέχεια, ενώσαμε πέντε διαφορετικές χορδές προσθέτοντάς τις με τη βοήθεια της μεθόδου add (). Τέλος, εκτυπώθηκε το String Joiner.
Στην επόμενη ερώτηση # 35, θα μάθετε για την προσθήκη προθέματος και επιθήματος στη συμβολοσειρά.
import java.util.StringJoiner; public class Java8 { public static void main(String() args) { StringJoiner stj = new StringJoiner(','); // Separated the elements with a comma in between. stj.add('Saket'); stj.add('John'); stj.add('Franklin'); stj.add('Ricky'); stj.add('Trevor'); // Added elements into StringJoiner “stj” System.out.println(stj); } }
Παραγωγή:
Q # 35) Γράψτε ένα πρόγραμμα Java 8 για να προσθέσετε πρόθεμα και επίθημα στο String;
Απάντηση: Σε αυτό το πρόγραμμα, έχουμε «,» ως οριοθέτη μεταξύ δύο διαφορετικών χορδών. Επίσης, έχουμε δώσει αγκύλες '(' και ')' ως πρόθεμα και επίθημα. Στη συνέχεια, πέντε διαφορετικές συμβολοσειρές ενώνονται με την προσθήκη τους με τη βοήθεια της μεθόδου add (). Τέλος, εκτυπώθηκε το String Joiner.
import java.util.StringJoiner; public class Java8 { public static void main(String() args) { StringJoiner stj = new StringJoiner(',', '(', ')'); // Separated the elements with a comma in between. //Added a prefix '(' and a suffix ')' stj.add('Saket'); stj.add('John'); stj.add('Franklin'); stj.add('Ricky'); stj.add('Trevor'); // Added elements into StringJoiner “stj” System.out.println(stj); } }
Παραγωγή:
Q # 36) Γράψτε ένα πρόγραμμα Java 8 για να επαναλάβετε μια ροή χρησιμοποιώντας τη μέθοδο forEach;
Απάντηση: Σε αυτό το πρόγραμμα, επαναλαμβάνουμε μια ροή ξεκινώντας από το 'number = 2', ακολουθούμενη από τη μεταβλητή μέτρησης που αυξάνεται από το '1' μετά από κάθε επανάληψη.
Στη συνέχεια, φιλτράρουμε τον αριθμό του οποίου το υπόλοιπο δεν είναι μηδέν όταν διαιρείται με τον αριθμό 2. Επίσης, έχουμε ορίσει το όριο ως; 5 που σημαίνει μόνο 5 φορές θα επαναληφθεί. Τέλος, εκτυπώνουμε κάθε στοιχείο χρησιμοποιώντας forEach.
import java.util.stream.*; public class Java8 { public static void main(String() args){ Stream.iterate(2, count->count+1) // Counter Started from 2, incremented by 1 .filter(number->number%2==0) // Filtered out the numbers whose remainder is zero // when divided by 2 .limit(5) // Limit is set to 5, so only 5 numbers will be printed .forEach(System.out::println); } }
Παραγωγή:
Ε # 37 Γράψτε ένα πρόγραμμα Java 8 για να ταξινομήσετε έναν πίνακα και στη συνέχεια να μετατρέψετε τον ταξινομημένο πίνακα σε ροή;
Απάντηση: Σε αυτό το πρόγραμμα, χρησιμοποιήσαμε παράλληλη ταξινόμηση για να ταξινομήσουμε έναν πίνακα ακέραιων αριθμών. Στη συνέχεια, μετατράπηκε ο ταξινομημένος πίνακας σε ροή και με τη βοήθεια του ForEach, έχουμε εκτυπώσει κάθε στοιχείο μιας ροής.
import java.util.Arrays; public class Java8 { public static void main(String() args) { int arr() = { 99, 55, 203, 99, 4, 91 }; Arrays.parallelSort(arr); // Sorted the Array using parallelSort() Arrays.stream(arr).forEach(n -> System.out.print(n + ' ')); /* Converted it into Stream and then printed using forEach */ } }
Παραγωγή:
Ε # 38) Γράψτε ένα πρόγραμμα Java 8 για να βρείτε τον αριθμό των συμβολοσειρών σε μια λίστα του οποίου το μήκος είναι μεγαλύτερο από 5;
Απάντηση: Σε αυτό το πρόγραμμα, τέσσερις χορδές προστίθενται στη λίστα χρησιμοποιώντας τη μέθοδο add () και, στη συνέχεια, με τη βοήθεια της έκφρασης Stream και Lambda, έχουμε μετρήσει τις συμβολοσειρές που έχουν μήκος μεγαλύτερο από 5.
import java.util.ArrayList; import java.util.List; public class Java8 { public static void main(String() args) { List list = new ArrayList(); list.add('Saket'); list.add('Saurav'); list.add('Softwaretestinghelp'); list.add('Steve'); // Added elements into the List long count = list.stream().filter(str -> str.length() > 5).count(); /* Converted the list into Stream and filtering out the Strings whose length more than 5 and counted the length */ System.out.println('We have ' + count + ' strings with length greater than 5'); } }
Παραγωγή:
Q # 39) Γράψτε ένα πρόγραμμα Java 8 για να συνδυάσετε δύο ροές;
Απάντηση: Σε αυτό το πρόγραμμα, δημιουργήσαμε δύο ροές από τις δύο ήδη δημιουργημένες λίστες και στη συνέχεια τις συνδυάσαμε χρησιμοποιώντας μια μέθοδο concat () στην οποία δύο λίστες περνούν ως όρισμα. Τέλος, εκτυπώθηκαν τα στοιχεία της συνδυασμένης ροής.
import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class Java8 { public static void main(String() args) { List list1 = Arrays.asList('Java', '8'); List list2 = Arrays.asList('explained', 'through', 'programs'); Stream concatStream = Stream.concat(list1.stream(), list2.stream()); // Concatenated the list1 and list2 by converting them into Stream concatStream.forEach(str -> System.out.print(str + ' ')); // Printed the Concatenated Stream } }
Παραγωγή:
Q # 40) Γράψτε ένα πρόγραμμα Java 8 για να αφαιρέσετε τα διπλά στοιχεία από τη λίστα;
Απάντηση: Σε αυτό το πρόγραμμα, έχουμε αποθηκεύσει τα στοιχεία σε έναν πίνακα και τα μετατρέψαμε σε λίστα. Στη συνέχεια, χρησιμοποιήσαμε τη ροή και τη συλλέξαμε στο 'Set' με τη βοήθεια της μεθόδου 'Collectors.toSet ()'.
import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class Java8 { public static void main(String() args) { Integer() arr1 = new Integer() { 1, 9, 8, 7, 7, 8, 9 }; List listdup = Arrays.asList(arr1); // Converted the Array of type Integer into List Set setNoDups = listdup.stream().collect(Collectors.toSet()); // Converted the List into Stream and collected it to “Set” // Set won't allow any duplicates setNoDups.forEach((i) -> System.out.print(' ' + i)); } }
Παραγωγή:
συμπέρασμα
Σε αυτό το άρθρο, έχουμε κατανοήσει τις νέες δυνατότητες που εισήχθησαν στην Java 8. Έχουμε καλύψει όλες τις μεγάλες ερωτήσεις συνέντευξης Java 8 και τις απαντήσεις τους λεπτομερώς.
Αφού διαβάσετε αυτό το σεμινάριο, πρέπει να έχετε αποκτήσει γνώση σχετικά με τα νέα API για χειρισμό ημερομηνίας-ώρας, νέες δυνατότητες του Java 8, νέα API ροής μαζί με τα κατάλληλα παραδείγματα προγραμματισμού σύμφωνα με την ιδέα. Αυτές οι νέες έννοιες ή τα χαρακτηριστικά αποτελούν μέρος της διαδικασίας συνέντευξης όταν είστε έτοιμοι για τις πιο απαιτητικές θέσεις Java.
πώς να εκτελέσετε αρχεία .jar
Τα καλύτερα!!
=> Ελέγξτε ΟΛΑ τα Εκπαιδευτικά Java εδώ.
Συνιστώμενη ανάγνωση
- Ερωτήσεις και απαντήσεις συνέντευξης
- Ερωτήσεις και απαντήσεις συνέντευξης δοκιμών ETL
- Μερικές δύσκολες μη αυτόματες ερωτήσεις και απαντήσεις
- Κορυφαίες ερωτήσεις και απαντήσεις συνέντευξης προγραμματισμού 40 C
- Κορυφαίες 40 δημοφιλείς ερωτήσεις και απαντήσεις συνέντευξης J2EE που πρέπει να διαβάσετε
- Ερωτήσεις συνέντευξης Spock με απαντήσεις (πιο δημοφιλείς)
- 25 Καλύτερες Ερωτήσεις και Απαντήσεις Συνέντευξης για Ευέλικτη Δοκιμή
- Κορυφαίες 32 καλύτερες ερωτήσεις και απαντήσεις συνέντευξης δεδομένων