Perguntas e Respostas da Entrevista de Java SE 8 (Parte 2)

No meu post anterior, discuti algumas perguntas e respostas importantes de entrevista sobre o Java SE 8. Neste post, vamos discutir algumas outras perguntas e respostas sobre o Java SE 8. Antes de ler este post, por favor, consulte meu post anterior em: “Perguntas de Entrevista do Java SE 8 (Parte 1)“.

Perguntas de Entrevista do Java SE 8

  1. O que é Iteração Interna no Java SE 8?
  2. Diferenças entre Iteração Externa e Iteração Interna?
  3. Quais são as principais desvantagens da Iteração Externa?
  4. Quais são as principais vantagens da Iteração Interna sobre a Iteração Externa?
  5. Qual é a principal desvantagem da Iteração Interna sobre a Iteração Externa?
  6. Qual é a principal vantagem da Iteração Externa sobre a Iteração Interna?
  7. Quando precisamos usar Iteração Interna? Quando precisamos usar Iteração Externa?
  8. Diferenças entre Operações Intermediárias e Operações Terminais da API de Stream do Java 8?
  9. É possível fornecer implementações de método em Interfaces Java? Se possível, como fornecemos?
  10. O que é um Método Padrão? Por que precisamos de métodos padrão em Interfaces Java 8?
  11. O que é um Método Estático? Por que precisamos de métodos estáticos em Interfaces Java 8?
  12. **Diferenças entre Programação Funcional e Programação Orientada a Objetos?**
  13. **Explique os problemas da antiga API de Data em Java?** **Quais são as vantagens da API de Data e Hora do Java 8 sobre a antiga API de Data e a API Joda Time?**
  14. **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 em Java?**
  15. **Quais são as diferenças entre a antiga API de Data em Java e a API de Data e Hora do Java 8?**
  16. **O que é Herança Múltipla? Como o Java 8 suporta Herança Múltipla?**
  17. **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 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. A Iteração Interna significa “Iterar os elementos de um Objeto Agregado um por um internamente pela API Java”. Em vez de a aplicação Java fazer 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 apresenta 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 extenso e repetitivo.
  • Precisamos iterar os elementos apenas em ordem sequencial.
  • Não oferece suporte adequado para Concorrência e Paralelismo.

Quais são as principais vantagens da Iteração Interna sobre a Iteração Externa?

Comparando com a Iteração Externa, a Iteração Interna possui as seguintes vantagens:

  • Seguindo 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 elementos em ordem sequencial.
  • Oferece suporte adequado à Concorrência e Paralelismo.
  • Podemos escrever código Paralelo para melhorar o desempenho da aplicação.
  • Clara separação de responsabilidades. Desvinculação 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 em relação à Iteração Externa?

Comparando com a Iteração Externa, a Iteração Interna tem uma grande desvantagem:

  • Na Iteração Interna, como a API do 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 do Java NÃO cuida da iteração dos elementos, temos muito mais 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 tanto a Iteração Interna quanto a 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 aplicativos Altamente Concorrentes e Paralelos e nós, devemos usar a Iteração Interna.

Diferenças entre Operações Intermediárias e Operações Terminais da API 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, é 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 em Interfaces 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:

  • Permite-nos fornecer a implementação de métodos em Interfaces.
  • Para adicionar nova funcionalidade à Interface sem quebrar as Classes que a implementam.
  • Para fornecer uma característica elegante de Compatibilidade com Versões Anteriores.
  • Para facilitar a extensão da funcionalidade existente.
  • Para 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 para uma interface na mesma interface, em vez de em uma classe de Utilidade separada.
  • Não precisamos de classes de Utilidade separadas como Collections, Arrays, etc., para manter métodos de Utilidade.
  • Separação clara de Responsabilidades. Ou seja, não precisamos de uma classe de Utilidade para manter todos os métodos de Utilidade 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.

Aviso: Para obter mais informações sobre comparações entre FP, IP e OOP, consulte a minha publicação anterior em: “Comparar FP, OOP(IP)
Explique os problemas da antiga API de Data Java? Quais são as vantagens da API de Data e Hora do Java 8 em relação à antiga API de Data e à API de Tempo Joda?

  • A antiga API de Data Java, referente à Date API disponível antes do Java SE 8, que inclui Date, Calendar, SimpleDateFormat, etc., possui os seguintes problemas ou limitações em comparação com a API de Data e Hora do Java 8 e a API de Tempo Joda.
  • Maioria das APIs está obsoleta.
  • Menos legibilidade.
  • java.util.Date é mutável e não é seguro para threads.
  • java.text.SimpleDateFormat não é seguro para threads.

Menor desempenho.
A API de Data e Hora do Java SE 8 apresenta as seguintes vantagens em relação à antiga API de Data Java.

  • Muito simples de usar.
  • Sintaxe legível que proporciona maior clareza.
  • Todas as APIs são seguras para threads.
  • 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 para Threads e Altamente Escaláveis. A API de Data e Hora do Java 8 resolve todos os problemas da antiga API de Data do Java seguindo os princípios de Imutabilidade e Segurança para Threads.

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 a 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 “Uma classe deve estender apenas uma classe ou classe abstrata”. No entanto, é possível fornecer Herança de Implementação Múltipla usando Interface porque o Java segue a regra “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 aos métodos padrão? Como o Java 8 resolve esse problema?

Os métodos padrão do Java 8 podem introduzir 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 do Java SE 8 para mostrar o problema do diamante com métodos padrão de 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 dá 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 forneceu a seguinte solução.

class D implements B, C {

	@Override
	public void display() {
		B.super.display();
	}
	
}

Este B.super.display(); resolverá esse problema do diamante. Se você quiser usar o método padrão da interface C, então use C.super.display();. Isso é tudo sobre 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 gostou do meu post ou se tiver algum problema/sugestão.

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