私は最近、インタビューでファイルをコピーするべき関数を書くように頼まれたと不満を言う男のブログ投稿を読みました。 いいえ、私はあなたがそのような仕事にどのように登ることができるか理解していますが、もし私がそのような状況にあったなら...私は完全に外れたでしょう:
候補者 :「コピー」と言うとき、正確にはどういう意味ですか?
インタビュアー :まあ...元のファイルの内容のコピーである新しいファイルを作成します。
Q :元のファイルの作成および変更の時間に関するメタデータもコピーする必要がありますか?
そして :いいえ、必要ありません。
Q :コピーファイルは元のファイルと同じ名前にする必要がありますか?
そして :いいえ。
Q :コピーファイルに元のファイルと同じ名前を付けることはできますか?
そして :うーん...いや。
K :同様のスタイルの文字( トルコ語Iなど )を置き換えることにより、攻撃に対する保護を提供する必要がありますか?
そして :それについて心配しないでください。
Q :コピーファイルはソースファイルと同じディレクトリにあるべきですか? もしそうなら、彼はおそらく同じ名前を持つことはできません。 ファイルを自分自身にコピーすることを話していない限り(これも興味深い質問です...)
そして :はい。
Q :ファイル属性はどうですか?
そして :それらもコピーします。
Q :ソースファイルの属性を変更する必要がありますか? 書き込みを要求されたコピー機能がバックアップまたはアーカイブ操作の一部である場合、ソースファイルのアーカイブ属性をリセットする必要があります。
そして :いいえ、そのままにしておきます。
K :あなたは、ソースファイルの属性をコピーファイルに愚かにコピーするべきだと言っていました。 しかし、ソースファイルのアーカイブ属性がリセットされ、それを宛先ファイルに「愚かにコピー」すると、このコンピューターで使用できるバックアッププログラムを誤解させる可能性があります。
そして :属性をコピーするだけです。 ユーザーがバックアップをどのように整理するかは気にしません。
K :まあ、これは人々がまだ使用するソフトウェアを開発する際に最も合理的なアプローチではないようですが、あなたはそう主張しているので...
そして :...
K :圧縮された属性はどうですか? 結局のところ、宛先ディレクトリが配置されているファイルシステムが圧縮をサポートしていないことが判明する場合があります。
そして :圧縮されていないコピーを作成します。
Q :ソースファイルが圧縮され、宛先ディレクトリで圧縮がサポートされている場合でも?
そして :はい。
K :「暗号化された」属性はどうですか? ソースファイルが暗号化されていて、宛先ディレクトリで暗号化がサポートされていない場合はどうなりますか?
そして :この場合、コピーを暗号化しないでください。
K :このトピックから逸脱したくありませんが、そのような行動は深刻なセキュリティホールを作成するようです。 特に、ファイルをコピーするファイルシステムが任意の属性を(直接または間接的に)サポートする場合。
そして :聞いて、いまいましいファイルをコピーしてください!
Q :ファイル作成者情報はどうですか?
そして :私は気にしません!
Q :ファイル所有者情報はどうですか?
そして :私は気にしません!
K :アクセス権はどうですか? 継承された権利と割り当てられた権利を別々に処理する必要がありますか?
そして :法律で地獄に!
Q :どのOSを機能させる必要がありますか?
そして :Windows XP。
K :Home、Pro、Media Center、またはそれらの組み合わせ?
そして :プロ。
Q :どのサービスパックを頼りにできますか?
および :Service Pack 2。
Q :つまり、以前のレベルの更新をサポートしていない場合がありますか?
そして、そうです。
Q :ソースファイルの名前はどのように転送されますか?
そして :パラメータとして。
Q :ゼロバイトで終了する文字列、長さのある文字列、またはオブジェクトとして送信されますか?
And :nullバイトで終了する文字列。
K :空白のポインターを渡すことを検討すべきですか?
そして :いいえ。
Q :空白行を渡すことを検討すべきですか?
そして :いいえ。
Q :誤って形成された文字列(たとえば、終端のヌルバイトなし)を渡す状況を考慮する必要がありますか?
そして :いいえ。
Q:名前はどのエンコーディングに渡されますか?
そして :ユニコード。
K :申し訳ありませんが、Unicodeは実際にはエンコーディングではありません。 Unicodeデータは、特定のエンコーディング(UTF-8、UCS-2、UTF-16など)である必要があります。
そして :OK、UTF-8にしましょう。
K :ええ、しかし、Windows API呼び出しに転送するには、UTF-16にトランスコードする必要があり、これはややsomewhatです...
I :それからUTF-16!
K : バイトの順序は ?
そして :Rrrrr ...あなたが欲しいもので!
Q :相対パスの処理を検討していますか、それとも絶対パスのみを検討していますか?
そして :絶対的です。
K :私に送信されたパスをフィルターする必要のある特性はありますか?
そして :いいえ。 呼び出し元が既にこれを行っていることを考慮してください。
Q :宛先ファイルの名前はどのように生成(または送信)されますか?
[...分が時間に流れ込んだ...]
Q :非同期コピーをサポート(または許可)する必要がありますか?
そして :いいえ。
Q :緊急または例外コードをどのように報告すればよいですか?
そして :それは違いはありません。
Q :呼び出す関数からの例外を処理する必要がありますか、それとも呼び出し元のコードに例外を渡すだけですか?
そして :スキップ。
Q :宛先ファイルが既に存在する場合はどうなりますか?
そして :私はお母さんにそのことを誓います。
Q :つまり、呼び出し元プログラムはこれを保証しますか?
そして :それだけです。
K :つまり、それが既に存在することが判明した場合、それは保証に違反していることを意味します。
そして :あなたが望むように。
K :ファイルのセカンダリデータストリームについてはどうですか?
そして :はい、あなたがしたいことをしてください。
K :聞いてください、私はあなたにプレッシャーをかけているように思えるかもしれません、そして非常に残念です-しかし、私はあなたの仕事のすべての詳細を理解することは非常に重要です。 もちろん、さまざまなライブラリに既に実装されている多くのライブラリやフレームワークのいずれかを使用する代わりに、ファイルをコピーするための新しい関数を作成してほしいので、ライブラリ関数が満たさない非常に具体的な要件がいくつかあります、そしてこれらの要件をあなたから引き出すつもりです。 もちろん、適切なものをすぐにスケッチすることはできますが、まだ完全には明らかにされていない詳細がたくさんあることに注意する必要があります...
そして : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA !!!
仕事は終わりました 。