Preguntas de la entrevista sobre Java
Cuando un programa Java viola las reglas semánticas de Java, la Máquina Virtual Java representa el error como una excepción. Las violaciones de las reglas semánticas incluyen dos situaciones. Una es la verificación semántica integrada en la biblioteca de clases de Java. Por ejemplo, si el subíndice de la matriz está fuera de los límites, se generará una excepción IndexOutOfBoundsException al acceder a un objeto nulo. Otra situación es que Java permite a los programadores ampliar esta verificación semántica. Los programadores pueden crear sus propias excepciones y elegir libremente cuándo lanzarlas utilizando la palabra clave throw. Todas las excepciones son subclases de java.lang.Thowable
2 Similitudes y diferencias entre las interfaces Java y las clases virtuales C++.
Dado que Java no admite la herencia múltiple y es posible que una clase u objeto utilice métodos o propiedades en varias clases u objetos, el mecanismo de herencia única existente no puede cumplir con los requisitos. En comparación con la herencia, las interfaces son más flexibles porque no hay código de implementación en la interfaz. Cuando una clase implementa una interfaz, debe implementar todos los métodos y propiedades en la interfaz, y las propiedades en la interfaz son públicas estáticas de forma predeterminada y todos los métodos son públicos de forma predeterminada. Una clase puede implementar múltiples interfaces.
3. Ventajas y principios de la recogida de basura. Y considere dos mecanismos de reciclaje.
Una característica notable del lenguaje Java es la introducción de un mecanismo de recolección de basura, que resuelve el problema de administración de memoria más problemático para los programadores de C++, de modo que los programadores de Java ya no necesitan considerar la administración de memoria al escribir programas. Debido al mecanismo de recolección de basura, los objetos en Java ya no tienen el concepto de "alcance". Solo las referencias a objetos tienen "alcance". La recolección de basura puede prevenir eficazmente las pérdidas de memoria y utilizar eficazmente la memoria disponible. El recolector de basura generalmente se ejecuta como un único subproceso de bajo nivel que, en circunstancias impredecibles, limpia y recupera objetos en el montón de memoria que han muerto o no se han utilizado durante mucho tiempo. Los programadores no pueden llamar al recolector de basura en tiempo real para recolectar basura de uno o todos los objetos. Los mecanismos de reciclaje incluyen recolección de basura de copias generacionales, recolección de basura marcada y recolección de basura incremental.
4. Método de sincronización de hilos.
Esperar(): deja que un hilo espere y libera el bloqueo del objeto retenido.
Sleep(): Este es un método estático utilizado para poner un hilo en ejecución en estado de suspensión. Llame a este método para detectar InterruptedException.
Notify(): activa un hilo en espera. Tenga en cuenta que al llamar a este método, no puede activar exactamente un hilo en espera. En cambio, la JVM decide qué hilo activar, no en función de la prioridad.
Allnotity(): activa todos los subprocesos en estado de espera. Tenga en cuenta que en lugar de otorgar a todos los subprocesos despiertos un bloqueo sobre un objeto, se les permite competir.
5. ¿Cuál es la diferencia entre errores y excepciones?
Los errores significan errores y excepciones a nivel del sistema que el programa no tiene que manejar.
Las excepciones se refieren a excepciones que el programa necesita detectar o manejar.
6. En Java, las clases se declaran como tipos finales. ¿Qué quiere decir esto?
Indica que la clase no se puede heredar y es una clase de nivel superior.
¿Cuál es la diferencia entre montón y pila?
Stack es una colección lineal, y las operaciones de agregar y eliminar elementos deben completarse en el mismo párrafo. La pila se procesa según el principio de último en entrar, primero en salir. El montón es una parte integral de la pila.
8 Hablemos de final y, por último, de la diferencia entre finalizar.
Final-Modifier (palabra clave) Si una clase se declara como Final, significa que ya no puede derivar nuevas subclases, ni se puede heredar como clase principal. Por tanto, una clase no puede declararse abstracta y final al mismo tiempo. Declarar variables o métodos finales garantiza que no se cambiarán mientras estén en uso. A las variables declaradas finales se les debe asignar un valor inicial cuando se declaran y solo pueden leerse pero no modificarse mediante referencias posteriores. Los métodos declarados como finales sólo se pueden utilizar y no se pueden sobrecargar.
Finalmente: proporcione un bloque Finalmente para realizar cualquier operación de limpieza durante el manejo de excepciones. Si se produce una excepción, se ejecutará la cláusula catch correspondiente y el control pasará al bloque finalmente (si lo hay).
Completo: nombre del método. La tecnología Java permite el uso del método finalize() para realizar la limpieza necesaria antes de que el recolector de basura borre un objeto de la memoria. El recolector de basura llama a este método cuando determina que no se hace referencia al objeto. Está definido en la clase Objeto, por lo que todas las clases lo heredan. Las subclases anulan el método finalize() para organizar los recursos del sistema o realizar otras tareas de limpieza. Antes de que el recolector de basura elimine el objeto, se llama al método finalize().
9 ¿Pueden las clases internas anónimas extender (heredar) otras clases e implementar interfaces?
Las clases internas anónimas son clases internas sin nombre. No se pueden ampliar otras clases, pero otra clase interna puede implementar una clase interna como interfaz.
10 La diferencia entre clases anidadas estáticas y clases internas
Clases anidadas (generalmente C++), clases internas (generalmente JAVA). La mayor diferencia entre las clases internas de Java y las clases anidadas de C++ es si existen referencias externas.
Nota: Clase interna estática significa 1 crear un objeto de clase interna estática sin objeto de clase externa, 2 no puede acceder al objeto de clase externa desde el objeto de clase interna estática.
11. Diferencias con & & amp.
& amp es un operador bit a bit. & amp& amp son operadores lógicos booleanos.
12 La diferencia entre HashMap y Hashtable.
Todos pertenecen a la clase de interfaz Map, que implementa el mapeo de claves únicas a valores específicos.
La clase HashMap no está categorizada ni ordenada. Permite una clave nula y múltiples valores nulos.
Hashtable es similar a HashMap, pero no permite claves nulas ni valores nulos. También es más lento que HashMap porque es sincrónico.
13 La diferencia entre conjuntos y colecciones.
Collection es una interfaz en java.util y es la interfaz principal de varias estructuras de colección.
Colecciones es una clase bajo java.util, que contiene varios métodos estáticos sobre operaciones de colección.
14Cuándo usar afirmar.
Una aserción es una declaración que contiene una expresión booleana que se supone verdadera cuando se ejecuta.
Si la expresión se evalúa como falsa, se informa un error de afirmación. Se utiliza con fines de depuración:
Assertion(a & gt0); //if & lt= 0
La afirmación tiene dos formas:
Expresión de afirmación 1 ;
afirmar expresión 1: expresión 2;
La expresión 1 siempre debe producir un valor booleano.
Expresión2 puede ser cualquier expresión que produzca un valor. Este valor se utiliza para generar y mostrar depuraciones adicionales.
La cadena de mensaje de la información.
De forma predeterminada, las aserciones están deshabilitadas. Para habilitar aserciones en tiempo de compilación, necesita usar el indicador fuente 1.4:
javac-source 1.4 Test.java
Para habilitar aserciones en tiempo de ejecución, puede usar -enableassertions o -ea bandera.
Para elegir deshabilitar las aserciones en tiempo de ejecución, puede usar el indicador de evaluaciones -da o -disable.
Para habilitar aserciones en clases del sistema, puede usar el indicador -esa o -dsa. También puede habilitar o deshabilitar aserciones por paquete.
Las afirmaciones se pueden colocar en cualquier lugar al que normalmente no se llegaría. Las aserciones se pueden utilizar para validar los parámetros pasados a métodos privados. Sin embargo, las aserciones no deben usarse para validar los parámetros pasados a métodos públicos porque los métodos públicos deben verificar sus parámetros independientemente de si las aserciones están habilitadas o no. Sin embargo, puede utilizar aserciones en métodos públicos y no públicos para probar las condiciones posteriores.
Además, las afirmaciones no deberían cambiar el estado del programa de ninguna manera.
15 ¿Qué es GC? ¿Por qué hay GC? (Base).
GC es un recolector de basura. Los programadores de Java no tienen que preocuparse por la gestión de la memoria porque el recolector de basura la gestiona automáticamente. Para solicitar la recolección de basura, puede llamar a uno de los siguientes métodos:
System.gc()
Runtime.getRuntime(). gc()
16 string s = new string(" XYZ "); ¿Cuántos objetos de cadena se crearon?
Dos objetos, uno es "xyz" y el otro es el objeto de referencia S que apunta a "xyz".
17¿Qué son las matemáticas? ¿Círculo (11,5)? ¿Cuánto cuesta Math.round (-11,5)?
Math.round(11.5) devuelve (largo)12, Math.round(-11.5) devuelve (largo)-11
18 corto s 1 = 1; s 1+1; ¿Qué pasa? Corto s 1 = 1; s 1+= 1; ¿Qué pasa?
Corto s 1 = 1; s1 es de tipo short, s1+1 es de tipo int y no se puede convertir explícitamente al tipo short. Se puede modificar como s1 =(short)(s1+1). Corto s 1 = 1; S1 += 1 es correcto.
19 ¿Cuál es la diferencia entre dormir() y esperar()? Control de subprocesos
El método sleep() es un método que detiene un subproceso durante un período de tiempo. Una vez transcurrido el intervalo de suspensión, el subproceso no necesariamente reanuda la ejecución de inmediato. Esto se debe a que en ese momento, es posible que otros subprocesos se estén ejecutando y no estén programados para abandonar la ejecución a menos que (a) el subproceso "despertador" tenga una prioridad más alta y (b) el subproceso en ejecución esté bloqueado por otros motivos.
Wait() es una interacción de hilo. Si un subproceso llama a un objeto de sincronización X, el subproceso suspenderá la ejecución y el objeto llamado entrará en estado de espera hasta que se despierte o expire el tiempo de espera.
20 ¿Existe goto en Java?
Goto: una palabra reservada de Java que ya no se utiliza en Java.
21 ¿El array tiene un método length()? ¿String tiene un método length()?
Los arrays no tienen un método length(), pero sí un atributo de longitud.
La longitud del método de la cadena es ().
22La diferencia entre sobrecarga y anulación. ¿Puede un método sobrecargado cambiar el tipo de valor de retorno?
La anulación y la sobrecarga de métodos son manifestaciones diferentes del polimorfismo de Java. La anulación es una manifestación de polimorfismo entre clases primarias y subclases, y la sobrecarga es una manifestación de polimorfismo en una clase. Si un método definido en una clase secundaria tiene el mismo nombre y parámetros que su clase principal, decimos que el método está anulado. Cuando un objeto en una subclase usa este método, llamará a la definición en la subclase. Por ello, la definición en la clase principal parece estar "protegida". Si se definen varios métodos con el mismo nombre en una clase, tendrán diferentes números de parámetros o diferentes tipos de parámetros, lo que se denomina sobrecarga de métodos.
El método sobrecargado consiste en cambiar el tipo de valor de retorno.
23 Los elementos del conjunto no se pueden repetir, entonces, ¿qué método se utiliza para distinguir si se repiten? ¿Es == o e
quals()? ¿Cuál es la diferencia entre los dos?
Los elementos de la colección no se pueden repetir, por lo que se utiliza el método iterator() para distinguir si se repiten. Igual a (
) es para determinar si los dos grupos son iguales. Los métodos iguales () y == determinan si los valores de referencia apuntan al mismo objeto. equals() se anula en la clase para devolver un valor verdadero cuando el contenido y los tipos de dos objetos separados coinciden.
24 Las excepciones de tiempo de ejecución más comunes.
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, N egativeArraySizeException, NoSuchElementException, llPointerException, ProfileDataException
ityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
¿Cuál es la diferencia entre errores y excepciones?
El error indica que la recuperación es un problema grave cuando la recuperación no es imposible sino difícil. Por ejemplo, desbordamiento de memoria. Es imposible esperar que un programa pueda manejar tal situación.
Las excepciones indican problemas de diseño o implementación. En otras palabras, si el programa se ejecuta normalmente, esto nunca sucederá.
26¿Las listas, conjuntos y mapas heredan de la interfaz de colección?
Lista, establecida en
Mapa no
¿Cuál es la diferencia entre clase abstracta e interfaz?
Una clase que declara la existencia de un método sin implementarlo se llama clase abstracta. Se utiliza cuando desea crear una clase que incorpore algún comportamiento básico y declarar un método para esta clase, pero no puede implementar esta clase en esta clase. No se pueden crear instancias de clases abstractas. Sin embargo, puede crear una variable de tipo clase abstracta y apuntarla a una instancia de una subclase concreta. No puede haber constructores abstractos ni métodos estáticos abstractos. Las subclases de una clase abstracta proporcionan implementaciones para todos los métodos abstractos en su clase principal; de lo contrario, también son clases abstractas. En su lugar, implemente este método en una subclase. Otras clases que conozcan su comportamiento pueden implementar estos métodos en su clase.
Las interfaces son variaciones de clases abstractas. En una interfaz, todos los métodos son abstractos. La herencia múltiple se logra implementando dicha interfaz. Todos los métodos de una interfaz son abstractos y no tienen cuerpo de programa. Las interfaces solo pueden definir variables miembro finales estáticas. La implementación de una interfaz es similar a la implementación de una subclase, excepto que la clase de implementación no puede heredar el comportamiento de la definición de la interfaz. Cuando una clase implementa una interfaz particular, define (es decir, le da el cuerpo del programa) todos los métodos de dicha interfaz. Luego puede llamar a los métodos de la interfaz en cualquier objeto de la clase que implemente la interfaz. Debido a la clase abstracta, permite usar el nombre de la interfaz como tipo de variable de referencia. El enlace dinámico habitual entrará en vigor. Las referencias se pueden convertir hacia y desde tipos de interfaz, y el operador instancia de se puede utilizar para determinar si la clase de un objeto implementa la interfaz.
¿Puede un método abstracto ser estático, nativo y sincrónico al mismo tiempo?
Tampoco.
¿Puede una interfaz heredar una interfaz? ¿Puede una clase abstracta implementar una interfaz? ¿Puede una clase abstracta heredar de una clase concreta?
Las interfaces se pueden heredar de las interfaces. Las clases abstractas pueden implementar interfaces y las clases abstractas pueden heredar clases de entidad, pero solo si la clase de entidad tiene un constructor explícito.
¿Utilizas run() o start() para iniciar un hilo?
Iniciar un subproceso es llamar al método start() para hacer que el procesador virtual representado por el subproceso esté en un estado ejecutable, lo que significa que puede programarse para su ejecución por parte de la JVM. Esto no significa que el hilo se ejecutará inmediatamente.
El método run() puede detener un hilo generando un indicador de que debe salir.
31¿Se puede anular el constructor?
El constructor no se puede heredar, por lo que no se puede anular, pero sí se puede sobrecargar.
¿Puedo heredar de la clase String?
La clase String es una clase final y por lo tanto no se puede heredar.
Cuando un hilo ingresa a un método sincronizado de un objeto, ¿pueden otros hilos ingresar a otros métodos del objeto?
No, solo un hilo puede acceder a los métodos sincronizados de un objeto.
Hay una declaración de retorno en 33 intentos {}, por lo que el código que sigue a este intento en finalmente {} no lo hará
¿Se ejecutará, cuándo se ejecutará y regresará? ¿Antes o después de regresar?
Se ejecutará antes de regresar.
Pregunta de programación: ¿Cuál es la forma más eficiente de calcular 2 por 8?
2 & lt& lt三
35 Dos objetos tienen el mismo valor (x.equals(y) == true), pero pueden tener diferentes códigos hash. ¿Es esto correcto?
No, tiene el mismo código hash.
Cuando un objeto se pasa a un método como parámetro, el método puede cambiar las propiedades del objeto.
Puede devolver el resultado modificado. Entonces, ¿se pasa por valor o? pasando por referencia?
Es una transferencia de valor. El lenguaje de programación Java sólo pasa parámetros por valor. Cuando una instancia de objeto se pasa como parámetro a un método, el valor del parámetro es una referencia al objeto. El contenido del objeto puede cambiar dentro del método llamado, pero la referencia al objeto nunca cambia.
37 ¿Puede el interruptor actuar sobre byte, long y String?
En switch(expr1), expr1 es una expresión entera. Por lo tanto, los parámetros pasados a las declaraciones switch y case deben ser int, short, char o byte. La cuerda no puede ser ni larga ni corta.
38 Tablas hash y tablas hash
Hashtable hereda de la clase Diccionario, y HashMap es la implementación de la interfaz Map introducida en Java 1.2.
HashMap permite null como clave o valor de una entrada, pero Hashtable no.
Además, HashMap elimina el método contiene de Hashtable y lo cambia a contiene valor y contiene clave. Porque el método contiene es engañoso.
La mayor diferencia es que el método de Hashtable es Sincronizar, pero HashMap no.
Cuando varios subprocesos acceden a Hashtable, no necesitan sincronizar sus propios métodos, pero HashMap debe proporcionar sincronización externa para ello.
Hashtable y HashMap utilizan aproximadamente el mismo algoritmo hash/rehash, por lo que no habrá una gran diferencia en el rendimiento.