C ++ entrevista preguntas clásicas

Cincuenta y uno: La diferencia entre definición y declaración

- La declaración le dice al compilador el tipo y el nombre de la variable, no se asigna espacio para la variable

- La definición es asignar e inicializar memoria para esta variable y función. Necesita asignar espacio, la misma variable se puede declarar varias veces, pero solo se puede definir una vez

Cincuenta y dos: La diferencia entre typdef y define

`#define` es un comando de preprocesamiento. En el preprocesamiento, la sustitución simple se realiza sin verificar la corrección.

Typedef se procesa en tiempo de compilación, crea un alias de un tipo existente en su propio ámbito

Cincuenta y tres: ¿La memoria recuperada por libre se devuelve inmediatamente al sistema operativo? por qué

No, la memoria recuperada de forma gratuita primero se guardará mediante ptmalloc usando double [linked list](). Cuando el usuario solicite memoria la próxima vez, intentará encontrar un retorno adecuado de estas memorias. Esto evita llamadas frecuentes al sistema y consume demasiados recursos del sistema. Al mismo tiempo, ptmalloc también intentará fusionar pequeños bloques de memoria para evitar una fragmentación excesiva de la memoria.

Cincuenta y cuatro: Los beneficios de las referencias como parámetros de función y valores de retorno

En comparación con pasar por valor, las ventajas de pasar parámetros por referencia:

1) Este parámetro se puede modificar dentro de la función

2) Mejorar la eficiencia de las llamadas a funciones y operaciones (porque no hay consumo de tiempo y espacio para pasar valores y generar copias)

Si el parámetro de la función es en realidad un parámetro formal, pero el alcance del parámetro formal está solo dentro del cuerpo de la función, es decir, el parámetro real y el parámetro formal son dos cosas diferentes. Si el parámetro formal es para reemplazar el parámetro real, debe haber un valor.transferencia. Cuando se llama a una función, el mecanismo de transferencia de valor es asignar un valor al parámetro formal a través de "parámetro formal = parámetro real", que produce una copia del parámetro real. Incluso si hay una modificación al parámetro dentro de la función, es solo para el parámetro formal, es decir, la copia y el parámetro real no tendrá ningún cambio. Una vez finalizada la función, finaliza también la vida de los parámetros formales, y las modificaciones realizadas no tienen efecto sobre ninguna variable.

La mayor ventaja de usar una referencia como valor devuelto es que no hay copia del valor devuelto en la memoria.

Pero existen las siguientes limitaciones:

1) No se puede devolver una referencia a una variable local. Porque las variables locales serán destruidas después de que la función regrese

2) No se puede devolver una referencia a la memoria asignada por new dentro de la función. Aunque no hay destrucción pasiva de variables locales, para esta situación (devolviendo una referencia a la memoria asignada por new dentro de la función), hay otras situaciones embarazosas. Por ejemplo, la referencia devuelta por la función solo aparece como una variable temporal sin que se le asigne una variable real, luego el espacio señalado por la referencia (asignado por new) no se puede liberar, lo que resulta en una pérdida de memoria.

3) Las referencias a los miembros de la clase se pueden devolver, pero preferiblemente constantes. Porque si otros objetos pueden obtener una referencia no constante a la propiedad, una simple asignación a la propiedad violaría la integridad de las reglas comerciales. 

Cincuenta y cinco: funciones de amigos y clases de amigos

Friend proporciona un mecanismo para compartir datos entre funciones miembro de diferentes clases y entre funciones miembro de clase y funciones generales. A través de amigos, una función diferente o una función miembro en otra clase puede acceder a miembros privados y protegidos de una clase. El uso correcto de amigos puede mejorar la eficiencia del programa, pero también destruye la encapsulación de clases y la ocultación de datos, lo que resulta en una pobre mantenibilidad del programa.

1) función de amigo

Las metafunciones son funciones ordinarias que se definen fuera de una clase, no pertenecen a ninguna clase y pueden acceder a miembros privados de otras clases. Pero debe declarar todas las funciones amigas que pueden acceder a ella en la definición de clase.

Una función puede ser una función amiga de varias clases, pero la función debe declararse en cada clase.

2) clase amiga

Todas las funciones miembro de una clase amiga son funciones amigas de otra clase y pueden acceder a información oculta (incluidos miembros privados y protegidos) en otra clase.
Pero otra clase tiene que declararlo en consecuencia.

Tenga en cuenta al usar la metaclase [UF](): 

(1) La amistad no se puede heredar. 

(2) La amistad es unidireccional y no conmutativa. Si la clase B es amiga de la clase A, la clase A no es necesariamente amiga de la clase B, dependiendo de si hay una declaración correspondiente en la clase. 

(3) La amistad no es transitiva. Si la clase B es amiga de la clase A, la clase C es amiga de la clase B y la clase C no es necesariamente amiga de la clase A, también depende de si hay una declaración correspondiente en la clase.

Cincuenta y seis: Hable sobre el papel de la palabra clave volátil

Volátil significa "frágil", lo que indica que el valor de la variable que modifica es muy fácil de cambiar, por lo que el compilador no optimizará esta variable (la optimización de la CPU consiste en almacenar la variable en los registros de la CPU en lugar de en la memoria), y luego proporcionar un acceso estable . Cada vez que se lee una variable volátil, el sistema siempre lee la variable de la memoria y guarda su valor inmediatamente.

Cincuenta y siete: ¿Qué es sort() [algoritmo]() en STL implementado, qué pasa con stable_sort()?

Ordenar en STL se implementa mediante una combinación de quick[sort]() e insert[sort](), y stable_sort() es merge[sort]().

Cincuenta y ocho: ¿fallarán los iteradores de vectores? ¿En qué circunstancias fallarán los iteradores?


