Java preguntas de la entrevista de back-end respuestas

La diferencia entre la lista y el conjunto

  1. interfaces de lista del sistema y la lista se heredan de las características de la colección: elemento ha realizado el pedido, el elemento puede repetirse.
  2. Set Características: Sin elemento en la secuencia de elementos no se repite, se añade el elemento sobrescribirá repetición (aunque ningún elemento en la secuencia, pero la posición del elemento en el conjunto se determina por el elemento de HashCode, cuya posición es fija, establecer el objeto debe definir método equals (), además de apoyo a la lista de circulación, que es recorrer a través del índice, también se puede utilizar un iterador para recorrer, pero sólo se puede utilizar un conjunto iterativo, ya que está fuera de servicio, no quiere conseguir subíndice que el valor sea) lista de canciones y la comparación conjunto :. recuperar elementos ineficiente, alta eficiencia borrar e insertar, eliminar e insertar el elemento no causa un cambio de posición.
  3. Lista: y una serie de similares, la lista puede crecer de forma dinámica, encontrar elementos de alta, los elementos de baja eficiencia de eliminación de inserción, ya que dará lugar a otros elementos de cambio de posición

Cómo HashSet es garantizar la no repetición

HashSet cuándo agregar elementos para determinar si existe un elemento de base, no sólo tienen que comparar el valor hash, sino también para comparar método equals combinado. añadir HashSet en el método () agregará el uso de Hashmap.

HashMap es seguro para hilos para usted, ¿por qué no está apta para subprocesos.

En el multi-hilo, si hay dos hilos de escribir, solo los dos objetos HASHED calculan el mismo código hash, y que no hay otros datos de localización. Por lo tanto, los dos hilos entran en el mismo bloque de código. Considere la situación tal, el hilo por un juez si la ubicación no es un conflicto de hash, en la sentencia if, todavía no está completa inserción de los datos, esta vez puso a los recursos de la CPU para dar el hilo B, entonces enhebrar una ahora aparcado dentro de la sentencia if, el subproceso B no determina la ubicación de la colisión de hash, también visitó la sentencia if después de hilo B ejecutado, la ejecución de un hilo turno ahora enhebrar una posición de inserción directa en la sentencia if antes de la sentencia ha sido aprobada, un hilo de manera que el hilo B a los datos cubiertos. Hilo situación insegura se produce. Originalmente HashMap, la ocurrencia de conflictos hash es un método ligado lista o el árbol rojo-negro de resolver, pero varios subprocesos, es posible directamente cubierta.

mecanismo de expansión Hashmap

Cuando el elemento de aditivo en el recipiente, determina el número actual de elementos en el recipiente, si no menos que el valor umbral - es decir, la longitud actual de la matriz se multiplica por el valor del factor de carga cuando la expansión automática necesario.
Expansion: es decir, la capacidad se calcula de nuevo, la adición de elementos a Hashmap objetivo sin parar, y una matriz de objeto HashMap interna no puede cargar más elementos, las necesidades de objeto para ser expandido longitud de la matriz, un lado se puede cargar más elementos. Por supuesto, Java en la matriz no es el método de expansión automática se utiliza a menudo en lugar de una nueva matriz para una matriz de pequeña capacidad, ya que usamos una botella de agua, si se quiere contener más agua, tuvieron que cambiar gran cubo .

hashMap1.7 la diferencia entre 1.8 y 1.8 ilustran lo que se había hecho para Optimizar, cómo optimizar el?

