¿Qué es exactamente el ensayo estereotipado de Java del que todos hablan a menudo? ¡Déjame resumirlo!

Colección de preguntas de ensayo sobre estereotipos.

面试必看java八股文


问题正在收录中,累了休息一会,如果有需要请,先关注,这几天会更帖子,答案后续补上

Directorio de artículos

1. Fundación Java

1.1 ¿Qué es Java?

1.2 ¿Cuál es la relación entre JVM, JRE y JDK?

1.3 ¿Qué es multiplataforma? ¿Cuál es el principio?

1.4 ¿Cuáles son las características del lenguaje Java?

1.5 ¿Cuáles son las diferencias entre las aplicaciones Java y los applets?

1.6 ¿Cuál es la diferencia entre Java y C++?

1.7 ¿Comparación entre Oracle JDK y OpenJDK?

1.8 ¿Qué tipos de datos tiene Java?

1.9 ¿Calcular 2 por 8 de la manera más eficiente?

1.10 ¿A qué equivale Math.round(11.5)? ¿A qué es igual Math.round(-11.5)?

1.11 float f=3.4, ¿correcto?

1.12 ¿Es corto s1 = 1; s1 = s1 + 1; incorrecto? ¿Es corto s1 = 1; s1 += 1; incorrecto?

1.13 ¿Qué anotaciones de Java?

1.14 ¿Cuál es la diferencia entre los modificadores de acceso público, privado, protegido y no escrito (predeterminado)?

Definición: en Java, los modificadores de acceso se pueden usar para proteger el acceso a clases, variables, métodos y constructores. Java admite 4 derechos de acceso diferentes.

Clasificación:

private : Visible dentro de la misma clase. Objetos utilizados: variables, métodos. Nota: las clases (clases externas) no se pueden modificar por defecto
(es decir, por defecto, no escriba nada, no use palabras clave): visible en el mismo paquete, no use ningún modificador. Utilizar objetos: clases, interfaces, variables, métodos. protected :
Visible para las clases y todas las subclases en el mismo paquete. Objetos utilizados: variables, métodos. Nota: Las clases (clases externas) no se pueden decorar. public :
Visible para todas las clases. Trabajar con objetos: clases, interfaces, variables, diagramas modificadores de acceso a métodos

1.15 ¿Cuál es la diferencia entre & y &&?

1.16 ¿Para qué sirve la final?

1.17 ¿Cuál es la diferencia entre finalmente finalizar?

1.18 ¿Cuál es el uso de esta palabra clave?

1.19 uso de la palabra clave super?

1.20 ¿Cuál es la diferencia entre esto y súper?

1.21 ¿Cuál es el significado principal de estático?

1.22 ¿Qué tiene de especial la estática?

1.23 escenarios de aplicaciones estáticas?

1.24 precauciones estáticas?

1.25 ¿Cuáles son las diferencias y funciones de romper, continuar y regresar?

1.26 En Java, ¿cómo salir de los múltiples bucles anidados actuales?

1.27 ¿Cuál es la diferencia entre orientado a objetos y orientado a procesos?

1.28 ¿Cuáles son las tres características principales de la orientación a objetos?

1.29 ¿Qué es un mecanismo polimórfico? ¿Cómo implementa el lenguaje Java el polimorfismo?

1.30 ¿Cuáles son los cinco principios básicos de la orientación a objetos (opcional)?

1.30 ¿Comparación entre clase abstracta e interfaz?

1.31 ¿Cuáles son las diferencias entre las clases ordinarias y las clases abstractas?

1.32 ¿Se puede decorar una clase abstracta con final?

1.33 ¿Qué palabra clave se utiliza para crear un objeto? ¿En qué se diferencia una instancia de objeto de una referencia de objeto?

1.34 ¿Cuáles son las diferencias entre las variables miembro y las variables locales?

1.35 Antes de llamar al constructor de la subclase, primero se llamará al constructor de la clase padre sin parámetros ¿Cuál es el propósito?

1.36 ¿Cuál es la función de un constructor de clases? Si una clase no declara un constructor, ¿se puede ejecutar correctamente el programa modificado? ¿Por qué?

1.37 ¿Cuáles son las características del método de construcción?

1.38 ¿Cuál es la diferencia entre variables estáticas y variables de instancia?

1.39 ¿Cuál es la diferencia entre variables estáticas y variables ordinarias?

1.40 ¿Cuál es la diferencia entre un método estático y un método de instancia?

1.41 ¿Por qué es ilegal llamar a un miembro no estático dentro de un método estático?

1.42 ¿Cuál es el valor de retorno de un método? ¿Cuál es la función del valor de retorno?

1.43 ¿Qué es una clase interna?

1.44 ¿Cuáles son las clasificaciones de las clases internas?

1.45 ¿Cuáles son las ventajas de las clases internas?

1.46 ¿Cuáles son los escenarios de aplicación de las clases internas?

1.47 ¿Se puede anular un constructor?

1.48 La diferencia entre sobrecarga y anulación. ¿Se pueden diferenciar los métodos sobrecargados por tipo de devolución?

