Perguntas que todo desenvolvedor Java / Java EE bom deve ser capaz de responder? [fechadas]

138

Eu estava passando por perguntas que todo desenvolvedor .Net bom deveria responder e fiquei impressionado com o conteúdo e a abordagem dessa pergunta; portanto, no mesmo espírito, estou fazendo essa pergunta para Java / Java EE Developer.

Que perguntas você acha que um bom programador Java / Java EE pode responder?

Estou marcando essa pergunta como wiki da comunidade, pois não é específica do usuário e tem como objetivo servir a comunidade de programação em geral.

Ansioso por algumas respostas surpreendentes.

EDIT : Responda também às perguntas, conforme sugerido nos comentários, para que as pessoas possam aprender algo novo sobre o idioma também.

Rachel
fonte
3
Por que esta pergunta não é capaz de obter uma resposta semelhante à .Net?
Rachel
5
Bom Deus :), a pergunta .Net foi feita há um ano e esta tem apenas um dia e você está comparando as respostas.
zapping
1
Por que você não edita sua pergunta e adiciona a frase "Por favor, responda sua própria pergunta.", Para que as pessoas possam aprender algo (novo).
R3zn1k
9
"qual é a abreviação atual da Enterprise Edition";)
Bozho
17
Anedota de Albert Einstein. Um dos colegas de Einstein pediu seu número de telefone um dia. Einstein pegou uma lista telefônica e procurou. "Você não se lembra do seu próprio número?" o homem perguntou, assustado. "Não", respondeu Einstein. "Por que eu deveria memorizar algo que posso facilmente obter de um livro?" Estou alcançando todo mundo;)? Sim, eu sei, Einstein não estava enfrentando um entrevistador ...
SB.

Respostas:

83

Qual é a relação entre hashCode () e igual a ()? Qual é o significado desses métodos? Quais são os requisitos para implementá-los?

Jeff
fonte
Sim, todo desenvolvedor deve pelo menos estar ciente dos problemas, mesmo que você não os encontre necessariamente na prática.
sleske
3
equals () e hashCode () em java @ technofundo.com/tech/java/equalhash.html
pramodc84
70

Qual é a diferença entre Set, Map e List?

Ainda estou surpreso com quantas pessoas não conhecem essa em uma entrevista por telefone.

Jon
fonte
8
Concedido, mas é uma questão de 20 segundos analisando os documentos na rede ("java collections framework"), muitas pessoas que valem a pena talvez não se preocupem em mantê-lo na memória.
Manur
127
Não, desculpe, não compre, é um conhecimento básico que todo desenvolvedor deve conhecer.
Jon
15
Eu diria que alguém que pensa em um trabalho em software precisa entender não apenas isso, mas também diferenças entre os diferentes tipos de listas (ArrayList / LinkedList). Não necessariamente melhor implementação ou até notação O (n), mas uma compreensão de quando é certo usar o quê.
Reverendo Gonzo
11
+1 @ Jon: Eu costumo assinar a escola de pensamento "não há necessidade de memorizar detalhes", mas se você nem conhece as diferenças conceituais básicas entre essas interfaces básicas, definitivamente não é um bom desenvolvedor de Java.
Joachim Sauer
13
@ Joachim: você pode soltar a palavra "Java" da sua declaração. Conjuntos, mapas e listas são noções algorítmicas básicas.
cperkins
44

Uma interface pode estender várias interfaces?

A maioria das pessoas responde "não", porque sabe que o java não tem herança múltipla. Mas uma interface ainda pode estender várias interfaces (mas uma classe não pode estender várias classes). Isso não leva ao problema do diamante.

Se a resposta for "não", o entrevistador deve perguntar "por que teria que ser proibido?". Então você começa a pensar sobre isso e deve perceber que não há problemas com isso.

Então você aprendeu algo (por si mesmo) na entrevista e mostrou ao entrevistador que é capaz de raciocinar sobre classes, objetos, herança, polimorfismo etc. É realmente muito melhor do que um candidato que sabe a resposta de cor, mas não sabe. entender porque

