Domande e risposte sull’intervista Java SE 8 (Parte 1)

Nel post, discuteremo alcune importanti Domande di Intervista su Java SE 8 con Relative Risposte. Scriverò un altro post per discutere delle restanti Domande di Intervista su Java SE 8.

Domande di Intervista su Java 8

  1. Perché abbiamo bisogno di tornare a Java?
  2. Quali sono le Nuove Funzionalità di Java SE 8?
  3. Vantaggi delle Nuove Funzionalità di Java SE 8?
  4. Cosa è un’Espressione Lambda?
  5. Quali sono le tre parti di un’Espressione Lambda? Qual è il tipo di un’Espressione Lambda?
  6. Cosa è un’Interfaccia Funzionale? Cosa è un’Interfaccia SAM?
  7. È possibile definire la nostra Interfaccia Funzionale? Cosa significa @FunctionalInterface? Quali sono le regole per definire un’Interfaccia Funzionale?
  8. È obbligatoria l’annotazione @FunctionalInterface per definire un’Interfaccia Funzionale? A cosa serve l’annotazione @FunctionalInterface? Perché abbiamo bisogno di Interfacce Funzionali in Java?
  9. Quando si opta per l’API Stream di Java 8? Perché dobbiamo utilizzare l’API Stream di Java 8 nei nostri progetti?
  10. Spiega le differenze tra l’API di Collezione e l’API Stream?
  11. Cos’è Spliterator in Java SE 8? Differenze tra Iterator e Spliterator in Java SE 8?
  12. Cos’è Optional in Java 8? Qual è l’utilizzo di Optional? Vantaggi di Optional in Java 8?
  13. Cos’è l’inferenza di tipo? L’inferenza di tipo è disponibile anche nelle versioni precedenti come Java 7 e prima del 7 o è disponibile solo in Java SE 8?

Domande e risposte sull’intervista di Java 8

In questa sezione, prenderemo ogni domanda dalla sezione precedente e risponderemo con una descrizione dettagliata. Se hai bisogno di ulteriori informazioni ed esempi, consulta i post precedenti su Java SE 8 disponibili su JournalDEV.

Perché abbiamo bisogno di cambiare nuovamente Java?

Oracle Corporation ha introdotto molti nuovi concetti in Java SE 8 per introdurre i seguenti vantaggi:

  • Per utilizzare efficientemente le attuali CPU multi-core
    Recentemente, possiamo osservare cambiamenti drastici nell’hardware. Al giorno d’oggi, tutti i sistemi utilizzano CPU multi-core (2, 4, 8, 16 core, ecc.) per distribuire ed eseguire le loro applicazioni. Abbiamo bisogno di nuove costruzioni di programmazione in Java per sfruttare efficientemente questi processori multi-core nello sviluppo di applicazioni altamente concorrenti e altamente scalabili. – Per utilizzare le caratteristiche della programmazione funzionale (FP)
    Oracle Corporation ha introdotto molte nozioni di FP (programmazione funzionale) come parte di Java SE 8 per sfruttare i vantaggi della FP.

Nuove funzionalità di Java SE 8?

  • Espressioni lambda
  • Interfacce funzionali
  • API Stream
  • API data e orario
  • Metodi predefiniti e metodi statici delle interfacce
  • Spliterator
  • Riferimenti a metodi e costruttori
  • Miglioramenti alle API delle collezioni
  • Miglioramenti alle utility di concorrenza
  • Miglioramenti al framework Fork/Join
  • Iterazione interna
  • Array paralleli e operazioni di raccolta parallele
  • Opzionale
  • Annotationi di tipo e annotazioni ripetibili
  • Riflessione sui parametri del metodo
  • Codifica e decodifica Base64
  • Miglioramenti IO e NIO2
  • Motore Nashorn JavaScript
  • Miglioramenti di javac
  • Modifiche JVM
  • Profili compatti Java 8: compact1, compact2, compact3
  • JDBC 4.2
  • JAXP 1.6
  • Java DB 10.10
  • Networking
  • Modifiche alla sicurezza

Vantaggi delle nuove funzionalità di Java SE 8?