1.49 ¿Cuál es la diferencia entre == y equals?

1.50 ¿Cuál es la diferencia entre pasar por valor y pasar por referencia?

1.51 ¿Por qué solo se pasa por valor en Java?

1.52 ¿Cuáles son los paquetes comúnmente usados ​​en JDK?

1.53 ¿Cuántos tipos de flujos IO hay en Java?

1.54 ¿Cuál es la diferencia entre BIO, NIO y AIO?

1.55 ¿Cuáles son los métodos comunes de Archivos?

1.56 ¿Qué es el mecanismo de reflexión?

1.57 ¿Cuáles son las ventajas y desventajas del mecanismo de reflexión?

1.58 ¿Cuáles son los escenarios de aplicación del mecanismo de reflexión?

1.59 ¿Tres formas de obtener reflejo en Java?

1.60 ¿Cuál es la diferencia entre una constante de carácter y una constante de cadena?

1.61 ¿Qué es un conjunto de constantes de cadenas?

1.62 ¿Es String el tipo de datos más básico?

1.63 ¿Cuáles son las características de String?

1.64 ¿Por qué String es inmutable?

1.65 ¿Es posible heredar la clase String?

1.66 ¿Tiene un arreglo un método length()? ¿String tiene un método de longitud ()?

1.67 ¿Cuáles son los métodos comúnmente usados ​​de la clase String?

1.68 Al usar HashMap, ¿cuál es la ventaja de usar String como clave?

1.69 ¿Cuál es la diferencia entre String, StringBuffer y StringBuilder? ¿Por qué String es inmutable?

1.70 Unboxing: conversión de tipos de contenedor a tipos de datos primitivos; ¿cuál es la diferencia entre int e Integer?

1.71 ¿Es el entero a = 127 igual al entero b = 127?

1.72 ¿Qué son las colas y las pilas? ¿Cual es la diferencia?

1.73 ¿Creación de objetos?

1.74 ¿Java tiene pérdidas de memoria?

1.75 Desbordamiento de memoria, ¿cómo solucionar problemas en línea?

1.76 Describa brevemente el mecanismo de recolección de basura de Java.

1.77 ¿Qué es GC? ¿Por qué GC?

1.78 ¿Cuáles son las ventajas y los principios de la recolección de basura y considere dos mecanismos de reciclaje?

1.79 ¿Cuáles son los tipos de referencia en Java?

1.80 ¿Cómo juzgar si un objeto se puede reciclar?

1.81 Dime, ¿qué algoritmos de recolección de basura tiene la JVM?

1.82 Cuénteme sobre el proceso de ejecución de la carga de clases.

1.83 ¿Qué es el Modelo de Delegación Parental?

1.84 ¿Qué es un conjunto?

1.85 ¿Cuáles son las características de las colecciones?

1.86 ¿Cuál es la diferencia entre una colección y un arreglo?

1.87 ¿Cuáles son los beneficios de usar el marco de recopilación?

1.88 ¿Cuáles son las clases de colección comúnmente utilizadas?

1.89 ¿Cuál es la diferencia entre lista, conjunto y mapa? ¿La lista, el conjunto y el mapa heredan de la interfaz de la colección? ¿Cuáles son las características de cada una de las tres interfaces de List, Map y Set al acceder a los elementos?

1.90 ¿Cuál es la estructura de datos subyacente del marco de recopilación?

1.91 ¿Qué clases de colección son seguras para subprocesos?

1.92 ¿Qué es Iterador?

1.93 ¿Cuál es la diferencia entre == y equals?

1.94 Cuénteme sobre el principio de implementación de HashMap.

1.95 ¿Por qué las clases de empaquetado como String e Integer en HashMap son adecuadas como K?

1.96 ¿Qué debo hacer si uso Object como clave de HashMap?

1.97 ¿Cuál es la diferencia entre HashMap y HashTable?

1.98 ¿Cuál es la diferencia entre HashMap y ConcurrentHashMap?

1.99 ¿Cuál es la diferencia entre Array y ArrayList?

1.100 ¿Cuál es la diferencia entre Colección y Colecciones?

2. Relacionado con subprocesos y simultaneidad

2.1 Por qué utilizar la programación concurrente (ventajas de la programación concurrente)

2.2 ¿Cuáles son las desventajas de la programación concurrente?

2.3 ¿Cuáles son los tres elementos de la programación concurrente? ¿Cómo garantizar la seguridad de la operación de subprocesos múltiples en programas Java?

2.4 ¿Cuál es la diferencia entre paralelismo y concurrencia?

2.5 ¿Qué es multihilo, las ventajas y desventajas de multihilo?

2.6 Diferencia entre hilos y procesos ¿Qué son los hilos y los procesos?

2.7 ¿Qué es el cambio de contexto?

2.8 ¿Cuál es la diferencia entre un subproceso daemon y un subproceso de usuario?

2.9 ¿Cómo encontrar qué subproceso tiene la mayor utilización de la CPU en Windows y Linux?

2.10 ¿Qué es el interbloqueo de subprocesos?

2.11 ¿Cuáles son las cuatro condiciones necesarias para que se forme un interbloqueo?