ewernli
fonte
Eu confundiu um C ++ conferencista ontem com o problema herança diamante, ela não sabia sobre isso em todos os :)
Esko
2
Uma vez me fizeram essa pergunta e eu respondi "não". Eu acho que era estresse e eu respondi rápido demais. é sempre difícil saber respostas para coisas que você nunca usa.
precisa saber é o seguinte
1
Eu elaboro um pouco mais no texto. Responder "não" é realmente bom. O que é legal nessa pergunta é que é uma boa maneira de iniciar uma discussão sobre os conceitos de OO e ver como o candidato raciocina. Se o entrevistador que você queria ouvir "sim", é efetivamente inútil. A herança múltipla de interfaces não é tão comum de ser conhecida de cor.
ewernli
3
Uma versão mais complicada desta pergunta é "O java suporta herança múltipla?" a que a resposta é "espécie de" apenas para as interfaces
nsfyn55
23

Uso de final palavra-chave em chamadas de método. Por exemplo, por que o método test no código abaixo não fornece nenhum erro de compilação, apesar de usar o qualificador final para o parâmetro do método

class Name {
    private String name;

    public Name (String s) {
        this.name = s;
    }

    public void setName(String s) {
        this.name = s;
    }
}

private void test (final Name n) {
    n.setName("test");
}

sateesh
fonte
Eu realmente adoraria saber a resposta para esta pergunta. Parece muito interessante.
Rachel
@ Rachel: O motivo é porque a finalpalavra - chave aplicada ao Nameobjeto, não ao namecampo da classeName
ryanprayogo
20
Bem, o parâmetro né declarado como final, o que significa que não pode ser reatribuído no testcorpo do método. Ele não causa um erro porque o método testnão tenta transferir o parâmetro, ele apenas define uma propriedade no parâmetro ... n = new Name("test");causaria um erro de compilação ...
rjohnston
7
Adicionando aos comentários do @ rjohnston: o uso do parâmetro final for method não garante a imutabilidade de uma instância de classe. Se há uma necessidade de imutabilidade da classe (Nome, no presente caso) deve ser concebido de forma (por exemplo, no presente caso, não fornecem o setter)
Sateesh
Obrigado a todos por compartilhar informações valiosas. Eu realmente aprecio suas contribuições sobre isso.
Rachel
19

Um deles é a comparação da string. Diferença entre

String helloWorld = "Olá, mundo";
helloWorld == "Olá mundo";
"Olá Mundo" .equals (helloWorld);

zapping
fonte
14
Certamente você precisaria fazer algo como o novo String ("Hello World"). As constantes de cadeia de caracteres não são extraídas de um pool, como o efeito que intern () teria, tornando as duas afirmações verdadeiras?
Steven Schlansker
17

Truque de pergunta: Quais tipos de parâmetros são passados ​​por referência em Java?

É incrível quantas pessoas ainda papagaiam o mantra "primitivas são passadas por valor, objetos são passados ​​por referência".

Chinmay Kanchi
fonte
4
Gostaria de saber se a resposta correta é sempre a única a dar em uma entrevista. Em um lugar para o qual entrevistei, o entrevistador também repetiu a mesma coisa.
MAK
2
Percebi uma diferença entre as pessoas que estudaram C como primeira língua e as pessoas que estudaram C ++ como primeira língua ao responder a essa pergunta sobre Java. Provavelmente porque os usuários de C aprendem que passar um ponteiro para um valor é uma "passagem por referência".
Uri
23
Essa é uma pergunta estúpida, já que a resposta "errada" provavelmente ficará tecnicamente correta se você também perguntar "que consequências estão passando por referência?" . É apenas uma questão de definição do que passa por referência e, portanto, não tem muito valor no mundo Java, pois há apenas uma maneira de passar objetos. É mais importante entender o que realmente acontece do que usar uma definição arbitrária para passar por referência da maneira que você deseja.
X4u
3
Essa questão é pelo menos problemática, porque depende principalmente da definição exata de "passagem por valor" / "passagem por referência", que geralmente é usada incorretamente. Embora eu concorde que um bom desenvolvedor deva conhecer as definições, é mais importante entender as consequências. Se você entende o comportamento real de Java, saber o nome correto para o conceito não é muito significativo, porque não é algo que você discute na prática, pois nunca muda.
sleske
3
Os objetos são passados ​​por referência em Java. Você não pode passar um objeto por valor; entre outras coisas, os objetos nunca existem na pilha. As referências são passadas por valor, com certeza.
Sean Owen
17

