La Red de Conocimientos Pedagógicos - Currículum vitae - entrevista al programador java

entrevista al programador java

Hay muchas preguntas y respuestas sobre Java en Internet.

Primero, hablemos de las diferencias entre final, finalmente y finalizar. final: modificador (palabra clave) Si una clase se declara final, significa que no puede derivar nuevas subclases y no se puede heredar como clase principal. Por lo tanto, una clase no puede declararse abstracta y final. Declare las variables o métodos como finales para garantizar que no se cambiarán durante el uso. A las variables declaradas como finales se les debe dar un valor inicial cuando se declaran, y solo se pueden leer en referencias posteriores y no se pueden modificar. Los métodos declarados como finales también solo se pueden usar 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 ejecuta la cláusula catch correspondiente y el control pasa al bloque finalmente (si lo hay). finalizar: 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 el objeto de la memoria. El recolector de basura llama a este método en este objeto 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 otros trabajos de limpieza. El método finalize() se llama en el objeto antes de que el recolector de basura lo elimine.

En segundo lugar, ¿puede la clase interna anónima extender (heredar) otras clases y puede implementar una interfaz? Las clases internas anónimas son clases internas sin nombre. No puede extender (heredar) otras clases, pero una clase interna puede servir como interfaz y ser implementada por otra clase interna.

En tercer lugar, cuanto más pueda saber sobre la diferencia entre la clase anidada estática y la clase interna, mejor (algunas preguntas de la entrevista son muy generales). Clase anidada (normalmente en términos C), clase interna (normalmente en términos JAVA). La mayor diferencia entre las clases internas de Java y las clases anidadas de C es si hay referencias al exterior. Para obtener más información, consulte /articles/services/view.asp?id=704amp; page=1 Nota: Clase interna estática (Clase interna) significa 1 para crear un objeto de clase interna estática y no necesita un objeto de clase externo 2 no puede. ser creado a partir de un objeto estático de una clase interna accede a un objeto de clase externa

Cuarto, la diferencia entre amp 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. Todas son clases que pertenecen a la interfaz Map e implementan el mapeo de claves únicas a valores específicos. La clase HashMap no ordena ni ordena. 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.

Sexto, la diferencia entre Colección y Colecciones. Colecciones es una clase de java.util, que contiene varios métodos estáticos relacionados con operaciones de recopilación. La colección es una interfaz en java.util, que 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 la declaración.

Si la expresión se evalúa como falsa, se informa un AssertionError. Se utiliza con fines de depuración: afirmar (a gt; 0); // arroja un error de aserción si a <= 0 Las afirmaciones pueden presentarse en dos formas: afirmar Expresión1; afirmar Expresión1: Expresión1 siempre debe producir un valor booleano. Expresión2 puede ser cualquier expresión que dé como resultado un valor. Este valor se utiliza para generar un mensaje de cadena que muestra más información de depuración. Las afirmaciones están deshabilitadas de forma predeterminada. Para habilitar aserciones en tiempo de compilación, use el indicador fuente 1.4: javac -source 1.4 Test.java Para habilitar aserciones en tiempo de ejecución, use el indicador -enableassertions o -ea. Para elegir deshabilitar las aserciones en tiempo de ejecución, use el indicador -da o -disableassertions. Para habilitar aserciones en clases del sistema, use el indicador -esa o -dsa. Las aserciones también se pueden habilitar o deshabilitar por paquete. Las afirmaciones se pueden colocar en cualquier lugar al que no se espera llegar en circunstancias normales. 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. Sin embargo, puede utilizar aserciones para probar condiciones posteriores en métodos tanto públicos como no públicos. Además, las afirmaciones no deberían cambiar el estado del programa de ninguna manera.

Ocho, ¿qué es GC? ¿Por qué existe GC (Conceptos básicos)? GC es el recolector de basura. Los programadores de Java no tienen que preocuparse por la gestión de la memoria porque el recolector de basura se encarga de ello automáticamente. Para solicitar la recolección de basura, puede llamar a uno de los siguientes métodos: System.gc() Runtime.getRuntime().gc()

Noveno, String s = new String("xyz creado Cómo"); ¿Cuántos objetos de cadena? Dos objetos, uno es "xyx" y el otro es el objeto de referencia que apunta a "xyx".

