¿Alguien tiene alguna pregunta sobre la entrevista sobre Java?
Primero hablemos de la diferencia entre final y finalmente finalizar.
¿Finales? Modificador (palabra clave) Si una clase se declara final, significa que no puede derivar nuevas subclases ni heredar de una 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.
¿Por fin? 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).
¿Finalizado? 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().
En segundo lugar, ¿pueden las clases internas anónimas extender 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.
3. Cuanto más puedas explicar sobre la diferencia entre clases anidadas estáticas y clases internas, mejor (algunas preguntas de la entrevista son muy generales).
Clases anidadas (normalmente C), clases internas (normalmente JAVA). La mayor diferencia entre las clases internas de Java y las clases anidadas de C es si existen referencias externas. ¿Ver /articles/services/view.asp? id = 704 amppage=1
Nota: Clase interna estática significa que 1 crea un objeto de clase interna estática sin un objeto de clase externo, 2 no puede acceder al objeto de clase externa desde un objeto de clase interna estática.
Cuarto, la diferencia entre ; y amp.
amp es un operador bit a bit. amp amp es un operador lógico booleano.
En quinto lugar, 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.
En sexto lugar, la diferencia entre colección y colección.
Colecciones es una clase bajo java.util, que contiene varios métodos estáticos sobre operaciones de colección.
Collection es una interfaz en java.util y es la interfaz principal de varias estructuras de colección.
Séptimo, cuándo utilizar 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 AssertionError. 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; /p>
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 un mensaje de cadena que muestra más información de depuració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 banderas.
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.
Octavo, ¿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()
Noveno, cadena s = nueva cadena (" XYZ "); ¿cuántos objetos de cadena se crean?
Dos objetos, uno es "xyx" y el otro es el objeto de referencia S que apunta a "xyx".
Décimo, ¿cuánto cuesta Math.round (11.5)? ¿Cuánto cuesta Math.round (-11,5)?
Math.round(11.5) devuelve (largo)12, Math.round(-11.5) devuelve (largo)-11
Undécimo, 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 = (corto)(s1 1). Corto s 1 = 1; S1 = 1 es correcto.
Duodécimo, ¿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 se estén ejecutando otros subprocesos y no están programados para abandonar la ejecución a menos que (a) el subproceso "activado" tenga una prioridad más alta.
(b) El hilo 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.
Decimotercero, ¿Java tiene goto?
¿Ir a? Las palabras reservadas en Java ya no se utilizan en Java.
Decimocuarto, ¿la matriz 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 ().
En quinto lugar, la diferencia entre sobrecarga y ultra vires. ¿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 y tienen diferentes números de parámetros o diferentes tipos de parámetros, esto se denomina sobrecarga de métodos. El método de sobrecarga consiste en cambiar el tipo de valor de retorno.
Décimo sexto, los elementos del conjunto no se pueden repetir, entonces, ¿qué método se utiliza para distinguir si se repiten? ¿Es == o igual a ()? ¿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. Equals() determina si dos conjuntos son iguales.
Los métodos equals() y == determinan si el valor de referencia apunta 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.
Décimo séptimo, dame una excepción de tiempo de ejecución que escuches con más frecuencia.
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, excepción de fuente, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
Décimo octavo, ¿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á.
Decimonoveno, ¿la lista, el conjunto y el mapa heredan de la interfaz de colección?
Las listas y configuraciones son mapas, no
Vigésimo, ¿cuál es la diferencia entre clases abstractas e interfaces?
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.
Número 21, ¿puede un método abstracto ser estático, nativo y sincrónico al mismo tiempo?
Tampoco.
Veintidós, ¿pueden las interfaces heredar interfaces? ¿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, independientemente de si la clase abstracta puede heredar clases de entidad, pero solo si la clase de entidad tiene un constructor explícito.
Veintitrés, ¿usas 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 ser programado y ejecutado por 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.
Vigésimo cuarto, ¿se puede anular el constructor?
El constructor no se puede heredar, por lo que no se puede anular, pero se puede sobrecargar.
Veinticinco, ¿puedo heredar la clase de cadena?
La clase String es una clase final y por lo tanto no se puede heredar.
Vigésimo sexto, cuando un hilo ingresa al 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.
Veintisiete, hay una declaración de retorno en el intento {}, entonces, ¿se ejecutará inmediatamente el código finalmente {} después de este intento? ¿Cuándo se ejecutará antes o después del retorno?
Se ejecutará antes de regresar.
Vigésimo octava, pregunta de programación: ¿Cuál es la forma más eficiente de calcular 2 por 8?
A los programadores con experiencia en C les gusta especialmente hacer este tipo de preguntas.
2 lt lt三
Veintinueve, 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.
Treinta, cuando un objeto se pasa como parámetro a un método, este método puede cambiar las propiedades del objeto y devolver el resultado modificado. Entonces, ¿esto se pasa por valor o se pasa 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 del objeto nunca cambia.
Treinta y uno, ¿puede el interruptor actuar sobre bytes, largos y cadenas?
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.
Treinta y dos, problema de programación: escribir un solo cuerpo.
La función principal del patrón Singleton es garantizar que solo exista una instancia de una clase en una aplicación Java.
El patrón singleton general generalmente tiene varias formas:
La primera forma: define una clase, su constructor es privado y tiene variables privadas estáticas de esta clase. Cuando se crea una instancia de una clase, se obtiene una referencia a ella a través del método público getInstance y luego se llaman sus métodos.
Clase pública Singleton {
Private Singleton(){}
// ¿Es extraño definir una instancia propia dentro de ti?
//Tenga en cuenta que esto es privado y solo se usa para llamadas internas.
Instancia Singleton estática privada = new Singleton();
//Existe un método estático para el acceso externo a esta clase, al que se puede acceder directamente.
Singleton estático público getInstance() {
Instancia de devolución
}
}
Formulario de segundo tipo; :
Clase pública Singleton {
Instancia única estática privada = null
Singleton estática pública sincronizada getInstance() {
//Esto El método es mejor que el anterior. No se genera ningún objeto cada vez, solo la primera vez.
//¡Genere instancias durante el uso para mejorar la eficiencia!
if (instancia==null)
instancia = new Singleton();
Devolver instancia;}
}
Otras formas:
Defina una clase cuyo constructor sea privado y todos los métodos sean estáticos.
La primera forma generalmente se considera más segura.
Artículo 33 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.
Al acceder a Hashtable desde múltiples subprocesos, no necesita 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.