Você disse "Bom", "Desenvolvedor". Aqui estão os meus 2 centavos também .. :)

  • O que significa uma "exceção verificada"?
  • Qual é o melhor para usar e quando: asserções ou exceções para lidar com condições inesperadas?
  • Por que a classe String é final? (ou não é?;))
  • são os métodos wait, notify e notifyAll na classe Object?
  • Por que a classe Thread não é final? Por que eu estenderia o Thread sempre?
  • Por que existem duas classes Date; um no pacote java.util e outro no java.sql?
  • O que acontece se uma exceção é lançada no bloco finalmente? O restante é finalmente executado ou não?
  • Existe um coletor de lixo certo, mas o vazamento de memória está totalmente ausente em aplicativos Java? Se não, como?

Para J2EE:

  • É bom ter variáveis ​​de instância / estáticas em um servlet? Por que não? Então, onde você armazena "estado"?
  • continuando na pergunta acima: o que e onde é um "estado" para um aplicativo (web)?
  • O que acontece se eu começar a criar / fechar conexões de banco de dados em "JSP"?
  • Quais são as maneiras de lidar com exceções JSP? tentar pegar? Hummm .. tem mais alguma coisa?

Eu posso pensar em muitos, muitos, muitos mais, mas isso serve por enquanto :)

Elister
fonte
8
As respostas seriam legais, não sei a resposta para algumas delas.
MAK
As exceções verificadas são aquelas que um programa precisa ter um plano para lidar caso ocorram. Se não houver um bloco try / catch em torno de algo que gera uma exceção verificada, o programa não será compilado. wait, notify e notifyAll são para sincronizar threads e em Java todos os Objetos podem ser sincronizados. Eu estenderia o Thread (em vez de implementar o Runnable) se, conceitualmente, a classe exigir seu próprio encadeamento, ou seja, precisar fazer algum gerenciamento e não representar uma tarefa que possa ser executada em outro encadeamento de trabalho.
ZoFreX
Se uma exceção for lançada em um bloco final, o restante não será executado. Em um programa Java "puro", não existem vazamentos de memória canônica. No entanto, a memória ainda pode ser usada, o que não deveria se as estruturas de dados contiverem referências a objetos que não são mais necessários. Se estiver usando bibliotecas nativas, talvez seja necessário gerenciar seus recursos, por exemplo, no SWT, é importante chamar .dispose () em determinados ativos para garantir que eles não vazem.
ZoFreX
2
Use afirmações para erros "Isso nunca deve acontecer nunca", que devem ser tratados no desenvolvimento. Use exceções para erros que possam realmente ocorrer em tempo de execução, e o programa precisará lidar com eles de alguma forma.
MatrixFrog
16

Qual é a diferença entre String, StringBuffer e StringBuilder?

Thunderhashy
fonte
5
String - classe imutável que representa uma String. StringBuffer - padrão do construtor introduzido em versões mais antigas do Java que são sincronizadas em todas as operações (ou na maioria delas) a serem usadas para construir uma String. StringBuilder - introduzido no Java 5 (JDK 1.5), uma classe que compartilha a API StringBuffer a ser usada para criar uma String que não é sincronizada em todas as operações (ou na maioria delas). Como a construção de Strings tende a ocorrer em um único encadeamento, o StringBuilder é preferido para esse fim em tempos de execução / JDKs Java que o suportam.
MetroidFan2002
13

"O que é um descritor de implantação?"

