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!