「これこれのシステムを設計してください」とか「これこれのデータ構造はなんですか?」と聞かれたら、リレーショナルデータベースのシステム設計でいいのでしょうか?テーブル、エンティティ、それらの間の関係、外部キーと主キーなどを完成させますか? これは、データベース システムを使用した経験が豊富で、データ構造を使用したプロジェクトの経験がない場合でも問題ありませんか? 私が知っているのは、リンク リスト、バイナリ ツリー、バイナリ サーチ ツリー、スタック、およびキューだけです。次のインターン面接に向けて緊張しています。何かアドバイス?
3 に答える
インターンの面接では、それはよくありません。
基本的なデータ構造に精通していることを期待していますが、それらの専門家である必要はありません。(とにかく、私が専門家と呼ぶものではありません。)私は、あなたが現在の知識を明らかに超えている質問にどのように答えるかにもっと興味があります. van Emde Boas ツリーの理論上の利点について尋ねた場合、おそらく「わかりません」という答えが正しいでしょう。(私をブラフしようとするよりはマシです。)
しかし実際問題として、明らかにリレーショナルではない多くの問題にリレーショナル デザインの原則を適用することで利益を得ることができます。ほとんどの Lotus Notes アプリケーションは、堅実なリレーショナル設計から恩恵を受けます。Notes で制約を宣言的に実装することはできませんが、例外レポートや期間文書のクロールなど、なんらかの方法で制約を考慮する必要があります。
そして、大規模 C++ 設計の最初の拡張例である IIRC は、C++ または OO 設計の問題と同じくらいリレーショナル設計の問題でした。(あれは 1996 年に出版されました。私はそんなに年をとっていますか? はい、そうです。)
リンク リスト、ツリー、およびスタックは、プログラム内のデータを操作するためのツールです。データベース テーブルとテーブルの設計と関係は、データを格納するためのツールです。「システム」はこれらの両方を使用しますが、目的は異なりますが、一緒に機能します。
「あれこれのシステムを設計する」 これはより高度な質問なので、まずデータベース テーブルについて話し、その後、どの程度の詳細を求めているかに応じて、プログラムの詳細に移ります。
「あれこれにはどのデータ構造を使用しますか?」これはアルゴリズム設計に関する質問のように聞こえますが、ツリーとスタックについて質問される可能性が高いのはここです。
それが役立つことを願っています:p
面接では、データ構造 (および多くの場合、アルゴリズムの複雑さ) に精通しているかどうかをテストするように設計された質問は、リレーショナル データベースに関するものではありません。システム設計に関する質問には、データベース設計の部分が含まれる場合があります。
あなたが言及したデータ構造はすべて重要です。最も明らかに不足しており、非常に重要なものは、ハッシュ テーブル(または順序付けられていないマップ、および Python の辞書や JavaScript のオブジェクト/マップなど、多くのスクリプト言語のデータ構造の基礎) です。また、 btreesについても読む必要があります。これは通常、リレーショナル データベースの実装に使用されます (二分探索木のようなプロパティがありますが、ディスク ストレージにより適しています)。