Se o candidato estremecer involuntariamente, ele tem experiência em trabalhar com EJBs anteriores à 3.0.

Michael Borgwardt
fonte
torná-lo "estremece involuntariamente + transpira pesadamente + cai morto depois de repetir esta pergunta mais duas vezes", às vezes sinto que é a "única e única" razão pela qual eles adicionaram / apoiaram a coisa toda das anotações! :)
Elister
12

Muitas perguntas e entrevistas estão disponíveis em http://www.techinterviews.com/interview-questions/java e eu realmente não vejo valor em copiar / colar uma seleção delas.

Não, cabe a você criar sua própria compilação de coisas que considera importantes. Pessoalmente, procedo sempre em duas etapas: primeiro, algumas perguntas para ter uma idéia básica da experiência e das habilidades, depois uma situação de solução de problemas. Na verdade, não estou convencido de que poder responder a perguntas conhecidas faça de você uma boa ou uma má desconhecida solucionador de problemas . Portanto, prefiro pedir às pessoas que resolvam um determinado problema, dar-lhes alguns requisitos e pedir que escrevam código (mas não no papel). Dou a eles algum tempo para voltar para mim e verificar como eles fizeram isso, seu estilo de codificação, como eles usaram as APIs sugeridas etc.

Dito isso, minha pergunta favorita é "do que você não gosta em Java?" (no espírito deste ). É realmente uma excelente pergunta, fornece um feedback imediato sobre o quanto um candidato usou Java e explorou sua API e se ele é religioso ou não (como o OP escreveu).

Atualização: Conforme sugerido pelo CPerkins, uma redação melhor para a pergunta sugerida acima pode ser "O que você mais gostaria de ver alterado em Java?". E, de fato, prefiro assim.

Pascal Thivent
fonte
Eu não gosto da pergunta "o que você não gosta em Java?", Eu mentiria, porque soa como "por que você deixou sua última empresa?". além disso, eles podem pensar - "se você odeia java, não oferecemos o trabalho".
precisa saber é o seguinte
@ 01 É seu direito, mas eu não concordo com você e acho que você perdeu o objetivo dessa pergunta.
Pascal Thivent
1
Eu geralmente vi isso mais parecido com: "O que você mais gostaria de ver alterado em Java", em vez de "não gosta".
precisa saber é o seguinte
@CPerkins Essa é uma redação melhor, melhor que "não gosto" e muito melhor que "ódio" (na referência). Obrigado.
precisa saber é
11

O que é 'System', 'out', 'println' em System.out.println? O que acontece quando você chama 'put' no HashMap?

Adisesha
fonte
Qual é a resposta? Eu nunca penso em qual classe de sistema !! Pergunto-me a conhecer o asnwer :)
palAlaa
10
  1. Explique os vários modificadores de acesso usados ​​em Java. Eu tive muitas pessoas lutando com isso, especialmente o acesso padrão.
  2. Se você pudesse mudar uma coisa sobre a linguagem ou plataforma Java, o que seria? Bons desenvolvedores terão uma resposta aqui, enquanto aqueles que não estão realmente interessados ​​em desenvolvimento provavelmente não se importam.
  3. Se o CV deles disser algo como eles usam o EJB2.1, pergunte sobre o EJB3 para ver o que sabem sobre ele. Os melhores desenvolvedores acompanharão os desenvolvimentos mais recentes, mesmo que não usem as versões mais recentes.
Mark
fonte
3
Se houvesse apenas uma coisa que eu poderia mudar, adicionaria sobrecarga de operador ao idioma, provavelmente com apenas um conjunto restrito de operadores sobrecarregáveis ​​(ou seja, sem sobrecarga newou ^ou >>, <<e >>>). Se eu pudesse mudar outra coisa, isso seria adicionar semântica verdadeira chamada por referência. Uma terceira coisa seria adicionar unsignedtipos integrais.
precisa saber é o seguinte
1
delegados e encerramentos e talvez uma expressão lambda, mas isso não é realmente necessário. Métodos de extensão também seriam ótimos. Eles realmente podem limpar o código se usados ​​corretamente.
Joel
10
  • Qual é o contrato geral ao substituir iguais?
  • A melhor opção é preferir listas ou matrizes?
  • Quais são as convenções de nomenclatura geralmente aceitas?
  • Como a serialização funciona?
  • Como implementar Comparable?
  • Quais são as vantagens de usar as declarações preparadas do JDBC?
  • O que é o Java EE?
  • O que é um contêiner e quais serviços ele fornece?
