Conhecimento básico comumente usado de Java-kaic.docx

Hoje entramos no tópico "Conhecimento Básico Comum de Java" A biblioteca de recursos Java do power node integra questões comuns e pontos de conhecimento nas entrevistas das principais fábricas nos últimos anos. São 10 atualizações todos os dias. Nosso objetivo final é ser uma grande fábrica. Se você tiver alguma dúvida sobre o tema, pode deixar uma mensagem no fundo da conta oficial para tirar suas dúvidas.

Alvo: Alibaba, Tencent, JD.com, Baidu, Meituan, Qunar e outras empresas de Internet!

1. Um problema de carregamento de classe, uma classe, depois que a classe é carregada, se o conteúdo da classe for modificado, como carregar a classe alterada sem reiniciar a máquina virtual

Você pode criar um novo carregador de classes, carregá-lo com loadClass e, em seguida, newInstance; o carregador de classes original carregado não pode ser recarregado; essa é uma ideia típica de contêiner.

"Entendimento profundo da máquina virtual java"

2. Compreensão de java "escreva uma vez, execute em qualquer lugar" (escreva uma vez, execute em qualquer lugar)?

"Compile uma vez, execute em qualquer lugar" refere-se às características de plataforma cruzada da linguagem Java. As características de plataforma cruzada do Java são inseparáveis ​​da existência da máquina virtual Java, que pode ser executada em diferentes ambientes. Por exemplo, plataformas Windows e As plataformas Linux têm JDKs correspondentes Depois de instalar o JDK, haverá um ambiente operacional de linguagem Java. Na verdade, a própria linguagem Java não é particularmente diferente de outras linguagens de programação. Isso não significa que a linguagem Java pode cruzar plataformas, mas que Java pode ser usado em diferentes plataformas É apenas o ambiente no qual a linguagem é executada, então Java tem o efeito de compilar uma vez e rodar em qualquer lugar.Estritamente
falando, Java não é a única linguagem de plataforma cruzada, mas Java é relativamente madura. "Compile uma vez, execute em qualquer lugar" Esse efeito está relacionado ao compilador. O processamento da linguagem de programação requer um compilador e um interpretador. A máquina virtual Java é semelhante ao DOS, que equivale a uma plataforma para a execução do programa. Existem três estágios do programa, desde o código-fonte até a operação: codificação - compilação
- —Executar——Depuração. Java incorpora as características de plataforma cruzada no estágio de compilação. O processo de compilação é provavelmente assim: primeiro, o código-fonte Java o código é convertido em bytecode do arquivo .CLASS, que é a primeira compilação. Arquivo .class É um arquivo que pode ser executado em qualquer lugar. Em seguida, o bytecode Java será convertido no código da máquina de destino, que é executado pela JVM, ou seja, a segunda compilação de Java. A chave e a premissa de "rodar em qualquer lugar" é a JVM.

Todo o ciclo de vida do código Java é mostrado na figura:

3. Fale-me sobre sua compreensão da plataforma Java. "Java é interpretado e executado", esta frase está correta?

Java em si é uma linguagem orientada a objetos. Os recursos mais notáveis ​​são dois aspectos. Um é o chamado "escreva uma vez, execute em qualquer lugar" (escreva uma vez, execute em qualquer lugar), que pode facilmente obter recursos de plataforma cruzada; o outro é coleta de lixo (GC, Garbage Collection), Java recupera e aloca memória através do coletor de lixo (Garbage Collector).Na maioria dos casos, os programadores não precisam se preocupar com alocação e recuperação de memória.
Para a declaração "Java é uma execução interpretada", essa declaração não é muito precisa. O código-fonte Java que desenvolvemos é primeiro compilado em bytecode (bytecode) por meio de Javac e, em tempo de execução, o bytecode é convertido em código de máquina final por meio do interpretador embutido na Java Virtual Machine (JVM). Mas JVMs comuns, como o Hotspot JVM fornecido pelo Oracle JDK que usamos na maioria dos casos, fornecem um compilador JIT (Just-In-Time), comumente chamado de compilador dinâmico.O código é compilado em código de máquina. Nesse caso, alguns hot codes são compilados e executados em vez de interpretados e executados.

4. Por favor, compare Exception e Error.Além disso, qual é a diferença entre exceção de tempo de execução e exceção geral?
Tanto Exception quanto Error herdam a classe Throwable.Em Java, somente instâncias do tipo Throwable podem ser lançadas (throw) ou capturadas (catch), que é o tipo de componente básico do mecanismo de tratamento de exceção.

Exceção e Erro refletem a classificação de diferentes exceções do designer da plataforma Java. Exceção é uma situação inesperada que pode ser esperada durante a operação normal do programa, podendo e devendo ser detectada e tratada adequadamente.

Erro refere-se a uma situação improvável em circunstâncias normais. A maioria dos erros fará com que o programa (como a própria JVM) fique em um estado anormal e irrecuperável. Por ser uma situação anormal, não é conveniente e não precisa ser capturada.Comuns como OutOfMemoryError são todas subclasses de Error.

