Preguntas clásicas de la entrevista de análisis de Java: ¿habla sobre su comprensión de la plataforma Java?

imagen.png
Desde su exposición al desarrollo de Java hasta ahora, ¿cuál es su impresión más intuitiva de Java? ¿Es el "Compilar una vez, ejecutar en cualquier lugar" lo que anuncia, o es una sintaxis demasiado formal? ¿Cuánto sabes sobre la plataforma Java? Por favor, deténgase y piense por un momento.

La pregunta que quiero hacerle hoy es, ¿ habla sobre su comprensión de la plataforma Java? "Java se interpreta como ejecución", ¿es correcta esta oración?

respuesta tipica

Java en sí mismo es un lenguaje orientado a objetos. Las características más notables tienen dos aspectos. Uno es el llamado "compile once, runwhere" (Compilar una vez, ejecutar en cualquier lugar), que puede obtener fácilmente capacidades multiplataforma; el otro es recolección de basura (GC, Garbage Collection), Java recupera y asigna memoria a través del recolector de basura (Garbage Collector).En la mayoría de los casos, los programadores no necesitan preocuparse por la asignación y el reciclaje de memoria.

Estaremos en contacto con JRE (Java Runtime Environment) o JDK (Java Development Kit) a diario. JRE, que es Java Runtime Environment, contiene bibliotecas de clases JVM y Java, así como algunos módulos. El JDK puede verse como un superconjunto del JRE, que proporciona más herramientas, como compiladores, varias herramientas de diagnóstico, etc.

Esta declaración es menos precisa para la declaración "Java se interpreta como ejecución". Javac primero compila el código fuente de Java que desarrollamos en bytecode y, luego, en el tiempo de ejecución, el intérprete integrado en Java Virtual Machine (JVM) convierte el bytecode en código de máquina final. Sin embargo, las JVM comunes, como la JVM Hospot proporcionada por Oracle JDK que usamos en la mayoría de los casos, proporcionan un compilador JIT (Just-In-Time), también conocido como compilador dinámico.JIT puede convertir puntos calientes en tiempo de ejecución. se compila en código máquina. En este caso, algunos códigos activos se compilan y ejecutan, no se interpretan ni ejecutan.

Análisis de puntos de prueba

En realidad, esta pregunta es un poco general. El tema en sí es muy abierto y, a menudo, examina múltiples aspectos, como si el conocimiento básico es claro, si se dominan los módulos principales y los principios operativos de la plataforma Java. Muchos entrevistadores sufrirán con este tipo de preguntas, están un poco nerviosos y no saben por dónde empezar, por lo que dan una respuesta muy breve.

Para preguntas tan generales, debe hacer todo lo posible para demostrar que su pensamiento es profundo y sistemático, y que su conocimiento de Java es más completo. Asegúrese de evitar que el entrevistador piense que usted es una persona que "sabe de qué se trata". y no sabe por qué". Después de todo, comprender la composición y el mecanismo básicos es la base para muchas cosas, como el diagnóstico de problemas o el ajuste del rendimiento en el trabajo diario. Creo que a ningún reclutador le disgustarán los entrevistadores que "aman aprender y pensar".

No se preocupe si su respuesta no es perfecta. Personalmente, creo que es normal responder a este tipo de preguntas generales de manera un poco unilateral. Por lo general, intente guiar al entrevistador y mostrarle su verdadero nivel. Este tipo de pregunta debe ser un calentamiento inicial, y el entrevistador a menudo ampliará las preguntas relacionadas en función de sus respuestas.

expansión del conocimiento

Volviendo al tema, podemos hablar brevemente sobre la comprensión de la plataforma Java desde muchos aspectos, tales como: funciones del lenguaje Java, incluidas funciones del lenguaje como genéricos y Lambda; bibliotecas de clases básicas, incluidas colecciones, IO/NIO, redes, concurrencia , seguridad y otras bibliotecas de clases básicas. Para las bibliotecas de clase que se utilizan mucho en nuestro trabajo diario, podemos resumirlas sistemáticamente antes de la entrevista, lo que es útil para jugar en el acto.

O hable sobre algunos conceptos y mecanismos básicos de JVM, como el mecanismo de carga de clases de Java, el Class-Loader integrado en versiones comunes de JDK (como JDK 8), como Bootstrap, Application y Extension Class-loader; el proceso general de carga de clases: carga, verificación, vinculación, inicialización (aquí se refiere a la "Comprensión profunda de la máquina virtual de Java" de Zhou Zhiming, un gran libro de inicio de JVM); Cargador de clases personalizado, etc. También están los principios básicos de la recolección de basura. Los recolectores de basura más comunes, como SerialGC, Parallel GC, CMS, G1, etc., tienen una buena idea de para qué tipo de carga de trabajo son adecuados. Todas estas son áreas que se pueden expandir y las presentaré de manera más sistemática en una columna posterior.

Por supuesto, qué herramientas se incluyen en el JDK u otras herramientas en el campo de Java, como compiladores, entornos de ejecución, herramientas de seguridad, herramientas de diagnóstico y monitoreo, etc. Estas herramientas básicas son la garantía de la eficiencia en el trabajo diario, también nos sirven para trabajar en otras plataformas de idiomas, muchas de ellas análogas.

