Perguntas da entrevista do programador Pro JavaScript (com respostas) [fechado]

131

Quais são as boas perguntas para determinar se o candidato é realmente um desenvolvedor profissional de JavaScript (lado do navegador)?

Perguntas que podem distinguir se alguém não é um programador ad-hoc JavaScript, mas está realmente desenvolvendo JavaScript profissional, orientado a objetos, reutilizável e sustentável.

Forneça respostas , para que programadores intermediários e ad-hoc de JavaScript possam entrevistar alguém mais experiente, apresentando respostas para poucas dessas perguntas avançadas. Por favor, evite perguntas abertas .

Mantenha uma pergunta / resposta da entrevista por resposta do SO para obter uma melhor experiência de leitura e uma preparação mais fácil da entrevista.

WooYek
fonte
21
Nunca faça um desenvolvedor intermediário de JS entrevistar alguém que deveria ser mais avançado! Isso é loucura. Peça a alguém qualificado para fazer a entrevista.
James
22
@JP - então, se o seu desenvolvedor sênior sair, você está ferrada?
tvanfosson
15
@JP Estou tentando empregar alguém melhor que eu. É uma pequena startup, por isso não tenho escolha melhor, a menos que eu use ajuda externa ... mas então eu teria que entrevistá-lo;)
Janusz Skonieczny 22/03/10
13
@JP: Se você está apenas contratando pessoas que são tão boas quanto você, um dia estará cercado por idiotas estúpidos. Sempre tente contratar alguém que seja melhor que você.
Gumbo
1
@ Nick: O problema é que esta questão é muito ampla em seu escopo e não tem resposta correta (veja os comentários das perguntas frequentes sobre o assunto). É adequado para uma postagem de blog, mas não é adequado para este formato de perguntas e respostas. Antigamente, poderíamos ter migrado para a Engenharia de Software , mas após inúmeras ameaças de danos corporais dos modificadores de Programadores, tivemos que mudar nossos caminhos.
Michael Myers

Respostas:

118

Como o JavaScript é uma linguagem tão pequena, mas com uma complexidade incrível, você deve poder fazer perguntas relativamente básicas e descobrir se elas são realmente boas com base em suas respostas. Por exemplo, minha primeira pergunta padrão para avaliar o restante da entrevista é:

Em JavaScript, qual é a diferença entre var x = 1e x = 1? Responda com os detalhes que você se sentir confortável.

Programadores iniciantes em JS podem ter uma resposta básica sobre habitantes locais e globais. Os caras intermediários da JS definitivamente devem ter essa resposta e provavelmente devem mencionar o escopo no nível da função. Qualquer pessoa que se autodenomine um programador JS "avançado" deve estar preparado para falar sobre locais, globais implícitos, windowobjeto, escopo de função, levantamento de declaração e cadeias de escopo. Além disso, eu adoraria ouvir sobre [[DontDelete]], içar precedência (parâmetros vs varvs function) e undefined.

Outra boa pergunta é pedir que eles escrevam uma sum()função que aceite qualquer número de argumentos e retorne sua soma. Em seguida, peça que eles usem essa função (sem modificação) para somar todos os valores em uma matriz. Eles devem escrever uma função que se parece com isso:

function sum() {
  var i, l, result = 0;
  for (i = 0, l = arguments.length; i < l; i++) {
    result += arguments[i];
  }
  return result;
}
sum(1,2,3); // 6

E eles devem invocá-lo em sua matriz como este (o contexto applypode ser o que for, eu costumo usar nullnesse caso):

var data = [1,2,3];
sum.apply(null, data); // 6

Se eles têm essas respostas, provavelmente sabem o JavaScript. Você deve então perguntar a eles sobre coisas não específicas de JS, como testes, fluxos de trabalho, controle de versão etc. para descobrir se eles são um bom programador .

bcherry
fonte
4
Boa pergunta. Nitpick pequeno: eu acredito que você quer dizer "resultado do retorno" em vez de "retorno i". Dica profissional: configure um ambiente de teste pequeno e agradável para testar o código antes de postar ;-)
MisterMister
4
uau, isso é um erro bobo. Testo a maior parte do meu código no jsFiddle antes de postar, mas não testei este. Obrigado :)
bcherry
5
A função soma deve ser resiliente a tipos não numéricos sem gerar erros. Além disso, ele deve poder manipular números como cadeias de caracteres para obter crédito extra.
Abadaba 19/12/12
2
+1 por uma grande menção e distinção sobre descobrir se eles são um bom programador.
Demonslay335
3
Esta linha: for (i = 0, l = argumentos.length; i <l; i ++) é ruim porque os argumentos.length serão avaliados a cada iteração. Se você atribuir l = argument.length antes do loop for, é melhor. Certo?
Thomllen
94

Programação JS básica

  • Scope of variable
  • O que é Associative Array? Como usamos?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • O que é difference between private variable, public variable and static variable? Como conseguimos isso em JS?
  • Como add/remove properties to objectem tempo de execução?
  • Como conseguir inheritance?
  • Como extend built-in objects?
  • Por que extending array is bad idea?

