Algunas preguntas de la entrevista integradas

Obtenido de: https://mp.weixin.qq.com/s/N4IfREMrZuW1K9x3BQb2EA

Envía otra ola de súper beneficios, ¿quieres saber?

txp jugando Linux hace 3 días

Antes de compartir el resumen de las preguntas clásicas de esta entrevista, hagamos una vista previa. El resumen de las preguntas de la entrevista compartidas en el próximo número completará la respuesta a una pregunta de la entrevista compartida por los internautas del grupo:

Las fuentes de las preguntas de la entrevista son algunas preguntas clásicas y frecuentes en Internet. Las respuestas son solo de referencia. Si no las comprende, puede consultar los libros para aclarar los principios que se encuentran en el interior y responderlos con confianza. ; Al mismo tiempo, personalmente sugiero que debes entender el principio y memorizar la respuesta estándar. Este efecto es muy bueno. Incluso cuando se trata de la entrevista, debido al nerviosismo, la respuesta estándar puede olvidarse, pero si comprendes el principio, puedes decir una o dos cosas. ; Por supuesto, lo mismo ocurre con la prueba escrita, por lo que no sabes cómo escribir en absoluto.

1. Proceso de inicio de Linux:

(1) Cargar BIOS (2) Leer MBR (3) Ejecutar BootLoader (4) Cargar el kernel (5) La capa de usuario Init establece el nivel de ejecución de acuerdo con el archivo inittab (6) El proceso init ejecuta rc.sysinit (7) Inicia el módulo del kernel (8) Ejecute programas de script de diferentes niveles de ejecución (9 ejecute /etc/rc.d/rc.local (10) ejecute / bin / login para ingresar al estado de inicio de sesión

2. La diferencia entre malloc y new

(1) La palabra clave new es parte de C ++ y new es un operador que puede sobrecargarse.

(2) Malloc es proporcionado por la función de biblioteca c.

(3) La nueva palabra clave asigna memoria en unidades de tipos específicos.

(4) La función malloc asigna memoria en bytes.

(5) La nueva clave se puede inicializar al solicitar una variable de tipo único.

(6), malloc no puede inicializar la memoria.

(7), malloc devuelve un puntero nulo, new devuelve un puntero de tipo de objeto

(8), el error de asignación de malloc devuelve un valor nulo, el nuevo error de asignación devuelve una excepción

3. Describa el mecanismo de multiplexación IO.

Hay 4 modelos de IO: IO de bloqueo síncrono, IO sin bloqueo síncrono, IO de bloqueo asíncrono e IO sin bloqueo asíncrono; la multiplexación de IO pertenece al modelo de IO de bloqueo asíncrono en el modelo IO y se utiliza a menudo en la construcción de IO de servidor de alto rendimiento.

Sincrónico y asincrónico significa el lado del servidor, el bloqueo sin bloqueo significa el lado del usuario, por lo que puede explicar por qué la multiplexación IO (bloqueo asincrónico) se usa a menudo en el lado del servidor; descriptor de archivo (FD, también llamado identificador de archivo): un descriptor es solo uno Número, apunta a una estructura en el kernel (ruta de archivo, área de datos y otros atributos). Fuente específica: El kernel de Linux trata a todos los dispositivos externos como un archivo para operar. La operación del archivo llamará al comando del sistema proporcionado por el kernel y devolverá un fd (descriptor de archivo). Presentamos la multiplexación IO:

(1) La tecnología de multiplexación de E / S multiplexa varios bloques de E / S en el mismo bloque de selección, sondeo o epoll, de modo que el sistema puede procesar varios clientes simultáneamente en un solo hilo solicitud. Comparado con el modelo tradicional de múltiples subprocesos / multiprocesos, la mayor ventaja de la multiplexación de E / S es que la sobrecarga del sistema es pequeña y el sistema no necesita crear nuevos procesos o subprocesos adicionales.

(2) Select, poll y epoll son esencialmente E / S síncronas, porque todos deben ser responsables de la lectura y escritura después de que el evento de lectura y escritura esté listo, lo que significa que el proceso de lectura y escritura está bloqueado, mientras que la E / S asíncrona está lista. No es necesario que usted mismo sea responsable de leer y escribir, ya que la implementación de E / S asíncronas será responsable de copiar los datos del kernel al espacio de usuario.

(3) Los principales escenarios de aplicación de la multiplexación de E / S son los siguientes: el servidor necesita procesar múltiples sockets en el estado de monitoreo o múltiples estados de conexión al mismo tiempo; el servidor necesita procesar sockets de múltiples protocolos de red al mismo tiempo;

(4) Las llamadas al sistema que actualmente admiten la multiplexación de E / S incluyen select, poll, epoll, epoll y select. Los principios son similares, pero epoll ha realizado muchas mejoras importantes, que se resumen a continuación:

①La cantidad de identificadores de archivos FD abiertos por un proceso no está limitada (por qué la cantidad de identificadores de selección es limitada: select usa campos de bits para transferir los descriptores de archivos de interés, porque los campos de bits tienen una longitud máxima, que es 1024 en Linux , Por lo que hay un límite de cantidad);

②La eficiencia de E / S no disminuirá linealmente a medida que aumenta el número de FD;

③La API de epoll es más simple;

(5) Tres tipos de introducción de llamadas de interfaz:

① Seleccione el formato de llamada a la función:

#include <sys/select.h>
#include <sys/time.h>
int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set 
*exceptset,const struct timeval *timeout)

// Valor de retorno: el número de descriptores listos, 0 se devuelve cuando se agota el tiempo de espera, -1 se devuelve cuando se produce un error ② El formato de llamada de la función de encuesta:

# include <poll.h>
int poll ( struct pollfd * fds, unsigned int nfds, int timeout);

③formato de función de lista (el proceso operativo incluye tres funciones):

#include <sys/epoll.h>
int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int 
timeout);

(6) Función: Reemplazar multiproceso / multiproceso hasta cierto punto, reducir la ocupación de recursos y garantizar una alta eficiencia del funcionamiento del sistema

4. ¿Código de implementación burbujeante escrito a mano?

void bubble_sort(int a[], int n)
{
      for(int i =0; i<n-1; i++)
      {
          for(int j =0; j<n-1-i;j++)
          {
              if(a[j]>a[j+1]
              {
                  int temp = a[j];
                  a[j]=a[j+1];
                  a[j+1]=temp;
            }
          }
      }
}

5. constante y volátil:

(1) Explique el siguiente significado:

const int * p; // p es variable, el contenido apuntado por p es inmutable

int const * p; // p es variable, el contenido apuntado por p es inmutable

int * const p; // p es inmutable, el contenido apuntado por p es variable

const int * const p; // Los contenidos apuntados por p y p son inmutables

(2) Escriba los escenarios de aplicación que conoce sobre volátiles:

a. Registros de hardware de dispositivos paralelos (como registros de estado)

b. Variables no automáticas a las que se accederá en una subrutina de servicio de interrupción (Variables no automáticas)

c. Variables compartidas por varias tareas en aplicaciones multiproceso

 

Los temas anteriores provienen de blogs web y documentos relacionados, ¡espero que sea útil para todos!

Supongo que te gusta

Origin blog.csdn.net/sinat_16643223/article/details/108645186
Recomendado
Clasificación