プロJavaScriptプログラマーのインタビューの質問(回答あり)[終了]


131

応募者が本当にプロのJavaScript(ブラウザ側)開発者であるかどうかを判断するための良い質問は何ですか?

特別なJavaScriptプログラマではないが、実際にオブジェクト指向で再利用可能で保守可能な、専門的なJavaScript開発を行っているかどうかを区別できる質問。

回答を提供してください。中級および臨時のJavaScriptプログラマーが、経験豊富な誰かにインタビューできるようにしてください。これらの高度な質問のかなりの数に対する回答を思い付くと、私にはわからなくなります。未解決の質問は避けてください

より良い読書体験と面接準備を容易にするために、SOの回答ごとに1つの面接質問/回答を保管してください。


21
中級のJS開発者に、より高度なはずの誰かにインタビューしないでください。それはただおかしいです。資格のある人に面接をしてもらいます。
ジェームズ

22
@JP-それであなたの上級開発者が辞めたら、あなたはただねじ込まれているだけですか?
tvanfosson

15
@JP自分よりも優れた人を雇おうとしています。それは小さなスタートアップなので、外部の助けを使わない限り、私には良い選択がありません...しかし、私は彼にインタビューする必要があります;)
Janusz Skonieczny

13
@JP:あなたがせいぜいあなたと同じくらい良い人を雇っているだけなら、ある日あなたは愚かな馬鹿に囲まれるでしょう。常にあなたよりも良い人を雇うようにしてください。
ガンボ

1
@Nick:問題は、この質問の範囲が広すぎて正解がないことです(件名に関するfaqのコメントを参照)。ブログ投稿には適していますが、このQ&A形式にはあまり適していません。昔はソフトウェアエンジニアリングに移行していたかもしれませんが、プログラマーの改造による身体的危害の脅威が数多く発生した後、方法を変える必要がありました。
マイケルマイヤーズ

回答:


118

JavaScriptは非常に小さな言語ですが、信じられないほど複雑なので、比較的基本的な質問をして、その答えに基づいて本当に優れているかどうかを確認できるはずです。たとえば、残りのインタビューを評価するための標準的な最初の質問は次のとおりです。

JavaScriptでは、どのような違いであるvar x = 1とはx = 1?必要に応じて、できるだけ詳細に回答してください。

初心者のJSプログラマーは、ローカルとグローバルについて基本的な答えがあるかもしれません。中級のJSの人は間違いなくその答えを持っているはずであり、おそらく関数レベルのスコープについて言及すべきです。自分自身を「高度な」JSプログラマと呼ぶ人は、ローカル、暗黙のグローバル、windowオブジェクト、関数スコープ、宣言ホイスト、スコープチェーンについて話す準備ができている必要があります。さらに、[[DontDelete]]優先順位の引き上げ(パラメーターvs varfunction)、およびについても知りたいですundefined

別の良い質問は、sum()任意の数の引数を受け入れ、それらの合計を返す関数を書くように依頼することです。次に、その関数を(変更せずに)使用して、配列内のすべての値を合計するように依頼します。彼らは次のような関数を書くべきです:

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

そして、彼らはこのようにあなたの配列でそれを呼び出すべきです(のコンテキストはapply何でもかまいませんnull、その場合私は通常使用します):

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

それらの答えがある場合、おそらくJavaScriptを知っています。次に、テスト、ワークフロー、バージョン管理などの非JS固有のものについて彼らに尋ねて、彼らが優れたプログラマーであるかどうかを調べる必要があります。


4
良い質問。小さなnitpick:「return i」の代わりに「return result」を意味すると私は信じています。プロのヒント:投稿する前にコードをテストするための素敵な小さなテスト環境をセットアップしてください;-)
MisterMister 2010

4
うわー、それは愚かな間違いです。投稿する前に、ほとんどのコードをjsFiddleでテストしましたが、これはテストしていません。ありがとう:)
bcherry

5
sum関数は、エラーをスローすることなく、非数値型に対して回復力がある必要があります。さらに、追加のクレジットのために文字列として数値を処理できる必要があります。
アバダバ2012

2
+1は、彼らが優れたプログラマーであるかどうかを知ることについての大きな言及と区別です。
Demonslay335 2013年

3
この行:for(i = 0、l = arguments.length; i <l; i ++)は不正です。arguments.lengthは反復ごとに評価されるためです。forループの前にl = arguments.lengthを割り当てると、より適切です。正しい?
thomallen 2014

94

基本的なJSプログラミング

  • Scope of variable
  • なにAssociative Array?どうやって使うの?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • なにdifference between private variable, public variable and static variable?JSでこれをどのように達成しますか?
  • add/remove properties to object実行時の方法は?
  • 達成するにはinheritance
  • どうやってextend built-in objects
  • なんでextending array is bad idea

