Se você já se preparou para uma entrevista para um cargo de programador Java ou passou em algum exame de certificação (não necessariamente sobre programação), provavelmente já percebeu que as perguntas feitas ali são muito específicas. Muitos deles forçam você a pensar sobre o design da linguagem. Alguns são projetados para sondar as profundezas do seu conhecimento. Há questões que mais parecem quebra-cabeças do que qualquer outra coisa, enquanto outras dizem respeito a nuances da linguagem que são muito difíceis de perceber sem prática. Neste artigo, o desenvolvedor Sarans Sing apresenta algumas dessas questões sobre Java. Com respostas, claro.
1. O que acontece se eu colocar uma instrução return ou System.exit() em um bloco try/catch? Esta é uma questão Java muito popular e sutil. O truque é que muitos programadores acreditam que o

finally
bloco sempre é executado. Ao colocar uma return
afirmação em um try/catch
bloco ou chamar System.exit()
de dentro de um try/catch
bloco, a pergunta põe em dúvida essa crença. A resposta para essa pergunta complicada é: o finally
bloco será executado quando uma return
instrução for colocada em um try/catch
bloco, mas não será executada quando System.exit()
for chamada de dentro de um try/catch
bloco. 2. Java suporta herança múltipla? Esta é uma pergunta muito complicada. Os entrevistadores costumam perguntar: "Se C ++ oferece suporte à herança múltipla direta, por que o Java não pode?" a respostaé um pouco mais complicado do que parece, já que Java suporta herança de vários tipos. Afinal, uma interface Java pode estender outras interfaces. Dito isso, Java não suporta herança múltipla de implementações. 3. Se um método em uma classe pai lança NullPointerException
s, ele pode ser substituído por um método que lança RuntimeException
s? Esta é outra questão complicada relacionada à sobrecarga e substituição. Resposta: Um método substituído pode lançar com segurança NullPointerException
a classe pai de RuntimeException, mas você não pode fazer o mesmo com um tipo de exceção verificada como Exception
. 4. Como você garante que N
os threads possam acessar N
recursos sem um impasse? Se escrever código multithread não é o seu forte, você pode realmente tropeçar nessa questão. Pode ser difícil até mesmo para um programador experiente que não encontrou impasses e condições de corrida. Todo o truque aqui está na ordem: você pode evitar impasses liberando recursos na ordem inversa em que foram adquiridos. 5. Qual é a diferença entre as classes StringBuffer
e StringBuilder
em Java? Esta é uma questão clássica da linguagem Java que alguns desenvolvedores acham complicada e outros – muito simples. A StringBuilder
classe apareceu no JDK 1.5. A única diferença entre essas classes é que StringBuffer
os métodos de , como length()
, capacity()
e append()
, são sincronizados, enquanto os métodos correspondentes emStringBuilder
não são. Essa diferença fundamental significa que a concatenação de strings é mais rápida com StringBuilder
do que com StringBuffer
. Na verdade, o uso StringBuffer
não é recomendado, pois a concatenação de strings é realizada no mesmo thread 99% das vezes. 6. Qual é o resultado da avaliação da expressão 1.0/0.0? Isso produzirá uma exceção ou um erro de compilação? Esta é outra questão complicada sobre a classe. Os desenvolvedores Java estão cientes da existência de um tipo de dados duplo primitivo e de uma classe , mas ao executar operações de ponto flutuante, eles não prestam atenção suficiente a , , e às regras que regem os cálculos aritméticos associados. A resposta a esta pergunta é simples: uma
Double
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
não será lançado; a expressão é avaliada como Double.POSITIVE_INFINITY
. 7. O que acontece se você tentar inserir uma chave em um HashMap
que já contém essa chave? Essa pergunta complicada faz parte de outra pergunta frequente: como funciona HashMap
em Java? HashMap
é uma fonte popular de perguntas confusas e complicadas sobre Java. Aqui está a resposta: se você tentar inserir novamente uma chave em um HashMap
, a chave antiga será substituída, pois a HashMap
classe não permite chaves duplicadas. E a mesma chave obterá o mesmo código hash, o que significa que terminará no mesmo lugar no balde de hash. Com base nos materiais do Quora
GO TO FULL VERSION