Recuerde el lado de Alibaba P7 una vez, y finalmente sepa dónde está la brecha entre los programadores de Java.

Recuerde una experiencia de Alibaba, cuando un programador de Java finalmente encontró un hueco

La historia antes de la entrevista

La semana pasada recibí a un hermano mayor de Ant Financial en Lagou pidiendo mi currículum, en ese momento me sorprendió que alguien de Ant Financial me encontrara y se lo diera sin pensarlo.

Me siento halagado. Sé lo lejos que estoy de Ali. No he tenido el valor de votar antes. Ni siquiera me atreví a intentarlo. Esta vez tomé la iniciativa de encontrarlo, y luego volví a pensar: ¿Ali está tan escaso de gente? O simplemente para completar ciertos KPI, por supuesto, mis pensamientos son bastante ingenuos.

Inesperadamente, al día siguiente recibí un correo electrónico de invitación a una entrevista de Alibaba, que decía que la primera entrevista se realizaría dentro de los 10 días hábiles.

De todos modos, ya que la entrevista está aquí, inténtalo. Sansheng tuvo la suerte de poder reunirse una vez con una empresa de tecnología de este nivel para ver la brecha real. Desde el momento de la renuncia, también completé la JVM, los algoritmos básicos de estructura de datos y algunos problemas básicos de Java de alta frecuencia.

Recibí una llamada de Big Brother Ant a las 8:25 de la noche del lunes y, como esperaba , todavía estaba en el trabajo. Me sorprendió mucho en ese momento. No esperaba que fuera una entrevista telefónica, porque no se mencionaba en el correo electrónico. En retrospectiva, parece que un lado es básicamente una entrevista telefónica, y algunos amigos también se llaman del otro lado.

Ingrese el tema, lo siguiente es todo el contenido. El orden es algo inconsistente, lo organicé de acuerdo con los módulos.

Recuerde una experiencia de Alibaba, cuando un programador de Java finalmente encontró un hueco

Auto presentación

Para presentarse a sí mismo, primero introduzca cuántos años tiene, cuánto tiempo se ha graduado, qué ha hecho, qué ha hecho recientemente, en qué es bueno, etc.

Déjame hablar al respecto. Es bueno decir la verdad sobre el contenido de la autopresentación. No lo exageres demasiado. Se recomienda que prepares el contenido de la autopresentación con anticipación.

Parte del hilo

1. ¿Cuáles son los métodos de implementación de multiproceso?

Este problema se encuentra básicamente en un lado, heredando la clase Thread, implementando la interfaz Runnable y finalmente llamando al método start () para iniciar el hilo.

Otro punto de conocimiento aquí es la diferencia y la conexión entre los métodos start () y run ().

Llame directamente al método start (). En este momento, el hilo está en un estado listo (ejecutable), pero en realidad no se está ejecutando. En cambio, después de obtener el intervalo de tiempo de la CPU, comenzamos a ejecutar el método run (). El método run () contiene nuestro cuerpo de hilo.

Ejecutamos el método run () directamente, que en realidad es una llamada a un método ordinario, se ejecuta en el hilo principal y no abrirá subprocesos múltiples.

2. Describe algunas situaciones de interbloqueo de hilos.

Este problema básicamente no se toca en proyectos ordinarios, pero ya he entendido parte de él. La respuesta es: cuando dos subprocesos mantienen sus propios candados, también quieren mantener los candados de la otra parte. Debido a que los candados de las otras personas ya han sido tomados por la otra parte, esperan que el otro lo libere. La respuesta fue más bien unilateral, y todavía había algunos tipos de preguntas estancadas que no fueron respondidas, y se confesaron directamente más tarde. El entrevistador dijo que estaba bien.

Se recomienda que al prepararse para este problema, pueda contar las condiciones, fenómenos y soluciones que causaron el punto muerto. Luego acompañado de algunos ejemplos prácticos Durante la entrevista, el entrevistador mencionó que de acuerdo a la escena hay ejemplos en los que solemos encontrarnos con problemas de estancamiento.

