No meu post anterior, discuti algumas perguntas e respostas importantes de entrevista sobre Java SE 8. Neste post, vamos discutir mais algumas perguntas e respostas de entrevista sobre Java SE 8. Antes de ler este post, por favor, dê uma olhada no meu post anterior em: “Perguntas de Entrevista sobre Java SE 8 (Parte 1)“.
Perguntas de Entrevista sobre Java SE 8
- O que é Iteração Interna em Java SE 8?
- Diferenças entre Iteração Externa e Iteração Interna?
- Quais são as principais desvantagens da Iteração Externa?
- Quais são as principais vantagens da Iteração Interna sobre a Iteração Externa?
- Qual é a principal desvantagem da Iteração Interna sobre a Iteração Externa?
- Qual é a principal vantagem da Iteração Externa sobre a Iteração Interna?
- Quando precisamos usar Iteração Interna? Quando precisamos usar Iteração Externa?
- Diferenças entre Operações Intermediárias e Operações Terminais da API de Stream do Java 8?
- É possível fornecer implementações de método em Interfaces Java? Se sim, como as fornecemos?
- O que é um Método Padrão? Por que precisamos de métodos padrão nas Interfaces do Java 8?
- O que é um Método Estático? Por que precisamos de métodos estáticos nas Interfaces do Java 8?
- Diferenças entre Programação Funcional e Programação Orientada a Objetos?
- Explique os problemas da antiga API de Data do Java. Quais são as vantagens da API de Data e Hora do Java 8 sobre a antiga API de Data e Hora e a API do Joda Time?
- Por que precisamos de uma nova API de Data e Hora no Java SE 8? Explique como a API de Data e Hora do Java SE 8 resolve os problemas da antiga API de Data do Java?
- Quais são as diferenças entre a antiga API de Data do Java e a API de Data e Hora do Java 8?
- O que é Herança Múltipla? Como o Java 8 suporta Herança Múltipla?
- O que é o Problema do Diamante em interfaces devido a métodos padrão? Como o Java 8 resolve esse problema?
Perguntas e Respostas sobre o Java SE 8
O que é Iteração Interna no Java SE 8?
Antes do Java 8, não tínhamos o conceito de Iteração Interna. O Java 8 introduziu uma nova funcionalidade conhecida como “Iteração Interna”. Antes do Java 8, a linguagem Java possuía apenas Iteração Externa para percorrer elementos de um Objeto Agregado como Coleções, Arrays, etc. Iteração Interna significa “Iterar os elementos de um Objeto Agregado um por um internamente por meio da API Java”. Em vez de a aplicação Java realizar a iteração externamente, solicitamos à API Java que faça esse trabalho internamente.
Diferenças entre Iteração Externa e Iteração 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. |
Quais são as principais desvantagens da Iteração Externa?
A Iteração Externa possui as seguintes desvantagens:
- Precisamos escrever código no Estilo Imperativo.
- Não há uma clara separação de Responsabilidades. Acoplamento forte entre o código “O que deve ser feito” e “Como deve ser feito”.
- Código menos legível.
- Código mais verbose e boilerplate.
- Temos que iterar os elementos apenas em ordem sequencial.
- Não oferece suporte adequado a Concorrência e Paralelismo.
Quais são as principais vantagens da Iteração Interna sobre a Iteração Externa?
Comparada à Iteração Externa, a Iteração Interna possui as seguintes vantagens:
- Ao seguir o estilo de Programação Funcional, podemos escrever Código Declarativo.
- Código mais legível e conciso.
- Avoids writing Verbose and Boilerplate code
- Não é necessário iterar os elementos em ordem sequencial.
- Ele suporta Concorrência e Paralelismo adequadamente.
- Podemos escrever código Paralelo para melhorar o desempenho da aplicação.
- Clara separação de Responsabilidades. Desacoplamento entre o código “O que deve ser feito” e “Como deve ser feito”.
- Precisamos escrever código apenas sobre “O que deve ser feito” e a API Java cuida do código “Como deve ser feito”.
Qual é a principal desvantagem da Iteração Interna sobre a Iteração Externa?
Comparada à Iteração Externa, a Iteração Interna tem uma grande desvantagem:
- Em Iteração Interna, como a API Java cuida da iteração dos elementos internamente, não temos controle sobre a iteração.
Qual é a principal vantagem da Iteração Externa sobre a Iteração Interna?
Comparado à Iteração Interna, a Iteração Externa tem uma grande vantagem:
- Na Iteração Externa, como a API Java NÃO cuida da iteração dos elementos, temos muito controle sobre a iteração.
Quando precisamos usar a Iteração Interna? Quando precisamos usar a Iteração Externa?
Precisamos entender as situações para usar Iteração Interna ou Iteração Externa.
- Quando precisamos de mais controle sobre a iteração, podemos usar a Iteração Externa.
- Quando NÃO precisamos de mais controle sobre a iteração, podemos usar a Iteração Interna.
- Quando precisamos desenvolver aplicações altamente concorrentes e paralelas e nós, devemos usar a Iteração Interna.
Diferenças entre Operações Intermediárias e Operações Terminais da API de Stream do 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. |
É possível fornecer implementações de métodos em Interfaces Java? Se sim, como as fornecemos?
No Java 7 ou anterior, não é possível fornecer implementações de métodos em Interfaces. A partir do Java 8, isso é possível. No Java SE 8, podemos fornecer implementações de métodos em Interfaces usando os seguintes dois novos conceitos:
- Métodos Padrão
- Métodos Estáticos
O que é um Método Padrão? Por que precisamos de métodos padrão nas Interfaces do 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:
- Isso nos permite fornecer a implementação de métodos em Interfaces.
- Adicionar nova funcionalidade à Interface sem quebrar as Classes que a implementam.
- Proporcionar uma elegante funcionalidade de compatibilidade reversa.
- Facilitar a extensão da funcionalidade existente.
- Facilitar a manutenção da funcionalidade existente.
O que é um Método Estático? Por que precisamos de métodos estáticos nas Interfaces do 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 manter métodos auxiliares ou de utilidade específicos de uma interface na própria interface, em vez de em uma classe de utilitários separada.
- Não precisamos de classes de utilitários separadas como Collections, Arrays etc., para manter métodos de utilitário.
- Separação clara de responsabilidades. Ou seja, não precisamos de uma única classe de utilitários para manter todos os métodos de utilitário da API de coleções, como Collections, etc.
- Fácil de estender a API.
- Fácil de manter a API.
Diferenças entre Programação Funcional e Programação 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. |
Observação: Para mais informações sobre comparações de FP, IP e OOP, consulte minha postagem anterior em: “Comparar FP, OOP (IP)“
Explicar problemas da antiga API de Data Java? Quais são as vantagens da API de Data e Hora do Java 8 sobre a antiga API de Data e Hora e a API Joda Time?
A antiga API de Data Java significa a API de Data disponível antes do Java SE 8, ou seja, Date, Calendar, SimpleDateFormat, etc. A antiga API de Data Java tem os seguintes problemas ou desvantagens em comparação com a API de Data e Hora do Java 8 e a API Joda Time.
- A maioria das APIs está obsoleta.
- Menos legibilidade.
- java.util.Date é mutável e não é Thread-Safe.
- java.text.SimpleDateFormat não é Thread-Safe.
- Menor desempenho.
A API de Data e Hora do Java SE 8 tem as seguintes vantagens em comparação com a antiga API de Data Java.
- Muito simples de usar.
- Sintaxe legível por humanos que oferece mais legibilidade.
- Todas as APIs são Thread-Safe.
- Melhor desempenho.
Por que precisamos de uma nova API de Data e Hora no Java SE 8? Explique como a API de Data e Hora do Java SE 8 resolve os problemas da antiga API de Data do Java.
Precisamos da API de Data e Hora do Java 8 para desenvolver Aplicações Java Altamente Performáticas, Seguras em Ambientes de Multithreading e Altamente Escaláveis. A API de Data e Hora do Java 8 resolve todos os problemas da antiga API de Data do Java ao seguir os princípios de Imutabilidade e Segurança em Ambientes de Multithreading.
Quais são as diferenças entre a antiga API de Data do Java e a API de Data e Hora do Java 8?
Diferenças entre a antiga API de Data do Java e a API de Data e Hora do 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. |
O que é Herança Múltipla? Como o Java 8 suporta Herança Múltipla?
A Herança Múltipla significa que uma classe pode herdar ou estender características e recursos de mais de uma classe pai. No Java 7 ou anterior, a Herança Múltipla não é possível porque o Java segue a regra de “Uma classe deve estender uma e apenas uma classe ou classe abstrata”. No entanto, é possível fornecer Herança de Implementação Múltipla usando Interface, pois o Java segue a regra de “Uma classe pode estender qualquer número de Interfaces”. No entanto, o Java 8 suporta “Implementação de Métodos em Interfaces” ao introduzir novos recursos: métodos padrão na Interface. Devido a esse recurso, o Java 8 suporta Herança Múltipla com algumas limitações.
O que é o Problema do Diamante em interfaces devido a métodos padrão? Como o Java 8 resolve esse problema?
Os métodos padrão do Java 8 podem causar um problema de diamante quando uma classe implementa várias interfaces. Isso ocorre quando uma classe estende mais de uma interface com as mesmas implementações de método (método padrão).
Código de exemplo em Java SE 8 para mostrar o problema do diamante com os métodos padrão da interface.
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 {
}
No trecho de código acima, a classe D gera um erro de compilação “Métodos padrão duplicados chamados display com os parâmetros () e () são herdados dos tipos C e B”. Isso ocorre porque o compilador Java fica confuso sobre qual display() usar na classe D. A classe D herda o método display() de ambas as interfaces B e C. Para resolver esse problema, o Java 8 oferece a seguinte solução.
class D implements B, C {
@Override
public void display() {
B.super.display();
}
}
Essa B.super.display(); resolverá o problema do diamante. Se você quiser usar o método padrão da interface C, então use C.super.display();
. Isso é tudo sobre as perguntas de entrevista do Java 8. Discutiremos mais algumas perguntas de entrevista do Java SE 8 em minhas próximas postagens. Por favor, deixe um comentário se você gostou do meu post ou se tiver alguma dúvida/sugestão.
Source:
https://www.digitalocean.com/community/tutorials/javase8-interview-questions-part2