A exceção é dividida em exceções verificadas e exceções não verificadas.Exceções verificáveis ​​devem ser explicitamente capturadas no código-fonte, que faz parte da verificação em tempo de compilação.

5. O que há de errado com o tratamento de exceção refletido no código a seguir?

tente {

// Código do negócio

// …

Tópico . dormir ( 1000L );

} catch ( Exceção e ) {

// Ignore isto

}

Primeiro, tente não capturar exceções genéricas como Exception, mas exceções específicas, neste caso InterruptedException lançada por Thread.sleep().

Em segundo lugar, não engula exceções.

6. Observando o mecanismo de tratamento de exceção do Java de uma perspectiva de desempenho, há dois lugares que podem ser relativamente caros:

①. O segmento de código try-catch gerará sobrecarga de desempenho adicional ou, de outra perspectiva, geralmente afetará a JVM para otimizar o código, portanto, é recomendável capturar apenas o segmento de código necessário e tentar não agrupar o segmento inteiro com um grande código try
; Se acontecer com muita frequência, essa sobrecarga não pode ser ignorada.

7. Qual é a causa de ClassNotFoundException?

Java suporta o uso do método Class.forName para carregar classes dinamicamente. Se o nome de classe de qualquer classe for passado como um parâmetro para este método, isso fará com que a classe seja carregada na memória da JVM. Se a classe não for encontrada no caminho da classe, então uma ClassNotFoundException será lançada no tempo de execução.

8. Qual é a diferença entre final, finalmente e finalize?
final pode ser usado para modificar classes, métodos e variáveis, e cada um tem significados diferentes. A classe modificada por final significa que não pode ser herdada e expandida. As variáveis ​​finais não podem ser modificadas e os métodos final não podem ser substituídos (override).

Por fim, há um mecanismo para Java garantir que o código-chave seja executado. Podemos usar try-finally ou try-catch-finally para executar ações como fechar conexões JDBC e garantir bloqueios de desbloqueio.

finalize é um método da classe básica java.lang.Object e seu objetivo de design é garantir que o objeto conclua a reciclagem de recursos específicos antes de ser coletado como lixo. O mecanismo finalize agora está obsoleto e foi marcado como obsoleto desde o JDK 9.

9. Qual será a saída do código a seguir?

tente {

// faça alguma coisa

Sistema . saída ( 1 );

} finalmente{

Sistema . fora . println ( " Imprimir de finalmente " );

}

O código no final acima não será executado, este é um caso especial.

1 , Não use a instrução return em finalmente.

2 , finalmente é sempre executado, a menos que o programa ou thread seja interrompido.

10. Qual é a diferença entre referências fortes, referências suaves, referências fracas e referências fantasmas? Qual é o cenário de uso específico?

A chamada Referência "Forte" é nossa referência de objeto mais comum. Enquanto houver uma referência forte apontando para um objeto, isso pode indicar que o objeto ainda está "vivo" e o coletor de lixo não tocará nesse objeto . Para um objeto comum, se não houver outro relacionamento de referência, desde que exceda o escopo da referência ou atribua explicitamente a referência (forte) correspondente a nulo, ele pode ser coletado como lixo. Claro, o momento específico da reciclagem depende sobre a estratégia de coleta de lixo.

Referência suave (SoftReference), por meio da classe SoftReference. É um tipo de referência relativamente mais fraca que a referência forte, o que pode tornar o objeto isento de alguma coleta de lixo. Somente quando a JVM achar que a memória é insuficiente, ela tentará reciclar o objeto apontado pela referência suave . A JVM garantirá que o objeto apontado pela referência suave seja limpo antes que um OutOfMemoryError seja lançado. Referências suaves são geralmente usadas para implementar caches sensíveis à memória. Se ainda houver memória livre, você pode reservar temporariamente o cache e limpá-lo quando a memória for insuficiente. Isso garante que a memória não se esgote durante o uso do cache.

As referências fracas (WeakReference) são implementadas por meio da classe WeakReference. . Isso não torna o objeto isento da coleta de lixo. Quando o thread do coletor de lixo varre a área de memória sob sua jurisdição, uma vez que um objeto com uma referência fraca é encontrado, sua memória será recuperada, independentemente de o espaço de memória atual ser suficiente ou não . Como o coletor de lixo é um encadeamento de prioridade muito baixa, os objetos com referências fracas não serão necessariamente recuperados tão cedo.

Referências fantasmas também são chamadas de referências fantasmas, que são implementadas por meio da classe PhantomReference. Nenhuma propriedade ou função do objeto pode ser acessada através de uma referência fantasma. As referências fantasmas apenas fornecem um mecanismo para garantir que os objetos façam certas coisas depois de finalizados. Se um objeto contém apenas referências fantasmas, é como se não tivesse referências e pudesse ser recuperado pelo coletor de lixo a qualquer momento. Referências fantasmas devem ser usadas em conjunto com filas de referência (ReferenceQueue).

Acho que você gosta

Origin blog.csdn.net/weixin_39563171/article/details/131729931
Recomendado
Clasificación