Sí - Cuando se inserta el vector, si el espacio original no es suficiente, solicitará nueva memoria y moverá los elementos originales a la nueva memoria. En este momento, el iterador que apunta a la dirección de memoria original no será válido. Primero y end iterate Los iteradores no son válidos 
- cuando se inserta el vector, el iterador final definitivamente no será válido 
- cuando se elimina el vector, el elemento eliminado y todos los iteradores de elementos posteriores no son válidos. 

Cincuenta y nueve: ¿Por qué C++ no implementa la recolección de basura?

- En primer lugar, la implementación de un recolector de elementos no utilizados genera una sobrecarga adicional de espacio y tiempo. Debe abrir un espacio determinado para guardar el recuento de referencias del puntero y marcarlos. Luego, debe crear un subproceso separado para realizar la operación gratuita cuando esté inactivo. 
- La recolección de basura hace que C++ no sea adecuado para muchas operaciones de bajo nivel.

Sesenta: ¿Por qué una consulta de matriz es más rápida que una lista enlazada?

+ El número de operaciones de direccionamiento de la lista enlazada es mayor. La matriz puede encontrar la dirección del elemento k+1 solo mediante [dirección base + tamaño del elemento*k] y tomar la dirección para obtener el elemento. Para obtener el k-ésimo elemento de la lista enlazada, primero encuentre el desplazamiento de su próximo puntero en el k-1-ésimo elemento, y luego use el siguiente puntero como una dirección para obtener el valor, por lo que es necesario comenzar desde el primer elemento, y hay muchos más pasos Abordar las operaciones, cuando la cantidad de datos es grande y otras operaciones son pequeñas, hay una brecha.
+ La memoria caché de la CPU leerá un espacio de memoria continuo. Debido a que la estructura de la matriz es una dirección de memoria continua, todos o parte de los elementos de la matriz se almacenan continuamente en la memoria caché de la CPU, y el tiempo promedio para leer cada elemento es de solo 3 CPU ciclos de reloj Los nodos de la lista enlazada están dispersos en el espacio del montón. En este momento, la memoria caché de la CPU no puede ayudar y solo puede leer la memoria. El tiempo de lectura promedio es de 100 ciclos de reloj de la CPU. De esta manera, la velocidad de acceso a la matriz es 33 veces más rápida que la de la lista enlazada. (Esto es solo una introducción al concepto, y los números específicos varían según la CPU). Por lo tanto, intente utilizar estructuras de datos continuas en el programa, lo que puede aprovechar al máximo la potencia de la memoria caché de la CPU. Este algoritmo compatible con la memoria caché se llama Algoritmo ajeno a la memoria caché.

Los siguientes temas relacionados con la red informática también deben estar familiarizados con

Sesenta y uno: varias llamadas al sistema para establecer un servidor TCP

En el proceso de establecer una conexión con el servidor TCP, algunas funciones se obtienen principalmente a través de la siguiente secuencia de llamadas al sistema, estas llamadas al sistema incluyen principalmente: socket(), bind(), listen(), accept(), send() y recv( ).

Sesenta y dos: Siguiendo con la pregunta anterior, ¿qué llamadas al sistema hay en la programación de redes de sockets? Entre ellos, ¿se puede cerrar directamente al mismo tiempo y cómo se genera el estado semicerrado?

```
socket() Crea un socket  
bind()   Vincula el
local
puerto send(), write(), sendto() envía datos close(), shutdown() cierra el socket ```




Al usar close(), la conexión solo se terminará cuando el recuento de referencias del socket sea 0, y se puede usar shutdown() para cerrar la conexión directamente.

Sesenta y tres: Comprensión e introducción a los protocolos de enrutamiento. Los protocolos de puerta de enlace interior IGP incluyen RIP, OSPF y los protocolos de puerta de enlace exterior EGP y BGP.

- Abreviatura RIP para "Información de ruta [Proto] () col)", que transmite principalmente información de enrutamiento, mantiene la relación de ubicación de los enrutadores adyacentes mediante la transmisión de la tabla de enrutamiento cada 30 segundos, y al mismo tiempo de acuerdo con la tabla de enrutamiento recibida. information utiliza el método [programación dinámica]() para calcular su propia información de tabla de enrutamiento. RIP es un protocolo de enrutamiento de vector de distancia, el número máximo de saltos es de 16 saltos y la red con 16 saltos y más de 16 saltos considera que la red de destino es inalcanzable.
- OSPF: ver: https://zhuanlan.zhihu.com/p/41341540

Sesenta y cuatro: cómo UDP logra una transmisión confiable

Debido a que UDP es un protocolo sin conexión, no se puede garantizar una transmisión confiable en la capa de transporte. Para lograr una transmisión confiable, solo se puede implementar desde la capa de aplicación. Necesidad de implementar el mecanismo seq/ack, el mecanismo de retransmisión y el mecanismo de confirmación de ventana.

Es necesario que el receptor responda a un paquete de confirmación después de recibir el UDP. El remitente tiene un mecanismo. Si no se recibe el paquete de confirmación, se reenviará. Cada paquete tiene un número de secuencia creciente. , Cuando la red es demasiado malo, los paquetes se pierden con frecuencia para evitar el círculo vicioso de más paquetes perdidos y más retransmisiones. Debe haber un límite en la ventana de envío. El tamaño de la ventana de envío debe ajustarse de acuerdo con la situación de transmisión de la red. El [algoritmo] de ajuste () debe ser adaptativo sexo.

Sesenta y cinco: La diferencia entre TCP y UDP