Possiamo ottenere i seguenti vantaggi dalle nuove funzionalità di Java SE 8:

  • Codice più conciso e leggibile
  • Codice più riutilizzabile
  • Codice più testabile e manutenibile
  • Codice altamente concorrente e scalabile
  • Scrivere codice parallelo
  • Scrivere operazioni simili al database
  • Applicazioni con prestazioni migliori
  • Codice più produttivo

Cos’è un’espressione Lambda?

L’espressione lambda è una funzione anonima che accetta un insieme di parametri di input e restituisce dei risultati. L’espressione lambda è un blocco di codice senza nome, con o senza parametri e con o senza risultati. Questo blocco di codice viene eseguito su richiesta.

Quali sono le tre parti di un’espressione lambda? Qual è il tipo di un’espressione lambda?

A Lambda Expression contains 3 parts:

  • Elenco dei parametri
    Un’espressione lambda può contenere zero o uno o più parametri. È opzionale. – Operatore di freccia lambda
    “>” è conosciuto come operatore di freccia lambda. Separa l’elenco dei parametri e il corpo dell’espressione. – Corpo dell’espressione lambda

Il tipo di “Journal Dev” è java.lang.String. Il tipo di “true” è Boolean. Allo stesso modo, qual è il tipo di un’espressione lambda? Il tipo di un’espressione lambda è un interfaccia funzionale. Esempio: – Qual è il tipo dell’espressione lambda seguente?

   () -> System.out.println("Hello World");

Questa espressione lambda non ha parametri e non restituisce alcun risultato. Quindi il suo tipo è “java.lang.Runnable” interfaccia funzionale.

Cos’è un’interfaccia funzionale? Cos’è un’interfaccia SAM?

A Functional Interface is an interface, which contains one and only one abstract method. Functional Interface is also known as SAM Interface because it contains only one abstract method. SAM Interface stands for Single Abstract Method Interface. Java SE 8 API has defined many Functional Interfaces.

È possibile definire la nostra propria interfaccia funzionale? Cosa significa @FunctionalInterface? Quali sono le regole per definire un’interfaccia funzionale?

Sì, è possibile definire le nostre proprie interfacce funzionali. Utilizziamo l’annotazione @FunctionalInterface di Java SE 8 per contrassegnare un’interfaccia come interfaccia funzionale. Dobbiamo seguire queste regole per definire un’interfaccia funzionale:

  • Definire un’interfaccia con un solo metodo astratto.
  • Non possiamo definire più di un metodo astratto.
  • Utilizzare l’annotazione @FunctionalInterface nella definizione dell’interfaccia.
  • Possiamo definire qualsiasi numero di altri metodi come metodi di default, metodi statici.
  • Se sovrascriviamo il metodo della classe java.lang.Object come metodo astratto, questo non conta come metodo astratto.

È @FunctionalInterface obbligatorio definire un’Interfaccia Funzionale? Qual è l’utilità dell’annotazione @FunctionalInterface? Perché abbiamo bisogno delle Interfacce Funzionali in Java?

Non è obbligatorio definire un’Interfaccia Funzionale con l’annotazione @FunctionalInterface. Se non vogliamo, possiamo omettere quest’annotazione. Tuttavia, se la usiamo nella definizione dell’Interfaccia Funzionale, il compilatore Java ci costringe a usare un solo metodo astratto all’interno di quell’interfaccia. Perché abbiamo bisogno delle Interfacce Funzionali? Il tipo di un’espressione Lambda di Java SE 8 è un’Interfaccia Funzionale. Ovunque usiamo le Espressioni Lambda, significa che stiamo utilizzando le Interfacce Funzionali.

Quando dovremmo utilizzare Java 8 Stream API? Perché abbiamo bisogno di utilizzare Java 8 Stream API nei nostri progetti?

Quando il nostro progetto Java desidera eseguire le seguenti operazioni, è meglio utilizzare l’API Stream di Java 8 per ottenere molti vantaggi:Quando vogliamo eseguire operazioni simili a quelle del database. Ad esempio, vogliamo eseguire operazioni di raggruppamento, operazioni di ordinamento, ecc.

  • Quando vogliamo eseguire operazioni in modo pigro.
  • Quando vogliamo scrivere programmazione in stile funzionale.
  • Quando vogliamo eseguire operazioni parallele.
  • Quando vogliamo utilizzare l’iterazione interna.
  • Quando vogliamo eseguire operazioni di concatenazione.
  • Quando vogliamo ottenere migliori prestazioni.

