Preguntas de la entrevista del programador profesional de JavaScript (con respuestas) [cerrado]

131

¿Cuáles son buenas preguntas para determinar si el solicitante es realmente un desarrollador profesional de JavaScript (lado del navegador)?

Preguntas que pueden distinguir si alguien no es un programador de JavaScript ad-hoc, pero realmente está haciendo un desarrollo profesional de JavaScript, orientado a objetos, reutilizable y mantenible.

Proporcione respuestas , de modo que un programador de JavaScript intermedio y ad-hoc pueda entrevistar a alguien más experimentado, y se le ocurrirán respuestas a muy pocas de esas preguntas avanzadas. Por favor, evite las preguntas abiertas .

Por favor, mantenga una pregunta de la entrevista / respuesta por respuesta SO para una mejor experiencia de lectura y preparación de la entrevista más fácil.

WooYek
fuente
21
¡Nunca haga que un desarrollador intermedio de JS entreviste a alguien que se supone que es más avanzado! Eso es una locura. Que alguien calificado haga la entrevista.
James
22
@JP: entonces, si tu desarrollador senior renuncia, ¿estás jodido?
tvanfosson
15
@JP Estoy tratando de emplear a alguien mejor que yo. Es una startup pequeña, así que no tengo una mejor opción, a menos que use ayuda externa ... pero luego tendría que entrevistarlo;)
Janusz Skonieczny
13
@JP: Si solo contratas personas que son tan buenas como tú, un día estarás rodeado de estúpidos idiotas. Siempre trate de contratar a alguien que sea mejor que usted.
Gumbo
1
@ Nick: El problema es que esta pregunta es demasiado amplia en su alcance y no tiene una respuesta correcta (ver el FAQ comentarios 's sobre el tema). Es adecuado para una publicación de blog, pero no es tan adecuado para este formato de preguntas y respuestas. En los viejos tiempos podríamos haber migrado a Ingeniería de Software , pero después de numerosas amenazas de daños corporales por las modificaciones de los Programadores, hemos tenido que cambiar nuestras formas.
Michael Myers

Respuestas:

118

Debido a que JavaScript es un lenguaje tan pequeño, pero con una complejidad increíble, debería poder hacer preguntas relativamente básicas y descubrir si realmente son tan buenas en función de sus respuestas. Por ejemplo, mi primera pregunta estándar para evaluar el resto de la entrevista es:

En JavaScript, ¿cuál es la diferencia entre var x = 1y x = 1? Responda con tanto o tan poco detalle como se sienta cómodo.

Los programadores novatos de JS pueden tener una respuesta básica sobre locales vs globales. Los chicos de JS intermedios definitivamente deberían tener esa respuesta, y probablemente deberían mencionar el alcance del nivel de función. Cualquiera que se llame a sí mismo un programador JS "avanzado" debe estar preparado para hablar sobre locales, globales implícitos, el windowobjeto, el alcance de la función, el levantamiento de declaraciones y las cadenas de alcance. Además, me encantaría saber sobre la [[DontDelete]]elevación de la precedencia (parámetros vs varvs function) y undefined.

Otra buena pregunta es pedirles que escriban una sum()función que acepte cualquier número de argumentos y devuelva su suma. Luego, pídales que usen esa función (sin modificación) para sumar todos los valores en una matriz. Deberían escribir una función que se vea así:

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

Y deberían invocarlo en su matriz de esta manera (el contexto applypuede ser lo que sea, generalmente uso nullen ese caso):

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

Si tienen esas respuestas, probablemente conozcan su JavaScript. Luego, debe preguntarles acerca de cosas no específicas de JS, como pruebas, flujos de trabajo, control de versiones, etc., para averiguar si son un buen programador .

revs bcherry
fuente
44
Buena pregunta. Pequeño detalle: creo que te refieres a "devolver resultado" en lugar de "devolver i".
Consejo
44
wow, eso es un error tonto. Pruebo la mayor parte de mi código en jsFiddle antes de publicar, pero no probé este. Gracias :)
bcherry
55
La función de suma debe ser resistente a los tipos que no son números sin arrojar errores. Además, debería poder manejar números como cadenas de crédito adicional.
Abadaba
2
+1 para una gran mención y distribución sobre descubrir si son un buen programador.
Demonslay335
3
Esta línea: for (i = 0, l = argumentos.length; i <l; i ++) es mala porque argumentos.length se evaluará en cada iteración. Si asigna l = argumentos.length antes del ciclo for, es mejor. ¿Correcto?
thomallen
94

Programación básica de JS

  • Scope of variable
  • ¿Qué es Associative Array? ¿Cómo lo usamos?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • ¿Qué es difference between private variable, public variable and static variable? ¿Cómo logramos esto en JS?
  • ¿Cómo add/remove properties to objecten tiempo de ejecución?
  • ¿Cómo lograrlo inheritance?
  • Cómo extend built-in objects?
  • ¿Por qué extending array is bad idea?

DOM y JS

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

