¡Mira aquí la entrevista! La información está ordenada, ¿a qué estás esperando? ¡Recuerda! 2020 última colección de Java de preguntas de entrevistas comunes + respuestas detalladas (11)

2020 última colección de Java de preguntas de entrevistas comunes + respuestas detalladas (11)

Continúe actualizando los materiales relacionados con Java. Recientemente, he pasado 7 días consultando las últimas noticias de entrevistas de grandes jefes y me esfuerzo por recopilar información más completa sobre entrevistas. Si desea ver las primeras colecciones, puede ir a mi página de inicio para encontrarlas.

Algunas de las respuestas las he resumido yo mismo y otras se recopilan en Internet. ¡Que no cunda el pánico después de ver estas entrevistas! Si tiene más experiencia, puede compartirla en los comentarios. Si tiene algún error, puede señalarlo. Por favor, hágamelo saber, gracias ~

13. Mybatis

104. ¿Cuál es la diferencia entre # {} y $ {} en mybatis?

  • # {} es un proceso de precompilación, $ {} es un reemplazo de cadena;

  • Cuando Mybatis procesa # {}, reemplaza # {} en sql con un? Sign y llama al método set de PreparedStatement para asignar;

  • Cuando Mybatis procesa $ {}, reemplaza $ {} con el valor de la variable;

  • El uso de # {} puede prevenir eficazmente la inyección de SQL y mejorar la seguridad del sistema.

 

105. ¿Cuántos métodos de paginación tiene mybatis?

 

  1. Página de grupo de números

  2. paginación sql

  3. Paginación del interceptor

  4. Paginación de RowBounds

 

106. ¿Cuál es la diferencia entre la paginación lógica mybatis y la paginación física?

 

  • La paginación física no es necesariamente más rápida que la paginación lógica y la paginación lógica no es necesariamente más rápida que la paginación física.

  • La paginación física es siempre mejor que la paginación lógica: no hay necesidad de presionar desde el lado de la base de datos al lado de la aplicación. Incluso si hay una ventaja en la velocidad, otras ventajas de rendimiento pueden compensar esta deficiencia.

Será más efectivo si observa la autocomprobación de la pregunta y luego la respuesta detallada

107. ¿Mybatis admite la carga diferida? ¿Cuál es el principio de la carga diferida?

 

Mybatis solo admite la carga diferida de objetos de asociación y objetos de colección. La asociación se refiere a uno a uno y la colección se refiere a consultas de uno a varios. En el archivo de configuración de Mybatis, puede configurar si habilitar la carga diferida lazyLoadingEnabled = true | false.

 

Su principio es utilizar CGLIB para crear el objeto proxy del objeto objetivo. Cuando se llama al método objetivo, ingrese el método interceptor, como llamar a a.getB (). GetName (), y el método invoke () del interceptor encuentra que a.getB () es valor nulo, luego enviará por separado la consulta sql guardada previamente asociada con el objeto B, consultará B hacia arriba y luego llamará a a.setB (b), por lo que el atributo del objeto b de a tiene un valor, y luego completará a.getB ( ) .getName () llamada al método. Este es el principio básico de la carga diferida.

 

Por supuesto, no solo Mybatis, sino casi todos, incluido Hibernate, admiten la carga diferida con el mismo principio.

 

108. ¿Cuéntame sobre la caché de primer nivel y la caché de segundo nivel de mybatis?

 

Caché de nivel 1: caché local HashMap basada en PerpetualCache. Su alcance de almacenamiento es Sesión. Después de vaciar o cerrar la sesión, se vaciarán todas las cachés de la sesión y la caché de nivel 1 se activará de forma predeterminada.

 

El mecanismo de la caché de segundo nivel es el mismo que el de la caché de primer nivel. De forma predeterminada, también se utilizan el almacenamiento PerpetualCache y HashMap. La diferencia es que el alcance del almacenamiento es Mapper (espacio de nombres) y la fuente de almacenamiento se puede personalizar, como Ehcache. El caché de segundo nivel no está activado de forma predeterminada. Para habilitar el caché de segundo nivel, el uso de la clase de atributo de caché de segundo nivel debe implementar la interfaz de serialización serializable (que se puede usar para guardar el estado del objeto), que se puede configurar en su archivo de mapeo <caché />;

 

Para el mecanismo de actualización de datos de caché, cuando se realiza una operación C / U / D en un determinado ámbito (sesión de caché de primer nivel / espacios de nombres de caché de segundo nivel), todas las cachés seleccionadas en este ámbito se borrarán de forma predeterminada.

 

109. ¿Cuáles son las diferencias entre mybatis e hibernate?

 

(1) Mybatis es diferente de hibernate, no es exactamente un framework ORM, porque MyBatis requiere que los programadores escriban sentencias Sql.

 

(2) Mybatis escribe directamente el SQL ecológico original, que puede controlar estrictamente el rendimiento de ejecución de SQL, y tiene una alta flexibilidad. Es muy adecuado para el desarrollo de software que no requiere altos requisitos para los modelos de datos relacionales, porque los requisitos de este tipo de software cambian con frecuencia, y una vez que los requisitos cambian, requieren una salida rápida. . Pero la premisa de la flexibilidad es que mybatis no puede ser independiente de la base de datos. Si necesita implementar software que admita múltiples bases de datos, necesita personalizar múltiples conjuntos de archivos de mapeo SQL, lo cual es mucho trabajo. 

 