JuanZe
fonte
9

Se você está contratando graduados com "experiência" em Java, uma pergunta simples como Escrever algum código que fará com que uma NullPointerException seja lançada pode distinguir quais candidatos usaram Java recentemente e não pararam quando terminaram sua unidade / curso.

David
fonte
16
"Throw new NullPointerException ()" é uma resposta correta?
Thorbjørn Ravn Andersen
1
Bem, cabe ao entrevistador. Se eles mostrassem um exemplo de teste de uma variável e lançando um NPE com uma mensagem útil, eu ficaria feliz. Se eu achasse que eles usaram essa resposta porque não conseguiram criar algum código que legitimamente emitisse um NPE, eu ficaria preocupado.
David
9

O que será impresso?

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder.append("+1");
    }
}

Resposta : CoolReturn + 1

Um pouco mais difícil:

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder=null;  /* ;) */
    }
}

Resposta : CoolReturn

zaletniy
fonte
o primeiro código indica que finalmente sempre é excutado mesmo se a instrução return estivesse disponível no bloco try, mas eu não recebi o segundo código ?? o que aconteceu quando o construtor de instruções = nulo; acontecer ??
palAlaa
3
@ Laa, é quase como um valor temporário definido para o construtor, o construtor é definido como nulo no bloco final e, em seguida, o valor temporário é o que é retornado.
deterb
1
@VextoR, sim Alaa deu uma boa descrição. Esse código verifica como o entrevistado entende a tentativa ... finalmente bloqueia com retorno interno e o escopo das variáveis ​​em geral, manipulação de variáveis
zaletniy
4
A instrução de retorno está retornando a referência ao objeto StringBuilder. Alterar a referência no finalmente não faz nada para a referência que é realmente retornada. No entanto, alterar o conteúdo do objeto afeta o que é retornado, como no primeiro exemplo.
Derek Litz
8

Qual é a diferença entre uma classe abstrata e uma interface? Quando você usaria cada um deles?

Muitos desenvolvedores de Java não sabem disso, perguntei à maioria das pessoas no meu curso de ciência da computação na universidade e a grande maioria não conseguiu responder.

ZoFreX
fonte
A única diferença é que a classe abstrata pode conter métodos não abstratos.
TBH 04/04
1
Essa é a resposta que você teria se tivesse lido um livro sobre Java, com certeza. Embora você também possa adicionar que elas também podem conter variáveis-membro: P Mas a diferença em quando usá-las e por que é ainda mais interessante.
ZoFreX
1
O uso da interface me fornece uma tecnologia muito poderosa, que é o polimofismo, que pode chamar qualquer método substituído de classes que implementa a interface de uma maneira aparentemente inexplicável, que você não precisa saber o tipo de cada classe filho.
palAlaa
@TBH - Não se esqueça que, no modelo de herança única que o Java usa atualmente, você pode estender apenas uma classe abstrata para um conjunto de funcionalidades - mas você pode combinar várias interfaces em uma única classe para que várias funcionalidades sejam implementadas sem a única restrição de herança.
MetroidFan2002
8

Perguntas simples como,

  • O que são JRE e JDK?
  • Por que o java reivindica interoperabilidade?

Embora sejam muito básicos, muitos desenvolvedores não sabem as respostas. Sugiro que essas perguntas sejam feitas antes das consultas relacionadas ao código.

