最近のインタビューでこんな質問をされました。
入力ファイル、正規表現、および出力ファイルが与えられます。入力ファイルを読み取り、各行を正規表現に一致させ、一致する行を出力ファイルに書き込みます。
FileReader にチェーンされた BufferedReader を使用する大まかなスキームを思いつきました (ディスクからの読み取りを最適化するため)。書き込みにも同様のスキームを使用しました。
インタビュアーは、このプロセスがファイルから行を読み取るのに 3 秒、正規表現を行と比較するのに 1 秒、書き戻すのにさらに 5 秒かかると述べました。したがって、1 行あたり合計 9 秒かかります。どうすればこれを改善できますか?
ファイル全体を一度に読み取り、処理し、出力ファイル全体を一度に書き込むことを提案しました。しかし、それは役に立たないと言われました(1行書く= 5秒、2行書く= 10秒)。
インタビュアーはさらに、これはハードウェア/ハード ドライブの制限によるものだと述べています。コードを改善して、1 行あたりの合計秒数 (現在は 9 秒) を短縮する方法を尋ねられました。
バッファリングされた読み取り/書き込みしか考えられず、SO についてもあまり見つけることができませんでした。何かご意見は ?