2.12 ¿Cómo evitar el interbloqueo de subprocesos?

2.13 ¿Cuatro formas de crear hilos?

2.14 ¿Cuál es la diferencia entre run() y start() de un hilo?

2.15 ¿Por qué se ejecuta el método run() cuando llamamos al método start()? ¿Por qué no podemos llamar directamente al método run()?

2.16 ¿Qué es FutureTask?

2.17 Estado del subproceso y operaciones básicas Hábleme sobre el ciclo de vida del subproceso y cinco estados básicos.

2.18 ¿Cuál es el algoritmo de programación de subprocesos que se utiliza en Java?

2.19 ¿Estrategia de programación de subprocesos?

2.20 ¿Qué son Thread Scheduler y Time Slicing?

2.21 ¿Por qué están definidos en la clase Object los métodos de comunicación de subprocesos wait(), notificar() y notificarTodos()?

2.22 ¿Por qué se debe llamar a wait(), notificar() y notificar a Todos() en un método sincronizado o un bloque sincronizado?

2.23 ¿Cuál es la función del método yield en la clase Thread?

2.24 ¿Por qué los métodos sleep() y yield() de la clase Thread son estáticos?

2.25 ¿Cuál es la diferencia entre el método sleep() y el método yield() de un hilo?

2.26 ¿Cómo detener un hilo en ejecución?

2.27 ¿Cuál es la diferencia entre los métodos interrumpido e isInterrupted en Java?

2.28 ¿Cómo despiertas un hilo bloqueado en Java?

2.29 ¿Cuál es la diferencia entre notificar() y notificarTodos()?

2.30 ¿Cómo compartir datos entre dos hilos?

2.31 ¿Cómo realiza Java la comunicación y la cooperación entre subprocesos múltiples?

2.32 ¿Qué son la sincronización de subprocesos y la exclusión mutua de subprocesos, y cuáles son los métodos de implementación?

2.33 Método sincronizado o bloque sincronizado, ¿cuál es mejor opción?

2.34 ¿Qué sucede si la cola del grupo de subprocesos está llena cuando envía la tarea?

2.35 ¿Qué es la seguridad de subprocesos? ¿Los servlets son seguros para subprocesos?

2.36 ¿Cómo garantizar la seguridad de la operación de subprocesos múltiples en programas Java?

2.37 ¿Cuál es su comprensión de la prioridad de subprocesos?

2.38 ¿Qué hilo es el método de construcción y el bloque estático de la clase de hilo llamado?

2.39 ¿Cómo obtener un archivo de volcado de subprocesos en Java? ¿Cómo se obtiene la pila de subprocesos en Java?

2.40 ¿Qué anormalidades serán causadas por demasiados subprocesos de Java?

Concurrencia (sección de concurrencia a continuación)

2.41 ¿Cuál es el propósito de la recolección de basura en Java? ¿Cuándo ocurre la recolección de basura?

2.42 ¿Cuál es la función de sincronizado?

2.43 Dime cómo usas la palabra clave sincronizada, ¿se ha usado en el proyecto?

2.44 Cuénteme sobre el principio de implementación subyacente de sincronizado.

2.45 ¿Qué es el giro?

2.46 ¿Cómo sabe el hilo B que el hilo A ha modificado la variable?

2.47 ¿Cuál es la diferencia entre sincronizado y bloqueado?

2.48 ¿Qué hace la palabra clave volátil?

2.49 ¿Qué es la interfaz de bloqueo en la API de concurrencia de Java? ¿Cuáles son sus ventajas sobre los síncronos?

2.50 ¿Cuál es la comprensión del bloqueo optimista y el bloqueo pesimista y cómo implementarlos?

2.51 ¿Qué es CAS?

2.52 ¿Qué es un interbloqueo?

2.53 ¿Cuáles son las condiciones para un interbloqueo? ¿Cómo prevenir el punto muerto?

2.54 ¿Cuál es la diferencia entre punto muerto y punto muerto, y la diferencia entre punto muerto y hambre?

2.55 ¿Cuál es el principio de actualización de bloqueos de subprocesos múltiples?

2.56 ¿Qué es ConcurrentHashMap?

2.57 ¿Qué es un grupo de subprocesos? ¿Cuáles son las formas de crearlo?

2.58 ¿Cuáles son las ventajas del grupo de subprocesos?

2.59 ¿Cuáles son los estados del grupo de subprocesos?

2.60 ¿Cuál es la diferencia entre los métodos de envío () y ejecución () en el grupo de subprocesos?

3, Resorte SpringMVC, Mybatis (SSM)

3.1 ¿Son seguros los hilos de resorte?

Spring generalmente es seguro para subprocesos. No es seguro modificar una variable global al mismo tiempo. Es seguro usar la sincronización de subprocesos en su lugar.

3.2 Cuénteme sobre su comprensión del marco del MUS.

3.3 Cuénteme sobre los patrones de diseño involucrados en el marco Spring.