Spiega le differenze tra l’API Collection e l’API Stream?

S.No. Collection API Stream API
1. It’s available since Java 1.2 It is introduced in Java SE 8
2. It is used to store Data (A set of Objects). It is used to compute data (Computation on a set of Objects).
3. We can use both Spliterator and Iterator to iterate elements. We can use forEach to performs an action for each element of this stream. We can’t use Spliterator or Iterator to iterate elements.
4. It is used to store unlimited number of elements. Stream API is used to process on the elements of a Collection.
5. Typically, it uses External Iteration concept to iterate Elements such as Iterator. Stream API uses internal iteration to iterate Elements, using forEach methods.
6. Collection Object is constructed Eagerly. Stream Object is constructed Lazily.
7. We add elements to Collection object only after it is computed completely. We can add elements to Stream Object without any prior computation. That means Stream objects are computed on-demand.
8. We can iterate and consume elements from a Collection Object at any number of times. We can iterate and consume elements from a Stream Object only once.

Cos’è Spliterator in Java SE 8? Differenze tra Iterator e Spliterator in Java SE 8?

Spliterator sta per Splitable Iterator. È stato introdotto recentemente da Oracle Corporation come parte di Java SE 8. Come Iterator e ListIterator, è anche una delle interfacce Iterator.

S.No. Spliterator Iterator
1. It is introduced in Java SE 8. It is available since Java 1.2.
2. Splitable Iterator Non-Splitable Iterator
3. It is used in Stream API. It is used for Collection API.
4. It uses Internal Iteration concept to iterate Streams. It uses External Iteration concept to iterate Collections.
5. We can use Spliterator to iterate Streams in Parallel and Sequential order. We can use Iterator to iterate Collections only in Sequential order.
6. We can get Spliterator by calling spliterator() method on Stream Object. We can get Iterator by calling iterator() method on Collection Object.
7. Important Method: tryAdvance() Important Methods: next(), hasNext()

Cos’è Optional in Java 8? Qual è l’uso di Optional? Vantaggi di Java 8 Optional?

Optional: Optional è una classe finale introdotta come parte di Java SE 8. È definito nel pacchetto java.util. Viene utilizzato per rappresentare valori opzionali che possono o non possono esistere. Può contenere un solo valore o nessun valore. Se contiene un valore, possiamo ottenerlo. Altrimenti, non otteniamo nulla. È una collezione limitata, nel senso che contiene al massimo un solo elemento. È un’alternativa al valore “null”. Il principale vantaggio di Optional è:

  • Viene utilizzato per evitare controlli null.
  • Viene utilizzato per evitare “NullPointerException”.

Cosa significa Inferenza di Tipo? L’Inferenza di Tipo è disponibile nelle versioni più vecchie come Java 7 e prima del 7 o è disponibile solo in Java SE 8?

L’Inferenza di Tipo significa determinare il tipo da parte del compilatore durante la compilazione. Non è una nuova funzionalità in Java SE 8. È disponibile anche in Java 7 e prima di Java 7. Prima di Java 7:- Esploriamo gli array Java. Definiamo un array di stringhe con valori come mostrato di seguito:

String str[] = { "Java 7", "Java 8", "Java 9" };

Qui abbiamo assegnato alcuni valori di stringa al lato destro, ma non ne abbiamo definito il tipo. Il compilatore Java inferisce automaticamente il tipo e crea un array di stringhe. Java 7: Oracle Corporation ha introdotto la nuova funzionalità “Operatore Diamante” in Java SE 7 per evitare la definizione non necessaria del tipo in Generics.

Map<String,List<Customer>> customerInfoByCity = new HashMap<>();

Qui non abbiamo definito informazioni sul tipo al lato destro, abbiamo semplicemente definito l’Operatore Diamante di Java SE 7. Java SE 8: Oracle Corporation ha notevolmente migliorato questo concetto di Inferenza di Tipo in Java SE 8. Utilizziamo questo concetto per definire espressioni Lambda, Funzioni, Riferimenti ai Metodi, ecc.

ToIntBiFunction<Integer,Integer> add = (a,b) -> a + b;

{
“error”: “Upstream error…”
}

Source:
https://www.digitalocean.com/community/tutorials/javase8-interview-questions-part1