Décimo, ¿a qué equivale Math.round(11.5)? ¿A qué equivale Math.round(-11.5)? Math.round(11.5) devuelve (largo) 12, Math.round(-11.5). ) devuelve (long)-11;

Undécimo, short s1 = 1; s1 = s1 1; 1; Incorrecto, s1 es de tipo short, s1 1 es de tipo int y no se puede convertir explícitamente a tipo short. Se puede modificar como s1 =(short)(s1 1). corto s1 = 1; s1 = 1 es correcto.

Duodécimo, ¿cuál es la diferencia entre dormir() y esperar()? El método favorito de los hilos, el método dormir() es un método para detener el hilo por 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 programados para abandonar la ejecución, a menos que (a) el subproceso "despertador" tenga una prioridad más alta (b) el subproceso en ejecución esté bloqueado por otras razones. Cuando se usa wait() para la interacción de subprocesos, si el subproceso emite una llamada de espera() 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? Una palabra reservada en Java que actualmente no se utiliza en Java. Decimocuarto, ¿la matriz tiene el método length()? ¿La cadena tiene el método length()? Las matrices no tienen un método de longitud (), pero tienen un atributo de longitud. String tiene el método length(). Decimoquinto, la 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 principales y subclases, y la sobrecarga es una manifestación de polimorfismo en una clase. Si un método definido en una subclase tiene el mismo nombre y parámetros que su clase principal, decimos que el método está anulando. Cuando un objeto de 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 diferente número de parámetros o diferentes tipos de parámetros, se denomina sobrecarga de métodos. El método sobrecargado puede 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 o no? ¿Debería usar == o igual ()? Los elementos del conjunto son Si no se puede repetir, utilice el método iterador () para distinguir si se repite o no. igual () determina si dos conjuntos son iguales. Los métodos equals() y == determinan si un valor de referencia apunta al mismo objeto. se anula en la clase para que devuelva 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 veas con más frecuencia.

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, VacuumStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, ingResourceException, NegativeArraySizeException, SuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

Décimo octavo, ¿cuál es la diferencia entre error y excepción? El error representa un problema grave en una situación donde la recuperación no es imposible pero sí difícil. Por ejemplo, desbordamiento de memoria. Es imposible esperar que un programa pueda manejar tal situación. La excepción representa un problema de diseño o implementación. Es decir, representa una situación que nunca ocurriría si el programa se estuviera ejecutando normalmente.

Decimonoveno, ¿List, Set y Map heredan de la interfaz de Colección? List, Set son Maps pero no Map

Decimonoveno, ¿cuál es la diferencia entre clase abstracta e interfaz? métodos Una clase que existe sin implementarla se llama clase abstracta. Se usa cuando desea crear una clase que incorpora algún comportamiento básico y declara métodos para la clase, pero la clase no se puede implementar en la clase. No se pueden crear instancias de clases abstractas. Sin embargo, puede crear una variable cuyo tipo sea una clase abstracta y hacer que apunte a una instancia de una subclase concreta. No puede haber constructores abstractos ni métodos estáticos abstractos. Las subclases de la clase abstracta proporcionan implementaciones para todos los métodos abstractos en su clase principal; de lo contrario, también serían clases abstractas. En su lugar, implemente el método en una subclase. Otras clases que conozcan su comportamiento pueden implementar estos métodos en su clase. Una interfaz es una variante de una clase abstracta. En una interfaz, todos los métodos son abstractos. Se puede obtener herencia múltiple implementando dicha interfaz. Todos los métodos de la interfaz son abstractos y ninguno de ellos tiene un cuerpo de programa. Las interfaces solo pueden definir variables miembro finales estáticas. La implementación de una interfaz es similar a la creación de subclases, excepto que la clase implementadora 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 esta interfaz. Luego puede llamar a los métodos de la interfaz en cualquier objeto de la clase que implemente la interfaz. Dado que existen clases abstractas, permite utilizar el nombre de la interfaz como tipo de variable de referencia. La vinculación dinámica normal tendrá efecto.

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.