Hay muchos patrones de diseño involucrados en el marco Spring, y los más comunes incluyen:

  1. Patrón de fábrica: el patrón de fábrica es un patrón de diseño creativo que proporciona una forma óptima de crear objetos. En el marco Spring, BeanFactory es una implementación típica del patrón de fábrica.
  2. Patrón Singleton: El patrón singleton es un patrón de diseño creacional que garantiza que una clase tenga solo una instancia y proporciona un punto de acceso global a esa instancia. En el marco Spring, ApplicationContext es una implementación típica del patrón singleton.
  3. Patrón proxy: el patrón proxy es un patrón de diseño estructural que permite que un objeto proxy controle el acceso a otro objeto. En el framework Spring, AOP es una aplicación típica del modo proxy.
  4. Patrón de observador (Patrón de observador): el patrón de observador es un patrón de diseño de comportamiento, que define una dependencia de uno a muchos, lo que permite que varios objetos de observador controlen un objeto sujeto al mismo tiempo. En el marco de Spring, los detectores de eventos son una implementación típica del patrón de observador.
  5. Patrón de método de plantilla: Patrón de método de plantilla es un patrón de diseño de comportamiento que define el esqueleto de un algoritmo, aplazando la implementación de algunos pasos a las subclases. En el marco Spring, JdbcTemplate es una aplicación típica del patrón del método de plantilla.
  6. Patrón Adaptador: El Patrón Adaptador es un patrón de diseño estructural que permite convertir la interfaz de una clase a otra interfaz esperada por los clientes. En Spring Framework, el patrón de adaptador se usa a menudo para convertir diferentes tipos de datos en un formato unificado.
  7. Patrón de estrategia: el patrón de estrategia es un patrón de diseño de comportamiento que define una serie de algoritmos, encapsula cada algoritmo y los hace intercambiables. En el marco Spring, BeanPostProcessor es una aplicación típica del patrón de estrategia.

Estos patrones de diseño juegan un papel importante en Spring Framework, ayudándonos a escribir código de manera más flexible y mejorando la escalabilidad y la capacidad de mantenimiento del sistema.

3.4 ¿Podría hablar sobre el COI y el AOP en primavera?

En el marco de Spring, IOC (Inversión de Control) y AOP (Programación Orientada a Aspectos) son dos conceptos centrales.

  1. COI

IOC, también conocido como Inyección de Dependencia (Dependency Injection), es un patrón de diseño cuya idea principal es invertir el control, es decir, el framework controla las dependencias entre programas. En el modelo de programación tradicional, los programadores deben crear objetos manualmente y mantener las dependencias entre los objetos. En el marco Spring, los objetos se administran a través del contenedor IOC. Los programadores solo necesitan proporcionar definiciones de clase, que son creadas por el contenedor IOC. Objetos y autoconexión relaciones entre objetos.

El contenedor IOC de Spring es una fábrica de objetos que se encarga de gestionar todos los objetos de la aplicación. Cuando necesitamos un objeto, solo necesitamos solicitarlo desde el contenedor IOC, y el contenedor IOC devolverá un objeto de este tipo, en lugar de crear y mantener manualmente la relación entre los objetos.

  1. POA

AOP, también conocido como programación orientada a aspectos, es un paradigma de programación cuya idea principal es separar la lógica transversal general (como el registro, el procesamiento de transacciones, etc.) para administrar. La forma en que AOP logra esta separación es dividiendo la lógica común en varios módulos diferentes de la aplicación.

En el marco de Spring, AOP se puede implementar a través de proxies, y el marco de Spring puede crear automáticamente objetos de proxy para nosotros y entretejer la lógica general en la lógica comercial, mejorando así la lógica comercial. AOP en el marco Spring se puede utilizar para implementar funciones como la gestión de transacciones, controles de seguridad, almacenamiento en caché y registro.

En resumen, IOC y AOP son dos conceptos importantes del marco Spring. IOC realiza el desacoplamiento entre objetos y el ensamblaje automático de dependencias, mientras que AOP realiza la separación y modularización de la lógica transversal común. Cuando se usa Spring Framework, IOC y AOP a menudo son inevitables, y su uso también hace que Spring Framework sea más flexible y fácil de mantener.

3.5 Por favor, dígame la diferencia entre IOC y DI en Spring.

IOC (Inversión de Control, Inversión de Control) y DI (Inyección de Dependencia, Inyección de Dependencia) son conceptos estrechamente relacionados, y existen ciertas diferencias entre ellos.

En pocas palabras, IOC es un principio de diseño que enfatiza que la composición de objetos debe usarse tanto como sea posible en el diseño de software, en lugar de la relación de herencia para completar la relación de dependencia entre los objetos. DI es una forma específica de implementar IOC , que externaliza las dependencias de los objetos y luego inyecta las dependencias requeridas cuando se inicia el sistema.

Más específicamente, IOC es una idea de programación, que se implementa entregando el control de creación y gestión de objetos al contenedor, reduciendo al mínimo el acoplamiento de varias partes de la aplicación. DI es una forma de implementar IOC.Inyecta todas las dependencias necesarias para instanciar una clase a través de constructores, métodos Setter u otros métodos.