- TCP es un protocolo orientado a la conexión que proporciona una transmisión confiable. Antes de enviar y recibir datos, se debe establecer una conexión a través de un protocolo de enlace de tres vías, y ACK se usa para verificar la exactitud de los datos enviados y recibidos. UDP es un protocolo sin conexión, independientemente de que la otra parte haya recibido o haya recibido los datos correctos. 
- TCP proporciona control de flujo y control de congestión mientras que UDP no lo hace. 
- TCP requiere más recursos del sistema que UDP, por lo que la velocidad es más lenta que UDP. 
- Los paquetes de datos TCP no tienen límites y habrá un problema de pegado de paquetes.Los paquetes UDP son independientes y no habrá problema de pegado de paquetes. 
- Entonces, en términos de aplicación, si se enfatiza la integridad y corrección de los datos con TCP, cuando se requiere rendimiento y velocidad, es más apropiado usar UDP. 

Nota: TCP por sí solo no puede garantizar la integridad.Si los piratas informáticos falsifican paquetes TCP, no se pueden identificar.

Sesenta y seis: Protocolos y números de puerto relacionados con TCP y UDP

Los protocolos de la familia TCP incluyen HTTP, HTTPS, SMTP, TelNet, FTP, etc., y los protocolos de la familia UDP incluyen DNS, DHCP, etc.

Sesenta y siete: Comprensión de TCP (UDP, IP) y otros encabezados (composición del mensaje de solicitud http)

El encabezado de TCP incluye aproximadamente: puerto de origen, puerto de destino, número de secuencia, número de confirmación, bit de compensación, bit de indicador, suma de verificación, etc.

El encabezado UDP incluye: puerto de origen, puerto de destino, longitud y suma de verificación.

El encabezado de un paquete IP incluye: dirección IP de origen, dirección IP de destino, protocolo, suma de verificación, longitud total, etc.

Sesenta y ocho: el proceso y el método de implementación del análisis de páginas web

Aquí solo se muestra el proceso de análisis de la respuesta del servidor por parte del navegador. El proceso completo de análisis e interacción de URL se encuentra en (9)

- El primero es el análisis de documentos html. El navegador generará un árbol de análisis a partir del documento html, es decir, un árbol DOM, que consta de elementos dom y nodos de atributos. 

- Luego, si el navegador encuentra un archivo CSS externo o un recurso de imagen durante el proceso de carga, enviará otra solicitud para obtener el archivo CSS y el recurso. Esta solicitud suele ser asíncrona y no afectará la carga del documento HTML. 

- Sin embargo, si el navegador encuentra un archivo js durante la carga, suspenderá el subproceso de procesamiento y esperará a que se cargue y analice el archivo js antes de reanudar el subproceso de procesamiento html. 

- Luego viene el análisis css, que analiza el archivo css en un objeto de hoja de estilo para representar el árbol DOM.

