駄目な面接の質問

David A. Pickett / 青木靖 訳
2006年5月17日 水曜

ある人がブログで自分の受けたプログラマの面接の話をしていて、ファイルコピー関数を書くように言われたことに不満を述べていた。腹を立てるのもわかるが、私がその人の立場にいたら、それを素晴らしい娯楽の機会と捉えたと思う。

 

Q. 「コピー」というのはどういう意味ですか?

A. それは…ファイルの中身を新しいファイルにコピーするということです。

Q. タイムスタンプはどうすればいいでしょう?

A. それはコピーしなくともいいです。

Q. 新しいファイルは名前も同じにする必要がありますか?

A. いいえ。

Q. 同じ名前でもかまいませんか?

A. えーと…だめです。

Q. スプーフィングを気にかける必要はありますか? それにトルコ語のIは?

A. それは考えなくていいです。

Q. 同じ場所に作る必要がありますか? 同じ場所なら(たぶん)同じ名前にはできないでしょう。自分自身にコピーするというのでもないかぎり(それはそれで別な疑問が出てきますが…)。

A. 同じ場所です。

Q. 属性はどうしますか?

A. 属性も同じにしてください。

Q. 元のファイルの属性を変更すべきですか? そのファイルコピーがバックアップやアーカイブ操作で使われるなら、「アーカイブ」属性をオンのままにしておくのは間違いだと思いますが。

A. いえ、そのままにしてください。

Q. 元のファイルのアーカイブ属性がオフならどうしますか? 新しいファイルもオフにするんですか? それだとユーザのバックアップソフトの動作が変になりそうですが。

A. 単に同じにしてください。ユーザのバックアップソフトはどうでもいいです。

Q. ユーザのためのソフトウェアのデザインを考えるアプローチとしてそれがいいかどうか疑問ではありますが、そう言われるのであれば。

A. ……

Q. 圧縮はどうしますか? これもファイルの属性ですが、コピー先の場所で圧縮がサポートされていない可能性もあります。

A. 圧縮はしないでください。

Q. 元のファイルが圧縮されていて、コピー先で圧縮がサポートされていてもですか?

A. そうです。

Q. 暗号化はどうでしょう? 元のファイルが暗号化されていて、コピー先の場所で暗号化がサポートされていない場合は?

A. コピー先で暗号化がサポートされてないなら暗号化しないでください。

Q. うーん。話がそれるようで申し訳ないんですが……それは深刻なセキュリティホールになり得ますよね? 特にそのファイルコピー関数が(直接間接に)任意のパラメタをサポートすることになるとしたら。

A. いいから単にファイルをコピーしてください。

Q. 作成者はどうしますか?

A. どうでもいいです。

Q. ファイルの所有者はどうしますか?

A. どうでもいいです。

Q. ファイルのパーミッションは? 継承したパーミッションと割り当てられたパーミッションを別に扱うべきでしょうか?

A. パーミッションは考えなくていいです。

Q. どのオペレーティングシステムで動く必要がありますか?

A. Windows XPです。

Q. Home、Pro、Media Centerとありますけど?

A. Proです。

Q. 対象とするサービスパックは何ですか?

A. Service Pack 2です。

Q. それ以前のサービスパックはサポートしなくともよいということですか?

A. ええ、そうです。

Q. コピー元のファイル名はどのように渡されるんですか?

A. 引数で渡します。

Q. それはNULL終端文字列か、長さ付文字列か、それともオブジェクトですか?

A. NULL終端文字列です。

Q. NULLポインタが渡される可能性はありますか?

A. ないです。

Q. 空文字列が渡される可能性は?

A. ありません。

Q. 不正な形式の文字列が渡される可能性はありますか(NULL終端してないというような)?

A. いいえ。

Q. ファイル名のエンコーディングは何ですか?

A. Unicodeです。

Q. すいませんが、その……Unicodeというエンコーディングはありません。Unicodeのデータを使うには、UTF-8、UCS-2、UTF-16といった特定のエンコーディングを指定する必要があります。

A. ならUTF-8にしてください。

Q. わかりました。Windows のAPIに渡すためにUTF-8からUTF-16に変換しなければならないのがちょっとばかり面倒になりますけど。

A. だったらUTF-16にして!

Q. ビッグエンデイアンですか、リトルエンデイアンですか?

A. ああ、お好きな方に!

Q. 相対パスも受け入れるべきですか、それともフルパスだけにしますか?

A. フルパスだけにしてください。

Q. パラメタをチェックするのに、どういうパスを受け入れるか条件はありますか?

A. いいえ。呼び出し元でパスとファイル名のチェックはすべてやります。

Q. コピー先のファイル名は生成するんですか、それとも渡されるんですか?

  .........

Q. 非同期コピーをサポートする(あるいは認める)必要がありますか?

A. いいえ。

Q. エラーはどのように出せばいいですか? 例外ですか? エラーコード?

A. 何でもいいです。

Q. 例外は関数内で処理を試みるべきでしょうか? あるいは呼び元に投げればいいですか?

A. ええと……そのまま投げればいいです。

Q. コピー先にすでにファイルがある場合はどうしますか?

A. そういうことはありません。

Q. 呼び元で保証するということですか?

A. ええ、そうです。

Q. では、もし仮に存在したら、プログラムを単に終了させてかまいませんか? これは明らかに前提条件に反しますし、何が起こったのかわからなくなりますが。

A. 好きなようにしてもらってかまいません。

Q. 代替データストリームはどうですか?

A. お好きなように!

Q. あの、もし付け込まれているように感じているのでしたら、どうか気を悪くなさらないでください。ただ必要な仕様を明確にしたいだけなんです。山ほどあるライブラリやフレームワークの中のコピー処理を使うのでなく、ファイルコピー関数を自分で書くとなると、特定の要求のセットを満たすことになり、お聞きしたような質問に対してしかるべき回答をいただく必要があります。お望みなら適当なものをさっと作ることもできますが、要求や目的という点であまりに多くの未解決の問題があると申し上げざるを得ませんでしたので……

A. うがぁーーーーーーーーーーーーっ

作戦完了。

-- David --

...

 

home  rss  

オリジナル: Stupid Interview Questions