Ravisha
fonte
Não conheço a parte JDK / JRE. Por exemplo, não existe essa distinção no Mac. Portanto, como desenvolvedor Java no Mac, não há realmente nenhuma necessidade de saber sobre isso.
Fabian Steeg
Eu acho que essa é uma boa pergunta, e se ela ajuda a expor as pessoas que são mal orientadas o suficiente para tentar um desenvolvimento sério de Java em um Mac, tanto melhor. Sério, se você declara ser um desenvolvedor Java, mas não sabe em qual link de download clicar em java.sun.com, existe um problema.
Mark B
Bem, sendo um desenvolvedor java, não é necessário se preocupar com a plataforma que ele está usando. Entender as ferramentas java parece um requisito básico. Pelo menos eu considero que sim. Eu não estou ciente do Mac OS. Ainda não me preocupo muito sobre o SO em que trabalho.
Ravisha
@mbaird Isso sai como um comentário bastante mesquinho. Embora eu desenvolva em um Mac e saiba o que são o JRE / JDK, vamos ser honestos, em um desenvolvimento real, isso realmente importa? Especialmente nos IDEs que fazem com que a linha de comando use algo do passado, um desenvolvedor Java precisa saber como usar a linguagem mais do que qualquer outra coisa.
Alexis King
6

As 5 principais perguntas J2EE / JEE

A lista de perguntas sobre o middleware J2EE / JEE que enfrentei é excepcionalmente longa, mas aqui estão as 5 principais perguntas que me foram feitas e levaram a boas discussões:

  1. O que acontece quando um MDB encontra uma exceção que não pode manipular?
    Essa pergunta geralmente leva a várias discussões interessantes sobre mensagens suspeitas, filas de erros etc.,
  2. Dado um Tópico JMS e alguns consumidores em diferentes JVMs, perguntas sobre vários cenários com e sem consumidores duráveis.
    Essa pergunta geralmente me permite discutir em termos de quando usar assinantes duráveis, quando usar filas etc.,
  3. Se preso em uma situação em que o acesso a um conteúdo Hibernate / JPA POJO leva a exceções, como resolvê-lo?
    Isso leva a discussões maravilhosas sobre carregamento lento, reidratação, etc., até levou a comparar e contrastar o JPA com os beans de entidade. Eu achei útil estar preparado e ter clareza de conceitos.
  4. Como um serviço da web simples pode ser fornecido?
    Qualquer solução de um servidor Web simples, com base em soluções SOAP / REST sofisticadas, e qualquer solução intermediária, deve ser boa o suficiente. Além disso, com base no entrevistador, algumas vezes leva a discussões muito interessantes sobre tópicos como algumas idéias de design - WSDL primeiro, estilo doc, intermediários SOAP etc. -RPC, ou SOAP1.2 sobre SOAP1.1, respostas para as quais geralmente se baseiam em quanto me lembro.
  5. Injeção de recursos JEE 5
    Essa questão é colocada de várias maneiras, começando do padrão Service Locator para as javax.naming.Contextperguntas.

Outra pergunta complicada que considero preocupante, mas que já vi muitas vezes, é: como as bibliotecas dependentes são empacotadas em um arquivo morto?
ou Visibilidade de várias classes em um arquivo compactado.
Se a discussão não levar à hierarquia do carregador de classes de diferentes servidores de aplicativos, arquivos de recursos, etc., é melhor renunciar e seguir em frente.

As cinco principais perguntas sobre Java:

  1. Perguntas sobre java.util.collections
    Essa é a mãe de todas as perguntas. Quando você conseguir efetivamente desembarcar o entrevistador nessa área, e se estiver preparado, o restante da entrevista geralmente fica aqui. Certifique-se de saber Set, List, Map, e a importância de Object.equals()e Object.hashCode()em todas as implementações dessas interfaces.
  2. Perguntas sobre refatoração
    Estas são boas se o entrevistador tiver uma mente aberta. Se o entrevistador já tiver uma solução específica em mente e a sua não corresponder à dele, você estará praticamente condenado. É melhor concordar com a resposta "Entendo que outras soluções são possíveis".
  3. Perguntas sobre multiencadeamento no JDK5, comparando com versões anteriores do JDK , achei melhor preparar-se com as classes de pacote java.util.concurrent . O livro de Doug Lea tem a maioria das respostas.
  4. O que há de novo no JDK1.6 / JDK1.7 ...?
    Esta é uma pergunta certa com muitos entrevistadores. Por mais que eu odeie isso, é melhor estar preparado. Pelo menos, lembrando-me de algumas com as quais trabalhei e liderando a discussão em alguma outra direção, esquiva e resolve de maneira ampla e eficaz o problema.
  5. Padrões na API Java Repetidamente
    , fui solicitado a apontar um padrão GoF na API Java. Melhor estar preparado para este.
