En mi publicación anterior, he discutido algunas preguntas y respuestas importantes sobre entrevistas de Java SE 8. En esta publicación, vamos a discutir algunas más. Antes de leer esta publicación, por favor revisa mi publicación anterior en: “Preguntas de Entrevista de Java SE 8 (Parte 1)“.
Preguntas de Entrevista de Java SE 8
- ¿Qué es la Iteración Interna en Java SE 8?
- ¿Cuáles son las diferencias entre la Iteración Externa e Interna?
- ¿Cuáles son las principales desventajas de la Iteración Externa?
- ¿Cuáles son las principales ventajas de la Iteración Interna sobre la Externa?
- ¿Cuál es la principal desventaja de la Iteración Interna sobre la Externa?
- ¿Cuál es la principal ventaja de la Iteración Externa sobre la Interna?
- ¿Cuándo necesitamos usar la Iteración Interna? ¿Cuándo necesitamos usar la Iteración Externa?
- ¿Cuáles son las diferencias entre Operaciones Intermedias y Operaciones Terminales de la API de Stream de Java 8?
- ¿Es posible proporcionar implementaciones de métodos en Interfaces de Java? Si es posible, ¿cómo las proporcionamos?
- ¿Qué es un Método por Defecto? ¿Por qué necesitamos métodos por defecto en las Interfaces de Java 8?
- ¿Qué es un Método Estático? ¿Por qué necesitamos métodos estáticos en las Interfaces de Java 8?
- Diferencias entre Programación Funcional y Programación Orientada a Objetos.
- Explicar los problemas de la antigua API de fechas de Java. ¿Cuáles son las ventajas de la API de fechas y horas de Java 8 sobre la antigua API de fechas y la API de Joda Time?
- ¿Por qué necesitamos una nueva API de fechas y horas en Java SE 8? Explicar cómo la API de fechas y horas de Java SE 8 soluciona los problemas de la antigua API de fechas de Java.
- ¿Cuáles son las diferencias entre la ANTIGUA API de fechas de Java y la API de fechas y horas de Java 8?
- ¿Qué es la Herencia Múltiple? ¿Cómo Java 8 soporta la Herencia Múltiple?
- ¿Qué es el Problema del Diamante en las interfaces debido a los métodos por defecto? ¿Cómo resuelve este problema Java 8?
Preguntas y respuestas de entrevistas de Java SE 8
¿Qué es la Iteración Interna en Java SE 8?
Antes de Java 8, no teníamos el concepto de Iteración Interna. Java 8 ha introducido una nueva característica conocida como “Iteración Interna”. Antes de Java 8, el lenguaje Java solo tenía Iteración Externa para recorrer elementos de un Objeto Agregado como Colecciones, Arrays, etc. La Iteración Interna significa “Recorrer internamente los elementos de un Objeto Agregado uno por uno mediante la API de Java”. En lugar de que la aplicación Java realice la iteración externamente, solicitamos a la API de Java que realice este trabajo internamente.
Diferencias entre Iteración Externa e Iteración Interna:
S.No. | External Iteration | Internal Iteration |
---|---|---|
1. | Available before Java 8 too. | It is introduced in Java SE 8 |
2. | Iterating an Aggregated Object elements externally. | Iterating an Aggregated Object elements internally (background). |
3. | Iterate elements by using for-each loop and Iterators like Enumeration, Iterator, ListIterator. | Iterate elements by using Java API like “forEach” method. |
4. | Iterating elements in Sequential and In-Order only. | Not required to iterate elements in Sequential order. |
5. | It follows OOP approach that is Imperative Style. | It follows Functional Programming approach that is Declarative Style. |
6. | It does NOT separate responsibilities properly that is, it defines both “What is to be done” and “How it is to be done”. | It defines only “What is to be done”. No need to worry about “How it is to be done”. Java API takes care about “How to do”. |
7. | Less Readable Code. | More Readable code. |
¿Cuáles son las principales desventajas de la Iteración Externa?
La Iteración Externa tiene las siguientes desventajas:
- Necesitamos escribir código en un estilo imperativo.
- No hay una clara separación de responsabilidades. Acoplamiento estrecho entre el código “Qué se debe hacer” y “Cómo se debe hacer”.
- Código menos legible.
- Código más verboso y con más código de relleno.
- Debemos recorrer los elementos en orden secuencial únicamente.
- No admite adecuadamente la concurrencia y la paralelización.
Cuáles son las principales ventajas de la Iteración Interna sobre la Iteración Externa?
En comparación con la Iteración Externa, la Iteración Interna tiene las siguientes ventajas:
- Al seguir el estilo de Programación Funcional, podemos escribir Código Declarativo.
- Código más legible y conciso.
- Ayuda a evitar la escritura de código verboso y redundante.
- No es necesario iterar elementos en orden secuencial.
- Admite adecuadamente la Concurrencia y Paralelismo.
- Podemos escribir código Paralelo para mejorar el rendimiento de la aplicación.
- Clara separación de responsabilidades. Desacoplamiento entre el código de “Qué se debe hacer” y “Cómo se debe hacer”.
- Solo necesitamos escribir código sobre “Qué se debe hacer” y la API de Java se encarga del código de “Cómo se debe hacer”.
Cuál es el principal inconveniente de la Iteración Interna sobre la Iteración Externa?
En comparación con la Iteración Externa, la Iteración Interna tiene un inconveniente principal:
- En la Iteración Interna, como la API de Java se encarga de iterar los elementos internamente, NO tenemos control sobre la iteración.
¿Cuál es la principal ventaja de la Iteración Externa sobre la Iteración Interna?
Comparado con la Iteración Interna, la Iteración Externa tiene una ventaja principal:
- En la Iteración Externa, como la API de Java NO se encarga de iterar los elementos, tenemos mucho control sobre la iteración.
¿Cuándo necesitamos usar la Iteración Interna? ¿Cuándo necesitamos usar la Iteración Externa?
Necesitamos comprender las situaciones para usar ya sea la Iteración Interna o la Iteración Externa.
- Cuando necesitamos más control sobre la iteración, podemos usar la Iteración Externa.
- Cuando NO necesitamos más control sobre la iteración, podemos usar la Iteración Interna.
- Cuando necesitamos desarrollar aplicaciones Altamente Concurrentes y Paralelas y nosotros, debemos usar la Iteración Interna.
Diferencias entre las Operaciones Intermedias y las Operaciones Terminales de la API Stream de Java 8?
S.No. | Stream Intermediate Operations | Stream Terminal Operations |
---|---|---|
1. | Stream Intermediate operations are not evaluated until we chain it with Stream Terminal Operation. | Stream Terminal Operations are evaluated on it’s own. No need other operations help. |
2. | The output of Intermediate Operations is another Stream. | The output of Intermediate Operations is Not a Stream. Something else other than a Stream. |
3. | Intermediate Operations are evaluated Lazily. | Terminal Operations are evaluated Eagerly. |
4. | We can chain any number of Stream Intermediate Operations. | We can NOT chain Stream Terminal Operations. |
5. | We can use any number of Stream Intermediate Operations per Statement. | We can use only one Stream Terminal Operation per Statement. |
¿Es posible proporcionar implementaciones de métodos en Interfaces de Java? Si es posible, ¿cómo lo hacemos?
En Java 7 o anterior, no es posible proporcionar implementaciones de métodos en Interfaces. A partir de Java 8, es posible. En Java SE 8, podemos proporcionar implementaciones de métodos en Interfaces mediante el uso de los siguientes dos nuevos conceptos:
- Métodos Predeterminados
- Métodos Estáticos
¿Qué es un Método Predeterminado? ¿Por qué necesitamos métodos predeterminados en Interfaces de Java 8?
A Default Method is a method which is implemented in an interface with “default” keyword. It’s new featured introduced in Java SE 8. We need Default Methods because of the following reasons:
- Nos permite proporcionar la implementación de métodos en Interfaces.
- Para agregar nueva funcionalidad a la interfaz sin romper las clases que implementan esa interfaz.
- Para proporcionar una elegante característica de compatibilidad hacia atrás.
- Para facilitar la extensión de la funcionalidad existente.
- Para facilitar el mantenimiento de la funcionalidad existente.
¿Qué es un Método Estático? ¿Por qué necesitamos métodos estáticos en las Interfaces de Java 8?
A Static Method is an Utility method or Helper method, which is associated to a class (or interface). It is not associated to any object. We need Static Methods because of the following reasons:
- Podemos mantener métodos auxiliares o de utilidad específicos para una interfaz en la misma interfaz en lugar de en una clase de utilidad separada.
- No necesitamos clases de utilidad separadas como Collections, Arrays, etc., para mantener métodos de utilidad.
- Separación clara de responsabilidades. Es decir, no necesitamos una clase de utilidad para mantener todos los métodos de utilidad de la API de colección como Collections, etc.
- Fácil de extender la API.
- Fácil de mantener la API.
Diferencias entre la programación funcional y la programación orientada a objetos?
Functional Programming | OOP |
---|---|
Does not exist State | Exists State |
Uses Immutable data | Uses Mutable data |
It follows Declarative Programming Model | It follows Imperative Programming Model |
Stateless Programming Model | Stateful Programming Model |
Main Fcous on: “What you are doing” | Main focus on “How you are doing” |
Good for Parallel (Concurrency) Programming | Poor for Parallel (Concurrency) Programming |
Good for BigData processing and analysis | NOT Good for BigData processing and analysis |
Supports pure Encapsulation | It breaks Encapsulation concept |
Functions with No-Side Effects | Methods with Side Effects |
Functions are first-class citizens | Objects are first-class citizens |
Primary Manipulation Unit is “Function” | Primary Manipulation Unit is Objects(Instances of Classes) |
Flow Controls: Function calls, Function Calls with Recursion | Flow Controls: Loops, Conditional Statements |
It uses “Recursion” concept to iterate Collection Data. | It uses “Loop” concept to iterate Collection Data. For example:-For-each loop in Java |
Order of execution is less importance. | Order of execution is must and very important. |
Supports both “Abstraction over Data” and “Abstraction over Behavior”. | Supports only “Abstraction over Data”. |
We use FP when we have few Things with more operations. | We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java. |
NOTA: Para obtener más información sobre las comparaciones entre FP, IP y OOP, consulte mi publicación anterior en: “Comparar FP, OOP(IP)“
¿Cuáles son los problemas de la antigua API de fechas de Java? ¿Cuáles son las ventajas de la API de fechas y horas de Java 8 sobre la antigua API de fechas y la API de Joda Time?
La antigua API de fechas de Java se refiere a la API de fechas disponible antes de Java SE 8, es decir, Date, Calendar, SimpleDateFormat, etc. La antigua API de fechas de Java tiene los siguientes problemas o desventajas en comparación con la API de fechas y horas de Java 8 y la API de Joda Time.
- La mayoría de la API está obsoleta.
- Menor legibilidad.
- java.util.Date es mutable y no es seguro para subprocesos.
- java.text.SimpleDateFormat no es seguro para subprocesos.
- Menor rendimiento.
La API de fechas y horas de Java SE 8 tiene las siguientes ventajas en comparación con la antigua API de fechas de Java.
- Muy fácil de usar.
- Sintaxis legible para humanos que ofrece una mayor legibilidad.
- Toda la API es segura para subprocesos.
- Mejor rendimiento.
¿Por qué necesitamos una nueva API de fecha y hora en Java SE 8? Explique cómo la API de fecha y hora de Java SE 8 resuelve los problemas de la antigua API de fechas de Java.
Necesitamos la API de fecha y hora de Java 8 para desarrollar aplicaciones Java altamente eficientes, seguras en hilos y altamente escalables. La API de fecha y hora de Java 8 resuelve todos los problemas de la antigua API de fechas de Java siguiendo los principios de inmutabilidad y seguridad en hilos.
¿Cuáles son las diferencias entre la antigua API de fechas de Java y la API de fecha y hora de Java 8?
Diferencias entre la antigua API de fechas de Java y la API de fecha y hora de Java 8:
S.No. | Java’s OLD Java Date API | Java 8’s Date and Time API |
---|---|---|
1. | Available before Java 8 too. | It is introduced in Java SE 8 |
2. | Not Thread Safe. | Thread Safe. |
3. | Mutable API. | Immutable API. |
4. | Less Performance. | Better Performance. |
5. | Less Readability. | More Readability. |
6. | It’s not recommended to use as its deprecated. | It’s always recommended to use. |
7. | Not Extendable. | Easy to Extend. |
8. | It defines months values from 0 to 11, that is January = 0. | It defines months values from 1 to 12, that is January = 1. |
9. | It’s an old API. | It’s a new API. |
¿Qué es la Herencia Múltiple? ¿Cómo Java 8 soporta la Herencia Múltiple?
La Herencia Múltiple significa que una clase puede heredar o extender características y características de más de una clase padre. En Java 7 o anteriores, la Herencia Múltiple no es posible porque Java sigue la regla “Una clase debe extender una y solo una clase o clase abstracta”. Sin embargo, es posible proporcionar Herencia de Implementación Múltiple utilizando Interfaces porque Java sigue la regla “Una clase puede extender cualquier número de Interfaces”. Sin embargo, Java 8 soporta “Implementar Métodos en Interfaces” introduciendo nuevas características: Métodos por defecto en Interfaces. Debido a esta característica, Java 8 soporta la Herencia Múltiple con algunas limitaciones.
¿Qué es el Problema del Diamante en interfaces debido a los métodos por defecto? ¿Cómo Java 8 resuelve este problema?
Java 8 Los métodos predeterminados pueden introducir un problema de diamante cuando una clase implementa múltiples interfaces. Ocurre cuando una clase extiende más de una interfaz con las mismas implementaciones de método (método predeterminado). Código de muestra de Java SE 8 para mostrar el problema del diamante con los métodos predeterminados de la interfaz.
interface A {
default void display() {
System.out.println("A");
}
}
interface B extends A {
default void display() {
System.out.println("B");
}
}
interface C extends A {
default void display() {
System.out.println("C");
}
}
class D implements B, C {
}
En el fragmento de código anterior, la clase D da un error en tiempo de compilación que dice: “Métodos predeterminados duplicados con el nombre display con los parámetros () y () se heredan de los tipos C y B”. Esto se debe a que el compilador de Java se confunde sobre qué display() usar en la clase D. La clase D hereda el método display() de ambas interfaces B y C. Para resolver este problema, Java 8 ha proporcionado la siguiente solución.
class D implements B, C {
@Override
public void display() {
B.super.display();
}
}
Esto B.super.display(); resolverá este problema del diamante. Si desea utilizar el método predeterminado de la interfaz C, entonces utilice C.super.display();
. Eso es todo sobre las preguntas de entrevista de Java 8. Discutiremos algunas preguntas más 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-part2