Puede buscar los siguientes dos escenarios de interbloqueo:

  1. Tres personas y tres palillos: todos necesitan dos palillos para empezar a comer
  2. Problema de transferencia bancaria: el hilo A transfiere dinero de la cuenta X a la cuenta Y, y el hilo B transfiere dinero de la cuenta Y a la cuenta X, entonces se producirá un punto muerto.

3. ¿Se ha utilizado el grupo de subprocesos en el proyecto? ¿Cómo usarlo?

Respondió que algunas interfaces en nuestro proyecto necesitan ensamblar los datos de múltiples servicios para encapsular y luego regresar. Aquí utilizaremos varios subprocesos para extraer datos en paralelo para reducir el tiempo de respuesta de la interfaz.

El entrevistador dijo: "Bien, ¿ha visto el código fuente en el grupo de subprocesos? ¿Qué tipos de grupos de subprocesos existen?"

Dudé aquí por el código fuente. Dije que no estaba familiarizado con él. Luego mencioné varios tipos de grupos de subprocesos: newSingleThreadExecutor, newFixedThreadPool y newCachedThreadPool, pero me perdí un newScheduledThreadPool. No pensé en ello.

4. ¿Cuál es el principio del grupo de subprocesos? ¿Qué significan los parámetros del método subyacente?

Al responder a esta pregunta, me quedé atascado. Sé que todas estas capas inferiores se llaman ThreadPoolExecutor, pero no recordaba el nombre vivo. En este momento, el entrevistador me recordó y dijo que estaba bien.

Luego preguntó: "¿Sabes cuáles son sus parámetros? ¿Qué significan?"

Lo que respondí fue la cantidad de hilos y el tiempo de supervivencia de los hilos, pero los demás no fueron mencionados. Entonces el entrevistador dijo: "Está bien".

Para agregar: la parte inferior del grupo de subprocesos se implementa a través de ThreadPoolExecutor.

Recuerde una experiencia de Alibaba, cuando un programador de Java finalmente encontró un hueco

El significado de varios parámetros es:

  • corePoolSize: el número mínimo de subprocesos en el grupo de subprocesos
  • maximumPoolSize: el número máximo de subprocesos en el grupo de subprocesos, RejectedExecutionHandler se utilizará cuando se exceda el subproceso máximo
  • keepAliveTime: el tiempo máximo de supervivencia del hilo, después del cual se reciclará
  • unidad: la unidad del tiempo máximo de supervivencia del hilo
  • workQueue: cola para almacenar en búfer tareas asincrónicas que deben ejecutarse
  • threadFactory: nueva fábrica de hilos
  • La estrategia de rechazo del controlador indica la estrategia adoptada cuando el grupo de subprocesos se niega a agregar nuevas tareas cuando el workQueue está lleno y el número de subprocesos en el grupo alcanza el tamaño máximo dePool. DiscardPolicy: descarta la tarea actual, DiscardOldestPolicy: descarta la más antigua, CallerRunsPolicy: ejecuta la tarea por el hilo que envía la tarea al grupo de hilos, AbortPolicy: lanza la excepción RejectedExecutionException.

Cuando pregunté esto, mi respuesta fue realmente muy limitada y el entrevistador no hizo más preguntas, pero dijo: "Está bien".

Si responde aquí, creo que lo que todavía necesita comprender es qué tipos de grupos de subprocesos se utilizan en qué situaciones y a qué problemas se debe prestar atención. Es muy probable que el entrevistador continúe investigando más profundamente.

La respuesta no se da aquí, creo que la buscará usted mismo y tendrá una experiencia más profunda.

Sección MyBatis

Recuerde una experiencia de Alibaba, cuando un programador de Java finalmente encontró un hueco

Necesita un diagrama de sistema claro al final del artículo

5. ¿Cuál es la diferencia entre $ y # en mybatis?