DOMとJS

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

その他

  • Graceful Degradation V/s Progressive Enhancement

17
これはJSグルスを雇うためのものです。
Andreas

22
JS開発者が次のように言うことができるように準備してください。JavaScriptには連想配列がありません。ただし、JavaScriptには連想配列のように使用できるオブジェクトリテラルがあります。また、オブジェクトのプロパティには、ドット表記または角括弧と文字列を使用してアクセスできます。
クリストファーパーカー

8
これらは、自分を「JavaScript開発者」と呼ぶ人のベースラインです。答えの深さは、それらをグルとして評価するかどうかです。
Ryan Ore 2013

8
あなたは「プロトタイプの継承」を意味します。よくある間違い。
ウィザード

4
@wizzardあなたは「典型的な間違い」を意味していました:p
Nick


17

(私はあなたがブラウザサイドのJavaScriptを意味すると仮定しています)

JavaScriptに関する彼の無限の知識にもかかわらず、jQuery、Mootools、Prototypeなどの既存のフレームワークを使用することは依然として良い考えである理由を彼に尋ねてください。

回答:優れたコーダーコード、優れたコーダーの再利用。ブラウザ固有の実装からDOM機能を抽象化するために、これらのライブラリには何千時間もの時間が費やされています。修正を再発明するためだけに、さまざまなブラウザDOMのすべてに頭を悩ます必要はありません。


5
@ティム・ダウン:もちろん、評判の良いパッケージを見つけたら、そのパッケージのほぼすべての部分が有能な人々によってレビューされています。また、オープンソースパッケージのユーザーとして、間違いを見つけたときに修正を送信して、専門知識を追加することもできます。
PanCrit

確かに、ホイールを知っています。ただし、常に同じタイヤを異なる地形に使用する必要はありません。例えば。必要なのがAjaxトランスポートなど(プロジェクトに)だけであるのにjQueryライブラリ
Ali

1
この質問への答えは質問そのものです。コードの編集に、なぜ単純なメモ帳ではなくIDEを使用するのですか?:)
Navin Israni 2014年

11

ユーザーがJavaScriptをオフにしている場合、またはJavaScriptが使用できない場合に、ページが引き続き使用可能であることを確認する方法を尋ねます。

正解は1つではありませんが、プログレッシブエンハンスメントのいくつかの戦略について話している答えを探しています。

プログレッシブエンハンスメントは、次のコア原則で構成されています。

  • 基本的なコンテンツはすべてのブラウザからアクセスできる必要があります
  • すべてのブラウザが基本機能にアクセスできる必要があります
  • 疎でセマンティックなマークアップにはすべてのコンテンツが含まれます
  • 外部リンクされたCSSによって拡張レイアウトが提供されます
  • 拡張された動作は、外部リンクJavaScript [[Unobtrusive JavaScript | unobtrusive]]によって提供されます
  • エンドユーザーのブラウザー設定が尊重されます

1
建築家レベルのJSガイを雇うための最良の質問:)
Navin Israni 2014年

まず、JSがオフになっている人は、ダークウェブではなく、実際のウェブに投資する価値があると私に納得させてください。これらのユーザーはおそらく、ブラウザーの使用について過度に偏執的であるか無知であり、JSを誤ってオフに切り替えました。どちらにしても、変換の可能性はわずかです。
vsync 2018


6

「どの単体テストフレームワークを使用していますか?なぜですか?」

実際にテストフレームワークを使用する必要があるかどうかを判断できますが、会話から、その人の専門家について多くのことがわかります。


1
参考までに、QUnitはすばらしいです:docs.jquery.com/QUnit
Goyuix

0

中間のプログラマーは、ツールの技術的な熟練が必要です。

上記の技術的な電話スクリーン風の質問に合格した場合は、その場で愚かな何か、たとえばajax urlの短いものなどをスケッチしてもらいます。次に、彼のポートフォリオで彼を焼きます。驚くべきポートフォリオはありません=このドメインの中間開発者であり、あなたがあなたの光沢のある新しいプロジェクトを担当したい人ではありません。


4
ポートフォリオはせいぜい貧弱な測定基準です-今日の世界では、JSはエンタープライズの世界で完全に受け入れられているツールです。
Ilya Ayzenshtok 16

1
@IlyaAyzenshtokこれは私のジレンマの一部です。私の作品の99%がプロプライエタリ/ペイウォールの背後/内部にある場合、ポートフォリオを誇示するのは難しい...
Spartacus

1
@Spartacus-スクリーンショットを取り、面接担当者にルールを説明し、途中でハードルを説明できます。オープンソースプロジェクトに関しては、面接前に人を評価して、プロジェクトで見られる人のコーディングレベルに関連して質問を調整するための優れた方法です。
vsync
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.