Sanmen Meituan finalmente recibió la oferta y compartió las preguntas de la entrevista: Spring + Dubbo + Redis + microservicios ...

Prefacio:

Los fabricantes de primer nivel siempre han sido las empresas soñadas de la gente de Internet, incluidos los programadores, que sufren las altas barreras de entrada de los fabricantes de MTD, y solo pueden mirar a la puerta y suspirar, por lo que solo pueden tener la oportunidad de llamar. en la puerta de BAT practicando sus habilidades. La siguiente es la experiencia personal de un programador de Java que ganó la oferta de Sanmenmei Group y presenta las preguntas de la entrevista real para referencia y aprendizaje.

image.png

Parte 1. Tema de primavera

1. ¿Cómo define Spring el alcance de una clase?

Está definido por el atributo de alcance en la definición del bean.

2. El alcance de varios beans admitidos por Spring

Se admite el alcance de los siguientes cinco tipos de beans:

  • singleton: el bean tiene solo una instancia en cada contenedor Spring ioc. (Predeterminado predeterminado)
  • Prototipo: una definición de frijol puede tener varias instancias.
  • solicitud: cada solicitud http creará un bean, y el alcance solo es válido en el contexto de un Spring ApplicationContext basado en web.
  • Sesión: en una sesión HTTP, una definición de bean corresponde a una instancia. Este alcance solo es válido en el contexto de un Spring ApplicationContext basado en web.
  • sesión global: en una sesión HTTP global, una definición de bean corresponde a una instancia. Este alcance solo es válido en el contexto de un Spring ApplicationContext basado en web.

3. Tipos de gestión de transacciones compatibles con Spring

  • Gestión de transacciones mediante programación: esto significa que administra las transacciones mediante programación, lo que le brinda una gran flexibilidad, pero es difícil de mantener.
  • Gestión declarativa de transacciones: esto significa que puede separar el código comercial y la gestión de transacciones, y solo necesita utilizar anotaciones y la configuración XML para gestionar las transacciones.

4. ¿Qué es la inversión de control (IOC)? ¿Qué es la inyección de dependencia?

  • Inversión de control (IOC): Las aplicaciones tradicionales son controladas activamente por nosotros mismos en el objeto para obtener directamente objetos dependientes. Ahora el contenedor nos ayuda a encontrar e inyectar objetos dependientes. Los objetos solo aceptan pasivamente objetos dependientes, por lo que es una inversión de control.
  • Inyección de dependencia: la dependencia entre componentes la determina el contenedor en tiempo de ejecución. Para decirlo de manera más clara, el contenedor inyecta dinámicamente una cierta dependencia en el componente. A través del mecanismo de inyección de dependencias, solo necesitamos especificar los recursos requeridos por el destino a través de una configuración simple sin ningún código, y completar nuestra propia lógica de negocios, sin importarnos de dónde provienen los recursos específicos y por quién.
  • Métodos de implementación: inyección de constructor, inyección de método Setter e inyección de interfaz. El ensamblaje de anotación no está habilitado por defecto. Para usar el ensamblaje de anotación, debemos configurar el contexto: annotation-config / element en el archivo de configuración de Spring.

5. ¿De cuántos componentes centrales consta Spring?

  • Componente de frijol
  • Componente de contexto
  • Componente central

6. ¿El flujo de trabajo central de Spring MVC?

  • El usuario envía una solicitud de solicitud al servidor, y la solicitud es capturada por el controlador central de SpringMVC, DispatcherServlet;
  • DispatcherServlet analiza la URL de la solicitud para obtener el identificador de recurso solicitado (URI). Luego, de acuerdo con el URI, llame al procesador de mapeo HandlerMapping para enviar la solicitud al controlador especificado.
  • Una vez que el controlador se ejecuta, encapsula la información de datos devuelta en el objeto ModelAndView y finalmente selecciona una vista de representación de vista adecuada para volver a la interfaz a través del solucionador de vistas de ViewResolver.