Respuesta: Ambos pueden pasar parámetros, pero # puede ser una inyección SQL, y $ es la forma de empalmar cadenas, puede haber problemas de inyección SQL.

Todavía hay un punto clave que no se ha respondido anteriormente, es decir, # {} reemplazará la parte del parámetro con un marcador de posición? Durante el preprocesamiento y se convertirá en la siguiente declaración SQL:

  1. seleccione * del usuario donde nombre =?;
  2. Y $ {} es simplemente un empalme de cadena simple, que se empalma directamente en la declaración SQL final en la etapa de análisis dinámico: seleccione * desde el usuario donde nombre = 'zhouq';

6. ¿Cuáles son los escenarios de uso de $ y #?

No entendí muy bien esta pregunta, y la respuesta fue que $ se usa al empalmar nombres de tablas, y # se usa cuando se pasan valores de parámetros en otros momentos.

7. ¿Cómo establece la interfaz dao de mybatis una relación con el sql en el archivo xml?

Cuando se me preguntó aquí, estaba bastante confundido, y luego la respuesta es: mybatis analizará estos archivos xml primero, hay un espacio de nombres en el archivo xml, aquí puede establecer una relación con dao, y luego cada pieza de sql en el xml tendrá una identificación Asociar con la interfaz en dao. . .

Entonces el entrevistador dijo: “Si tengo dos archivos xml que tienen una relación con este dao, ¿no es un conflicto?” Entonces, confesé.

Mi respuesta anterior es demasiado general, debe haber un problema, le sugiero que comprenda el principio de mybatis.

Mybatis se ha ido aquí.

base de datos

La primera pregunta es, ¿qué base de datos suele utilizar con más frecuencia? Por supuesto, mysql.

8. ¿Mecanismo de bloqueo de mysql?

Recuerde una experiencia de Alibaba, cuando un programador de Java finalmente encontró un hueco

Necesita un diagrama de sistema claro al final del artículo

Lo que preguntó el entrevistador es, ¿conoce el mecanismo de bloqueo de mysql? Solo respondí un bloqueo de fila. Entonces los demás no pensaron en ello, lo reconocieron y los demás se olvidaron.

Te sugiero que aprendas sobre bloqueos de mesa, bloqueos de página, etc.

9. ¿Conoce el bloqueo exclusivo y el bloqueo compartido?

Pensé en este lugar por un tiempo y dije que no sabía mucho sobre él. En tiempo real, nuestro sistema de pequeñas empresas básicamente no los usa, y no me importaba dónde pudiera ser útil.

Luego, el entrevistador dijo la siguiente pregunta del escenario y luego dio una solución.

10. Problema del escenario: cuando el subproceso A está procesando un dato, como la deducción o el estado de actualización, otros subprocesos como B deben bloquearlo y ya no pueden operar en este dato, incluidas las consultas, tienen que esperar Una vez completado el procesamiento de un subproceso, B puede continuar. A y B son generados por el mismo código comercial, no por negocios diferentes. ¿Cómo lograrlo usando bloqueos de base de datos?

Al hacer esta pregunta, el entrevistador explicó la escena con paciencia y luego me preguntó si quería empezar. De hecho, solo quiero examinar la pregunta anterior sobre los bloqueos de la base de datos.

11. ¿Cómo se implementa el índice mysql?

La respuesta fue el árbol B +, y luego el entrevistador continuó preguntando: "¿Puede describir aproximadamente la estructura general del árbol B +?". No sé mucho sobre este contenido, así que lo admito.

Relacionado con la caché

Este contenido está escrito en mi proyecto que utiliza una caché de varios niveles. Luego, el entrevistador hizo las siguientes preguntas sobre el uso de la caché.

12. ¿Desglose de caché, penetración de caché, avalancha de caché?

13. ¿Cómo solucionar el fallo de datos calientes?

Estas dos preguntas se han entendido bien antes, pero no se han organizado en sus propias cosas, y se dijeron en una nube durante la entrevista.

