Tem uma entrevista de programação chegando? Preparar-se para isso é tão importante quanto desenvolver seu conhecimento de codificação para alcançá-lo. Isso lhe dará confiança para lidar com a entrevista e livrar-se do nervosismo. Isso é especialmente verdadeiro se você estiver enfrentando uma entrevista de programação pela primeira vez na vida.

Para ajudar os desenvolvedores de Node.js a obter a preparação necessária para uma entrevista, reuni uma lista de 15 perguntas de entrevista comuns relacionadas a desenvolvimento de Node.js e web. Essas perguntas e suas respostas também o levarão a revisar quaisquer áreas que você acha que precisam ser melhoradas antes da grande entrevista.

Nesta postagem, estamos nos concentrando em questões relacionadas apenas ao Node.js; no entanto, tenha em mente que as questões relacionadas ao Javascript são muito comuns em entrevistas em Node.js, portanto, você também deve se preparar para algumas delas. Escrevemos um post há não muito tempo em perguntas comuns de entrevista de JavaScript para cobrir o básico.

Agora, vamos mergulhar para ver as perguntas relacionadas ao Node que você provavelmente responderá em sua próxima entrevista.

Como o Node.js é diferente do Javascript?

Quando você deve usar o Node.js?

O Node.js é assíncrono, orientado a eventos, sem bloqueio e de thread único. Isso torna o Node um candidato perfeito para desenvolver os seguintes tipos de aplicativos:

  • Aplicativos em tempo real, como bate-papo e serviços que fornecem atualizações ao vivo.
  • Aplicativos de streaming que fornecem vídeo ou outro conteúdo multimídia para um grande público.
  • Aplicativos intensivos de E / S, como plataformas colaborativas.
  • Back-ends da Web que seguem a arquitetura de microsserviços.

No entanto, as qualidades únicas do Node.js o tornam menos do que ideal para alguns outros tipos de aplicativos: aqueles que realizam tarefas intensivas de CPU, como cálculos matemáticos complexos, serão restringidos pela execução de thread único do Node.

Se você quiser saber mais sobre isso, confira nosso artigo sobre Arquitetura Node.js e quando usar Node.js em projetos.

O que o EventEmitter faz?

Cada objeto em Node.js capaz de emitir eventos é um membro do EventEmitter classe. o http módulo é um exemplo.

Todos EventEmitter classes podem usar o eventEmitter.on() função para anexar ouvintes de eventos ao evento. Então, assim que tal evento é detectado, seus ouvintes são chamados um a um de forma síncrona.

O que é o loop de eventos do Node?

Uma vez que o Node.js é de thread único, ele deve ser sem bloqueio para evitar que o thread passe muito tempo em uma tarefa que leva um tempo para ser concluída. O loop de eventos é responsável por habilitar esse comportamento sem bloqueio. Seu trabalho é agendar tarefas pendentes usando o encadeamento do aplicativo.

Sabemos que o Node usa callbacks para lidar com a resposta retornada por uma função assíncrona quando sua tarefa é concluída. Semelhante ao evento que criou a tarefa, a conclusão da tarefa também emite um evento. Node.js adiciona esses eventos que requerem tratamento a uma fila de eventos.

O loop de eventos itera sobre os eventos na fila de eventos e programa quando executar suas funções de retorno de chamada associadas.

O que são fluxos de nó?

Streams são pipelines que leem ou gravam dados de uma origem e os transferem para um destino de fluxo contínuo. Existem quatro tipos de streams:

  • Legível
  • Gravável
  • Duplex (legível e gravável)
  • Transformar (um tipo de fluxo duplex. Sua saída é calculada usando a entrada)

Cada fluxo também é um EventEmitter. Isso significa que um objeto de fluxo pode emitir eventos quando não há dados no fluxo, quando os dados estão disponíveis no fluxo ou quando os dados no fluxo são liberados do programa.

Qual é a diferença entre as funções readFile e createReadStream?

o readFile função lê todo o conteúdo do arquivo de forma assíncrona e o armazena na memória antes de transmiti-lo ao usuário.

createReadStream usa um fluxo legível que leria o arquivo, pedaço por pedaço, sem armazenar todo o arquivo na memória.

createReadStream otimiza a operação de leitura do arquivo em comparação com readFile usando menos memória e tornando-o mais rápido. Se o arquivo for de tamanho considerável, o usuário não terá que esperar muito tempo até que todo o conteúdo esteja disponível, porque pequenos pedaços são enviados ao usuário à medida que são lidos.

Como você lida com exceções não detectadas no Node.js?

Podemos capturar exceções não detectadas lançadas no aplicativo em seu nível de processo. Nós anexamos um ouvinte ao process objeto global para capturar tais eventos.

O Node pode aproveitar todas as vantagens de um sistema multiprocessador?

Os aplicativos de nó são sempre de thread único. Portanto, naturalmente, o aplicativo usa apenas um único processador, mesmo quando executado em sistemas com vários processadores.

Mas um dos módulos principais do Node, Cluster, fornece suporte para aplicativos Node para tirar proveito de vários núcleos. Ele nos permite criar vários processos de trabalho que podem ser executados em vários núcleos em paralelo e compartilhar uma única porta para ouvir eventos.

Aqui, cada processo usa IPC para se comunicar com o thread principal e passar o identificador do servidor para outros conforme necessário. O processo principal pode escutar a própria porta e passar todas as novas conexões para processos filho em uma ordem de rodízio, ou atribuir a porta a processos filho para que os processos filho escutem as solicitações.

Qual é o padrão de projeto do reator usado no Node.js?