CMR
fonte
5

Diferença entre servidor da web e um contêiner da web

user256777
fonte
5

O que você mais gosta / menos em Java e por quê?

Carsten
fonte
5

por que você substituiria o método toString ()?

SWD
fonte
4

Uma pergunta sobre Java mais pura:

Qual é a diferença entre sleep e wait? Poucas pessoas realmente entendem como a espera está funcionando.

Como você precisa lidar com InterruptedExceptions?

David Nouls
fonte
4

Esta é a pergunta que enfrentei na minha entrevista.

Por que o método main em Java é chamado de public static void main (String [] args)?

Responda:

1. main () deve ser declarado público porque é invocado pela JVM sempre que a execução do programa é iniciada. A JVM não pertence ao nosso pacote de programas.

Para acessar o main fora do pacote, temos que declará-lo como público.Se o declararmos como algo diferente de público, ele mostra um erro de tempo de execução, mas não erro de tempo de compilação

2. main () deve ser declarado como estático, porque se um método for declarado como estático, podemos chamar esse método fora da classe usando ClassName.methodName ();

class Sample
{
     static void fun()
     {
           System.out.println("Hello");       
     }
}

class Test
{
      public static void main(String[] args)
      {
                Sample.fun();
      }
}

A JVM primeiro carregará a classe Test e verificará os argumentos da linha de comando e chama o método principal como Test.main ();

3. main () deve ser declarado como nulo main () porque a JVM não espera nenhum valor de main (), portanto, deve ser declarado como nulo.

Se outro tipo de retorno for fornecido, será um RunTimeError, ou seja, NoSuchMethodFoundError.

4. main () deve ter argumentos String como matrizes porque a JVM chama o método principal passando o argumento da linha de comando. Como eles são armazenados no objeto da matriz de strings, ele é passado como argumento para main ().

Sai Upadhyayula
fonte
Você pode usar public static void main(String... args)se estiver tão inclinado :-) Ele tem a mesma assinatura que[]
corsiKa
3

Qual é a diferença entre J2SE e J2EE (ou JSE e JEE)?

Um desenvolvedor deve ser capaz de apontar que a edição corporativa é basicamente uma definição de interface (ou seja, uma especificação) que pode ser implementada pelos fornecedores. Considerando que a edição padrão é uma implementação em si mesma

oxbow_lakes
fonte
4
A capacidade de manter a terminologia de marketing correta é realmente tão importante no final do dia?
Laurence Gonsalves
@ Laurence - isso é uma coisa ridícula de se dizer. Há uma diferença real entre as duas coisas que você ficaria surpreso como muitos desenvolvedores supostamente experientes só não entendo
oxbow_lakes
O que quero dizer é que se alguém é um bom codificador, eu não me importaria se eles soubessem a diferença entre J2SE e J2EE.
Laurence Gonsalves
Eu li a pergunta como sendo "coisas que um desenvolvedor JEE + JSE deveria saber"; nesse caso, acho que entender a diferença entre as duas tecnologias é relevante.
precisa saber é o seguinte
4
@ Thorbjørn Ravn Andersen Duvido que a maioria dos codificadores Java, inclusive os bons, estejam cientes da distinção acima: "a edição corporativa é basicamente uma definição de interface ... Considerando que a edição padrão é uma implementação por si só". Para a maioria dos bons codificadores Java, a distinção que importa é quais APIs estão disponíveis. por exemplo: Servlets fazem parte do EE, etc. De qualquer forma, assim como acho mais importante encontrar bons programadores do que bons programadores de linguagem X, acho mais importante encontrar bons programadores Java do que bons programadores JSE / JEE.
Laurence Gonsalves
3

