Preguntas y respuestas de entrevista de Java SE 8 (Parte 1)

En esta publicación, vamos a discutir algunas importantes Preguntas de Entrevista de Java SE 8 con sus respuestas. Escribiré otra publicación para abordar las restantes Preguntas de Entrevista de Java SE 8.

Preguntas de Entrevista de Java 8

  1. ¿Por qué necesitamos volver a Java?
  2. ¿Nuevas características de Java SE 8?
  3. Ventajas de las Nuevas Características de Java SE 8?
  4. ¿Qué es una Expresión Lambda?
  5. ¿Cuáles son las tres partes de una Expresión Lambda? ¿Cuál es el tipo de Expresión Lambda?
  6. ¿Qué es una Interfaz Funcional? ¿Qué es una Interfaz SAM?
  7. ¿Es posible definir nuestra propia Interfaz Funcional? ¿Qué es @FunctionalInterface? ¿Cuáles son las reglas para definir una Interfaz Funcional?
  8. ¿Es obligatoria la anotación @FunctionalInterface para definir una Interfaz Funcional? ¿Cuál es el uso de la anotación @FunctionalInterface? ¿Por qué necesitamos Interfaces Funcionales en Java?
  9. ¿Cuándo optamos por Java 8 Stream API? ¿Por qué necesitamos usar Java 8 Stream API en nuestros proyectos?
  10. Explicar las diferencias entre la API de Colecciones y la API de Stream en Java.
  11. ¿Qué es Spliterator en Java SE 8? ¿Cuáles son las diferencias entre Iterator y Spliterator en Java SE 8?
  12. ¿Qué es Optional en Java 8? ¿Cuál es el uso de Optional? ¿Cuáles son las ventajas de Java 8 Optional?
  13. ¿Qué es Type Inference? ¿Está disponible la inferencia de tipos en versiones anteriores como Java 7 y anteriores a Java 7 o solo está disponible en Java SE 8?

Preguntas y respuestas de Java 8 para entrevistas

En esta sección, abordaremos cada pregunta de la sección anterior y la responderemos con una descripción detallada. Si necesita más información y ejemplos, consulte las publicaciones anteriores de Java SE 8 disponibles en JournalDEV.

¿Por qué necesitamos un cambio en Java nuevamente?

Oracle Corporation ha introducido muchos conceptos nuevos en Java SE 8 para proporcionar los siguientes beneficios:

  • Para utilizar eficientemente las CPUs multinúcleo actuales
    Recientemente, podemos observar cambios drásticos en el hardware. Hoy en día, todos los sistemas utilizan CPUs multinúcleo (de 2, 4, 8, 16 núcleos, etc.) para implementar y ejecutar sus aplicaciones. Necesitamos nuevos constructos de programación en Java para aprovechar eficientemente estos procesadores multinúcleo y desarrollar aplicaciones altamente concurrentes y altamente escalables. – Para utilizar las características de la programación funcional
    Oracle Corporation ha introducido muchos conceptos de programación funcional como parte de Java SE 8 para aprovechar las ventajas de la programación funcional.

¿Nuevas características de Java SE 8?

  • Expresiones Lambda
  • Interfaces Funcionales
  • API de Streams
  • API de Fecha y Hora
  • Métodos predeterminados e Métodos estáticos en interfaces
  • Spliterator
  • Referencias de Métodos y Constructores
  • Mejoras en la API de Colecciones
  • Mejoras en Utilidades de Concurrencia
  • Mejoras en el marco Fork/Join
  • Iteración interna
  • Operaciones de matriz y colección paralelas
  • Optional
  • Anotaciones de Tipo y Anotaciones Repetibles
  • Reflexión de Parámetros de Método
  • Codificación y Decodificación Base64
  • Mejoras en IO y NIO2
  • Motor de JavaScript Nashorn
  • Mejoras en javac
  • Cambios en la JVM
  • Perfiles Compactos de Java 8: compact1, compact2, compact3
  • JDBC 4.2
  • JAXP 1.6
  • Java DB 10.10
  • Redes
  • Cambios en la Seguridad

Ventajas de las Nuevas Características de Java SE 8

Podemos obtener los siguientes beneficios de las Nuevas Características de Java SE 8:

  • Código más Conciso y Legible
  • Código más Reutilizable
  • Código más Probable y Mantenible
  • Código Altamente Concurrente y Escalable
  • Escritura de Código Paralelo
  • Operaciones Similares a la Base de Datos
  • Aplicaciones con Mejor Rendimiento
  • Código más Productivo

¿Qué es una Expresión Lambda?

La expresión Lambda es una función anónima que acepta un conjunto de parámetros de entrada y devuelve resultados. La expresión Lambda es un bloque de código sin ningún nombre, con o sin parámetros y con o sin resultados. Este bloque de código se ejecuta según la demanda.

¿Cuáles son las tres partes de una expresión Lambda? ¿Cuál es el tipo de una expresión Lambda?

A Lambda Expression contains 3 parts:

  • Lista de Parámetros
    Una expresión Lambda puede contener cero, uno o más parámetros. Es opcional.- Operador Flecha Lambda
    “>” es conocido como operador flecha Lambda. Separa la lista de parámetros y el cuerpo.- Cuerpo de la Expresión Lambda

El tipo de “Journal Dev” es java.lang.String. El tipo de “true” es Booleano. De la misma manera, ¿cuál es el tipo de una expresión Lambda? El tipo de una expresión Lambda es una Interfaz Funcional. Ejemplo: ¿Cuál es el tipo de la siguiente expresión Lambda?

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