En el marco de Spring, el contenedor IOC es responsable de administrar todos los objetos de Java, y DI es la forma más utilizada para implementar IOC en el marco de Spring. Describe las dependencias entre objetos a través de archivos de configuración, anotaciones u otros métodos, y luego en el programa Las dependencias requeridas se inyectan automáticamente en tiempo de ejecución. Por lo tanto, los métodos de inyección que se usan a menudo en Spring Framework incluyen: inyección de constructor, inyección de método Setter, inyección de interfaz, etc.

3.6 ¿Podría hablarnos sobre los métodos de inyección de dependencia?

3.7 ¿Por favor, hable sobre el proceso de Spring?

3.8 ¿Por favor, hable sobre el proceso de Spring MVC?

3.9

4, bota de resorte

5, MySQL

5.1 ¿Cuáles son las cuatro características de las transacciones de la base de datos MySQL?

5.2 Además de distintas, ¿existe alguna forma más eficiente de deduplicar los datos de la base de datos?

5.3 ¿Cómo optimizar la combinación izquierda?

5.4 ¿Cómo optimizar sentencias SQL?

5.5 ¿Qué hace la explicación? ¿cómo utilizar?

5.6 ¿Qué son los índices?

5.7 ¿Cuáles son las ventajas y desventajas de los índices?

5.8 ¿Cuál es la clasificación y sintaxis básica de los índices?

5.9 ¿Bajo qué circunstancias se debe crear un índice?

5.10 ¿Bajo qué circunstancias no se crean índices?

5.11 ¿Precauciones para el uso de índices?

5.12 ¿Cuál es el número máximo de índices que se pueden crear?

5.13 ¿Cuál es la diferencia entre el árbol B y el árbol B+?

5.14 ¿Por qué no se pueden usar árboles binarios y árboles rojo-negro en estructuras de índice?

5.15 ¿Las características de propagación de las cosas?

5.16 Tres paradigmas de base de datos

5.17 ¿Se puede y se usa cuando la actualización en mysql modifica múltiples valores de campo, por qué?

这是一个很有意思的题哦
No, el valor después de establecer en la capa inferior de la actualización de mysql es una colección de listas, que debe estar separada por , y si usa y, se comparará como una expresión de forma predeterminada.
No es igual, eso es falso = 0, el primer valor del conjunto se convertirá en 0.
El segundo valor no cambiará. Si el tipo varchar es el primero, la sintaxis se truncará directamente y la biblioteca no se actualizará.
y se puede ejecutar con éxito, pero el resultado es incorrecto.

5.18 ¿Cuál es el principio del prefijo más a la izquierda? ¿Cuál es el principio de coincidencia más a la izquierda?

6, redis

6.1 ¿Qué es el desglose de caché?

6.2 ¿Qué es la penetración de caché?

6.3 ¿Qué es la avalancha de caché?

6.4 ¿Cuáles son los escenarios de uso de Redis?

1. 活动的秒杀环节、可以当做数据库做增删改查操作、大型网站的排行榜、聊天室的留言存储、个网站文章点赞 及列表信息的存储等
2. list可以做消息流
3. hash可以做购物车
4. set可以做关注,可以做抽奖
5. zset可以做排行榜
6. 字符串数字的原子新增可以做分布式Id
7. 最基础的就是缓存,上手可用
8. 内存数据库 (登录信息、购物车信息、用户浏览记录)
9. 缓存服务器(商品数据、广告数据等)
10. 解决分布式集群架构中 session 分离问题(session共享)
11. 任务队列(秒杀、抢购、12306等等)
12. 支持发布订阅的消息模式
13. 应用排行榜
14. redis从内存读写数据,比从数据库读取速度快,数据库读写避免不了io操作,适合高并发,读写比较频繁的场景

6.5 ¿Cómo resolver el problema de coherencia de datos entre la caché de Redis y MySQL?

6.6 Mecanismo RDB y AOF

6.7 Estrategia de eliminación de clave caducada de Redis

Caducidad del tiempo : cada clave con una hora de caducidad necesita crear un temporizador, y se borrará inmediatamente cuando se alcance la hora de caducidad. Esta estrategia puede borrar los datos vencidos de inmediato, lo cual es amigable con la memoria, pero consumirá una gran cantidad de recursos de la CPU para procesar los datos vencidos, lo que afectará el tiempo de respuesta y el rendimiento de la memoria caché.
Caducidad diferida : solo cuando se accede a una clave, se juzgará si la clave ha caducado y se borrará cuando caduque. Esta estrategia puede ahorrar recursos de CPU en la mayor medida, pero es muy poco amigable para la memoria. En casos extremos, es posible que no se vuelva a acceder a una gran cantidad de claves caducadas, por lo que no se borrarán y ocuparán una gran cantidad de memoria.
Caducidad periódica : a intervalos regulares, se escaneará una determinada cantidad de claves en el diccionario de caducidad de una determinada cantidad de bases de datos y se borrarán las claves caducadas. Esta estrategia es un compromiso entre las dos anteriores. Al ajustar el intervalo de tiempo de la exploración programada y el consumo de tiempo limitado de cada exploración, los recursos de la CPU y la memoria se pueden equilibrar de manera óptima en diferentes situaciones.