7. Nivel de aislamiento de transacciones de primavera (es mejor decir las cinco entrevistas)

  • DEFAULT Este es el nivel de aislamiento predeterminado de un PlatfromTransactionManager, utilizando el nivel de aislamiento de transacciones predeterminado de la base de datos.
  • Lectura sin compromiso: pueden producirse lecturas sucias, lecturas no repetibles y lecturas virtuales. Es el nivel de aislamiento de transacción más bajo, que permite que otra transacción vea los datos no confirmados de esta transacción.
  • Lectura confirmada: evite las lecturas sucias. Sin embargo, pueden producirse lecturas virtuales y no repetibles. Asegúrese de que una transacción solo pueda ser leída por otra transacción después de que se envíe. Otra transacción no puede leer los datos no confirmados de la transacción. Oracle predeterminado
  • Lectura repetible: este nivel de aislamiento de transacciones puede evitar lecturas sucias y lecturas no repetibles. Sin embargo, puede producirse una lectura fantasma. Además de garantizar que una transacción no pueda ser leída por otra transacción, también evita las siguientes situaciones (lectura no repetible). Mysql predeterminado
  • Serializable: este es el nivel de aislamiento de transacciones más caro, ineficiente pero más confiable. Las transacciones se procesan como ejecución secuencial. Además de prevenir lecturas sucias y lecturas no repetibles, también se evitan las lecturas fantasma (evite tres tipos).

8. Características de las transacciones de Spring (es mejor decir las cuatro entrevistas)

  • Atomicidad (atomicidad): Todas las operaciones en la base de datos en una transacción son una secuencia indivisible de operaciones, ya sea todo o nada.
  • Coherencia: la integridad de los datos antes y después de la ejecución de la transacción sigue siendo coherente.
  • Aislamiento (aislamiento): durante la ejecución de una transacción, no debe ser interferido por otras transacciones
  • Durabilidad: una vez que se envía una cosa, sus cambios en la base de datos son permanentes

9. Siete características de propagación de las transacciones de Spring (siete entrevistas dicen una o dos)

  • Propagación. REQUERIDO (predeterminado) La entrevista debe decir esto. La persona que llama ya tiene una transacción, se unirá a la misma transacción para ejecutarla; de lo contrario, iniciará una transacción automáticamente
  • Propagation.REQUIRES_NEW. Siempre que empiezo un nuevo negocio
  • Propagación SOPORTES. Si la persona que llama tiene una transacción, se unirá a la misma transacción para ejecutarse, si no hay transacción, se ejecutará de manera no transaccional
  • Propagación.NO_SUPPORTADO. Si la persona que llama tiene una transacción, se suspenderá hasta que la persona que llama termine de ejecutarse y la transacción se reanude.
  • Propagación OBLIGATORIO. Si la persona que llama tiene una transacción, se unirá a la misma transacción y se ejecutará, si no existe, se lanzará una excepción
  • Propagación NUNCA. Si la persona que llama tiene una transacción, se lanza una excepción
  • Propagación ANIDADO. Si la persona que llama tiene una transacción, ejecute una transacción anidada, si la persona que llama no tiene una transacción, ejecute la forma de Propagación.

10. Describe brevemente el ciclo de vida de Spring Bean.

Instancia, inicializa, usa y destruye.

Palabras clave: BeanFactoryPostProcessor, BeanPostProcessor, método de inicio / método de destrucción

[Error al cargar la imagen ... (image-b401f-1611732924344)]

Segunda parte. Tema de la entrevista de Dubbo

1. ¿Cuáles son los mecanismos de tolerancia a fallos de Dubbo?

El sitio web oficial de Dubbo propone un total de seis estrategias de tolerancia a fallas

  • Modo de clúster de conmutación por error : encendido automático en caso de falla, cuando ocurre una falla, vuelva a intentar con otros servidores. (defecto)
  • Clúster Failfast : falla rápido, solo inicie una llamada e informe de inmediato un error si falla. Usualmente se usa para operaciones de escritura no idempotentes, como agregar registros.
  • Clúster a prueba de fallas : a prueba de fallas, cuando ocurre una excepción, simplemente ignórela. Normalmente se utiliza para operaciones como escribir en el registro de auditoría.
  • Clúster de conmutación por recuperación: recuperación automática de fallas, grabación en segundo plano de solicitudes fallidas y retransmisión regular. Normalmente se utiliza para operaciones de notificación de mensajes.
  • Clúster de bifurcación : llame a varios servidores en paralelo y regrese siempre que uno tenga éxito. Por lo general, se usa para operaciones de lectura con altos requisitos de tiempo real, pero es necesario desperdiciar más recursos de servicio. El número máximo de paralelos se puede establecer mediante horquillas = ”2”.
  • Clúster de transmisión : Broadcast llama a todos los proveedores, llámalos uno por uno e informa un error si alguno informa un error. (Compatible con 2.1.0) Normalmente se utiliza para notificar a todos los proveedores que actualicen la información de recursos locales, como la memoria caché o el registro.