O padrão do reator é usado para manter operações de E / S sem bloqueio no Node.js. Ele anexa uma função de retorno de chamada (um manipulador) a cada operação de E / S. O manipulador é então submetido a um demultiplexador no momento da criação da solicitação.

O demultiplexador coleta todas as solicitações de E / S feitas no aplicativo e as enfileira como eventos em uma fila. Isso é o que chamamos de fila de eventos. Depois de enfileirar o evento, o demultiplexador retorna o controle do thread do aplicativo.

Enquanto isso, o loop de eventos itera sobre cada evento na fila de eventos e invoca o retorno de chamada anexado para manipular a resposta do evento.

Este é o padrão de reator usado pelo Node.js.

Quais são as vantagens de um back-end da Web de thread único para um multi-thread?

Dito de outra forma: embora o Node seja de thread único, a maioria das linguagens de programação usadas para o desenvolvimento de back-end fornece vários threads para lidar com as operações do aplicativo. De que forma ter apenas um único thread é benéfico para o desenvolvimento de back-end?

  • É mais fácil para os desenvolvedores implementar aplicativos. Nossos aplicativos não correm o risco de entrar em condições de corrida inesperadas repentinamente durante a produção.
  • Os aplicativos de thread único são facilmente escaláveis.
  • Eles podem atender a um grande número de solicitações de usuários recebidas em um momento, sem muito atraso. Em comparação, um back-end multithread precisa esperar que um thread do pool de threads esteja livre para atender à solicitação do usuário quando o tráfego estiver alto. Com a natureza não bloqueadora do Node, não há risco de uma solicitação do usuário ficar presa no único thread por muito tempo (isso é verdade apenas quando as operações não exigem muito da CPU).

O que é REPL no Node?

REPL significa Read-Eval-Print-Loop. É um ambiente virtual onde você pode executar uma linguagem de programação facilmente. O Node vem com um REPL integrado para executar o código JavaScript. É semelhante aos consoles que usamos em navegadores para executar o código JavaScript.

Para iniciar o Node REPL, basta executar o comando, node, na linha de comando. Então, depois de escrever uma linha de código JavaScript, você pode ver subsequentemente sua saída.

O retorno de chamada passado para a função setImmediate é executado na próxima iteração do loop de eventos na fila de eventos.

Por outro lado, o retorno de chamada passou para o process.nextTick é executado antes da próxima iteração do loop de eventos e depois que a operação atualmente em execução no programa for concluída. No início do aplicativo, seu retorno de chamada é chamado antes que o loop de eventos comece a iterar na fila de eventos.

Portanto, o process.nextTick ligue de volta é sempre chamado antes do setImmediate ligue de volta.

O que são stubs?

Os stubs são usados ​​ao testar aplicativos. Eles simulam o comportamento de um determinado componente ou módulo para que você possa se concentrar apenas na parte do código que deseja testar. Ao usar stubs no lugar de componentes irrelevantes para o teste, você não terá que se preocupar com o impacto de componentes externos nos resultados.

Por exemplo, se o componente que você está testando tem uma operação de leitura de arquivo antes da parte que você espera testar, você pode usar um stub para simular esse comportamento e retornar o conteúdo simulado sem realmente ler o arquivo.

No Node, usamos bibliotecas como o Sinon para esse propósito.

Por que é uma boa prática separar “aplicativo” e “servidor” no Express?

Ao separar o aplicativo e o servidor no Express, podemos separar a implementação da API da configuração relacionada à rede. Isso nos permite realizar testes de API sem realizar chamadas de rede. Isso também garante uma execução de teste mais rápida e melhores métricas de cobertura de código.

Para conseguir essa separação, você deve declarar a API e o servidor em arquivos separados. Aqui usamos dois arquivos: app.js e server.js.

O que são fios e npm? Por que você quer usar fios em vez de npm?

npm é o gerenciador de pacotes padrão distribuído com Node.js. Ele tem uma grande biblioteca de pacotes públicos e privados armazenados em um banco de dados chamado ‘registro emp’ que os usuários podem acessar por meio do cliente de linha de comando do npm. Com a ajuda do npm, os usuários podem gerenciar facilmente as dependências usadas em um projeto.

yarn também é um gerenciador de pacotes que foi lançado como uma resposta a algumas das deficiências do npm. No entanto, o yarn depende do registro npm para fornecer aos usuários acesso aos pacotes. Como a estrutura subjacente do yarn é baseada no próprio npm, a estrutura e o fluxo de trabalho do seu projeto não precisam passar por grandes mudanças se você estiver migrando para o yarn do npm.

Como mencionei antes, o yarn oferece melhor funcionalidade em relação ao npm em alguns casos. Ao contrário do npm, ele armazena em cache cada pacote que você baixa, então você não precisa baixá-lo novamente sempre que necessário.

Ele também fornece melhor segurança ao verificar a integridade dos pacotes usando somas de verificação. Ele garante que um pacote que funcionou em um determinado sistema funcionará exatamente da mesma maneira em qualquer outro sistema.

Conclusão

Nesta postagem, analisamos 15 das perguntas mais frequentes da entrevista do Node.js para ajudá-lo a se preparar melhor para a próxima entrevista. Saber que tipo de perguntas você provavelmente receberá e saber suas respostas lhe dará a confiança para responder às perguntas da entrevista sem ficar nervoso.

este artigo foi publicado originalmente em Transmissão de código ao vivo de Juan Cruz Martinez (Twitter: @bajcmartinez), fundador e editor do Live Code Stream, empresário, desenvolvedor, autor, palestrante e realizador.

Transmissão de código ao vivo também está disponível como um boletim informativo semanal gratuito. Inscreva-se para receber atualizações sobre tudo relacionado a programação, IA e ciência da computação em geral.



Fonte: thenextweb.com

Deixe uma resposta