6.8 Breve descripción de la implementación de transacciones de Redis

6.9 El principio básico de la replicación maestro-esclavo de redis

1. Cuando se inicia una base de datos esclava, enviará un comando SYNC a la base de datos maestra. Después de que la maestra lo reciba, guardará la instantánea en segundo plano, que es lo que llamamos persistencia RDB. Por supuesto, guardar la instantánea toma tiempo, y redis es de subproceso único, los comandos recibidos por redis durante el guardado de la instantánea se almacenarán en caché

2. Una vez completada la instantánea, el comando almacenado en caché y la instantánea se empaquetarán y enviarán al nodo esclavo para garantizar la coherencia de la base de datos maestro-esclavo.

3. Después de recibir los comandos de instantánea y caché de la base de datos, esta parte de los datos se escribirá en un archivo temporal en el disco duro. Una vez completada la escritura, este archivo se usará para reemplazar el archivo de instantánea RDB. Por supuesto , esta operación no se bloqueará, puede continuar recibiendo comandos y ejecutarlos. La razón específica es que se bifurca un subproceso, y el subproceso se usa para completar estas funciones.

Debido a que no se bloqueará, después de que se complete esta parte de la inicialización, cuando la base de datos maestra ejecute el comando para cambiar los datos, lo enviará a la esclava de forma asincrónica. Esto es lo que llamamos la fase de sincronización de replicación. Esta fase se ejecutará a través de todo el proceso de sincronización medio-esclavo.En , la sincronización de replicación no terminará hasta que finalice la sincronización maestro-esclavo.

6.10 ¿Qué es redis? Qué puede hacer

redis: redis es Remote Dictionary Server, que puede entenderse como servicio de datos remoto o servicio de diccionario remoto cuando se traduce al chino. Es un sistema de almacenamiento de clave-valor escrito en lenguaje C.

Escenarios de aplicación: caché, base de datos, cola de mensajes, bloqueo distribuido, lista de Me gusta, tabla de clasificación, etc.

6.11 ¿Cuáles son los ocho tipos de datos en redis?

Redis tiene un total de ocho estructuras de datos, cinco tipos de datos básicos y tres tipos de datos especiales.

1.string: tipo de cadena, a menudo se usa para almacenar contadores, ventiladores, etc., los bloqueos distribuidos simples también usarán este tipo
2.hashmap: forma de clave-valor, el valor es un mapa
3.list: tipo de datos básicos, lista. En Redis, las listas se pueden usar como pilas, colas y colas de bloqueo.
4.set: conjunto, sin elementos repetidos, puede hacer me gusta, favoritos, etc.
5.zset: conjunto ordenado, sin elementos repetidos, cada elemento en el conjunto ordenado debe especificar una puntuación, y los elementos se evalúan de acuerdo con el puntuación Ordenar en orden ascendente. puede hacer la tabla de posiciones

6.geoespacial: Redis lanzó el tipo Geo en 3.2.Esta función puede calcular la información de ubicación geográfica y la distancia entre los dos lugares.
8. hyperloglog: Cardinalidad: El número de elementos en un conjunto matemático no se puede repetir. Esta estructura de datos se usa a menudo para contar los UV de los sitios web.
8.mapa de bits: mapa de bits consiste en establecer 0 o 1 mediante la unidad de bit más pequeña, indicando el valor o estado correspondiente a un elemento. El valor de un bit es 0 o 1, es decir, la máxima información que puede almacenar un bit es 2. El mapa de bits se usa a menudo para contar la información del usuario, como fanáticos activos e inactivos, inicio de sesión y no inicio de sesión, si desea registrarse, etc.

6.12 ¿Por qué redis es tan rápido?

Según datos oficiales, redis puede alcanzar una concurrencia de casi 10w por segundo, las principales razones de esta velocidad son las siguientes:

1: Totalmente basado en el funcionamiento de la memoria
2: Utilice un modelo de subproceso único para procesar las solicitudes de los clientes, evitando el cambio de contexto
3: Mecanismo de multiplexación de E/S
4: Está escrito en lenguaje C y tiene muchos mecanismos de optimización, como SD de cadenas dinámicas

6.13 ¿Qué debo hacer si la memoria de Redis está llena?

De hecho, Redis define "estrategias de eliminación de memoria 8" para lidiar con la memoria redis completa:

1. noeviction: devuelve un error directamente y no elimina ninguna clave redis existente
2. allkeys-lru: usa el algoritmo lru para eliminar todas las claves
3. volatile-lru: usa el algoritmo lru para la eliminación con tiempo de vencimiento
4. allkeys-random: elimine aleatoriamente claves redis
5.volatile-random: elimine aleatoriamente claves redis con fecha de caducidad
6.volatile-ttl: elimine claves redis que estén a punto de caducar
7.volatile-lfu: elimine claves con fecha de caducidad según lfu algoritmo
8.allkeys -lfu: eliminar de todas las claves de acuerdo con el algoritmo lfu