Sesenta y nueve: todo el proceso se ejecuta después de ingresar la URL en el navegador (como [www.baidu.com) puntos clave, problemas populares] (http://www.baidu.com) puntos clave, problemas populares)

1. El primero es la resolución de nombres de dominio, el cliente usa el protocolo DNS para resolver la URL a la dirección IP correspondiente; 

2. Luego establezca una conexión TCP, y el cliente y el servidor establecen una conexión TCP a través de un protocolo de enlace de tres vías; 

3. Luego está la conexión http, el cliente envía la solicitud de conexión http al servidor (la conexión http no necesita una conexión adicional, se envía directamente a través de la conexión TCP establecida) 

4. El servidor procesa la solicitud http enviada por el cliente y devuelve una respuesta; 

5. El cliente recibe la respuesta http y presenta el resultado al usuario.

Setenta: Razones e implementación específica de la fragmentación de la capa de red

 Debido a que el tamaño de trama suele estar limitado en la capa de enlace, por ejemplo, el tamaño máximo de trama (MTU) en Ethernet es de 1500 bytes. Se requiere fragmentación si el tamaño del paquete IP supera los 1500 bytes con el encabezado agregado. 

Los fragmentos de IP y los paquetes de IP completos tienen casi el mismo encabezado de IP, y el campo de ID de 16 bits es consistente para cada fragmento, de modo que los fragmentos del mismo paquete de IP se pueden identificar durante el reensamblaje. En el encabezado de IP, el número de identificación de 16 bits registra de forma única la ID de un paquete de IP y los fragmentos de IP con la misma ID se volverán a ensamblar, mientras que el desplazamiento de fragmento de 13 bits registra la posición de un fragmento de IP en relación con el paquete completo. y El indicador de 3 bits en el medio de estas dos tablas indica si hay fragmentos nuevos detrás del fragmento. Estos tres signos constituyen toda la información de fragmentación de IP (que se presentará más adelante), y el receptor puede utilizar esta información para reorganizar los datos de IP.

Setenta y uno: Introducción detallada del protocolo de enlace de tres vías y la onda de cuatro vías de TCP (el establecimiento y la desconexión de la conexión TCP son problemas populares)

- apretón de manos de tres vías 

El primer protocolo de enlace: Primero, el cliente envía un mensaje de solicitud de conexión al servidor. En este mensaje, SYN=1, client_seq=cualquier valor i está incluido, y está en el estado SYN-SENT después del envío. Este es el primer protocolo de enlace.

El segundo protocolo de enlace: el servidor recibe la solicitud, asigna recursos y devuelve un mensaje ACK al cliente. Este mensaje contiene estos campos. Los bits de bandera SYN y ACK son ambos 1, y el acuse de recibo pequeño es i+ 1, en este momento en el estado SYN-RCVD, este es el segundo apretón de manos

El tercer protocolo de enlace: después de que el cliente recibe el mensaje ACK del servidor, verá que el pequeño ACK enviado por el servidor es i + 1. En este momento, sabe que el servidor ha recibido el mensaje y devuelve un mensaje ACK al servidor. , el mensaje también contiene un mensaje como ACK = 1 y, al mismo tiempo, también incluye un campo como client_ack = k + 1, por lo que después del protocolo de enlace de tres vías, se establece la conexión y el cliente entra en el estado establecido (conectado)
 

- Cuatro ondas para desconectar: 

La desconexión de TCP generalmente es iniciada por una parte y pasiva por la otra. Aquí asumimos que el cliente está activo y el servidor está pasivo
. La primera ola: cuando el cliente no tiene datos para enviar al servidor, enviará un mensaje FIN al servidor, diciéndole al servidor: "No tengo más datos para enviarte, pero si aún quieres enviarme datos, puedes continuar enviándolos, pero tienes que decirme que has recibido mi mensaje de cierre". , esta es la primera vez que saluda, saluda Luego, el cliente ingresa a la primera etapa de FIN_WAIT_1

La segunda ola: cuando el servidor recibe el mensaje FIN del cliente, le dice al cliente: "Recibí su mensaje FIN, pero esperó a que lo enviara". En este momento, devuelve un mensaje ACK al cliente, y qué? ack=seq+1, esta es la segunda ola. Después de la ola, el servidor ingresa a la etapa CLOSE_WAIT, y el cliente está en la segunda etapa de FIN_WAIT_2 después de recibirlo.

La tercera ola: cuando el servidor termine de enviar todos los datos, enviará un mensaje FIN al cliente, diciéndole al cliente que "Terminé de enviar los datos y ahora tengo que cerrar la conexión", y luego el servidor se convierte en Estado LAST_ACK, esperando El último mensaje ACK del cliente, esta es la tercera ola de manos

La cuarta ola: cuando el cliente recibe el mensaje FIN, confirmará el mensaje, es decir, enviará un mensaje ACK al servidor, pero no confía en la red y teme que el servidor no reciba el mensaje. entrará en el estado TIME_WAIT, y entrará en el estado TIME_WAIT.Una vez que el servidor no recibe el mensaje ACK, se puede retransmitir, y cuando el servidor recibe el mensaje ACK, cierra oficialmente la conexión tcp y está en el estado CERRADO , y el cliente ha esperado 2MSL durante mucho tiempo antes de esperar el mensaje, sabe que el servidor ha cerrado la conexión, por lo que se desconectó, esta es la cuarta ola de manos, por lo que la conexión tcp está desconectada

Setenta y dos: apretón de manos TCP y qué estado están el cliente y el servidor en cada apretón de manos

véase más arriba

Setenta y tres: ¿Por qué usar un apretón de manos de tres vías? ¿Está bien dar la mano dos veces? (énfasis, preguntas populares)

Si se utilizan dos protocolos de enlace, falta el último de los tres protocolos de enlace y el servidor no puede confirmar la capacidad de recepción del cliente.

Para dar dos ejemplos, el primero es que los piratas informáticos falsificarán una gran cantidad de solicitudes SYN para enviar al servidor, el servidor confirmará y establecerá una conexión de inmediato y asignará recursos, pero esta serie de conexiones no son reales, lo que desperdicia mucho los recursos y bloques del servidor La conexión de los usuarios normales, esto también se llama ataque de inundación SYN. La segunda es que el paquete ACK devuelto por el servidor al cliente puede perderse durante la transmisión, y el cliente no recibe el paquete ACK y se niega a recibir los datos enviados por el servidor a continuación, por lo que el servidor sigue enviando y el cliente sigue enviando En caso de rechazo, se forma un interbloqueo.

Setenta y cuatro: El significado de TIME_WAIT (por qué debería ser igual a 2MSL)

TIME_WAIT se refiere al proceso de espera del tiempo 2MSL después de que el cliente recibe el mensaje FIN del servidor y envía el mensaje ACK al servidor después de cuatro ondas. Aunque es razonable decir que se han enviado los cuatro paquetes, podemos entrar directamente en el estado CERRADO, pero debemos fingir que la red no es fiable y que se puede perder el último ACK. Si se pierde el ACK enviado por el cliente, el servidor volverá a enviar el mensaje FIN al cliente, por lo que se utiliza el estado TIME_WAIT para reenviar el mensaje ACK que puede haberse perdido.

Setenta y cinco: mecanismo de retransmisión de tiempo de espera (frecuencia no demasiado alta)

Setenta y seis: ¿Cómo garantiza TCP la confiabilidad?

**(Retransmisión de secuencia escolar)**

- Adición binaria y luego inversión de la suma de verificación de los
  paquetes enviados para detectar cualquier cambio en los datos durante la transmisión. Si hay un error en la suma de verificación del segmento recibido, TCP descartará el segmento y no acusará recibo del segmento. 
- Respuesta de acuse de recibo + número de secuencia
  TCP numera cada paquete enviado, el receptor realiza [sort]() en el paquete de datos y transmite los datos ordenados a la capa de aplicación. 
- Retransmisión de tiempo de espera
  Cuando TCP envía un segmento, inicia un temporizador y espera a que el destino acuse recibo del segmento. Si no se puede recibir un acuse de recibo a tiempo, el segmento se volverá a enviar. 
- Cada lado de la
  conexión TCP de control de flujo tiene un tamaño fijo de espacio de búfer, y el receptor TCP solo permite que el remitente envíe los datos que el búfer del receptor puede acomodar. Cuando el receptor llega demasiado tarde para procesar los datos del remitente, puede solicitar al remitente que reduzca la velocidad de envío para evitar la pérdida de paquetes. El protocolo de control de flujo utilizado por TCP es un protocolo de ventana deslizante de tamaño variable.
  El receptor tiene una ventana inmediata (ventana deslizante), que se envía con el mensaje ACK
- control de congestión
  Cuando la red está congestionada, los datos se envían menos.
  El emisor tiene una ventana de congestión. Antes de enviar datos, compare la ventana enviada por el receptor y tome la más pequeña.

Inicio lento, prevención de congestión, retransmisión rápida, recuperación rápida 

Setenta y siete: Introducción al control de flujo, ¿cuáles son los problemas con las ventanas deslizantes (posible interbloqueo, síndrome de ventana confusa)?

El llamado control de flujo es permitir que el remitente no envíe demasiado rápido, para que el receptor tenga tiempo de recibir. El control de flujo se puede implementar utilizando el campo de tamaño de ventana en el segmento TCP para controlar que la ventana de envío del remitente no sea mayor que el tamaño de ventana devuelto por el receptor.

Considere un caso especial, es decir, si el receptor no tiene suficientes búferes para usar, enviará un mensaje con un tamaño de ventana de cero.En este momento, el remitente establecerá la ventana de envío en 0 y dejará de enviar datos. Después de eso, el receptor tiene suficientes búferes para enviar un mensaje con un tamaño de ventana distinto de cero, pero si el mensaje se pierde en el medio, la ventana de envío del remitente siempre será cero, lo que resultará en un interbloqueo.

Para resolver este problema, TCP establece un temporizador de persistencia para cada conexión. Siempre que la parte TCP reciba la notificación de ventana cero de la otra parte, inicia el temporizador y envía periódicamente un segmento de detección de ventana cero. La otra parte proporciona el tamaño de la ventana actual al confirmar el mensaje (Nota: TCP estipula que incluso si se establece en ventana cero, debe recibir los siguientes segmentos: segmento de detección de ventana cero, segmento de confirmación y segmento de acarreo para datos urgentes).

Setenta y ocho: protocolo de ventana deslizante tcp

La ventana deslizante de TCP se utiliza para controlar la tasa de envío del receptor y el remitente para evitar la congestión. La ventana deslizante es en realidad el tamaño del búfer del receptor, que se usa para decirle al remitente cuánto espacio de búfer tiene para los datos que envía. Cuando se conoce la ventana deslizante del receptor, después de que el receptor confirma la secuencia de datos continua, la ventana deslizante del remitente se desliza hacia atrás para enviar la siguiente secuencia de datos.

El receptor adjuntará el tamaño de su ventana de aceptación actual (ventana deslizante) a cada paquete ACK, lo cual es conveniente para el control del remitente.

Setenta y nueve: La diferencia entre control de congestión y control de flujo

El control de congestión es para evitar que se inyecten demasiados datos en la red, lo que provoca la congestión de la red; mientras que el control de flujo es para evitar que el remitente envíe demasiados datos al receptor a la vez, lo que hace que la memoria caché del receptor no se ajuste. Ambos [algoritmos]() controlan el comportamiento del remitente.

Ochenta: control de congestión de TCP, [algoritmo]() nombre? (Extremadamente importante)


Evite que se inyecten demasiados datos en la red, para que los enrutadores o enlaces en la red no se sobrecarguen. El control de congestión naturalmente también controla el tráfico del remitente. Hay cuatro tipos de control de congestión [algoritmos] (), lento inicio, evitar congestión, retransmisión rápida y recuperación rápida**

El remitente mantiene una variable de estado de ventana de congestión cwnd (ventana de congestión). El tamaño de la ventana de congestión depende de cuán congestionada esté la red y cambia dinámicamente. El remitente hace que su ventana de envío sea igual al valor más pequeño de la ventana de congestión y la ventana de recepción.

(1) **Inicio lento**. La idea del [algoritmo]() de inicio lento es que cuando el host comienza a enviar datos, primero los envía con una ventana de congestión relativamente pequeña y luego se duplica cada vez, es decir, aumenta gradualmente el tamaño de la ventana de congestión desde pequeño a grande, y esto El tamaño
aumenta exponencialmente, es decir, 1, 2, 4, 8, 16 Cuando el tamaño de la ventana de congestión exceda el umbral de inicio lento cuando cwnd > ssthresh , deje de usar el [algoritmo]() de inicio lento y use el [algoritmo]() para evitar la congestión

(2) **Evitación de la congestión**. La idea del [algoritmo]() para evitar la congestión es aumentar lentamente la ventana de congestión cwnd, es decir, aumentar la ventana de congestión cwnd del remitente en 1 cada vez que transcurre un tiempo de ida y vuelta RTT, en lugar de duplicarlo.

(3) **Retransmisión rápida**. Cuando el remitente recibe tres ACK repetidos seguidos, significa que el segmento de datos se ha perdido y debe retransmitirse. En este momento, el umbral de inicio lento ssth se convierte en la mitad del original, la ventana de congestión cwnd se convierte en ssth+3 y luego se envía +1+1 (cada ronda de rtt+1)

(4) **Recuperación Rápida**. Cuando no se recibe el acuse de recibo de un determinado segmento después del tiempo establecido, indica que la red está congestionada, el umbral de inicio lento ssth se convierte en la mitad del original, la ventana de congestión cwnd=1 y se ingresa a la fase de inicio lento.

Ochenta y uno: La diferencia y la conexión entre el protocolo http y TCP

Contacto: El protocolo Http se basa en el protocolo TCP. Cuando el navegador necesite obtener datos de la página web del servidor, emitirá una solicitud Http. Http establecerá un canal de conexión con el servidor a través de TCP. Cuando se transmitan los datos necesarios para esta solicitud, Http desconectará inmediatamente la conexión TCP. Este proceso es muy corto.

Diferencia: HTTP y TCP están en diferentes capas de red. TCP es el protocolo de la capa de transporte, que define la especificación de transmisión y conexión de datos, mientras que HTTP es el protocolo de la capa de aplicación, que define la especificación del contenido de los datos.
El establecimiento de una solicitud TCP requiere un protocolo de enlace de tres vías y, dado que HTTP se establece en una conexión TCP, el establecimiento de una solicitud HTTP generalmente incluye dos pasos: solicitud y respuesta.

Ochenta y dos: La diferencia entre http/1.0 y http/1.1

El antiguo estándar del protocolo HTTP es HTTP/1.0, y el estándar más común en la actualidad es HTTP/1.1.
HTTP1.0 solo mantiene una conexión de corta duración. Cada solicitud del navegador necesita establecer una conexión TCP con el servidor, pero el último http/1.0 ha agregado una conexión larga, que solo debe agregarse en el encabezado de http mensaje enviado por el cliente al servidor. Conexión: [mantener] ()-alive
HTTP 1.1 admite conexiones persistentes, y las conexiones persistentes se realizan de forma predeterminada. Se pueden enviar múltiples solicitudes y respuestas HTTP en una conexión TCP, lo que reduce el consumo y la demora de establecer y cerrar conexiones.

Ochenta y tres: ¿Cuáles son los métodos de solicitud de http? La diferencia entre obtener y publicar.

Los métodos de solicitud HTTP incluyen cuatro métodos básicos: GET, POST, PUT y DELETE. (Solo POST no es idempotente en operación entre los cuatro métodos)

La diferencia entre obtener y publicar:

1. El método get no modificará los recursos en el servidor, su consulta no tiene efectos secundarios y la publicación puede modificar los recursos en el servidor 

2. Obtener se puede guardar como un marcador, que se puede optimizar mediante el almacenamiento en caché, pero no se puede publicar. 

3. get adjunta la solicitud a la url, mientras que post adjunta los parámetros al cuerpo del paquete http 

4. Los navegadores y servidores generalmente tienen restricciones en la longitud de la URL enviada por el método get, generalmente 1k o 2k, mientras que el tamaño de los parámetros transmitidos por el método post está limitado a 80k a 4M. 

5. Post puede transmitir información codificada en binario, y los parámetros de get generalmente solo son compatibles con ASCII

Ochenta y cuatro: ¿Qué significa el código de estado 403, 201, etc. de http?

Significado de los códigos de estado HTTP

Los códigos de estado comunes son:

>- 200 - Solicitud exitosa 
>- 301 - El recurso (página web, etc.) se movió permanentemente a otra URL 
>- 404 - El recurso solicitado (página web, etc.) no existe 
>- 500 - Error interno del servidor 
>- 400 - Solicitud no válida 
>- 403 - Sin acceso 

Ochenta y cinco: la diferencia entre http y https, qué se debe hacer para actualizar de http a https

http es un protocolo de transferencia de hipertexto, la información se transmite en texto sin formato y https es un protocolo de transferencia cifrado SSL seguro http
y https usan métodos de conexión completamente diferentes y diferentes puertos, el primero es 80, el último es 443
simple y sin estado; el protocolo HTTPS es un protocolo de red construido por el protocolo SSL+HTTP que puede realizar transmisiones y autenticaciones encriptadas, y es más seguro que el protocolo http.
El protocolo https debe ir a la ca para solicitar un certificado. Generalmente, hay menos certificados gratuitos, por lo que se requiere una tarifa determinada.

Ochenta y seis: La implementación específica de https, cómo garantizar la seguridad

**SSL es un protocolo de capa de transporte**

https incluye dos etapas: cifrado asimétrico y cifrado simétrico. El cifrado asimétrico se usa cuando el cliente establece una conexión con el servidor, y el cifrado simétrico se usa después de que se establece la conexión.

1. El cliente utiliza la URL https para acceder al servidor web y requiere establecer una conexión SSL con el servidor web 
2. Después de que el servidor web reciba la solicitud del cliente, enviará una copia de la clave pública del sitio web a el cliente, y la clave privada se guardará sola. 
3. El navegador del cliente genera una clave para el cifrado simétrico, denominada clave de sesión, según el nivel de seguridad acordado por ambas partes, y luego cifra la clave de sesión con la clave pública del sitio web y la transmite al sitio web 
4. El servidor web utiliza su propia clave pública para cifrar la clave de sesión. La clave privada descifra la clave de sesión. 
5. El servidor web utiliza la clave de sesión para cifrar la comunicación con el cliente, este proceso es un proceso de cifrado simétrico. 

La clave pública que el servidor pasa al cliente por primera vez es en realidad un certificado digital que la CA encripta la información del sitio web.

La clave de cifrado simétrica del cliente es en realidad un hash de tres números aleatorios (1. El número aleatorio adjunto cuando el cliente envía una solicitud al servidor por primera vez 2. El número aleatorio cuando el servidor devuelve 3. El número aleatorio cuando el cliente recibe el número aleatorio de retorno)

Ochenta y siete: ¿Cómo se genera el primer número de secuencia secuencial durante el protocolo de enlace de tres vías de TCP (lote de avance de byte)?

El primer número de serie es un número de serie aleatorio, pero no es completamente aleatorio, se obtiene usando un ISN[algoritmo]().

seq = C + H (dirección IP de origen, dirección IP de destino, puerto de origen, puerto de destino). Entre ellos, C es un temporizador cuyo valor aumenta cada cierto tiempo, H es el resumen del mensaje [algoritmo](), y la entrada es una tupla cuádruple (dirección IP de origen, dirección IP de destino, puerto de origen, puerto de destino).

Ochenta y ocho: ¿Cuál es el límite superior del número de puerto que puede usar una máquina y por qué? ¿Se puede cambiar? ¿Qué sucede si el puerto que desea utilizar supera este límite?

65536. Debido a que la longitud del número de puerto de origen y el número de puerto de destino en el encabezado TCP es de 16 bits, lo que significa que se pueden representar 2^16=65536 números de puerto diferentes, por lo que la cantidad máxima de números de puerto que puede reconocer TCP es 65536. Pero dado que del 0 al 1023 son puertos de servicio bien conocidos, en realidad hay 1024 números de puerto menos.

Para el servidor, el número de puerto que se puede abrir no tiene nada que ver con 65536. En realidad, está limitado por la cantidad de archivos que Linux puede abrir y se puede configurar a través de MaxUserPort.

Ochenta y nueve: Criptosistemas simétricos y asimétricos

- Cifrado simétrico: se utiliza la misma clave para el cifrado y descifrado   

  - Ventajas: pequeña cantidad de cómputo, velocidad rápida de [algoritmo](), alta eficiencia de encriptación Desventajas: las claves se filtran fácilmente. Diferentes sesiones requieren diferentes claves, lo cual es laborioso de administrar 
  - [algoritmos] comúnmente utilizados (): DES, 3DES, IDEA, CR4, CR5, CR6, AES 

- Cifrado asimétrico: requiere claves públicas y privadas, la clave pública se usa para el cifrado y la clave privada se usa para el descifrado   

  - Ventajas: seguro, sin miedo a las fugas Desventajas: lento 

  - [Algoritmos] comúnmente utilizados (): RSA, ECC, DSA

Ninety: Comprensión de los certificados digitales (alta frecuencia)

La CA autorizada utiliza la clave privada para cifrar y empaquetar la información del sitio web A y el resumen del mensaje (firma S) para formar un certificado digital. clave pública para el cliente.

El sitio web A envía su propia información y certificado digital al cliente, y el cliente descifra el certificado digital con la clave pública de la CA para obtener la firma S, que se compara con el resultado S* obtenido al digerir manualmente la información del sitio web. El acuerdo demuestra que se puede confiar en el sitio web A.

Noventa y uno: razones y soluciones para una gran cantidad de conexiones close_wait en el servidor

El estado close_wait ocurre cuando el TCP recibe FIN pero no envía su propio FIN cuando agita sus manos cuatro veces.Hay dos razones por las que el servidor tiene una gran cantidad de estados close_wait:

- El procesamiento comercial interno del servidor toma demasiado tiempo y el negocio no se puede procesar; o todavía hay datos para enviar; o hay un problema con la lógica comercial del servidor, y el método close() es no ejecutado 
: el proceso principal del servidor deriva el proceso secundario, el proceso secundario El proceso hereda el socket Cuando se recibe el FIN, el proceso secundario procesa la señal pero el proceso principal no procesa la señal, lo que da como resultado la referencia del socket no siendo 0 y no se puede reciclar. 

Acercarse:

- detener la aplicación

- Corregir errores en el programa.

Noventa y dos: Message Digest[Algorithm]() para enumerar, presentar MD5[Algorithm](), por qué MD5 es irreversible y cómo fortalecer la seguridad de Message Digest[algorithm]() para que sea menos fácil de descifrar Woolen ¿tela? ([Baidu]() lado seguro)

- El resumen del mensaje [algoritmo]() tiene la familia MD (MD2, MD4, MD5), la familia SHA (SHA-1, SHA-256) y la familia CRC (CRC8, CRC16, CRC32), etc.

- MD5 [algoritmo] () introducción:
  MD5 procesa la información de entrada en grupos de 512 bits, y cada grupo se divide en varios grupos pequeños (16 subgrupos de 32 bits). Después de una serie de procesamiento, [algoritmo] () genera cuatro valores hash (valores hash de 128 bits que consisten en paquetes de 32 bits).

1. MD5 primero divide la información de entrada en varios grupos de 512 bytes de longitud y, si no es suficiente, completa 1 y varios 0. 
2. Realice una operación cíclica en cada paquete de 512 bytes. Los primeros datos agrupados se transforman cuatro veces utilizando cuatro números mágicos, lo que da como resultado cuatro variables. 
3. A continuación, utilice una función lineal para calcular tres de ellos, agregue el restante y asígnelo a una de las variables para obtener cuatro nuevas variables.Repita este proceso 16 veces, y las cuatro variables obtenidas se utilizan como números mágicos. y realice un cálculo similar con la siguiente agrupación. 
4. Las cuatro variables obtenidas tras atravesar todos los grupos son los resultados. 

- Por qué es irreversible: debido a que MD5 está en el proceso de resumen del mensaje, los datos se pierden en comparación con los datos originales, por lo que el resultado no los puede recuperar.

- Fortalecer la seguridad: agregue sal (agregue un número aleatorio)

Noventa y tres: Optimización de alta concurrencia de acceso a un solo registro

Terminal de servicio:

- Usar caché, como [redis](), etc.

- Utilizar una arquitectura distribuida para el procesamiento

- Almacene páginas estáticas y recursos estáticos en el servidor de recursos estáticos, y el servidor calcula los datos a procesar y los devuelve

- almacenar en caché los recursos estáticos en el lado del cliente tanto como sea posible

- Equilibrio de carga con ngnix (nginx se lee como Enjing Ax = Engine X)

Lado de la base de datos:

- La base de datos adopta la asignación maestro-esclavo, medidas de separación de lectura y escritura 

- Construir índices adecuados 

- Sub-biblioteca y sub-tabla

Noventa y cuatro: Presente el proceso de ping, qué protocolos se utilizan ([Baidu]() seguridad, etc.)

ping funciona utilizando el protocolo ICMP. ICMP: Protocolo de mensajes de control de red

- Primero, el comando ping construirá un paquete de solicitud ICMP y luego el protocolo ICMP enviará el paquete al protocolo IP junto con la dirección IP de destino y la dirección IP de origen. 
- Luego, el protocolo IP construirá un datagrama IP, buscará la dirección mac correspondiente a la IP de destino en la tabla de mapeo y la entregará a la capa de enlace de datos. 
- Luego, la capa de enlace de datos construirá un marco de datos, adjuntará la dirección mac de origen y la dirección mac de destino y la enviará. 

Después de que el host de destino reciba la trama de datos, verificará si la dirección MAC en el paquete coincide con la Mac local. Si coincide, recibirá y extraerá la información al protocolo IP, y el protocolo IP extraerá la información. el protocolo ICMP. Luego construya un paquete de respuesta ICMP y envíelo de regreso usando el mismo proceso.

Noventa y cinco: Introducción al paquete adhesivo y evitación de TCP/IP

Debido a que TCP adopta la transmisión de secuencias para reducir la sobrecarga adicional, es posible que el extremo receptor reciba varios paquetes a la vez. El paquete adhesivo TCP significa que varios paquetes de datos del remitente se pegan en un solo paquete cuando llegan al receptor. Varios paquetes están conectados de extremo a extremo y no se pueden distinguir.

Hay tres razones para los paquetes adhesivos TCP:

- El remitente espera a que el búfer esté lleno antes de enviar, lo que da como resultado paquetes adhesivos 
- El receptor llega demasiado tarde para recibir los datos en el búfer, lo que da como resultado paquetes adhesivos 
- Porque el protocolo TCP combina varios paquetes en un solo paquete al enviar paquetes más pequeños después de enviar 

Medidas para evitar bolsas pegajosas:

- A través de la programación, obligar a TCP a transmitir datos sin esperar hasta que el búfer esté lleno 
- Optimizar el proceso de recepción de datos del receptor para que tenga tiempo de recibir paquetes de datos, incluido el aumento de la prioridad del proceso de recepción, 
etc. mensaje de longitud o establecer un mensaje El encabezado indica la longitud del paquete. 

Noventa y seis: Hable sobre la paquetización y el desempaquetado de TCP

Debido a que TCP es una transmisión de flujo ilimitada, es necesario empaquetar y desempaquetar TCP para garantizar que los datos enviados y recibidos no se bloqueen.

- Paquete: Paquete consiste en agregar un encabezado de paquete a cada paquete de datos TCP al enviar un datagrama y dividir el datagrama en dos partes: el encabezado del paquete y el cuerpo del paquete. El encabezado es una estructura de longitud fija que contiene la longitud total del paquete. 

- Desempaquetado: después de recibir el paquete, el receptor extrae la información de longitud en el encabezado del paquete para su interceptación.

Noventa y siete: Una IP está configurada con múltiples nombres de dominio, ¿cómo se puede identificar?

- Distinguir por nombre de host del host 

- Distinguido por número de puerto

Noventa y ocho: ataque al servidor (ataque DDos)

Noventa y nueve: el proceso de trabajo y el principio del DNS

Hay dos formas de resolución de DNS: consulta recursiva y consulta iterativa 

- El usuario de consulta recursiva primero consulta el servidor de nombres de dominio local. Si no hay un registro de asignación de direcciones IP en la memoria caché del servidor de nombres de dominio local, consultará el servidor de nombres de dominio raíz, el servidor de nombres de dominio raíz consultará la parte superior. servidor de nombres de dominio de nivel superior, y el servidor de nombres de dominio de nivel superior consultará al servidor de nombres de dominio de autoridad. Vuelva después de encontrar los resultados. 

- Consulta iterativamente al usuario para consultar el servidor de nombres de dominio local. Si no hay caché, el servidor de nombres de dominio local consultará al servidor de nombres de dominio raíz, el servidor de nombres de dominio raíz devolverá la dirección del servidor de nombres de dominio de nivel superior, y el servidor de nombres de dominio local consultará al servidor de nombres de dominio de nivel superior para obtener la dirección del servidor de nombres de dominio de autoridad. El servidor de nombres de dominio local consultará al servidor de nombres de dominio de autoridad para obtener el resultado.

Cien: protocolo OSA de siete capas y protocolo de cinco capas, ¿qué son?

 El modelo de protocolo de siete capas de OSI es principalmente: capa de aplicación (Aplicación), capa de presentación (Presentación), capa de sesión (Sesión), capa de transporte (Transporte), capa de red (Red), capa de enlace de datos (Enlace de datos), física capa (física). 

La arquitectura de cinco capas incluye: capa de aplicación, capa de transporte, capa de red, capa de enlace de datos y capa física.

Ciento uno: ¿Cuál es la diferencia entre el direccionamiento IP y el direccionamiento MAC y cómo se implementa?

Encontrar un host por dirección MAC es direccionamiento de dirección MAC, y encontrar un host por dirección IP se denomina direccionamiento de dirección IP. Se aplican a diferentes capas de protocolo, el direccionamiento IP es la capa de red y el direccionamiento Mac es la capa de enlace de datos.

El proceso de direccionamiento IP (protocolo ARP): si el host A desea encontrar el host de destino a través de la dirección IP, primero analiza la dirección IP para determinar si el host de destino y él mismo están en el mismo segmento de red. Si es así, verifique el caché ARP o use el protocolo ARP para enviar transmisiones. De lo contrario, busque una puerta de enlace para enviar paquetes ARP.

Supongo que te gusta

Origin blog.csdn.net/m0_56051805/article/details/126573563
Recomendado
Clasificación