Visão geral do JavaScript que você pode ser solicitado em uma entrevista

Dec 18 2022
Neste artigo, vou escrever mais sobre alguns conceitos importantes de javascript com os quais não interagimos diariamente. Usamos frameworks Javascript como ReactJs, Angular, você escolhe, e antes de qualquer entrevista técnica, nos certificamos de lembrar os conceitos da biblioteca/framework com os quais estamos familiarizados, mas negligenciamos alguns dos conceitos centrais do JavaScript.
Foto de Greg Rakozy no Unsplash

Neste artigo, vou escrever mais sobre alguns conceitos importantes de javascript com os quais não interagimos diariamente.

Usamos frameworks Javascript como ReactJs, Angular, você escolhe, e antes de qualquer entrevista técnica, nos certificamos de lembrar os conceitos da biblioteca/framework com os quais estamos familiarizados, mas negligenciamos alguns dos conceitos centrais do JavaScript.

Pelo menos isso aconteceu comigo antes, planejei minha entrevista revisando algumas perguntas da entrevista do React, lembrando como usar useEffectcorretamente “sempre esqueço as limpezas”, e uma revisão rápida useMemoou useRefque às vezes não entendo minha cabeça eles. Até certo momento, candidatei-me a um emprego há 2 anos e não conhecia a biblioteca/framework sobre a qual me perguntariam na entrevista técnica. O entrevistador estava procurando por um engenheiro de JavaScript que pudesse envolver sua mente em qualquer um dos frameworks da linguagem. Não deu certo e ficou claro que preciso trabalhar para entender o núcleo do JS.

Neste artigo e nos próximos, vou falar um pouco sobre alguns conceitos básicos com os quais um engenheiro avançado de javascript deve estar familiarizado.

O que é o motor JavaScript?

  • O motor simplesmente traduz o arquivo javascript para o computador, igual a qualquer outra linguagem, existem vários motores javascript mas o mais famoso é o motor V8 que o Chrome usa, é escrito em C++ e foi publicado em 2008. Outro motor famoso é aquele criado pelo próprio criador do javascript “Brendan Eich” que se chama Spider Monkey usado pelo Firefox. Foi o primeiro mecanismo JavaScript que permite ao navegador entender o javascript não apenas o HTML.
  • Damos ao mecanismo um arquivo javascript e ele faz uma análise léxica que divide o código em tokens para identificar seu significado.
  • Tokens são formados em AST “Abstract Syntax Tree”
  • Em seguida, ele vai para um interpretador, criador de perfil ou compilador ⇒ obtém algum código de zeros e uns que é compreensível pela “linguagem de máquina” da CPU

Existem duas maneiras de transformar código em linguagem de máquina compreensível por computadores:

  • Intérprete ⇒ Lê as linhas, linha por linha
  • Compiladores ⇒ Pega todo o código, tenta entender o que estamos tentando fazer, traduz para outro idioma e depois interpreta linha por linha para obter o mesmo resultado no final. Essa linguagem está em uma linguagem de nível inferior, como código de máquina.

Compilador JIT Compilador “Just-In-Time”

Os navegadores começaram a misturar compiladores para tornar os motores mais rápidos, é ter o melhor de ambos “Interpreter” e “Compilers”, desta forma melhora a velocidade de execução do código javascript. É por isso que a linguagem JavaScript não é apenas uma linguagem interpretativa , ela também pode ser compilada .

Pilhas de chamadas e pilhas de memória

Uma pilha de chamadas é um local para executar e acompanhar o que está acontecendo linha por linha em nosso código e executá-lo em ordem. Ele armazena funções e variáveis ​​à medida que seu código é executado e é executado no modo First In Last Out . é isso que o javascript está rodando ou executando.
Enquanto as pilhas de memória armazenam e gravam informações, onde podemos armazenar nossas variáveis ​​e dados, pense nisso como um mecanismo javascript de armazenamento gratuito fornecido para armazenar qualquer tipo de dados de maneira desordenada.

E o verdadeiro desafio, se você não entender o que é a pilha de chamadas ou o heap de memória, poderá se deparar com alguns problemas sérios que mostrariam habilidades de engenharia deficientes, como:

Stack Overflow:
Não, não é o famoso site que você visita diariamente, é o grande erro vermelho que aparece no seu console, sem nenhuma pista do que você fez de errado.
Isso acontece quando continuamos tentando chamar funções aninhadas uma dentro da outra repetidas vezes. Algo como uma função recursiva sem um estado de sucesso ou um estado de retorno.

function inception(){
 inception();
}
// By this way, we would keep adding things to the stack more and more.

let arrayOfTrials = [];
while(1) {
 arrayOfTrials.push("hi");
}

  1. Continue adicionando variáveis ​​ao ambiente, pois as variáveis ​​globais adicionarão mais e mais pedaços de memória.
  2. Adicionar ouvintes de eventos a um dos elementos em seu documento e nunca removê-los quando você não precisar deles preenche sua memória.
  3. Using setInterval()which é um método que continua chamando a função até que você a limpe, e você esquece de limpá-la usando o clearInterval()método.

Javascript é uma linguagem coletada como lixo, o que significa que quando JS aloca memória dentro de uma função com objetos, os objetos são armazenados nos heaps de memória. Ao terminar a função e não precisarmos mais desse objeto, o JS automaticamente o limpa para nós, e apenas os dados que ainda são úteis permanecem. Ele é responsável por limpar nossa memória e economizar algum espaço para evitar vazamentos de memória.
Esse não é o caso de linguagens de baixo nível como C, onde você controla a coleta de lixo e especifica o que remover da memória. É perigoso, mas é por isso que os programas em C são muito rápidos e eficientes em termos de memória.

O próprio JavaScript Engine é síncrono, um de cada vez, em ordem, apenas uma coisa pode acontecer por vez. Isso é diferente do JavaScript Runtime.

Nos próximos artigos, falarei mais sobre o JavaScript Runtime, a base do JavaScript e conceitos muito mais avançados.

Conclusão

Volte sempre à origem da linguagem que você usa em seu framework ou biblioteca, sei que as empresas estão procurando um campo específico em frontends como um React Developer ou um Angular2+ Engineer, mas é sempre melhor se ajustar a uma nova biblioteca ou framework, em vez de trabalhar com uma linguagem que você não entende sua essência.

Não se coloque como um engenheiro de framework, vá fundo, saiba porque, e entenda os conceitos de uma determinada linguagem, é aí que você pode fazer coisas poderosas!

Nunca se esqueça, você sempre pode depender do JavaScript.