Como volatileafeta a otimização de código pelo compilador?

romano
fonte
3
Essa entrada também deve conter a resposta correta.
Thorbjørn Ravn Andersen
Não me lembro da resposta completa, veja esta seção youtube.com/… para uma boa explicação. Em poucas palavras: suponha que o método use variável volátil em algum momento. Em seguida, o compilador não otimiza o código desse método após esse ponto.
Roman
2

Que tal o que é um bean de sessão e descrever algumas diferenças entre os beans de sessão sem estado e com estado.

Kristian
fonte
2

Escreva um programa para aceitar dois números inteiros e produza o maior de dois números em um arquivo no local de sua escolha. Agora descreva o que cada declaração faz.

É possível fazer uma pesquisa detalhada desde o significado da declaração de importação até o término anormal

Todos
fonte
2

Núcleo: 1. O que são exceções marcadas e desmarcadas? 2. Ao adicionar nova exceção no código, que tipo (marcado / não verificado) deve ser usado quando?

Servlet: 1. Qual é a diferença entre response.sendRedirect () e request.forward ()?

YoK
fonte
você pode responder a essas perguntas? É a primeira vez que eu sei sobre "exceções verificadas e não verificadas" !!
palAlaa
A simples pesquisa no Google pode levar você a respostas: google.co.in/…
Jun
1

Como threadsfunciona? O que é synchronized? Se houver dois synchronizedmétodos em uma classe, eles podem ser executados simultaneamente por dois threads. Você ficará surpreso ao ouvir muitas pessoas responderem que sim . Em seguida, todas as questões relacionadas ao segmento, por exemplo , deadlock , fome etc.

fastcodejava
fonte
2
Isso porque a resposta é sim ...
Fortega
@ Fortega - Como pode ser isso? Cada método possui um bloqueio no objeto. Se alguém threadestiver executando o método, ninguém threadpoderá obter o bloqueio.
fastcodejava
1
Se você tiver dois objetos do mesmo tipo, poderá chamar o primeiro método no primeiro objeto e o segundo método no segundo objeto simultaneamente. A menos que os métodos sejam estáticos, é claro.
Fortega
2
Se você não entender adequadamente como o bloqueio ocorre, isso não é realmente fácil. Além disso, embora possa ser um acéfalo, isso não significa que a minha resposta era incorreta :-)
Fortega
1
A resposta pode causar confusão para os programadores que não usaram threads no trabalho, mas acho que é bom :)
palAlaa
1

Uma coisa que muitos programadores Java não sabem é que Strings são imutáveis, portanto, use StringBuilder ou StringBuffer!

String s = "";
for(int i = 0; i < 100; i++) {
  s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}
Shervin Asgari
fonte
E números como Inteiro, Longo e assim por diante
Arthur Ronald
Em termos de desempenho, não há mais diferença entre concatenar seqüências imutáveis ​​e usar o StringBuilder. Isso ocorre porque os compiladores java modernos otimizam a concatenação: java.sun.com/docs/books/jls/third_edition/html/… É melhor usar qualquer método que seja mais legível.
Brent Wilson
1
@BrentWilson, o que você vincula não fará o que você pensa. Vai se transformar s += "a" + "b" + "c"em um Stringbuilder.append(...)cenário. Mas isso não otimizará um forloop. O código nesta resposta acabará criando um total de 201 Strings, 100 StringBuilders e (dependendo da implementação) 300 char[]s diferentes dentro desses StringBuilders e um número estimado de 425k +. Alterá-lo para usar um StringBuilder completo reduzirá isso para 1 String, 1 StringBuilder e 13-15 char[]s internos usando apenas ~ 8k caracteres, como deveria.
corsiKa