(3) Hibernate tiene fuertes capacidades de mapeo relacional / de objetos y buena independencia de la base de datos. Para software con altos requisitos para modelos relacionales, si desarrolla con Hibernate, puede guardar mucho código y mejorar la eficiencia. 

110. ¿Qué ejecutores (Ejecutor) tiene mybatis?

 

Mybatis tiene tres ejecutores básicos (Ejecutor):

 

  1. SimpleExecutor : cada vez que se ejecuta una actualización o selección, se abre un objeto Statement y el objeto Statement se cierra inmediatamente después de su uso.

  2. ReuseExecutor : Ejecute la actualización o seleccione, use sql como clave para encontrar el objeto Statement, utilícelo si existe y créelo si no existe. Después de usarlo, el objeto Statement no se cierra, sino que se coloca en el mapa para el siguiente uso. En resumen, es reutilizar el objeto Statement.

  3. BatchExecutor : ejecute la actualización (sin seleccionar, el procesamiento por lotes de JDBC no admite la selección), agregue todos los sql al lote (addBatch ()), espere la ejecución unificada (executeBatch ()), almacena en caché múltiples objetos Statement, cada uno Los objetos de declaración están todos después de que se completa addBatch (), esperando el procesamiento por lotes de executeBatch () uno por uno. Igual que el procesamiento por lotes de JDBC.

 

111. ¿Cuál es el principio de realización del complemento de paginación mybatis?

 

El principio básico del complemento de paginación es utilizar la interfaz del complemento proporcionada por Mybatis para implementar un complemento personalizado, interceptar el SQL que se ejecutará en el método de interceptación del complemento y luego reescribir el SQL, de acuerdo con el dialecto del dialecto, agregar la declaración de paginación física y los parámetros de paginación físicos correspondientes.

 

112. ¿Cómo escribe mybatis un complemento personalizado?

 

Transferencia desde: blog.csdn.net/qq_30051265/article/details/80266434

 

El complemento personalizado Mybatis intercepta los cuatro objetos principales de Mybatis (Executor, StatementHandler, ParameterHandler y ResultSetHandler). El método de interceptación específico es: 

  • Ejecutor: método de interceptar ejecutor (registro de registro) 

  • StatementHandler: intercepta el procesamiento de la construcción de sintaxis de SQL 

  • ParameterHandler: procesamiento de parámetros de intercepción 

  • ResultSetHandler: intercepta el procesamiento del conjunto de resultados 

 

El complemento personalizado de Mybatis debe implementar la interfaz Interceptor:

public interface Interceptor {
    Object intercept(Invocation invocation) throws Throwable;
    Object plugin(Object target);
    void setProperties(Properties properties);
}

método de intercepción: el método lógico de procesamiento específico del interceptor 

método de complemento: generar un objeto proxy dinámico basado en el mapa de firmas 

Método setProperties: establece la propiedad Propiedades

Demostración de complemento personalizado:

// ExamplePlugin.java
@Intercepts({@Signature(
  type= Executor.class,
  method = "update",
  args = {MappedStatement.class,Object.class})})
public class ExamplePlugin implements Interceptor {
  public Object intercept(Invocation invocation) throws Throwable {
  Object target = invocation.getTarget(); //被代理对象
  Method method = invocation.getMethod(); //代理方法
  Object[] args = invocation.getArgs(); //方法参数
  // do something ...... 方法拦截前执行代码块
  Object result = invocation.proceed();
  // do something .......方法拦截后执行代码块
  return result;
  }
  public Object plugin(Object target) {
    return Plugin.wrap(target, this);
  }
  public void setProperties(Properties properties) {
  }
}

Un @Intercepts se puede configurar con múltiples @Signatures. Los parámetros en @Signature se definen de la siguiente manera: 

  • tipo: indica la clase interceptada, aquí está la clase de implementación del Ejecutor;

  • método: indica el método de interceptación, aquí está el método de actualización para interceptar al Ejecutor;

  • args: representa los parámetros del método.

    Al final

    El contenido de las preguntas de la entrevista está aquí, habrá más actualizaciones en el seguimiento, espero que sea de ayuda para todos.

    Por último, quiero decirles algo, he trabajado durante tantos años y he entrevistado a algunas personas para otras. Ya sea desde la perspectiva del entrevistador o del líder, además de las habilidades y la experiencia de la entrevista, la gran tecnología y la experiencia en proyectos también son sus bazas y su confianza. Intercambio de tecnología central de fabricantes de primer nivel

     Me tomó mucho tiempo ordenar algunos materiales de aprendizaje. Lo que publiqué arriba es la punta del iceberg en los materiales. ¡Espero poder ayudarlos! Haga clic para aprender el código secreto juntos: csdn

                             

      Compartiré más artículos de productos secos puros en el seguimiento y espero poder ayudarlo realmente. ¡Tu apoyo es mi mayor motivación! ¡Bienvenido a seguir y me gusta!

                                                           

Supongo que te gusta

Origin blog.csdn.net/weixin_50333534/article/details/108967338
Recomendado
Clasificación