DOM e JS

  • Difference between browser detection and feature detection
  • DOM Event Propagation
  • Event Delegation
  • Event bubbling V/s Event Capturing

Diversos

  • Graceful Degradation V/s Progressive Enhancement
pramodc84
fonte
17
isto é para contratar JS Gurus.
Andreas
22
Esteja preparado para um desenvolvedor JS dizer algo como isto: JavaScript não possui matrizes associativas. No entanto, o JavaScript possui literais de objeto, que podem ser usados ​​como matrizes associativas. Além disso, as propriedades dos objetos podem ser acessadas usando notação de ponto ou colchetes e seqüências de caracteres.
Christopher Parker
8
Estes são a base para alguém que se autodenomina um 'Desenvolvedor JavaScript'. Acho que a profundidade da resposta é como você os avalia como guru ou não.
Ryan Ore
8
Você quer dizer "Herança Prototípica". Erro comum.
Wizzard
4
@wizzard você quis dizer 'erro típico': p
Nick
17

(Suponho que você queira dizer JavaScript no navegador)

Pergunte a ele por que, apesar de seu conhecimento infinito de JavaScript, ainda é uma boa idéia usar estruturas existentes, como jQuery, Mootools, Prototype etc.

Resposta: Bons codificadores, ótimos codificadores reutilizam. Milhares de horas de trabalho foram despejadas nessas bibliotecas para abstrair os recursos do DOM, longe das implementações específicas do navegador. Não há razão para passar por todos os diferentes DOM do navegador apenas para reinventar as correções.

Matt
fonte
5
@ Tim Down: certamente, mas se você encontrar um pacote respeitável, quase todas as partes do pacote serão revisadas por pessoas capazes. E como usuário de um pacote de código aberto, você pode enviar correções quando encontrar erros, adicionando também seus conhecimentos.
PanCrit 30/03/10
É verdade que conhece o volante - mas nem sempre use os mesmos pneus para terrenos diferentes. Por exemplo. Por que usar toda a lib jQuery quando tudo que você precisa é de Ajax transporte etc (para o seu projeto) - microjs.com
Ali
1
A resposta a esta pergunta é uma pergunta em si - por que usamos um IDE e não um bloco de notas simples para editar nosso código? :)
Navin Israni
11

Pergunte a eles como eles garantem que suas páginas continuem sendo utilizáveis ​​quando o usuário tiver o JavaScript desativado ou o JavaScript não estiver disponível.

Não existe uma resposta verdadeira, mas você está buscando uma resposta falando sobre algumas estratégias para o aprimoramento progressivo .

O aprimoramento progressivo consiste nos seguintes princípios fundamentais:

  • o conteúdo básico deve estar acessível a todos os navegadores
  • funcionalidade básica deve estar acessível a todos os navegadores
  • marcação semântica esparsa contém todo o conteúdo
  • layout aprimorado é fornecido por CSS vinculado externamente
  • comportamento aprimorado é fornecido por [[JavaScript Discreto | discreto]], JavaScript vinculado externamente
  • as preferências do navegador do usuário final são respeitadas
WooYek
fonte
1
A melhor pergunta para contratar um nível arquiteto JS cara :)
Navin Israni
Antes de tudo, convença-me de que uma pessoa com o JS desativado vale a pena investir na web real e não na dark web. esses usuários provavelmente são excessivamente paranóicos ou ignorantes sobre o uso de um navegador e desativaram o JS por engano, de qualquer forma, suas chances de conversão são reduzidas a zero.
vsync
6

Pergunte como fechamentos acidentais podem causar vazamento de memória no IE.

Robusto
fonte
6

Pergunte "Qual estrutura de teste de unidade você usa? E por quê?"

Você pode decidir se realmente é necessário usar uma estrutura de teste, mas a conversa pode dizer muito sobre o quão especialista é a pessoa.

tvanfosson
fonte
1
Como referência, QUnit é incrível: docs.jquery.com/QUnit
Goyuix
0

programadores intermediários devem ter domínio técnico de suas ferramentas.

se ele passou nas perguntas técnicas de tela do telefone acima, faça-o esboçar algo estúpido no local, como um abreviador de URL do Ajax. depois grelhe-o em seu portfólio. nenhum portfólio incrível = desenvolvedor intermediário neste domínio e não o cara que você quer encarregar do seu brilhante e novo projeto.

Dustin Getz
fonte
4
Portfólios é uma métrica ruim na melhor das hipóteses - no mundo de hoje, o JS é uma ferramenta perfeitamente aceita no mundo corporativo, onde os projetos provavelmente superam qualquer portfólio que você possa ver e onde os repositórios públicos não são uma coisa.
Ilya Ayzenshtok
1
@IlyaAyzenshtok ISTO faz parte do meu dilema. Difícil para mim para mostrar um portfólio quando 99% do meu trabalho é proprietária / atrás de uma parede de pagamento / interna ...
Spartacus
1
@Spartacus - você pode tirar screenshots e explicar ao entrevistador sua regra e obstáculos ao longo do caminho. em relação aos projetos de código aberto, eles são uma ótima maneira de avaliar uma pessoa antes de uma entrevista para ajustar as perguntas relativas ao nível de codificação da pessoa visto nos projetos.
vsync