Solicite una oferta a una gran fábrica: enumere las preguntas de la entrevista

Prefacio

El texto se ha incluido en mi artículo destacado de GitHub, bienvenido a Star : https://github.com/ZhongFuCheng3y/3y

A partir de hoy, yo, Sanwai, comencé oficialmente a escribir la serie de entrevistas. Le di a esta serie de entrevistas un nombre llamado "Solicite una oferta a una gran fábrica".

El último se tituló "Solicite una oferta a una gran fábrica: cómo redactar un currículum"

Por eso, este artículo se llama " Solicite una oferta a una gran empresa: enumere las preguntas de la entrevista ".

Empecemos a continuación.

Este artículo tiene una visualización de video de apoyo : https://www.bilibili.com/video/BV1nT4y1L71r/ Bienvenido a Sanlian .

Sitio de entrevistas

Entrevistador: "Preséntese brevemente"

Sanwai : "Mi nombre es Sanwai . Actualmente mantengo una cuenta pública llamada Java3y . En los últimos años, he escrito más de 300 artículos técnicos originales, casi 1000 páginas de libros electrónicos originales y mapas mentales con múltiples puntos de conocimiento. Mi visión es: Siempre que me presten atención y los terceros compañeros de clase consecutivos puedan obtener la oferta de Dachang . Mi ... "

Entrevistador: "Para, para, deja de soplar, comencemos oficialmente".

Entrevistador: "Hablemos de Java List. ¿Cuánto sabes sobre List?"

Tres ladrones: "List es una interfaz en Java. Las clases de implementación comunes son ArrayList y LinkedList. ArrayList es la más utilizada en desarrollo".

Entrevistador: "Puede hablar sobre la diferencia entre ArrayList y LinkedList por separado"

Tres ladrones: "La estructura de datos subyacente de ArrayList es una matriz y la estructura de datos subyacente de LinkedList es una lista vinculada".

Entrevistador: "Entonces ya tenemos matrices, ¿por qué usar ArrayList?"

Tres ladrones: "Una matriz nativa tiene una característica: debe crear un tamaño para ella cuando la usa, y ArrayList no la usa"

Entrevistador: "Entonces dime cómo se implementa ArrayList. ¿Por qué ArrayList no necesita crear un tamaño?"

Tres torcidos: "De hecho, este es el caso. He visto el código fuente . Cuando lo new ArrayList()estemos, habrá una Objectmatriz vacía por defecto con un tamaño de 0. Cuando agreguemos datos por primeraadd vez, inicializaremos esta matriz con un tamaño, este El tamaño predeterminado es 10 "

Entrevistador: "Sí"

Tres torcidos: "El otro es, el tamaño de la matriz es fijo, pero el tamaño de ArrayList es variable"

Entrevistador: "¿Cómo entiendes fijo y variable? Cuéntamelo".

Tres torcidos: "Suponiendo que el tamaño de nuestra matriz dada es 10, para llenar la matriz con elementos, solo podemos agregar 10 elementos. A diferencia de ArrayList, podemos agregar 20 o 30 a ArrayList cuando lo usamos. Y aún más elementos "

Tres torcidos: "Porque ArrayList se expande dinámicamente"

Entrevistador: "Entonces, ¿cómo se logra?"

Tres ladrones: "Cada vez addque use ArrayList , primero calculará si la matriz tiene suficiente espacio. Si el espacio es suficiente, simplemente agréguelo directamente. Si no es suficiente, entonces debe expandir".

Entrevistador: "Entonces, ¿cómo expandir? ¿Cuánto a la vez?"

Tres torcidos: "En el código fuente, hay una growmanera de expandir la hora original cada vez 1.5. Por ejemplo, el valor inicializado es 10. Ahora voy a ingresar el undécimo elemento y descubrí que el espacio de esta matriz no es suficiente, por lo que expandiré Hasta 15 "

Tres torcidos: "Después de expandir el espacio, se llamará arraycopypara copiar la matriz"

Entrevistador: "Oh, sí. Entonces, ¿por qué mencionó anteriormente que ArrayList es el más utilizado en el desarrollo diario?"

Tres ladrones: "Está determinado por la estructura de datos subyacente. En el desarrollo diario, la necesidad de un recorrido es más que adiciones y eliminaciones. Incluso si las adiciones y eliminaciones se agregan a menudo al final de la Lista, está bien. Al igual que agregar elementos al final, el tiempo de ArrayList la complejidad de la misma O(1)".

Tres errores: "La otra cosa es que las llamadas subyacentes para la adición y eliminación de ArrayList se copyOf()han optimizado. Las CPU modernas pueden bloquear las operaciones de memoria , y la adición y eliminación de ArrayList no es más lenta que LinkedList".

Entrevistador: "¿Entiendes Vector?"

Tres torcidos: "Bueno, la estructura subyacente de Vector es una matriz. Generalmente, rara vez la usamos ahora. En comparación con ArrayList, es seguro para subprocesos. Cuando se expande, se expande directamente dos veces, por ejemplo, ahora hay 10 elementos. , Cuando desee expandir, el tamaño de la matriz aumentará a 20 "