Misceláneos

  • Graceful Degradation V/s Progressive Enhancement
pramodc84
fuente
17
esto es para contratar a JS Gurus.
Andreas
22
Prepárese para que un desarrollador de JS diga algo como esto: JavaScript no tiene matrices asociativas. Sin embargo, JavaScript tiene literales de objeto, que pueden usarse como matrices asociativas. Además, se puede acceder a las propiedades de los objetos mediante notación de puntos o corchetes y cadenas.
Christopher Parker
8
Estos son puntos de referencia para alguien que se llamaría a sí mismo 'Desarrollador JavaScript'. Creo que la profundidad de la respuesta es cómo los calificaría como Guru o no.
Ryan Ore
8
Te refieres a "herencia prototípica". Error común.
wizzard el
44
@wizzard quisiste decir 'error típico': p
Nick
17

(Supongo que te refieres a JavaScript del lado del navegador)

Pregúntele por qué, a pesar de su conocimiento infinito de JavaScript, sigue siendo una buena idea usar marcos existentes como jQuery, Mootools, Prototype, etc.

Respuesta: Código de codificadores buenos, reutilización de codificadores geniales. Se han invertido miles de horas hombre en estas bibliotecas para abstraer las capacidades DOM lejos de las implementaciones específicas del navegador. No hay razón para pasar por todos los diferentes dolores de cabeza DOM del navegador solo para reinventar las soluciones.

Matt
fuente
55
@Tim Down: ciertamente, pero si encuentra un paquete confiable, casi todas las partes del paquete habrán sido revisadas por personas capaces. Y como usuario de un paquete de código abierto, puede enviar correcciones cuando encuentre errores, agregando también su experiencia.
PanCrit
Es cierto, conozca la rueda, pero no siempre use los mismos neumáticos para diferentes terrenos. P.ej. ¿Por qué utilizar toda la lib jQuery cuando todo lo que necesita es el Ajax de transporte, etc (para su proyecto) - microjs.com
Ali
1
La respuesta a esta pregunta es una pregunta en sí misma: ¿por qué utilizamos un IDE y no un simple bloc de notas para editar nuestro código? :)
Navin Israni
11

Pregúnteles cómo se aseguran de que sus páginas sigan siendo utilizables cuando el usuario tiene JavaScript desactivado o JavaScript no está disponible.

No hay una respuesta verdadera, pero está buscando una respuesta que habla sobre algunas estrategias para la mejora progresiva .

La mejora progresiva consta de los siguientes principios básicos:

  • el contenido básico debe ser accesible para todos los navegadores
  • la funcionalidad básica debe ser accesible para todos los navegadores
  • el marcado semántico escaso contiene todo el contenido
  • El diseño mejorado es proporcionado por CSS vinculado externamente
  • El comportamiento mejorado es proporcionado por [[JavaScript discreto | discreto]], JavaScript vinculado externamente
  • se respetan las preferencias del navegador del usuario final
WooYek
fuente
1
LA mejor pregunta para contratar a un tipo JS de nivel de arquitecto :)
Navin Israni
En primer lugar, convencerme de que vale la pena invertir en la web real y no en la dark web. Es probable que esos usuarios estén demasiado paranoicos o no tengan idea de cómo usar un navegador y desconectaron JS por error, de cualquier manera, sus posibilidades de conversión son escasas o nulas.
vsync
6

Pregunte "¿Qué marco de prueba de unidad utiliza? ¿Y por qué?"

Puede decidir si realmente es necesario usar un marco de prueba, pero la conversación puede decirle mucho sobre cuán experta es la persona.

revs tvanfosson
fuente
1
Como referencia, QUnit es increíble: docs.jquery.com/QUnit
Goyuix
0

Los programadores intermedios deben tener dominio técnico de sus herramientas.

Si ha superado las preguntas técnicas de la pantalla del teléfono técnico anteriores, haz que dibuje algo estúpido en el acto, como un acortador de URL de Ajax. luego asarlo a la parrilla en su cartera. ninguna cartera asombrosa = desarrollador intermedio en este dominio y no el tipo que desea a cargo de su nuevo y brillante proyecto.

Dustin Getz
fuente
44
Las carteras son una métrica pobre en el mejor de los casos: en el mundo de hoy, JS es una herramienta perfectamente aceptada en el mundo empresarial, donde los proyectos probablemente superan cualquier cartera que pueda ver, y donde los repositorios públicos no son una cosa.
Ilya Ayzenshtok
1
@IlyaAyzenshtok ESTO es parte de mi dilema. Es difícil para mí mostrar una cartera cuando el 99% de mi trabajo es propietario / detrás de un muro de pago / interno ...
Spartacus
1
@Spartacus: puede tomar capturas de pantalla y explicarle al entrevistador su regla y obstáculos en el camino. con respecto a los proyectos de código abierto, son una excelente manera de evaluar a una persona antes de una entrevista para ajustar las preguntas en relación con el nivel de codificación de la persona visto en los proyectos.
vsync