6.14 ¿Cuáles son los métodos de implementación de Redis?

inserte la descripción de la imagen aquí
Modo independiente : Este es también el método de implementación más básico. Solo se requiere una máquina para leer y escribir. Generalmente, solo se usa para que los desarrolladores se prueben a sí mismos.

**Modo Centinela:** El modo Centinela es un modo especial. En primer lugar, Redis proporciona comandos centinela. Sentry es un proceso independiente. Como proceso, se ejecutará de forma independiente. El principio es que Sentinel supervisa varias instancias de Redis en ejecución mediante el envío de comandos y la espera de que el servidor de Redis responda. Tiene conmutación por error automática, monitoreo de clúster, notificación de mensajes y otras funciones.

Modo de clúster de clúster : la versión Redis 3.0 es compatible con el método de implementación de clúster de clúster. Este método de implementación de clúster puede segmentar automáticamente los datos, colocar una parte de los datos en cada maestro y proporcionar servicios integrados de alta disponibilidad. Incluso si un determinado Si un maestro está inactivo, el servicio todavía se puede proporcionar normalmente.

Replicación maestro-esclavo : En el modo de despliegue de clúster de replicación maestro-esclavo, dividiremos la base de datos en dos tipos, el primero se denomina base de datos maestra (master), y el otro se denomina base de datos esclava (esclavo). La base de datos maestra será responsable de las operaciones de lectura y escritura en todo nuestro sistema, y ​​la base de datos esclava será responsable de las operaciones de lectura en toda nuestra base de datos. La situación real en el desarrollo del lugar de trabajo es que dejaremos que la base de datos maestra solo sea responsable de las operaciones de escritura, y que la base de datos esclava solo sea responsable de las operaciones de lectura, para separar la lectura y la escritura y reducir la presión sobre el servidor.

6.15 ¿Cuáles son las funciones de los Centinelas?

1. Monitoree toda la base de datos maestra y la base de datos esclava para ver si se ejecutan normalmente

2. Cuando la base de datos maestra es anormal, actualizará automáticamente la base de datos esclava a la base de datos maestra para continuar asegurando la estabilidad de todo el servicio.

6.16 ¿Cómo es el proceso de elección centinela?

1. El primer centinela que descubre que el maestro ha colgado envía órdenes a cada centinela para que la otra parte se elija a sí misma como centinela principal.

2. Si otros centinelas no han elegido a otros, votarán por el primer centinela que encuentre que el maestro está caído

3. Si el primer centinela que descubre que el maestro está caído descubre que más de la mitad de los centinelas votaron por él, y el número excede el parámetro de quórum establecido, entonces el centinela se convierte en el centinela principal.

4. Si varios centinelas participan en la elección al mismo tiempo, el proceso se repetirá hasta que se seleccione un centinela líder.

Después de seleccionar el centinela líder, se iniciará la reparación de fallas y se seleccionará una base de datos esclava como la nueva maestra

6.17 ¿Qué es la copia sin disco duro?

Acabamos de decir que el maestro-esclavo interactúa a través de instantáneas RDB Aunque la lógica parece simple, todavía hay algunos problemas, pero habrá algunos problemas.

1. Cuando el maestro deshabilita la instantánea RDB, se produce la operación de sincronización maestro-esclavo (inicialización de la replicación) y también se generará la instantánea RDB. Sin embargo, si el maestro envía un reinicio más tarde, utilizará la instantánea RDB para restaurar la datos Estos datos pueden haber sido durante mucho tiempo, los datos se perderán en el medio

2. En esta estructura de un maestro, varios esclavos, el maestro debe tomar una instantánea cada vez que sincroniza datos con el esclavo, lo que genera archivos RDB en el disco duro, lo que afectará el rendimiento.

Para solucionar este problema, redis también añadió en sucesivas actualizaciones la función no-hard disk copy, es decir, se envía directamente al esclavo a través de la red, evitando la interacción con el disco duro, pero también consume io.

7. Distribuidos y Microservicios

7.1 ¿Esquema de generación de id distribuida?

7.2 ¿Solución de bloqueo distribuido?

7.3 ¿Cuál es la diferencia entre zk y eureka?

7.4 ¿Qué pasa con SpringCloud y dubbo?

7.5 ¿Qué es Hystrix? Describa brevemente el mecanismo de implementación.

7.6 ¿Cuáles son los componentes principales de SpringCloud y sus funciones?

7.7 Solución de transacciones distribuidas

8. MQ de software intermedio

8.1 Resuma el diseño arquitectónico de RabbitMQ

8.2 ¿Cómo garantiza RabbitMQ la entrega de mensajes? ¿mensaje recibido?

8.3 Mensaje de transacción de RabbitMQ

8.4 Cola de mensajes fallidos de RabbitMQ, cola de retraso

8.5 Mecanismo de cola espejo de RabbitMQ

8.6 Breve descripción del diseño de la arquitectura Kafka

8.7 ¿Cuál es el papel de zk en Kafka?

8.8

8.9

8.10

9. Campanas y silbatos

9.1 ¿Por qué muchas interfaces de empresa utilizan el método de publicación?