Resumen : en las aplicaciones reales, se recomienda utilizar el clúster de conmutación por error predeterminado para la estrategia de tolerancia a errores de la declaración de consulta, y para adiciones, eliminaciones y cambios, se recomienda utilizar el clúster de conmutación por error o el clúster de conmutación por error (reintentos = "0") estrategia para evitar adiciones de datos duplicados y otros problemas. Se recomienda que el método de la interfaz de consulta se utilice como una interfaz separada para proporcionar consultas al diseñar la interfaz.

2. ¿Qué problemas ha encontrado al utilizar dubbo?

Aumentar el número de versión del servicio y el número de versión del servicio al consumidor.

Específicamente, esto no es un problema, sino una solución al problema. En nuestro trabajo actual, enfrentaremos la escasez de diversos recursos ambientales. También es un problema muy práctico. Al principio, también podemos brindar un servicio para Desarrollo y testing, pero cuando hay múltiples entornos, múltiples versiones y múltiples tareas, no satisface nuestras necesidades. En este momento, podemos diferenciarnos agregando versiones al proveedor. Esto deja muchos recursos físicos Al mismo tiempo, cuando la definición de interfaz se publique en línea en el futuro, se puede liberar sin detenerse, utilizando el número de versión. La referencia solo encontrará el servicio de la versión correspondiente, por ejemplo:

<pre style="box-sizing: border-box; font-family: inherit; font-size: 16px; margin: 1em 0px; padding: 12px 10px; white-space: pre-wrap; border: 1px solid rgb(232, 232, 232); position: relative; line-height: 1.5; color: rgb(153, 153, 153); background: rgb(244, 245, 246); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><dubbo:serviceinterface="com.xxx.XxxService" ref="xxxService" version="1.0"/>
<dubbo:referenceid="xxxService" interface="com.xxx.XxxService" version="1.0"/>

3. ¿Problema de anotación de referencia Dubbo?

@Reference solo se puede usar en la clase actual correspondiente a la instancia de SpringBean, y no se puede usar en la clase principal por el momento; si realmente desea declarar una referencia en la clase principal, puede configurar dubbo: reference a través del archivo de configuración, y luego use la misma referencia que SpringBean en el lugar donde necesita hacer referencia Eso es todo.

4. ¿Qué debo hacer si RpcException: ningún proveedor disponible para el servicio remoto es anormal?

  • Compruebe si el registro conectado es correcto
  • Vaya al centro de registro para comprobar si existe el proveedor de servicios correspondiente
  • Compruebe si el proveedor de servicios funciona con normalidad

5. ¿El proveedor de servicios no se ha registrado, pero no puede verlo en el centro de registro?

Primero, confirme si el proveedor de servicios está conectado al registro correcto. No solo verifique la dirección del registro en la configuración, sino que también verifique la conexión de red real.

En segundo lugar, observe si el proveedor de servicios está muy ocupado, como una prueba de esfuerzo, de modo que no haya ningún fragmento de CPU para enviar un latido al registro. En este caso, la presión se reducirá y la presión se restablecerá automáticamente.

6. ¿Cuáles son los métodos de conexión de Dubbo?

El cliente y el servidor de Dubbo tienen tres métodos de conexión, a saber: transmisión, conexión directa y uso del centro de registro de zookeeper.

7. Transmisión Dubbo

Este método es el método de conexión utilizado por el programa de entrada oficial de dubbo, pero este método tiene muchos problemas. En el desarrollo empresarial, no se utiliza la radiodifusión. Configuración del servidor taotao-manager:

<pre style="box-sizing: border-box; font-family: inherit; font-size: 16px; margin: 1em 0px; padding: 12px 10px; white-space: pre-wrap; border: 1px solid rgb(232, 232, 232); position: relative; line-height: 1.5; color: rgb(153, 153, 153); background: rgb(244, 245, 246); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">!-- applicationContext-service.xml 文件中 -->
<!-- 提供方应用信息,用于计算机依赖关系 -->
<dubbo:application name="taotao-manager-service” />
<!-- 使用 multicast 广播暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 使用 dubbo 协议在 20880 协议暴露服务 -->
<dubboprotocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.taotao.manager.service.TestService" ref="testServiceImpl" />
</pre>

image.png

Tercera parte. Temas de Redis

1. ¿Qué es Redis?

Respuesta: Remote Dictionary Server (Redis) es una base de datos de clave-valor basada en registros de código abierto escrita en lenguaje C ANSI, compatible con la red, basada en memoria o persistente, y que proporciona API en varios idiomas.

Por lo general, se le llama servidor de estructura de datos porque el valor puede ser de cadena (Cadena), hash (Mapa), lista (lista), conjunto (conjuntos) y conjuntos ordenados (conjuntos ordenados) y otros tipos.

2. ¿Cuáles son las características de Redis?

  • Admite una variedad de estructuras de datos, como cadena (cadena), lista (lista doblemente vinculada), dict (tabla hash), conjunto (colección), zset (conjunto ordenado), hiperloglog (estimación de cardinalidad)
  • Admite la operación de persistencia, puede llevar a cabo la persistencia de datos AOF y RDB en el disco, para realizar operaciones como copia de seguridad o recuperación de datos, que es un mejor medio para evitar la pérdida de datos.
  • Admite la replicación de datos a través de la replicación. A través del mecanismo maestro-esclavo, los datos se pueden replicar sincrónicamente en tiempo real, y se admiten la replicación multinivel y la replicación incremental. El mecanismo maestro-esclavo es un medio importante para que Redis realice HA.
  • Solicitud de proceso único, todos los comandos se ejecutan en serie y no es necesario considerar problemas de coherencia de datos en situaciones simultáneas.

3. ¿Cuáles son los tipos de datos de Redis?

responder:

  • Cuerda
  • Hash (hash 表)
  • Lista (lista vinculada)
  • Colocar
  • SortedSet (conjunto ordenado zset)

4. ¿Cuáles son los esquemas de configuración y persistencia de Redis?

Respuesta: Los siguientes dos

  • Camino RDB
  • Método AOF

Parte 4. Tema del guardián del zoológico

1. ¿Cuál es el marco de Zookeeper?

El servicio de coordinación de aplicaciones distribuidas distribuidas y de código abierto fue originalmente un componente importante de Hadoop y HBase.

Escenarios de aplicación: Zookeeper es muy poderoso y tiene muchos escenarios de aplicación Combinado con el uso del marco Dubbo en mi trabajo actual, Zookeeper se usa principalmente como un registro.

Los proveedores y consumidores desarrollados en base al marco Dubbo registran su propia URL con Zookeeper. Los consumidores también pueden obtener y suscribirse a la URL de registro del proveedor, para que puedan ser llamados en la ejecución de programas posteriores. Si el proveedor cambia, también enviará notificaciones a los consumidores suscritos a través de Zookeeper.

2. ¿Qué tipo de tipos de nodos tiene Zookeeper?

  • Persistencia: Siempre existe después de la creación, a menos que haya una operación de eliminación, la falla de la sesión del cliente que creó el nodo no afectará al nodo.
  • Orden de persistencia: igual que la persistencia, es decir, cuando el nodo principal crea el siguiente nivel de nodos secundarios, registra el orden en el que se crea cada nodo secundario y agrega un sufijo numérico al nombre de cada nodo secundario.
  • Temporal: la creación de una sesión de cliente falla (tenga en cuenta que la sesión falla, no que la conexión se interrumpe) y el nodo desaparece. No se pueden crear nodos secundarios.
  • Secuencia temporal: No es necesario explicarlo.

3. ¿Es permanente la notificación de monitoreo de vigilancia de Zookeeper al nodo?

No es.

Declaración oficial: un evento Watch es un desencadenante único. Cuando cambia el conjunto de datos con Watch, el servidor enviará el cambio al conjunto del cliente con Watch para notificarlo.

¿Por qué no es permanente? Por ejemplo, si el servidor cambia con frecuencia y el cliente de escucha, en muchos casos, todos los clientes deben ser notificados de cada cambio, lo que consume demasiado rendimiento.

