Incluído algumas perguntas da entrevista

Obtido em: https://mp.weixin.qq.com/s/N4IfREMrZuW1K9x3BQb2EA

Envie mais uma onda de super benefícios, quer saber?

txp jogando Linux 3 dias atrás

Antes de compartilhar o resumo das perguntas clássicas da entrevista, vamos fazer uma prévia. O resumo das perguntas da entrevista compartilhado na próxima edição irá completar as respostas a uma pergunta da entrevista compartilhada por internautas no grupo:

As fontes das perguntas da entrevista são algumas perguntas clássicas e frequentes na Internet. As respostas são apenas para referência. Se você não entender, pode consultar os livros para esclarecer os princípios internos e respondê-los com confiança. ; Ao mesmo tempo, eu pessoalmente sugiro que você entenda o princípio e memorize a resposta padrão. Esse efeito é muito bom. Mesmo quando se trata da entrevista, devido ao nervosismo, a resposta padrão pode ser esquecida, mas se você entender o princípio, pode dizer uma ou duas coisas. ; Claro que o mesmo vale para a prova escrita, então você não saberá escrever.

1. Processo de inicialização do Linux:

(1) Carregar BIOS (2) Ler MBR (3) Executar BootLoader (4) Carregar o kernel (5) Camada do usuário Init define o nível de execução de acordo com o arquivo inittab (6) O processo init executa rc.sysinit (7) Inicia o módulo do kernel (8) Execute programas de script de diferentes níveis de execução (9 execute /etc/rc.d/rc.local (10) execute / bin / login programa para entrar no estado de login

2. A diferença entre malloc e new

(1) A nova palavra-chave é uma parte do C ++ e new é um operador que pode ser sobrecarregado.

(2) Malloc é fornecido pela função de biblioteca c.

(3) A nova palavra-chave aloca memória em unidades de tipos específicos.

(4) A função malloc aloca memória em bytes.

(5) A nova chave pode ser inicializada ao aplicar para uma variável de tipo único.

(6), malloc não pode inicializar a memória.

(7), malloc retorna um ponteiro nulo, new retorna um ponteiro de tipo de objeto

(8), falha de alocação malloc retorna nulo, nova falha de alocação retorna exceção

3. Descreva o mecanismo de multiplexação IO?

Existem 4 modelos de IO: IO de bloqueio síncrono, IO de bloqueio síncrono, IO de bloqueio assíncrono e IO de não bloqueio assíncrono; a multiplexação de IO pertence ao modelo de IO de bloqueio assíncrono no modelo de IO e é frequentemente usado na construção de IO de servidor de alto desempenho.

Síncrono e assíncrono significa o lado do servidor, bloqueio sem bloqueio significa o lado do usuário, então pode explicar por que a multiplexação IO (bloqueio assíncrono) é frequentemente usada no lado do servidor; descritor de arquivo (FD, também chamado de identificador de arquivo): um descritor é apenas um Número, ele aponta para uma estrutura no kernel (caminho do arquivo, área de dados e outros atributos). Fonte específica: o kernel do Linux trata todos os dispositivos externos como um arquivo para operar, e a operação do arquivo chamará o comando do sistema fornecido pelo kernel e retornará um fd (descritor de arquivo). Vamos apresentar a multiplexação IO:

(1) A tecnologia de multiplexação de E / S multiplexa vários blocos de E / S no mesmo bloco de seleção, pesquisa ou epoll, para que o sistema possa processar vários clientes simultaneamente em um único encadeamento solicitação. Comparado com o modelo tradicional multi-threaded / multiprocessos, a maior vantagem da multiplexação de E / S é que a sobrecarga do sistema é pequena e o sistema não precisa criar novos processos ou threads adicionais.

(2) Select, poll e epoll são essencialmente I / O síncronos, porque todos eles precisam ser responsáveis ​​pela leitura e escrita após o evento de leitura e gravação estar pronto, o que significa que o processo de leitura e escrita é bloqueado, enquanto I / O assíncrono Você não precisa ser responsável por ler e escrever.A implementação de E / S assíncrona será responsável por copiar os dados do kernel para o espaço do usuário.

(3) Os principais cenários de aplicação de multiplexação de E / S são os seguintes: o servidor precisa lidar com vários sockets no estado de monitoramento ou vários estados de conexão ao mesmo tempo; o servidor precisa lidar com sockets de vários protocolos de rede ao mesmo tempo;

(4) As chamadas de sistema que atualmente suportam multiplexação de I / O incluem select, poll, epoll, epoll e select. Os princípios são semelhantes, mas epoll fez muitas melhorias importantes, que são resumidas a seguir:

①O número de identificadores de arquivo FD abertos por um processo não é limitado (por que o número de identificadores de seleção é limitado: o select usa campos de bits para transferir os descritores de arquivo de interesse, porque os campos de bits têm um comprimento máximo, que é 1024 no Linux , Portanto, há um limite de quantidade);

② A eficiência de E / S não diminuirá linearmente à medida que o número de FDs aumenta;

③A API do epoll é mais simples;

(5) Três tipos de introdução de chamada de interface:

①Selecione o formato de chamada de função:

#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: o número de descritores prontos, 0 é retornado quando o tempo limite, -1 é retornado quando ocorre um erro ② O formato de chamada de função de pesquisa:

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

③ formato da função de acompanhamento (o processo de operação inclui três funções):

#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) Função: Substituir multi-thread / multi-processo até certo ponto, reduzir a ocupação de recursos e garantir alta eficiência de operação do sistema

4. Código de implementação bubbling escrito à mão?

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 e volátil:

(1) Explique o seguinte significado:

const int * p; // p é variável, o conteúdo apontado por p é imutável

int const * p; // p é variável, o conteúdo apontado por p é imutável

int * const p; // p é imutável, o conteúdo apontado por p é variável

const int * const p; // Os conteúdos apontados por p e p são imutáveis

(2) Anote os cenários de aplicação que você conhece sobre voláteis:

a. Registros de hardware de dispositivos paralelos (como registradores de status)

b. Variáveis ​​não automáticas que serão acessadas em uma sub-rotina de serviço de interrupção (variáveis ​​não automáticas)

c. Variáveis ​​compartilhadas por várias tarefas em aplicativos multithread

 

Os tópicos acima vêm de blogs da web e documentos relacionados, espero que sejam úteis para todos!

Acho que você gosta

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