14. Primero borre la caché o actualice la base de datos primero, ¿por qué?

De lo que estoy hablando aquí: primero elimine la caché y luego actualice la base de datos, pero esto está mal y hay un problema muy grande aquí.

Considere este escenario:

Si un hilo A borra el caché primero y luego actualiza la base de datos, luego en el tiempo intermedio cuando borra el caché y no ha actualizado la base de datos, el hilo B entra y encuentra que no hay caché, lee la biblioteca. En este momento, todavía lee Siguen los datos antiguos y luego se actualizan a la caché. En este momento, A escribe los nuevos datos en la base de datos.

En este momento, un problema típico es la "escritura doble inconsistente".

Discusión sobre este tema: "La rutina de actualización de la caché" -Profesor Chen Hao

kafka

Recuerde una experiencia de Alibaba, cuando un programador de Java finalmente encontró un hueco

Necesita un diagrama de sistema claro al final del artículo

15. ¿Qué roles incluye la arquitectura de Kafka?

Al principio no sabía cómo responder esta pregunta, así que mencioné un Broker, y luego el entrevistador recordó: "¿No solemos tener todavía productores, consumo o algo así?" Bueno, dije que hay productores, consumidores, Espera tema.

Durante este proceso, el entrevistador también mencionó que normalmente necesitamos configurar qué escribir al construir, etc., y así sucesivamente, según la introducción del sitio web oficial.

Hay otros como Partición, grupo de consumidores y el principal es zk.

Aquí le sugiero que dibuje estos conceptos, pertenencias y diagramas de arquitectura en Kafka. De lo contrario, es muy difícil saber cuándo es realmente crítico, pero comprenderá cuando lo mencione. Definitivamente esto no es posible. La entrevista es suya, no del entrevistador.

16. ¿Cuál es la unidad de trabajo más pequeña en Kafka?

Esta pregunta también es sorprendente, de hecho, cuando escribimos código, necesitamos usar Kafka. Necesitamos utilizar los componentes más básicos, como productores, consumidores, temas, compensaciones, etc.

Si encuentra este problema, es mejor preguntarle claramente al entrevistador.

17. ¿Cuál es el problema del consumo repetido de mensajes Kafka? ¿Cómo se hace la idempotencia?

Al principio, dijo el entrevistador, ¿conoce el problema de los mensajes repetidos en Kafka? ¿Lo has encontrado?

Mi respuesta es que habrá un problema de consumo repetido de mensajes. Hemos realizado un procesamiento idempotente en el lado de los datos de consumo para solucionarlo.

Luego, el entrevistador continuó preguntando: ¿Cómo funciona la idempotencia ?, dije estableciendo el número de versión de los datos y el índice único de la base de datos.

Entrevistador: "ok".

Esta pregunta, si le puedes decir al entrevistador que hay un consumo repetido, como repetición durante la entrega, o por problemas como que el offset no se maneja adecuadamente durante el consumo, creo que podría ser mejor.

18. ¿Qué es el mecanismo de kafka ack? ¿Cómo se implementa ack en el clúster?

Aquí solo respondí qué es el mecanismo ack, pero no respondí el principio de implementación.

Redis

Recuerde una experiencia de Alibaba, cuando un programador de Java finalmente encontró un hueco

Necesita un diagrama de sistema claro al final del artículo

19. ¿Cuáles son las estructuras de datos en Redis?

El más utilizado es String, así como List, Hash, Set y ZSet.

No se preguntó ningún otro contenido.

Pero para cuestiones como por qué Redis es tan rápido, creo que debería entenderlo. Otros amigos lo encuentran a menudo. Es decir, ¿qué es multiplexar?

Código fuente

20. El entrevistador aquí pregunta si alguna vez ha visto algún código fuente. ¿Enmarcado? JDK también funciona.

Luego dije que leí el código fuente de HashMap, y luego hablé sobre el proceso general de colocación y obtención de Barabara, y cómo se ve su estructura.