Al ver este título, debes sentirte escandaloso. ¿Cómo puede una empresa estipular que todas las interfaces usen Post, ya sea un plato de arquitectura o un plato de desarrollo? Esto no es una exageración, hay muchas empresas de este tipo. Al menos mi última empresa lo fue.

  • Todos sabemos que la mitad de las solicitudes de obtención se utilizan para obtener información del servidor, y la publicación generalmente se utiliza para actualizar la información. Lo que puede hacer la solicitud get, lo puede hacer la publicación, y lo que no puede hacer la solicitud get, también lo puede hacer la publicación.
  • Si en su equipo todos son grandes, o tiene buenas normas de equipo, todos están por encima de la línea promedio y hay un buen mecanismo de corrección de errores, entonces esas reglas básicamente no se formularán.
  • Sin embargo, si el nivel de los miembros del equipo es desigual, especialmente los equipos pequeños y los equipos emprendedores, a menudo comienzan a trabajar de inmediato sin ninguna norma. La calidad del código depende únicamente de la calidad personal de los desarrolladores. Dicho equipo tiene que formular tales normas. .
  • Después de todo, puede reducir muchos problemas. La publicación no tiene que preocuparse por el límite de longitud de la URL y no hará un mal uso de la memoria caché. La posibilidad de error se reduce a través de una regla, y esta decisión es extremadamente rentable.
  • Algunas empresas de subcontratación o empresas que proporcionan interfaces de terceros también optan por utilizar Post solo por comodidad.

9.2 ¿Cuáles son los métodos de solicitud más utilizados?

CONSEGUIR

El método GET se utiliza para recuperar datos del servidor. Este es un método de solo lectura , por lo que no hay riesgo de alterar o corromper los datos, y las solicitudes que usan GET solo deben usarse para obtener datos.

La API GET es idempotente . Varias solicitudes idénticas deben producir el mismo resultado cada vez, hasta que otra API (POST o PUT) cambie el estado del recurso en el servidor.

CORREO

El método POST se usa para enviar una entidad a un recurso específico, lo que generalmente genera un cambio de estado en el servidor o la creación de un nuevo recurso. POST no es seguro ni idempotente, la invocación de dos solicitudes POST idénticas dará como resultado dos recursos diferentes que contienen la misma información (excepto la ID del recurso).

PONER

Utilice principalmente la API PUT para actualizar los recursos existentes (si el recurso no existe, la API puede decidir si crea un nuevo recurso).

BORRAR

El método DELETE elimina el recurso especificado. Las operaciones DELETE son idempotentes. Si elimina un recurso, se elimina de la colección de recursos.

9.3 En el proyecto, ¿cómo suele resolver un gran número de if -else?

Si if-else se usa en grandes cantidades en la lógica de negocios en Java, está orientado al proceso, porque el if-else en la lógica de negocios se juzga de un si a otro de arriba a abajo, y se establece un punto de interrupción en cada si. Después de la depuración, comprenderá que en realidad está orientado al proceso.

  • Se puede ver a partir de esto que si hay muchos if-else en el proyecto, es realmente un problema que afecta el rendimiento y el código tiene poca visualización (problema)
  • Podemos escribir clases internas, métodos, usar patrones de estrategia para resolver
  • se puede resolver usando una estrategia de enumeración
  • También puede usar el patrón de fábrica para resolver

9.4 ¿Podría informarnos sobre los comandos más utilizados en git?

  1. git init: inicializa un nuevo repositorio de Git.
  2. git add: agrega archivos al área de almacenamiento temporal.
  3. git commit: envíe los archivos en el área de almacenamiento temporal al repositorio.
  4. git push: envía el código local al almacén remoto.
  5. git pull: extrae el código del almacén remoto al local.
  6. git clone: ​​clona el código del almacén remoto al local.
  7. estado de git: vea el estado del repositorio de Git actual, incluidos los archivos modificados y los archivos enviados.
  8. git log: vea los registros de confirmación del repositorio de Git.
  9. git branch: administre sucursales, incluidas operaciones como la creación, el cambio y la fusión.
  10. git checkout: cambie de rama o restaure archivos.
  11. git merge: fusionar ramas.
  12. git stash: guarda el progreso del trabajo actual para continuar más tarde.
  13. git tag: etiqueta, marca el número de versión de una confirmación.
  14. git diff: Ver diferencias entre archivos o ramas.

9.5 ¿Cuánto sabe sobre el número de puerto predeterminado?

1. *oracle 默认的端口号是1521*
2. sqlserver默认端口号为:1433
3. mysql   默认端口号为:3306
4. Nacos默认端口为8848,启动成功后,通过 http://127.0.0.1:8848/nacos 
5. redis默认端口号是63796. RabbitMQ默认端口号是15672
7. Mycat默认端口是:8066
8. nginx默认端口是:80
9. Tomcat默认端口是:8080
10. http协议默认端口是:80

9.6

9.7

9.8

9.9

9.10

Supongo que te gusta

Origin blog.csdn.net/aaxzsuj/article/details/130286813
Recomendado
Clasificación