Generalmente, el cliente ejecuta getData ("/ nodo A", verdadero). Si el nodo A se cambia o elimina, el cliente obtendrá su evento de observación, pero después de que el nodo A se cambie nuevamente y el cliente no lo haya configurado. El evento ya no se envía al cliente.

En aplicaciones prácticas, en muchos casos, nuestro cliente no necesita conocer todos los cambios del servidor, solo necesito los datos más recientes.

4. Si el clúster de Zookeeper tiene 3 máquinas, ¿puede funcionar todavía un clúster? ¿Qué tal colgar dos?

Recuerde un principio: se puede usar más de la mitad viva.

¿El clúster admite máquinas sumadoras dinámicas ?

De hecho, es una expansión horizontal, Zookeeper no es muy bueno en este sentido. Dos caminos:

  • Reiniciar todo: apague todos los servicios de Zookeeper e inícielos después de modificar la configuración. No afecta la sesión anterior del cliente.
  • Reinicie uno por uno: como sugiere el nombre. Ésta es la forma más común.

Parte 5. Temas sobre microservicios

1. ¿Por qué utilizar el seguimiento de microservicios? ¿Qué problema soluciona?

1. ¿Cuál es el estado de la invocación de microservicios ?

  • El status quo de los microservicios: con el desarrollo de los negocios, la arquitectura monolítica se ha convertido en una arquitectura de microservicios, y la escala del sistema se ha vuelto cada vez más grande, y la relación de llamadas entre microservicios se ha vuelto cada vez más compleja.
  • Trabajo colaborativo multiservicio: en una aplicación de microservicio, una solicitud iniciada por un cliente pasará por varias llamadas de microservicio diferentes en el sistema back-end para producir de forma colaborativa el resultado final de la solicitud.
  • Las cadenas de llamadas complicadas son propensas a errores: en un sistema de arquitectura de microservicio complejo, casi todas las solicitudes de front-end formarán un enlace de llamada de servicio distribuido complejo, y cualquier servicio dependiente en cada enlace tendrá un tiempo de espera de espera o error Puede causar la falla final de toda la solicitud.

2. ¿Qué problema resuelve el seguimiento de microservicios ?

El seguimiento de microservicios es en realidad una herramienta que puede rastrear el proceso de una solicitud de usuario (incluida la recopilación de datos, la transmisión de datos, el almacenamiento de datos, el análisis de datos y la visualización de datos) en todo el sistema distribuido. Al capturar estos datos de seguimiento, puede crear microservicios. Vista de toda la cadena de llamadas, que es una herramienta clave para depurar y monitorear microservicios.

Spring Cloud S1euth tiene 4 características:

  • Proporcionar seguimiento de enlaces: a través de detectives, queda claro qué servicios ha pasado una solicitud. Es muy conveniente resolver la relación de llamadas entre servicios.
  • Análisis de rendimiento: a través de Sleuth, puede ver fácilmente el tiempo que consume cada solicitud de muestreo y analizar qué llamadas de servicio requieren más tiempo. Cuando el tiempo que consume la invocación del servicio aumenta con el aumento de la cantidad de solicitudes, también puede proporcionar un recordatorio fijo para la expansión del servicio.
  • Análisis de datos y optimización de enlaces: para llamar con frecuencia a un servicio o llamar en paralelo, se pueden tomar algunas medidas de optimización para la empresa.
  • Errores de visualización: las excepciones que no detecta el programa se pueden ver en la interfaz zipkin.

Escrito al final:

Debido a las limitaciones de espacio, en el artículo solo se muestra una parte de las preguntas de la entrevista El autor ha compilado las preguntas completas de la entrevista en un archivo PDF, y los amigos que lo necesiten pueden ayudar a reenviarlo;

¡Entonces haga clic aquí para recibir los documentos completos de la entrevista de forma gratuita!

La siguiente es una captura de pantalla de algunas preguntas de la entrevista.

Sanmen Meituan finalmente recibió la oferta y compartió las preguntas de la entrevista: Spring + Dubbo + Redis + microservicios ...

Supongo que te gusta

Origin blog.csdn.net/weixin_47066028/article/details/113250316
Recomendado
Clasificación