Esta expresión Lambda no tiene parámetros y no devuelve ningún resultado. Entonces, su tipo es “java.lang.Runnable” Interfaz Funcional.

¿Qué es una Interfaz Funcional? ¿Qué es la Interfaz 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.

¿Es posible definir nuestra propia Interfaz Funcional? ¿Qué es @FunctionalInterface? ¿Cuáles son las reglas para definir una Interfaz Funcional?

Sí, es posible definir nuestras propias Interfases Funcionales. Utilizamos la anotación @FunctionalInterface de Java SE 8 para marcar una interfaz como Interfaz Funcional. Necesitamos seguir estas reglas para definir una Interfaz Funcional:

  • Definir una interfaz con un único método abstracto.
  • No podemos definir más de un método abstracto.
  • Usar la anotación @FunctionalInterface en la definición de la interfaz.
  • Podemos definir cualquier número de otros métodos como métodos por defecto, métodos estáticos.
  • Si anulamos el método de la clase `java.lang.Object` como un método abstracto, esto no cuenta como un método abstracto.

¿Es obligatoria la anotación @FunctionalInterface para definir una Interfaz Funcional? ¿Cuál es el uso de la anotación @FunctionalInterface? ¿Por qué necesitamos Interfaces Funcionales en Java?

No es obligatorio definir una Interfaz Funcional con la anotación @FunctionalInterface. Si no queremos, podemos omitir esta anotación. Sin embargo, si la usamos en la definición de la Interfaz Funcional, el compilador de Java obliga a tener un solo método abstracto dentro de esa interfaz. ¿Por qué necesitamos Interfaces Funcionales? El tipo de una Expresión Lambda de Java SE 8 es una Interfaz Funcional. Dondequiera que usemos Expresiones Lambda, significa que estamos utilizando Interfaces Funcionales.

¿Cuándo vamos a utilizar Java 8 Stream API? ¿Por qué necesitamos usar Java 8 Stream API en nuestros proyectos?

Cuando nuestro proyecto en Java desea realizar las siguientes operaciones, es mejor utilizar Java 8 Stream API para obtener muchos beneficios:

  • Cuando queremos realizar operaciones similares a las de una base de datos. Por ejemplo, cuando queremos realizar operaciones de agrupación, operaciones de ordenación, etc.
  • Cuando queremos realizar operaciones de forma perezosa.
  • Cuando queremos escribir programación en estilo funcional.
  • Cuando queremos realizar operaciones en paralelo.
  • Cuando queremos utilizar la Iteración Interna
  • Cuando queremos realizar operaciones de canalización.
  • Cuando queremos lograr un mejor rendimiento.

¿Explicar las diferencias entre la API de Colecciones y la API de Streams?

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.

¿Qué es Spliterator en Java SE 8? ¿Cuáles son las diferencias entre Iterator y Spliterator en Java SE 8?

Spliterator significa Iterador Divisible. Fue introducido recientemente por Oracle Corporation como parte de Java SE 8. Al igual que Iterator y ListIterator, también es una interfaz de 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()

¿Qué es Optional en Java 8? ¿Cuál es el uso de Optional? ¿Cuáles son las ventajas de Java 8 Optional?

Optional: Optional es una Clase final introducida como parte de Java SE 8. Está definida en el paquete java.util. Se utiliza para representar valores opcionales que pueden existir o no. Puede contener uno o ningún valor. Si contiene un valor, podemos obtenerlo. De lo contrario, no obtenemos nada. Es una colección acotada, es decir, contiene como máximo un elemento. Es una alternativa al valor “null”. La principal ventaja de Optional es:

  • Se utiliza para evitar comprobaciones de nulos.
  • Se utiliza para evitar “NullPointerException”.

¿Qué es la Inferencia de Tipos? ¿Está disponible la Inferencia de Tipos en versiones anteriores como Java 7 y Antes de 7 o solo está disponible en Java SE 8?

La Inferencia de Tipos significa determinar el tipo por el compilador en tiempo de compilación. No es una característica nueva en Java SE 8. Está disponible en Java 7 y antes de Java 7 también. Antes de Java 7:- Exploremos los arrays de Java. Defina un array de String con valores como se muestra a continuación:

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

Aquí hemos asignado algunos valores de tipo String en el lado derecho, pero no hemos definido su tipo. El compilador de Java infiere automáticamente su tipo y crea un array de String. Java 7: Oracle Corporation introdujo la “Operador Diamante” como una nueva característica en Java SE 7 para evitar la definición innecesaria de tipos en Genéricos.

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

Aquí no hemos definido información de tipo en el lado derecho, simplemente hemos definido el Operador Diamante de Java SE 7. Java SE 8: Oracle Corporation ha mejorado mucho este concepto de Inferencia de Tipos en Java SE 8. Utilizamos este concepto para definir Expresiones Lambda, Funciones, Referencias de Métodos, etc.

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

Aquí el compilador de Java observa la definición de tipo disponible en el lado izquierdo y determina el tipo de los parámetros de la Expresión Lambda a y b como enteros. Eso es todo sobre las preguntas de entrevista de Java 8. He discutido algunas preguntas de entrevista de Java SE 8 en esta publicación y discutiré algunas más preguntas de entrevista de Java SE 8 en mis próximas publicaciones. Por favor, déjame un comentario si te gusta mi publicación o tienes algún problema/sugerencia.

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