La siguiente imagen es un plano relativamente amplio que he resumido para su referencia.

imagen.png

Sin más expansión, volvamos a las preguntas anteriores sobre la interpretación de la ejecución y la compilación de la ejecución. A algunos entrevistadores les gusta "ir al fondo de las cosas" en preguntas específicas porque es una forma efectiva de aprender más sobre el conocimiento de un entrevistado, y profundizaré un poco más.

Como todos sabemos, solemos dividir Java en tiempo de compilación y tiempo de ejecución. La compilación de Java y C/C++ mencionados aquí tienen diferentes significados.La compilación de Javac, que compila el código fuente de Java para generar el archivo ".class", es en realidad un código de bytes, no un código de máquina directamente ejecutable. Java protege los detalles del sistema operativo y el hardware a través de la abstracción multiplataforma de bytecode y Java Virtual Machine (JVM), que también es la base para lograr "compilar una vez, ejecutar en todas partes". Aquí recomiendo un círculo de intercambio de aprendizaje de arquitectura para todos. Guía de estudio de comunicación Pseudo Xin: 1253431195 (hay muchas preguntas y respuestas de entrevistas), que compartirá algunas grabaciones de video grabadas por arquitectos senior: Spring, MyBatis, Netty análisis de código fuente, alta concurrencia, alto rendimiento, arquitectura de microservicio distribuida The El principio de optimización del rendimiento de JVM, la arquitectura distribuida, etc. se han convertido en el sistema de conocimiento necesario para los arquitectos. También puede recibir recursos de aprendizaje gratuitos, que actualmente se están beneficiando mucho.

En tiempo de ejecución, la JVM carga el código de bytes a través del cargador de clases, lo interpreta o lo compila para su ejecución. Como mencioné anteriormente, las versiones principales de Java, como JDK 8, son en realidad un modo de interpretación y compilación mixtas, el llamado modo mixto (-Xmixed). Por lo general, la JVM que se ejecuta en modo servidor realizará decenas de miles de llamadas para recopilar suficiente información para una compilación eficiente.El umbral del modo cliente es 1500 veces. Oracle Hotspot JVM ha incorporado dos compiladores JIT diferentes. C1 corresponde al modo de cliente mencionado anteriormente, que es adecuado para aplicaciones que son sensibles a la velocidad de inicio, como las aplicaciones de escritorio de Java comunes; C2 corresponde al modo de servidor, que está optimizado para servidores de ejecución prolongada diseño de aplicaciones finales. El valor predeterminado es utilizar la denominada compilación por niveles (TieredCompilation). No voy a entrar en más detalles de JIT aquí, no hay necesidad de sumergirse en todo de una vez, presentaré el contenido de la compilación en capas más adelante.

Cuando se inicia la máquina virtual Java, puede especificar diferentes parámetros para seleccionar el modo de ejecución. Por ejemplo, especificar "-Xint" le dice a la JVM que solo interprete y ejecute el código sin compilarlo. Este modo abandona las ventajas de rendimiento que puede traer JIT. Después de todo, el intérprete lee elemento por elemento e interpreta y ejecuta elemento por elemento. En consecuencia, también hay un parámetro "-Xcomp", que le dice a la JVM que cierre el intérprete y no realice la ejecución de la interpretación, o el nivel máximo de optimización. Entonces puede preguntarse si este modo es el más eficiente. En pocas palabras, no realmente. "-Xcomp" hará que la JVM se inicie muy lentamente. Al mismo tiempo, algunos métodos de optimización del compilador JIT, como la predicción de bifurcaciones, a menudo no se pueden optimizar de manera efectiva si no se realiza la creación de perfiles.

Además de los patrones de uso de Java más comunes en nuestra vida diaria, en realidad existe un nuevo método de compilación, el llamado AOT (Ahead-of-Time Compilation), que compila directamente el código de bytes en código de máquina, evitando así el calentamiento JIT. , etc. Varios gastos generales, como la introducción de funciones AOT experimentales en Oracle JDK 9 y la adición de nuevas herramientas jaotc. Use el siguiente comando para compilar una clase o un módulo en una biblioteca AOT.

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

Luego, puede especificarlo directamente al inicio.

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

Además, Oracle JDK admite la compilación en capas y el uso colaborativo de AOT, que no es una elección entre los dos. AOT no es la única forma, la industria ha tenido durante mucho tiempo herramientas de terceros (como GCJ, Excelsior JET) para proporcionar funciones relacionadas.

Además, como una plataforma poderosa, la JVM no es solo el lenguaje Java que puede ejecutarse en la JVM, sino también códigos de bytes esencialmente compatibles. El lenguaje Java en sí mismo también proporciona conveniencia para esto. Podemos ver similitudes como Clojure y Scala. , Groovy , JRuby, Jython y muchos otros lenguajes JVM están activos en diferentes escenarios.

Hoy, presenté brevemente algunos contenidos relacionados con la plataforma Java, con el fin de crear una impresión general, incluidas las características del lenguaje Java, las bibliotecas de clases principales y las bibliotecas de clases de terceros de uso común, los principios básicos de la máquina virtual Java y las herramientas relacionadas. son útiles

Supongo que te gusta

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