En las versiones anteriores de JDK1.7, HashMap tabla hash llama: una matriz y implementado basado en una pluralidad de listas enlazadas, valores hash entrarán en conflicto cuando el nodo correspondiente almacena como una lista enlazada.
JDK1.8, cuando la misma lista valor hash de nodos no es menor que 8, no se almacena en la forma de una única lista enlazada, se puede ajustar a un árbol rojo-negro.
JDK1.7 en
el uso de una matriz de entrada para almacenar datos, una clave de código hash de módulo es clave para determinar una posición en una matriz; hashcode mismo si el mismo, o a consecuencia hashcode matriz, entonces la llave se coloca en la entrada la misma matriz de la rejilla, que formará un llavero.
En casos particularmente malos código hash, dicen que todo el código hash clave son idénticas, esta lista podría ser más larga, a continuación, poner las operaciones get / pueden tener que recorrer la lista, que es el peor de los casos el tiempo complejidad de la situación degenerará a O (n-)
JDK1.8 en
el uso de una matriz de nodo para almacenar datos, pero esta estructura nodo de la lista puede estar unido, estructura de árbol rojo-negro también puede ser
el mismo si la llave se inserta hashCode, entonces estos se colocarán a la matriz clave de nodo la misma área pequeña.
Si la misma clave de la red no es más que ocho, usando una estructura de lista enlazada para almacenar.
Si hay más de 8, luego llama a la función treeIfBin para convertir la lista es árbol rojo-negro.
Incluso si hashcode exactamente el mismo, debido a las características del árbol rojo-negro, encontrar una necesidad elemento específico sólo O (log n) de la cabeza
que es el tiempo de funcionamiento de la put / get lo peor de la complejidad de solamente O (log n)
escucha es muy bueno, pero en realidad quieren aprovecharse de JDK1.8 hay un límite:
objetos clave deben ser realizados adecuadamente Compara Interfaz
Si no se dan cuenta interfaces de comparación o alcanzar de forma incorrecta (por ejemplo, todas las declaraciones de método Compare 0)
entonces JDK1.8 un HashMap pero todavía es más lento que el JDK1.7

árbol binario de búsqueda

  1. Los valores de todos los nodos de la subárbol izquierdo del nodo raíz es menor que el valor
  2. Los valores de todos los nodos de la subárbol derecho del nodo raíz es mayor que el valor de
  3. Inorder se incrementa el valor de recorrido.

Cuenta con árbol rojo-negro

árbol rojo-negro es un árbol binario de búsqueda equilibrado, aproximadamente, se puede asegurar que la diferencia de altura entre los subárboles izquierdo y derecho de cualquier nodo que no exceda el menor de los dos en dobles. En concreto, la necesidad árbol rojo-negro a cumplir las siguientes condiciones árbol binario de búsqueda
cada nodo está en rojo o negro es el
nodo raíz tiene que ser negro
nodo rojo puede no continua (es decir, rojo niño y el padre del nodo no puede ser de color rojo a)
para cada nodo, un camino de cualquier nodo al nulo (el extremo posterior del árbol), y contienen el mismo número de nodos negros

última finalmente finalize

finales clases pueden ser modificados, variables, métodos, la modificación de clase representa la clase no se puede heredar, variables modificada indica que la variable es una constante que no puede ser reasignado, métodos de modificación para identificar el método no puede ser anulado

bloque de código, finalmente, por último método se aplica generalmente al bloque try / catch, el manejo de una excepción, por lo general tendrá que ejecución, independientemente de si hay anormal ejecutar el bloque de código, por lo general se utiliza para almacenar algunos de los recursos de código cerrados .

finalize es un método, un método de la clase de objeto pertenece a, y la clase de objeto es el padre de todas las clases, las cuales generalmente son invocadas por el recolector de basura, cuando llamamos al método System.gc (), el recolector de basura llama de finalización (), basura, reciclable si un objeto es determinado última

Hay cuatro tipos de referencias a objetos

referencia Strong , siempre que hay una referencia fuerte, el recolector de basura nunca será recuperado
Object obj = new new Object ();
el usuario del usuario nuevo nuevo = el usuario ();
se puede obtener directamente a través del objeto obj correspondiente, como obj.equals (new Object ()) , y este nuevo objeto obj el objeto en la parte posterior de una referencia fuerte, sólo que esta referencia cuando obj se libera, no serán liberados al objeto, que es por eso que codifican a menudo en forma utilizada.
Referencias suaves referencias no esenciales para reciclar antes de quedarse sin memoria, que puede lograrse por el código
de objeto obj = new new Object ();
SoftReference nuevo nuevo SoftReference SF = <> (obj);
obj = null;
sf.get (); // veces se devuelve NULL
en este momento a un obj referencia suave sf, () método puede ser tomada por sf.get a este objeto, por supuesto, cuando el objeto se marca como una necesidad objeto a ser recuperado, o null; suave usuario principal para lograr caché referencia similar función, citado en la memoria lo suficientemente directamente a través de los valores blandos sin realmente ocupado a partir de los datos de la consulta de origen, aumento de la velocidad, y cuando no hay suficiente memoria, los datos se eliminan automáticamente esta parte de la memoria caché, consulta los datos de una fuente real.
referencias débiles segunda recolección de basura tiempo, puede ser implementado por el siguiente código;
Object obj = new new Object ();
WeakReference nuevo nuevo WeakReference WF = (obj);
obj = null;
wf.get (); // retorno nulo veces
wf.isEnQueued (); // devolver el recolector de basura está marcado para la recuperación de residuos próximo
referencia débil está en la segunda reciclaje de basura, en un corto tiempo mediante la adopción de referencias débiles correspondientes a los datos que deben tomarse, cuando la ejecución de la recolección de basura secundaria devolverá un valor nulo. referencias débiles se utilizan principalmente para controlar si el objeto se ha marcado como recolector de basura residual recuperado pronto puede devolver el objeto está marcado por el recolector de basura método isEnQuequed referencias débiles.
Por ejemplo, utilizar una clase de referencia débil tiene ThreadLocal.
Colgando de referencia cuando reciclaje de basura, se deben tomar para el valor del objeto por referencia, puede ser implementado por el siguiente código de
Object obj = new new Object ();
la PhantomReference la PhantomReference nuevo nuevo PF = <> (obj);
obj = null;
pf.get (); / / null no volver nunca
pf.isEnQuequed (); // si retorno se han eliminado de la memoria.

