Análise de perguntas clássicas da entrevista Java - fale sobre sua compreensão da plataforma Java?

imagem.png
Da sua exposição ao desenvolvimento Java até agora, qual é a sua impressão mais intuitiva de Java? É o "Compile uma vez, execute em qualquer lugar" que ele anuncia ou é uma sintaxe excessivamente formal? Quanto você sabe sobre a plataforma Java? Por favor, pare e pense por um momento.

A pergunta que quero fazer hoje é: fale sobre o seu entendimento da plataforma Java? "Java é interpretado como execução", esta frase está correta?

Resposta típica

Java em si é uma linguagem orientada a objetos. Os recursos mais notáveis ​​têm dois aspectos: um é o chamado "compile uma vez, execute em qualquer lugar" (Compile uma vez, execute em qualquer lugar), que pode facilmente obter recursos multiplataforma; o outro é garbage Collection (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 reciclagem de memória.

Entraremos em contato com JRE (Java Runtime Environment) ou JDK (Java Development Kit) diariamente. JRE, que é o Java Runtime Environment, contém bibliotecas de classes JVM e Java, bem como alguns módulos. O JDK pode ser visto como um superconjunto do JRE, fornecendo mais ferramentas, como compiladores, diversas ferramentas de diagnóstico, etc.

Esta declaração é menos precisa para a declaração "Java é execução interpretada". O código fonte do Java que desenvolvemos é primeiro compilado em bytecode pelo Javac, e então, em tempo de execução, o bytecode é convertido em código de máquina final pelo interpretador embutido na Java Virtual Machine (JVM). No entanto, JVMs comuns, como a Hospot JVM fornecida pelo Oracle JDK que usamos na maioria dos casos, fornecem um compilador JIT (Just-In-Time), também conhecido como compilador dinâmico. O JIT pode converter hot spots em tempo de execução. O código é compilado em código de máquina.Neste caso, alguns códigos quentes são compilados e executados, não interpretados e executados.

Análise de ponto de teste

Na verdade, esta pergunta é um pouco geral. O tópico em si é muito aberto e muitas vezes examina vários aspectos, como se o conhecimento básico é claro; se os principais módulos e princípios operacionais da plataforma Java são dominados. Muitos entrevistadores sofrem com esse tipo de pergunta, ficam um pouco nervosos e não sabem por onde começar, então dão uma resposta muito breve.

Para essas perguntas gerais, você precisa tentar o seu melhor para mostrar que seu pensamento é profundo e sistemático, e seu conhecimento de Java é mais abrangente. Certifique-se de evitar fazer o entrevistador pensar que você é uma pessoa que "sabe o que é e não sabe por quê". Afinal, entender a composição básica e o mecanismo é a base para muitas coisas, como diagnóstico de problemas ou ajuste de desempenho no trabalho diário.Acredito que nenhum recrutador não gostará de entrevistadores que "amam aprender e pensar".

Não se preocupe se sua resposta não for perfeita. Pessoalmente, sinto que é normal responder a este tipo de pergunta geral de forma um pouco unilateral. Normalmente, tente orientar o entrevistador e mostrar o seu verdadeiro nível.Esse tipo de pergunta deve ser um aquecimento inicial, e o entrevistador muitas vezes expandirá as perguntas relacionadas com base em suas respostas.

expansão do conhecimento

Voltando ao tópico, podemos falar brevemente sobre o entendimento da plataforma Java a partir de vários aspectos, tais como: recursos da linguagem Java, incluindo recursos da linguagem como genéricos e Lambda; bibliotecas de classes básicas, incluindo coleções, IO/NIO, rede, simultaneidade , segurança e outras bibliotecas de classes básicas. Para as bibliotecas de classe que são amplamente utilizadas em nosso trabalho diário, podemos resumi-las sistematicamente antes da entrevista, o que é útil para jogar no local.

Ou fale sobre alguns conceitos e mecanismos básicos da JVM, como o mecanismo de carregamento de classes do Java, o Class-Loader embutido em versões comuns do JDK (como o JDK 8), como Bootstrap, Application e Extension Class-loader; o processo geral de carregamento de classe: carregamento, verificação, vinculação, inicialização (aqui se refere ao "Compreensão aprofundada da máquina virtual Java" de Zhou Zhiming, um ótimo livro inicial de JVM); Carregador de classe personalizado, etc. Existem também os princípios básicos da coleta de lixo. Os coletores de lixo mais comuns, como SerialGC, Parallel GC, CMS, G1, etc., têm uma boa ideia de que tipo de carga de trabalho são adequados. Todas essas são áreas que podem ser expandidas, e as apresentarei de forma mais sistemática em uma coluna posterior.

Claro, quais ferramentas estão incluídas no JDK ou outras ferramentas no campo Java, como compiladores, ambientes de tempo de execução, ferramentas de segurança, ferramentas de diagnóstico e monitoramento, etc. Essas ferramentas básicas são a garantia da eficiência do trabalho diário, além de nos ajudar a trabalhar em outras plataformas de idiomas, muitas delas análogas.

A imagem abaixo é um plano relativamente amplo que resumi para sua referência.

imagem.png

Sem mais expansão, de volta às perguntas feitas anteriormente sobre interpretar a execução e compilar a execução. Alguns entrevistadores gostam de "ir ao fundo das coisas" em questões específicas porque é uma maneira eficaz de aprender mais sobre o conhecimento de um entrevistado, e eu vou um pouco mais fundo.

Como todos sabemos, geralmente dividimos Java em tempo de compilação e tempo de execução. A compilação Java e C/C++ mencionadas aqui têm significados diferentes.A compilação Javac, compilando o código-fonte Java para gerar o arquivo ".class", é na verdade bytecode, não código de máquina diretamente executável. Java protege os detalhes do sistema operacional e hardware por meio da abstração multiplataforma de bytecode e da Java Virtual Machine (JVM), que também é a base para realizar "compile uma vez, execute em qualquer lugar". Aqui eu recomendo um círculo de intercâmbio de aprendizado de arquitetura para todos. Guia de estudo de comunicação Pseudo Xin: 1253431195 (há muitas perguntas e respostas da entrevista), que compartilhará algumas gravações de vídeo gravadas por arquitetos seniores: Spring, MyBatis, Netty source code analysis, high concurrency, high performance, distribuído, microservice architecture The princípio de otimização de desempenho JVM, arquitetura distribuída, etc. tornaram-se o sistema de conhecimento necessário para arquitetos. Você também pode receber recursos de aprendizado gratuitos, que atualmente estão se beneficiando muito

Em tempo de execução, a JVM carrega o bytecode através do Class-Loader, interpreta ou compila para execução. Como mencionei anteriormente, as versões principais do Java, como o JDK 8, são na verdade um modo de interpretação e compilação mista, o chamado modo misto (-Xmixed). Normalmente, a JVM em execução no modo servidor fará dezenas de milhares de chamadas para coletar informações suficientes para uma compilação eficiente.O limite do modo cliente é 1500 vezes. O Oracle Hotspot JVM possui dois compiladores JIT diferentes integrados. C1 corresponde ao modo cliente mencionado acima, que é adequado para aplicativos sensíveis à velocidade de inicialização, como aplicativos de desktop Java comuns; C2 corresponde ao modo servidor, otimizado para servidores de longa duração, design de aplicativo final. O padrão é usar a chamada compilação em camadas (TieredCompilation). Não vou entrar em mais detalhes do JIT aqui, não há necessidade de mergulhar em tudo de uma vez, vou apresentar o conteúdo da compilação em camadas mais tarde.

Quando a máquina virtual Java é iniciada, você pode especificar parâmetros diferentes para selecionar o modo de execução. Por exemplo, especificar "-Xint" diz à JVM para apenas interpretar e executar o código sem compilar o código.Esse modo abandona as vantagens de desempenho que o JIT pode trazer. Afinal, o intérprete lê item por item e interpreta e executa item por item. Correspondentemente, há também um parâmetro "-Xcomp", que informa à JVM para fechar o interpretador e não executar a execução da interpretação ou o nível máximo de otimização. Então você pode perguntar se este modo é o mais eficiente? Simplificando, não realmente. "-Xcomp" fará com que a JVM inicie muito lentamente.Ao mesmo tempo, alguns métodos de otimização do compilador JIT, como previsão de ramificação, geralmente não podem ser otimizados com eficiência se a criação de perfil não for executada.

Além dos padrões de uso Java mais comuns em nosso dia a dia, existe na verdade um novo método de compilação, o chamado AOT (Ahead-of-Time Compilation), que compila diretamente o bytecode em código de máquina, evitando o aquecimento JIT , etc. Várias despesas gerais, como a introdução de recursos AOT experimentais no Oracle JDK 9 e a adição de novas ferramentas jaotc. Use o comando a seguir para compilar uma classe ou um módulo em uma biblioteca AOT.

jaotc --output libHelloWorld.so HelloWorld.class
jaotc --output libjava.base.so --module java.base

Em seguida, você pode especificá-lo diretamente na inicialização.

java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld

Além disso, o Oracle JDK suporta compilação em camadas e uso colaborativo AOT, que não é uma escolha entre os dois. AOT não é a única maneira, a indústria tem há muito tempo ferramentas de terceiros (como GCJ, Excelsior JET) para fornecer funções relacionadas.

Além disso, como uma plataforma poderosa, a JVM não é apenas a linguagem Java que pode ser executada na JVM, mas também bytecodes essencialmente compatíveis. A própria linguagem Java também oferece conveniência para isso. Podemos ver semelhanças como Clojure e Scala. , Groovy , JRuby, Jython e muitas outras linguagens JVM estão ativas em diferentes cenários.

Hoje, apresentei brevemente alguns conteúdos relacionados à plataforma Java, com o objetivo de criar uma impressão geral, incluindo recursos da linguagem Java, bibliotecas de classes principais e bibliotecas de classes de terceiros comumente usadas, princípios básicos da máquina virtual Java e ferramentas relacionadas. são úteis.

Acho que você gosta

Origin blog.csdn.net/m0_54828003/article/details/127240601
Recomendado
Clasificación