A seguir, todas as perguntas relativamente avançadas, e elas geralmente raramente são feitas durante as entrevistas, porque podem transformar o entrevistador. Mas você pode encontrar algum tempo para praticar você mesmo.
1. System.Exit (0) ignorará a execução de finalmente bloquear
System.SetSecurityManager (new SecurityManager () {@Override public void checkexit (int status) {throw new ThreadDeath ();}}); tente {System.exit (0); } finalmente {System.out.println ("no bloco finalmente"); } Por que esse código sai no bloco Finalmente? Por que as informações de rastreamento de pilha não são impressas?
2. String str = "Hello"; onde str é um objeto de string
Ao contrário de C ++, as variáveis em Java são tipos ou referências básicas. Uma variável não pode ser um objeto. Isso significa uma expressão como esta:
String str = "Hello"; String text = "Bye"; str == texto; // compare duas referências em vez de conteúdo str = text; // atribui a referência do texto ao STR
Na maioria dos casos, na verdade não há muita diferença, mas escrever como essa pode causar facilmente confusão.
final StringBuilder sb = new StringBuilder (); sb.append ("hello"); // Esta referência é do tipo final, não esta instância. método (sb); // Esta instância pode ser modificada através de métodos, mas essa variável não pode ser modificada 3. O vazamento de memória java é o mesmo que os programadores C ++ entendem
A definição de vazamento de memória na Wikipedia é "na ciência da computação, se um programa não gerenciar a alocação de memória corretamente, os vazamentos de memória ocorrerão. Na programação orientada a objetos, se um objeto na memória não puder ser acessado no código, este é um vazamento de memória". No entanto, em Java, os objetos são sempre acessíveis e aqueles sem referências fortes serão limpas. O termo vazamento de memória significa em Java: existem objetos que não devem existir na memória e, geralmente, alguns recursos que não são mais usados ainda são armazenados na coleção.
4. A programação multithread é difícil
Se você não tem experiência, a programação com vários threading é realmente difícil. Se você apenas jogar um monte de código em um monte de threads e executá -lo, o problema não poderá ser resolvido, será uma bagunça. Mas se você puder executar a alocação de encadeamentos sob demanda, controlar as interações entre threads e usar padrões simples que alguns membros da equipe também podem entender, o problema se torna muito mais simples. Obviamente, há outro desafio que você deve fazer com que todos na equipe sigam suas regras
5. Não se importe com as diferentes performances entre diferentes operações
Ouvi recentemente que há um problema, que envolve a adição de números inteiros, acesso à memória, módulo e saída no console. Embora cada uma dessas operações seja uma ordem de magnitude mais lenta que a anterior, esse cara só quer otimizar a operação mais rápida, adição e substituí -la por algumas operações mais caras. Se você realmente deseja otimizar o desempenho, é melhor substituir essas operações caras por uma operação barata. Se o seu gargalo estiver no hardware, por exemplo, você deverá ler um grande número de arquivos do disco rígido, modificando o código do software é inútil, porque o problema não é.
6. Os números aleatórios são aleatórios
Um conjunto específico de números aleatórios é como números de algum padrão. Eu já falei sobre esse problema neste artigo. Muitas pessoas não acreditam que os números gerados por geradores de números aleatórios não sejam aleatórios.
7. Os pontos flutuantes devem ser evitados, pois produzirão erros aleatórios
Para a mesma operação, os números de ponto flutuante produzirão o mesmo erro a cada vez. Os erros são previsíveis e, portanto, controláveis. Se você souber o que vai fazer e seguir algumas regras simples, como arredondar os resultados, os números de ponto flutuante não cometerão mais erros do que o BigDecimal. Além disso, é mais legível e mais de cem vezes mais rápido (e há menos objetos de lixo gerados ao mesmo tempo).
8. O fuso horário é eterno
A razão para esse mal -entendido é que, à medida que o tempo muda, o fuso horário está mudando. Isso significa que a Europa/Londres era 1970/1/1 01:00 em vez de 00:00. Por que? Porque Londres usou o horário de verão nos dois anos de 1968 a 1971.
Nos últimos anos, muitos fusos horários também mudaram. Moscou costumava ser o terceiro distrito leste (GMT+3), mas agora é o quarto distrito leste (GMT+4) (a partir de 27 de março de 2011). Se você olhar para o momento de 2010, descobrirá que é leste 3 e leste 4.
Há algumas coisas que você pode parecer surpreso:
Fevereiro da Suécia em 1721 tem 30 dias.
O primeiro dia na Inglaterra em 1751 foi 25 de março, que ficava 11 dias atrás da França.
Depois que os Estados Unidos adotam o calendário gregoriano, ele remonta a centenas de anos, para que as datas originalmente gravadas possam ser expressas em dois calendários (geralmente duas datas são fornecidas ao mesmo tempo para mais precisão). Por exemplo, o aniversário de George Washington mudou de 11 de fevereiro de 1731 para 22 de fevereiro de 1732.
9. Quando você lê uma variável não volátil em um thread, finalmente pode ler o valor que ele atualizou.
Esse problema apareceu duas vezes no Stackoverflow há alguns dias. De um modo geral, quando o compilador JIT otimiza o código, ele embalará os campos de tipos não voláteis que não foram modificados para este thread. Depois que este código for compilado (você pode vê -lo com -xx:+printCompilation), é provável que nunca seja visível se você modificar esse campo em outro thread. A adição de blocos de sincronização aleatória ou declarações de impressão pode atrasar a execução dessa otimização ou interromper o compilador JIT para que ele não execute essa otimização.
10. As perguntas da entrevista dejava estão corretas
Existem muitas perguntas da entrevista em Java que estão desatualizadas (não atualizadas por mais de 10 anos e estão fora de contato com a versão Java atual), ou são enganosas, ou podem até estar erradas. Infelizmente, nenhuma dessas respostas foi transmitida sem verificá -las.
Vou me referir às respostas do Stackoverflow acima, porque a revisão por pares aqui faz um trabalho melhor ao revisar as respostas. Em geral, não vá a sites como a Rose India, as respostas acima são de uma qualidade ridícula. Se você gosta de chegar ao fundo, pode verificar quantos erros de ortografia (nomes de classe e termos profissionais) ou comentários errados são encontrados no artigo acima. Uma razão para esses problemas é que não há mecanismo de feedback eficaz para corrigir esses erros.
Eu gostaria de recomendar algumas perguntas da entrevista em Java:
As 50 perguntas mais valiosas da entrevista em Java são adequadas para admissão em programadores Java
10 perguntas clássicas de entrevista de método java
Discuta as dez perguntas mais comuns da entrevista em Java (Super Classic)
10 perguntas da entrevista XML para programadores Java são lançados
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.