Entrevistador: "Bueno, si no usamos Vector, ¿qué más es Lista segura para subprocesos?"

Tres torcidos: "En primer lugar, también podemos usar Colecciones para envolver ArrayList y hacerlo seguro para subprocesos. Pero esto definitivamente no es lo que quieres escuchar, ¿verdad? java.util.concurrentTambién hay una clase bajo el paquete llamada CopyOnWriteArrayList"

Entrevistador: "Bueno, sigue diciendo"

Tres torcidos: "Antes de que quiera hablar sobre CopyOnWriteArrayList, todavía quiero hablar sobre copy-on-writeeste significado, lo abreviaré a continuación cow. Por ejemplo, en Linux, sabemos que todos los initprocesos forksalen de procesos, excepto el número de proceso fork. El valor predeterminado es exactamente el mismo que el proceso principal. Antes de forkeso exec, los dos procesos utilizan el mismo espacio de memoria, lo que significa que el segmento de código, el segmento de datos y la pila del proceso secundario apuntan al espacio físico del proceso principal ".

Entrevistador: "Sí"

Tres ladrones: "Cuando hay un comportamiento modificado en el proceso padre-hijo, el espacio físico correspondiente se asigna al proceso hijo. La ventaja de esto es que espera hasta que se produce la modificación real antes de asignar recursos, lo que puede reducir la asignación o copiar una gran cantidad de recursos. El retraso instantáneo causado . En pocas palabras, se puede entender como nuestra carga diferida, o el estilo de hombre perezoso del modo singleton. Se asignará cuando se utilice realmente ".

Entrevistador: "Sí"

Tres torcidos: "en el sistema de archivos, de hecho, allí cow. El mecanismo del sistema de archivos cowes cuando se modifican los datos, no directamente en la ubicación original de los datos de la operación, sino en un lugar para volver a modificarlos. Ejemplo: Para modificar los datos El contenido del bloque A, primero lea A y escríbalo en el bloque B. Si se corta la energía en este momento, el contenido original de A todavía está allí. La ventaja de esto es que puede garantizar la integridad de los datos y se puede restaurar fácilmente cuando se suspende instantáneamente .

Tres ladrones: "Echemos un vistazo a CopyOnWriteArrayList. CopyOnWriteArrayList es una lista segura para subprocesos. La capa inferior se implementa copiando matrices .

Tres torcidos: "Déjame hablar add()sobre la realización de su método"

Entrevistador: "Bueno"

Tres torcidos: "En el add()método, de hecho, él agregaría lockun candado, luego copiaría una nueva matriz a la nueva matriz dentro de addlos elementos reales de la matriz, es el último punto que se cambiará a la nueva matriz".

Tres torcidos: "De hecho, el get()método o size()método es solo para obtener el elemento o el tamaño de la matriz al que apunta la matriz. La lectura no está bloqueada, la escritura está bloqueada"

Tres torcidos: "Lo que se puede encontrar es que CopyOnWriteArrayList es muy similar al mecanismo COW del sistema de archivos"

Entrevistador: "¿Entonces puede hablarnos de las desventajas de CopyOnWriteArrayList?"

Tres errores: "Obviamente, CopyOnWriteArrayList consume mucha memoria y set()/add()se copia una matriz cada vez . Además, CopyOnWriteArrayList solo puede garantizar la coherencia final de los datos, pero no puede garantizar la coherencia en tiempo real de los datos. Supongamos que dos subprocesos, el subproceso A va La lectura de los datos de CopyOnWriteArrayList no ha terminado de leer. Ahora el hilo B ha vaciado esta Lista, el hilo A todavía puede leer los datos restantes en este momento ".

Entrevistador: "Bueno, está bien. La entrevista de hoy ha terminado. ¿Tiene algo que preguntarme?"

Sanwai: "¿Qué opinas de mi actuación de hoy?"

Entrevistador: "La actuación de hoy está bien. Si no tienes 100 Me gusta esta vez , RR.HH. no se comunicará contigo de nuevo. Si tienes más de 100 Me gusta , hazlo bien en la segunda ronda".

Entrevistador: "Te lo revelaré, la colección de mapas se puede preparar y la próxima ronda examinará el conocimiento de los mapas "

Digresión

La recopilación de listas no es demasiado difícil en general, pero es posible que muchos estudiantes aún no conozcan CopyOnWriteArrayList.

Este artículo tiene una visualización de video de apoyo : https://www.bilibili.com/video/BV1nT4y1L71r/ Bienvenido a Sanlian .

Proyectos de código abierto que cubren todos los puntos de conocimiento del backend de Java (más de 10K estrellas ya):

Soy Sanwai, un hombre que quiere volverse más fuerte. Gracias por tus Me gusta, colecciones y publicaciones. Hasta la próxima. Dale un like a Sanwai, ¡es muy importante para Sanwai!

Supongo que te gusta

Origin blog.csdn.net/Java_3y/article/details/108140474
Recomendado
Clasificación