Se você já se preparou para uma entrevista para o cargo de programador Java ou fez algum exame (não necessariamente de programação) para obter um certificado, provavelmente já percebeu que as perguntas que eles fazem são muito específicas. Muitos deles fazem você pensar na arquitetura da linguagem, alguns são projetados para um conhecimento profundo. Existem também aqueles que mais parecem quebra-cabeças ou nuances preocupantes que são muito difíceis de sentir sem prática. Neste artigo, o desenvolvedor Saraans Singh fornece várias perguntas sobre Java. Com respostas, é claro. 1. O que acontece se você colocar uma instrução return ou System.exit() em um bloco try/catch? Esta é uma questão de atualização muito popular em Java. O truque é que muitos programadores acreditam que o bloco
finally
será executado de qualquer maneira. Esta questão desafia este conceito colocando uma instrução return
em um bloco try/catch
ou chamando a partir de um bloco try/catch
de instruções System.exit ()
. A resposta para esta pergunta complicada: o bloco finally
será executado quando uma instrução for colocada return
em um bloco try/catch
e não será executado quando chamado a partir de um bloco try/catch
de instruções System.exit ()
. 2. Java suporta herança múltipla? Esta é uma pergunta muito complicada. Os entrevistadores costumam dizer: se C++ pode suportar herança múltipla direta, por que Java não pode? A resposta é um pouco mais complicada do que parece, já que Java suporta herança de múltiplos tipos, porque uma interface nele pode estender outras interfaces. Mas a linguagem Java não suporta herança múltipla de implementações. 3. No caso em que um método lança uma exceção NullPointerException
na classe pai, ele pode ser substituído pelo método que lança RuntimeException
? Outra questão complicada relacionada aos conceitos de sobrecarga e substituição. Resposta: Você pode lançar com segurança uma exceção de classe pai em um método substituído NullPointerException – RuntimeException
, mas não pode fazer o mesmo com uma exceção verificada de tipo Exception
. 4. Como garantir que os threads possam acessar recursos sem conflitos? N
N
Se você não é muito bom em escrever código multithread, esta questão será realmente complicada para você. Pode ser um desafio mesmo para um programador experiente que não tenha lidado com impasses e condições de corrida. O truque aqui está na ordem: o impasse pode ser evitado liberando recursos na ordem inversa em que foram adquiridos. 5. Qual é a diferença entre classes StringBuffer
e StringBuilder
na linguagem Java? Uma pergunta clássica sobre a linguagem Java, considerada complicada por alguns desenvolvedores e muito simples por outros. A classe StringBuilder
foi introduzida no JDK 1.5 e a única diferença entre eles é que os métodos da classe StringBuffer
, por exemplo, length()
ou capacity()
, append()
são sincronizados, enquanto os métodos correspondentes da classe StringBuilder
não são. Devido a essa diferença fundamental, a concatenação de strings StringBuilder
é mais rápida com StringBuffer
. Na verdade, StringBuffer
não é recomendado o uso, pois em 99% dos casos de uso a concatenação de strings é feita na mesma thread. 6. O que a expressão 1.0/0.0 retorna? Isso lançará uma exceção ou causará um erro de compilação? Outra pergunta complicada sobre a classe Double
. Embora os desenvolvedores Java estejam cientes do tipo de dados simples double e da classe Double
, ao executar operações de ponto flutuante, eles não prestam atenção suficiente a Double.INFINITY
, e às regras que regem os cálculos aritméticos associados a eles. A resposta para esta pergunta é simples: nenhuma exceção será lançada, o valor será retornado . 7. O que acontece se você tentar inserir um objeto-chave em um objeto-chave que já existe nele? Esta pergunta complicada faz parte de outra pergunta frequente: como eles funcionam em Java? é um tópico popular para perguntas confusas e complicadas sobre a linguagem Java. A resposta é que se você tentar reinserir uma chave , ela substituirá a antiga porque a classe não permite chaves duplicadas. E a mesma chave significa o mesmo código hash, então terminará no mesmo lugar no segmento hash. Baseado em materiais do QuoraNaN
-0.0
ArithmeticException
Double.INFINITY
HashMap
HashMap
HashMap
HashMap
HashMap
GO TO FULL VERSION