Durante este proceso, también pregunté cómo juzgar si dos objetos son iguales. Es decir, los puntos de conocimiento de == y es igual.

Los demás no siguieron preguntando. En este punto, todo el proceso de la entrevista ha terminado, dije que respondería a esta entrevista dentro de los 10 días hábiles. Todo el proceso duró unos 40 minutos.

Lo sé, genial.

Finalmente para resumir

Aunque el orden de los módulos anteriores ha cambiado, las preguntas de cada bloque están en orden y, básicamente, se hacen paso a paso desde el menos profundo al más profundo.

Cosas como bloqueos de bases de datos, grupos de subprocesos y problemas de caché son casi todos en forma de una toma en serie hasta que llegas al fondo.

A través de esta entrevista, me di cuenta de la brecha de primera mano. Sin embargo, hay más dirección.

Una cosa para advertir a todos:

Suele acumular más resultados: producir o enseñar a otros es la mejor manera de aprender. Si no practica, lo olvidará en unos días.

  • Profundizar primero y luego ampliamente: estudio en profundidad, en lugar de permanecer en el nivel de uso de API, comprensión profunda del sistema pieza por pieza y luego pasar a otro.
  • Establezca un sistema de conocimiento: ya sea que cree un blog o un mapa, recuerde organizar el contenido disperso en su propio conocimiento.
  • No tengas una casualidad: no te desnudes, si tienes algo que organizar, deberías buscar más y prepararte más. Las entrevistas de Dachang profundizarán en lo más profundo de ti. No creas que está bien memorizar solo algunas preguntas de la entrevista, ya que hay un sinfín de preguntas. Básicamente, no puedes pasar la prueba. Si ingresa por la parte posterior de las preguntas del examen, entonces es genial, admira.
  • Vaya a una entrevista cada dos veces: No me siga, he estado en una empresa por más de tres años y no he salido a la mitad de la entrevista antes de salir para saber qué hay que agregar.

Las respuestas a algunas preguntas pueden no ser demasiado completas y debe hacerlo usted mismo.

Espero que este artículo te sea útil, incluso si solo hay un punto, vale la pena. Si hay algunos puntos que no comprende, es hora de que los agregue.

No te quedes en tu zona de confort por mucho tiempo o no podrás salir. ¡Si sales, tendrás que devolverlo tarde o temprano!

Me he alojado en una empresa relativamente tradicional. Tengo cuatro años y medio de experiencia en el desarrollo de Java. Tengo algunos conocimientos de big data. También he tratado con clientes durante un año. También he traído un equipo técnico de 10 personas durante 10 meses. Tiene la capacidad de coordinarse y organizarse, comprender el contenido del trabajo del jefe y también puede cooperar bien con los demás.

Tutorial interno de Alibaba Cloud (respuestas de la entrevista)

¡Cómodo!  El arquitecto Ali P9 se quedó despierto toda la noche revisando la versión 2020 de la guía del camino a Dios de Java

 

Combate SSM a nivel empresarial

¡Cómodo!  El arquitecto Ali P9 se quedó despierto toda la noche revisando la versión 2020 de la guía del camino a Dios de Java

 

Análisis de big data

¡Cómodo!  El arquitecto Ali P9 se quedó despierto toda la noche revisando la versión 2020 de la guía del camino a Dios de Java

 

Colección de entrevistas

¡Cómodo!  El arquitecto Ali P9 se quedó despierto toda la noche revisando la versión 2020 de la guía del camino a Dios de Java

 

La guía de Java para convertirte en un dios, entrevistas, documentos y libros te ayudarán a convertirte en un dios paso a paso. Amigos que necesiten todos los materiales de aprendizaje anteriores, reenvíen + comenten, sigan mi mensaje privado y respondan "666" para obtenerlo gratis

Supongo que te gusta

Origin blog.csdn.net/weixin_45132238/article/details/108685181
Recomendado
Clasificación