1. Pregunta: Si los objetos A y B se hacen referencia circularmente, ¿pueden ser GC?
Respuesta: Sí, las máquinas virtuales hoy usan algoritmos de análisis de accesibilidad para determinar si el objeto sobrevive, en lugar de simplemente referirse a contar el objeto. El algoritmo de análisis de accesibilidad utiliza una serie de objetos "GC Roots" (objetos a los que se hace referencia en la pila de máquinas virtuales, objetos de referencia de atributos estáticos) como punto de partida. Las rutas que estos nodos buscan hacia abajo se llaman cadenas de referencia. Cuando un objeto no tiene ninguna conexión de cadena de referencia a las raíces GC, se demuestra que el objeto no está disponible.
2. ¿Cómo se causa el desbordamiento de la memoria en Java?
OutOfMemoryError:
(1) El programa espacial Pergern utiliza una gran cantidad de frascos o clases, lo que hace que la máquina virtual Java no cargue el espacio de clase sea insuficiente.
Solución: Ajuste los parámetros XX: Permsize y XX: MaxPermizize, reduzca los paquetes JAR y reduzca la carga duplicada de clases.
(2) Java Heap Space Java Virtual Machine crea demasiados objetos.
Solución: Ajuste los parámetros XMS (tamaño del montón inicial) XMX (tamaño máximo del montón), verifique los bucles muertos o los objetos duplicados innecesarios
(3) No se puede crear un nuevo hilo nativo, el JVM ocupa demasiado espacio de memoria, y crear subprocesos en el JVM también requiere crear subprocesos en el sistema operativo.
SOLUCIÓN: Cambiar los hilos en JVM.
3. Cadena S = "123"; ¿Cuántos objetos se generan en esta declaración?
Si no hay "123" en el grupo de cuerdas, se genera y se coloca un objeto en la piscina constante. Si hay "123", se generan 0 objetos.
Si String s = new String("123") , si no hay no hay en el grupo constante, cree uno en el grupo constante y luego cree uno en la memoria de Heap.
4. ¿Cuál es la diferencia entre error, excepción y runtimeException?
El error y la excepción son subclases de lanzamiento, y RuntimeException es una subclase de excepción.
El error se usa para indicar que una aplicación razonable no debe intentar capturar errores.
La excepción señala las condiciones que una aplicación razonable necesita capturar. Se divide en excepciones verificadas y excepciones sin control.
RuntimeException es una excepción que no se verifica, no requiere tratar o declararse en el método. Las principales subclases: NullPointer, aritmático, ArrayIndexoUtofBounds, Classcast.
5. ¿Cuál es la diferencia entre Reader y InputStream?
Son todas clases abstractas, el lector se usa para leer transmisiones de caracteres (char o cadena), y InputStream se usa para leer transmisiones de bytes (matrices de bytes).
6. ¿Cuál es el papel de hashcode?
Hashcode se usa principalmente para búsquedas rápidas, como en la estructura hashmap, que se utiliza para ubicar la ubicación de los pares de valor clave. Si dos objetos son los mismos, el húsico debe ser el mismo, mientras que los objetos hashcode con el mismo hashcode pueden no ser el mismo, lo cual es equivalente a ponerlos en el mismo cuadro.
7. ¿Cuál es la diferencia entre hashmap y hashtable?
Seguridad de hilo, clave de valor nulo, eficiencia, hashmap (iterador iterador de falla rápida), hashtable (enumerador iterador) y la posición del elemento hashmap cambiará con el tiempo
8. ¿Se puede utilizar algún objeto en Hashmap como clave? ¿Hay algún requisito para los objetos definidos por el usuario como clave?
Sí, pero el objeto clave debe ser un objeto inmutable. De lo contrario, después de insertar la entrada en el mapa, cambiar el valor clave hará que el valor de la clave actual sea inconsistente con el valor hash, es decir, no coincide con el índice de matriz y no se encontrará.
9. ¿Debo usar Run () o Start () para iniciar un hilo?
¿Cómo resolver el problema de la sincronización y la concurrencia en la lectura múltiple? ¿Qué es un hilo de demonio? ¿Qué es un hilo de demonio? ¿Qué es un método para implementar un hilo de demonio (el significado de Thread.setDeamon ()) cómo detener un hilo? Explicar ¿Qué es la seguridad del hilo? Dé un ejemplo de inseguro de hilo. Explique el papel de las palabras clave sincronizadas. Cuando un hilo ingresa un método sincronizado de un objeto, ¿pueden otros hilos ingresar otros métodos de este objeto?
(1) Comienza
(2) Heredar la clase de subprocesos, implementar la interfaz ejecutable y utilizar el servicio de expedientes, el futuro y la llamada para implementar el hilo que devuelve el valor.
(3) Método de sincronización, bloque de código de sincronización, bloqueo
(4) Los hilos de Damon proporcionan servicios para la operación de otros hilos, como GC y Thread. setDeamon (verdadero).
(5) no se recomienda hilo.stop () (los recursos no se lanzarán correctamente) y las interrupciones se utilizan para detener los subprocesos.
(6) Cuando múltiples subprocesos acceden a un objeto, si la programación y la ejecución alternativa de estos subprocesos en el entorno de tiempo de ejecución no son necesarios, no se requiere una sincronización adicional, o no se realizan otras operaciones de coordinación en la persona que llama, y el resultado correcto se puede obtener llamando a este objeto, entonces el objeto es probable.
(7) Los boletos se venden repetidamente.
(8) Sincronizar las palabras clave. Al modificar los métodos estáticos, la clase se usa como objeto de bloqueo, y solo un hilo puede acceder a este tipo de métodos estáticos de sincronización; Al modificar los métodos ordinarios, el objeto se usa como objeto de bloqueo, y solo un hilo puede acceder a este tipo de métodos ordinarios de sincronización; También puede personalizar el bloque de código de sincronización del objeto de bloqueo.
(9) El método sincronizado no se puede ingresar, y se puede ingresar no sincronizado.
10. ¿Qué nuevas características de JDK8 ha aprendido y describe las características correspondientes con ejemplos?
(1) Expresión de lambda: programación funcional, referencia de método
(2) API de transmisión
(3) Método de interfaz predeterminado
(4) Mejora de la API de fecha y hora, agregando el método DatetIMEFORMATER
11. ¿Cuáles son los principios para optimizar SQL?
Para más detalles, consulte un blog en la clasificación de mi base de datos
12. ¿Cuál es la diferencia entre Serlvet y CGI en el ciclo de vida de Servlet?
Ciclo de vida: carga de clase, instancia (construcción de objetos), inicialización (init), servicio (servicio) y destrucción.
CGI: Interfaz Common Gateway, Interfaz Common Gateway, escrita en lenguaje Perl, crea un objeto CGI para cada solicitud.
Servlet: solo se requieren instanciación e inicialización una vez, y múltiples subprocesos.
13. ¿Cuáles son las ventajas de StringBuffer? ¿Por qué rápido?
Porque StringBuffer no requiere la creación repetida de objetos de cadena, pero este no es el caso.
Por ejemplo, la cadena S = "A" + "B" + "C" Compilador de operación optimizará y se convertirá en String S = "ABC"
La cadena S = S1 + S2 + S3 compilador también se optimizará y se convertirá en una operación de StringBuilder Agregar. Sin embargo, si no está empalmado a la vez + operación, el objeto String y el objeto StringBuilder se generarán repetidamente, lo que será muy bajo.
14. ¿Entiende el algoritmo de cifrado y descifrado?
Algoritmos de abstracto: MD5 (128 bits), SHA1 (160 bits), es un proceso irreversible. No importa cuán grandes sean los datos, se generarán datos de la misma longitud después del algoritmo de digestión. Solo se puede agrietarse a través de diccionarios.
Algoritmos de cifrado simétrico: DES, AES, la misma clave secreta se usa al encriptar y descifrar.
Algoritmo de cifrado asimétrico: RSA, use diferentes claves secretas al encriptar y descifrar, y use RSA2 cuando se conecta a Alipay.
15. ¿Resolver una alta concurrencia y alta carga?
(1) El consumo de la página estática es mínimo, HTML es estático tanto como sea posible, y el sistema de publicación de información CMS se utiliza para generar automáticamente páginas estáticas en la entrada de información y los datos dinámicos de caché que no suelen cambiar en la parte delantera.
(2) CDN, distribuya recursos como CSS/JS en diferentes servidores.
(3) Equilibrio de carga (Nginx).
(4) Datos de caché que no suelen cambiar (Redis, Memcache).
(5) El servidor de imágenes está separado del servidor de aplicaciones.
(6) Clúster.
16. ¿Cache interno entero?
Hay una matriz entera estática dentro de la clase entera, que almacena algunos objetos enteros que se han inicializado. El valor general es (-128 ~ 127). Si usa == Comparación, a veces se devolverá falso porque el valor no está en el caché, por lo que debe usar iguales para comparar.
17. ¿Cuál es el principio de ArrayList?
(1) ArrayList es una insecuación de hilo. Si desea Thread-Safe, use CopyOnWriteList.
(2) La capa inferior es la matriz de objeto [], y hay una referencia de elementos que apunta a la matriz dentro. Al principio, apunta a una matriz vacía en caché (transitoria) de forma predeterminada. Cuando desee expandirse, una nueva matriz con un tamaño de 1.5 veces (x + (x >> 1)) se volverá a nuevo, y luego el elemento anterior se copiará a la nueva matriz a través del método nativo de System.ArrayCopy.
(3) La complejidad del algoritmo del método de lectura y escritura aleatoria (Get, SET) es O (1).
(4) Hay dos tipos de operaciones de adición. La complejidad del algoritmo de ADD (índice, valor) es o (n), porque debe moverse a través de la copia del elemento; mientras que la complejidad del algoritmo de la operación ADD (valor) es o (1) (si no se produce la expansión).
(5) La complejidad del tiempo de la operación de deleción es O (n), porque si se elimina de acuerdo con el índice u objeto, es necesario implementar la operación de movimiento mediante la copia. Después de la eliminación, el tamaño de la matriz no cambiará y la longitud se mantiene mediante el atributo de tamaño. Al eliminar objetos por objeto, no puede usar objetos nuevos. Debe eliminarlos a través de referencias a objetos en ArrayList.
18. ¿Cuál es el principio de LinkedList?
(1) La capa subyacente es una lista vinculada bidireccional, manteniendo un primer puntero y un último puntero.
(2) La complejidad de tiempo de lectura y escritura aleatoria (get, set) es o (n).
(3) la complejidad de tiempo de la operación de inserción ADD (objeto) es O (1); La complejidad del tiempo de ADD (índice, objeto) es o (n).
(4) La complejidad de tiempo de la operación de eliminación elimina (objeto) es o (1); La complejidad del tiempo del eliminación (índice) es o (n).
19. ¿Cosas a tener en cuenta al usar piscinas de subprocesos?
(1) Prevenir los puntos muertos. Todos los hilos en el grupo de hilos están esperando que ocurra el evento A, y no hay hilos gratuitos para ejecutar A.
(2) Evitar recursos del sistema insuficientes. Para controlar el número de hilos.
(3) Evitar errores concurrentes.
(4) Evite la fuga de hilo. Un hilo termina anormalmente debido a RuntimeException o error que no se atrapa normalmente, y el grupo de hilo pierde un hilo.
(5) Evite la sobrecarga de tareas.
20. ¿Cuál es la diferencia entre @autowire y @Resource en primavera?
@AutoWire se ensambla por tipo de forma predeterminada. Por defecto, requiere que el objeto de dependencia deba existir. Si se permite nulo, se puede configurar en falso. Si queremos usar el ensamblado por nombre, podemos usarlo junto con la anotación @Qualifier;
@Resource se ensambla por su nombre de forma predeterminada. Cuando no se puede encontrar un frijol que coincida con el nombre, se ensamblará de acuerdo con el tipo. Se puede especificar a través del atributo de nombre. Si no se especifica el atributo de nombre, cuando la anotación se anota en el campo, el nombre del campo se toma de forma predeterminada como el nombre del bean para encontrar el objeto de dependencia. Cuando la anotación está marcada en el método Setter del atributo, el nombre del atributo se toma de forma predeterminada como el nombre del bean para encontrar el objeto de dependencia.
21. Diagrama de transferencia de estado de hilo.
22. Métodos de clase de objetos?
(1) iguales: determine si es igual.
(2) HASHCODE: Encuentre el valor hash. Si los valores hash de los dos objetos son iguales, puede no ser igual; Si es igual, los valores hash de los dos objetos deben ser iguales.
(3) Tostring: obtenga el formulario de expresión de cadena del objeto, que generalmente se reescribe.
(4) GetClass: método de reflexión para obtener la clase a la que pertenece el objeto.
(5) Espere: solo se puede usar en segmentos de código sincronizados. Si no se incluye el parámetro de tiempo, el hilo de ejecución hará que el bloqueo sea abandonado y ingrese al estado de espera (grupo de espera).
(6) Notificar: solo se puede usar en segmentos de código sincronizados, elimine un hilo de la piscina de espera y colóquelo en la piscina de la bandera de bloqueo.
(7) Notificar todo: solo se puede usar en segmentos de código sincronizados, y todos los hilos se sacan de la piscina de espera y se colocan en la piscina de la bandera de bloqueo.
23. ¿El principio subyacente de la serialización de Java?
Convierta la información del objeto en información de Bytecode.
(1) Almacene la descripción de la serialización. (2) Información actual de descripción de la clase. (3) Descripción de los atributos de clase actuales. (4) Descripción de superclase (5) Descripción del atributo de superclase (6) Valor de atributo de superclase Descripción (7) Valor de atributo de subclase Descripción