Veintiuno, ¿puede el método abstracto ser estático, nativo y sincronizado al mismo tiempo? Ninguno

Veintidós, ¿puede la interfaz heredar interfaces? ¿Se pueden implementar clases abstractas? ¿Pueden las clases abstractas heredar clases concretas? Las clases abstractas pueden implementar interfaces y si las clases abstractas pueden heredar clases de entidad, pero la premisa es que la clase de entidad debe tener un constructor claro.

Vigésimo tercero, ¿usa run() o start() para iniciar un subproceso? Para iniciar un subproceso, llama al método start() para que el procesador virtual representado por el subproceso sea ejecutable. state. Esto 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 salida obligatoria.

Vigésimo cuarto, ¿se puede anular el constructor Constructor? El constructor Constructor no se puede heredar, por lo que la Anulación no se puede anular, pero la Sobrecarga se puede anular.

Vigésimo quinto, ¿puedo heredar la clase String? La clase String es una clase final y no se puede heredar.

Vigésimo sexto, cuando un subproceso ingresa a un método sincronizado de un objeto, ¿pueden otros subprocesos ingresar a otros métodos del objeto? No, solo un subproceso puede acceder a un método sincronizado de un objeto.

Veintisiete, hay una declaración de retorno en el intento {}, luego se ejecutará el código finalmente {} inmediatamente después de este intento, ¿cuándo se ejecutará, antes del retorno o se ejecutará después? y ejecutado antes del regreso.

Vigésimo octavo, pregunta de programación: ¿Utilizar el método más eficiente para calcular cuánto es 2 por 8? A los programadores con experiencia en C les gusta especialmente hacer este tipo de preguntas. 2 lt; lt; 3

Veintinueve, dos objetos tienen el mismo valor (x.equals(y) == true), pero pueden tener diferentes códigos hash. tener el mismo código hash.

Treinta, cuando un objeto se pasa como parámetro a un método, el método puede cambiar las propiedades del objeto y devolver los resultados modificados. Entonces, ¿se pasa por valor o por referencia? 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.

Treinta y uno, ¿se puede aplicar la función switch a byte, long o 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. No se pueden utilizar ni hilos largos ni cuerdas en el interruptor.

Treinta y dos, pregunta de programación: escribe un Singleton. La función principal del modo Singleton es garantizar que solo exista una instancia de una clase en una aplicación Java.

Generalmente, el patrón Singleton suele tener varias formas: La primera forma: define una clase, su constructor es privado, tiene una variable privada estática de la clase y cuando se inicializa la clase, se crea una instancia a través de un getInstance público. una referencia a él y luego llama a los métodos que contiene. public class Singleton { private Singleton(){} // ¿No es extraño definir una instancia tuya internamente? // Tenga en cuenta que esto es privado solo para llamadas internas private static Singleton instancia = new Singleton(); // Esto proporciona un método estático para acceso externo a esta clase, al que se puede acceder directamente public static Singleton getInstance() { return instancia; } } La segunda forma: public class Singleton { privado estático Singleton instancia = null; público estático sincronizado Singleton getInstance() { // Este método es mejor que el anterior. No necesita generar objetos cada vez, solo la primera vez /. / used ¡Genere instancias para mejorar la eficiencia! if (instancia==null) instancia=new Singleton(); return instancia; } } Otras formas: define una clase, su constructor es privado y todos los métodos son estáticos. Generalmente se cree que la primera forma es más segura. 33. Hashtable y HashMap Hashtable hereda de la clase Diccionario, y HashMap es una implementación de la interfaz Map introducida en Java 1.2 que permite usar nulo como clave o valor de. una entrada, mientras que Hashtable Otra cosa que no está permitida es que HashMap eliminó el método contiene de Hashtable y lo cambió a contiene valor y contiene clave. Porque el método contiene es fácilmente engañoso. La mayor diferencia es que el método de Hashtable está sincronizado, pero HashMap no. Cuando varios subprocesos acceden a Hashtable, no es necesario que sincronice sus métodos usted mismo, mientras que HashMap debe proporcionarle sincronización externa. Los algoritmos hash/rehash utilizados por Hashtable y HashMap son aproximadamente los mismos, por lo que no habrá una gran diferencia en el rendimiento.