Tres maneras de conseguir la reflexión de Java

  1. Reflexión consigue mediante el nuevo objetivo
  2. Alcanzado por la reflexión ruta
  3. Lograr la reflexión por nombre de la clase

mecanismo de reflexión de Java

mecanismo de reflexión de Java está en el estado de funcionamiento, para cualquier clase, tiene acceso a todas las propiedades y métodos de esta clase, para cualquier objeto puede llamar a cualquiera de sus propiedades y métodos. El método de esta función dinámica del acceso a la información y el objeto invocación dinámica en tiempo de ejecución llama mecanismo de reflexión de Java.
bibliotecas de clases de clases junto con el concepto de reflexión java.lang.reflect eran de apoyo, la biblioteca contiene un campo, el método, la clase constructor (cada clase implementa un miembro de interfaz). Estos tipos de objetos creados por la JVM en tiempo de ejecución para identificar los miembros de la clase que corresponde a lo desconocido.
Así que usted puede utilizar el constructor para crear un objeto nuevo, leer con Get / métodos y modificaciones asociadas a los campos de objeto de campo conjunto, los métodos asociados con la llamada al método objeto método invoke (). Además, también se puede llamar getFields () getMethods () y getConstructors () como un método muy conveniente para devolver el objeto representado por una serie de campos, métodos y constructores. Dicha información es objetos anónimos pueden resolverse por completo en tiempo de ejecución, pero en tiempo de compilación no necesita saber nada.

Arrays.sort y Collections.sort principio y la diferencia

colección o colecciones diferencia
java.util.Collection es un conjunto de interfaces. Se proporciona un conjunto común de métodos de interfaz objetos para operaciones básicas.
Cuando java.util.Collections ayuda para un conjunto de clases de clases, que ofrece una serie de métodos estáticos para lograr una variedad de colección de búsqueda, clasificación, operaciones seguras para subprocesos. Luego arrastrando los pies, de marcha atrás, en sustitución de todos los elementos (Fill), copiar (Copy), devuelve los Conllections más pequeñas elemento min, el elemento más grande max, el retorno a la posición inicial de la lista de destino especificado especificar una lista de la última aparición de la fuente, devuelve la lista de origen especificado posición de la primera ocurrencia de la lista de destino especificado de partida, la lista de elementos especificados de acuerdo a la distancia especificada movimiento de circulación;
de hecho, el método subyacente es llamar Array.sort Collections.sort

Cómo asignar una matriz en la memoria

Para la matriz de inicialización de Java, hay dos maneras.
inicialización estática: Especifica valor inicial de cada elemento de la matriz por el programador durante la inicialización, el sistema determina por la longitud de la matriz.
Dinámica de inicialización: especifica la longitud de la matriz se visualiza por el programador durante la inicialización, un valor inicial es asignado por el sistema, ya que cada elemento de los datos, cuando un array Java tipo de referencia variable.

Publicado 24 artículos originales · ganado elogios 1 · visitas 552

Supongo que te gusta

Origin blog.csdn.net/qq_45366515/article/details/104044332
Recomendado
Clasificación