ホームページ  >  記事  >  バックエンド開発  >  C/C+ の面接での 19 の質問のうち、何問正しく答えることができますか? - 個人記事 シフ

C/C+ の面接での 19 の質問のうち、何問正しく答えることができますか? - 個人記事 シフ

php是最好的语言
php是最好的语言オリジナル
2018-07-26 18:07:031715ブラウズ

C と C の違いは何ですか?回答: c は c に基づいてクラスを追加します。C はアルゴリズムとデータ構造に焦点を当てた構造化言語です。ソフトウェア エンジニアの面接ルーチンはすべて同じなので、今回質問したのと同じ質問が次回も出てくるかもしれません。

質問 1: C を簡単な言語で教えてください。

回答: C は、C 言語をベースに開発されたオブジェクト指向プログラミング言語であり、広く使用されています。 C は、オブジェクト指向プログラミング、汎用プログラミング、手続き型プログラミングなど、複数のプログラミング パラダイムをサポートしています。幅広いプログラミング分野があり、システム開発、エンジン開発、その他のアプリケーション分野でよく使用され、プログラマーが使用する最も強力なプログラミング言語の 1 つです。クラス、カプセル化、オーバーロード、およびクラスをサポートしています。その他の機能!

質問 2: C と C の違いは何ですか?

回答: c は c に基づいてクラスを追加します。C は構造化言語であり、アルゴリズムとデータ構造に焦点を当てています。 C プログラムの設計で主に考慮すべきことは、プロセスを通じて入力 (または環境条件) を処理して出力を取得する (またはプロセス (トランザクション) 制御を実装する) 方法です。C の場合、主に考慮するのはオブジェクトを構築する方法です。このモデルが対応する問題領域に適合できるようにモデルを作成し、オブジェクトの状態情報を取得することで出力またはプロセス (トランザクション) の制御を実現できます。編集者がおすすめするC言語・C学習用学習スカート【627、012、464】 上級者も初心者も、転職したい人も業界に入りたい人も、一緒に学んで学べます!スカートの中には開発ツールが入っていて、役立つ情報や技術情報がたくさん共有されています!

質問 3: オブジェクト指向 (OOP) とは何ですか?

回答: オブジェクト指向とは、現実世界を理解・抽象化するための手法・考え方であり、要求要素をオブジェクトに変換することで問題を解決する考え方です。

質問 4: ポリモーフィズムとは何ですか?

回答: ポリモーフィズムとは、同じ操作、関数、またはプロセスが複数の種類のオブジェクトに作用し、異なる結果が得られることを意味します。同じメッセージを受信したときに、オブジェクトが異なれば結果も異なる場合があり、この現象はポリモーフィズムと呼ばれます。

質問 5: デザイン パターンについて理解していますか? 簡単な例を教えてください。

回答: デザイン パターン (デザイン パターン) は、ほとんどの人に知られている、コード設計エクスペリエンスを分類してカタログ化した一連の概要であり、繰り返し使用されます。

たとえば、シングルトン モードでは、クラスにインスタンスが 1 つだけ存在することが保証され、そのインスタンスにアクセスするためのグローバル アクセス ポイントが提供されます。

適用対象: クラスがインスタンスを 1 つだけ持つことができ、顧客が既知のアクセス ポイントからアクセスできる場合、この 1 つのインスタンスがサブクラス化によって拡張可能である必要があり、顧客がコードを変更する必要がない場合拡張インスタンスを使用できます。

たとえば、ファクトリ パターンはオブジェクトを作成するためのインターフェイスを定義し、どのクラスをインスタンス化するかをサブクラスに決定させます。ファクトリ メソッドを使用すると、クラスのインスタンス化がそのサブクラスに延期されます。

適用対象: クラスが作成する必要があるオブジェクトのクラスを知らない場合、クラスがそのサブクラスに作成するオブジェクトを指定させたい場合、クラスがオブジェクトを作成する場合 責任が誰かに委任されている場合複数のヘルパー サブクラスがあり、どのヘルパー サブクラスがデリゲートであるかに関する情報をローカライズしたいとします。

質問 6: STL ライブラリを使用したことがありますか?一般的な STL コンテナとは何ですか?どのアルゴリズムが使用されていますか?

回答: STL には、コンテナとアルゴリズムという 2 つの部分が含まれています。 (2 つのイテレータを結合することも重要です)

コンテナ。データが保存される場所です。配列など。

STL では、コンテナは、順次コンテナと連想コンテナの 2 つのカテゴリに分類されます。

シリアル コンテナ。その中の要素は必ずしも順番に並んでいるわけではありませんが、すべて並べ替えることができます。例:vector、list、deque、stack、queue、heap、priority_queue、slist;

連想コンテナの内部構造は、基本的にバランスの取れたバイナリ ツリーです。いわゆる関連付けとは、各要素がキー値と実際の値を持ち、要素が特定の規則に従って格納されることを意味します。例: RB ツリー、セット、マップ、マルチセット、マルチマップ、ハッシュテーブル、hash_set、hash_map、hash_multiset、hash_multimap。

説明として以下から 1 つずつ選択してください。

Vector: ストレージスペースを動的に割り当てるコンテナです。 C の配列とは異なり、配列によって割り当てられたスペースは静的であり、割り当て後に変更することはできませんが、ベクトルでは自動的にスペースが再割り当て (拡張) されます。

set: その内部要素は、要素のキー値に従って自動的に並べ替えられます。マップとは異なり、そのキー値は実数値であり、マップは異なるキー値と実数値を同時に持つことができます。

並べ替え、コピーなどのアルゴリズムとコンテナ固有のアルゴリズム。この点はあまり紹介する必要はありませんが、主に以下のイテレータの内容に依存します。

イテレータは STL の本質であり、次のように説明します: イテレータは、コンテナの内部構造を公開することなく、コンテナに含まれるさまざまな要素に順番にアクセスする方法を提供します。コンテナとアルゴリズムを分離して、独立して設計できるようにします。

質問 7: データ構造はわかりますか?プロジェクト開発プロセスで主に使用されるものは何ですか?

回答: 配列、リンク リスト、およびツリー (頻度は低いですが) は主にデータ構造で使用され、スタックとキューの概念も使用されます。

質問 8: const を知っていますか?その機能を説明します。

回答:

1.const は、クラスのメンバー変数を変更し、メンバー定数を示しますが、変更することはできません。

2. const 変更関数は、この関数内のクラスのデータ メンバーを変更しないこと、および他の非 const メンバー関数を呼び出さないことを約束します。

3. const が関数のオーバーロードを構成する場合、const オブジェクトは const 関数のみを呼び出すことができ、非 const オブジェクトは最初に非 const 関数を呼び出します。

4.const 関数は const 関数のみを呼び出すことができます。非 const 関数は const 関数を呼び出すことができます。

5. クラスの外で定義された const メンバー関数には、定義と宣言の両方で const 修飾子が必要です。

質問 9: クラスの静的変数はいつ初期化されますか?関数の静的変数はいつ初期化されますか?

回答: クラスの静的メンバー変数は、クラスがインスタンス化され、メモリが割り当てられる前にすでに存在します。関数の静的変数は、この関数の実行時に初期化されます。

質問 10: ヒープとスタックの違いは何ですか?ヒープとスタックのライフサイクル?

回答:

1. スタック領域割り当ての違い:

1. スタック (オペレーティング システム): 関数パラメータ値を保存するためにオペレーティング システムによって自動的に割り当ておよび解放されます。およびローカル変数の値など。その操作方法は、データ構造におけるスタックに似ています;

2. ヒープ (オペレーティング システム): 通常、プログラマによって割り当ておよび解放されます。プログラマが解放しない場合は、プログラマによって再利用される場合があります。プログラム終了時の OS の割り当て方法も同様です。

2. スタック キャッシュ メソッドの違い:

1. スタックは 1 次キャッシュを使用します。通常、スタックは呼び出されたときにストレージ領域にあり、呼び出しの直後に解放されます。 completed;

2. ヒープは 2 次キャッシュに格納され、そのライフ サイクルは仮想マシンのガベージ コレクション アルゴリズムによって決定されます (ヒープが一度生成された後にリサイクルできるという意味ではありません)孤立したオブジェクト)。したがって、これらのオブジェクトを呼び出す速度は比較的遅くなります。

3. スタック データ構造の違い:

ヒープ (データ構造): ヒープは次のようにツリーとみなすことができます: ヒープ ソート;

スタック (データ構造) ): 先入れ後出しのデータ構造。

質問 11: カプセル化、継承、ポリモーフィズムについて説明してください。

答え:

1. カプセル化:

カプセル化は、オブジェクト指向プログラミングを実現するための最初のステップです。カプセル化とは、データや関数を単位で収集することです。クラス)。

カプセル化の意味は、コード (データ) が不用意に破壊されないよう保護または防止することです。

2. 継承:

継承は主にコードの再利用を実現し、開発時間を節約します。

サブクラスは親クラスからいくつかのものを継承できます。

3. ポリモーフィズム

ポリモーフィズム: 同じ操作が異なるオブジェクトに作用し、異なる解釈を持ち、異なる実行結果を生成する可能性があります。実行時に、基本クラスへのポインターを介して派生クラスのメソッドを呼び出すことができます。

質問 12: ポインターと参照の違いは何ですか?

回答:

  1. ポインタは変数ですが、この変数はメモリ内の記憶装置を指すアドレスを格納しており、参照は単なるエイリアスです。

  2. 参照を使用する場合、逆参照 (*) する必要はありません。ポインタを逆参照する必要があります。

  3. 参照は、次の場合に 1 回だけ初期化できます。 ;ポインタは変数です;

  4. 参照には const がありません、ポインタには const があります;

  5. 参照を null にすることはできません。ポインタは null にすることができます。

  6. "sizeof Reference" は指す変数 (オブジェクト) のサイズを取得し、"sizeof pointer" はポインタのサイズを取得します。それ自体;

  7. ポインタと参照の increment () 操作の意味は異なります;

  8. ポインタは複数のレベルを持つことができますが、参照は複数のレベルを持つことができます。レベルは 1 つだけです (int **p; は正当で、int &&a は違法です)

9. メモリ割り当ての観点から: プログラムはポインタ変数にメモリ領域を割り当てますが、参照にはメモリ領域を割り当てる必要はありません。

質問 13: メモリ リークとは何ですか?メモリ リークやポインタの範囲外に直面した場合、どのような方法があるでしょうか?この種のエラーを回避および軽減するために、通常どのような方法を使用しますか?

回答: 動的ストレージ割り当て機能を使用して動的に開かれた領域は、使用後に解放されないため、メモリユニットが常に占有され、メモリ リークが発生します。

ポインターを使用するときは、ポインターの長さに注意してください。

malloc するときは、それが空いていることを確認する必要があります。

ポインタに値を割り当てるときは、割り当てられたポインタを解放する必要があるかどうかに注意する必要があります。

動的に割り当てられたメモリ ポインタは使用しないことをお勧めします。再度割り当ててください。

質問 14: 一般的に使用される並べ替えアルゴリズムは何ですか?いくつかの並べ替えアルゴリズムの長所と短所を簡単に説明してください。

回答: 選択、バブル、高速、**、ヒル、マージ、スタック ソートなど。

1. クイック ソート: バブル ソートの改良版です。

利点: 高速で、データの移動が少ない

欠点: 安定性が不十分

2. マージ: 分割統治ソート、安定したソート アルゴリズム、一般に全体の順序に使用されます。ですが、ローカルに順序付けされたシーケンスです。

利点: 高効率 O(n)、安定性

欠点: メモリ使用量の比較

質問 15: new と malloc の違いは何ですか?

回答:

1. malloc と free は C/C 言語の標準ライブラリ関数で、new/delete は C 演算子です。どちらも動的メモリの適用とメモリの解放に使用できます。

2. 非内部データ型のオブジェクトの場合、maloc/free だけでは動的オブジェクトの要件を満たすことができません。オブジェクトは、作成時にコンストラクターを自動的に実行する必要があり、オブジェクトが終了する前にデストラクターを自動的に実行する必要があります。

3. malloc/free は演算子ではなくライブラリ関数であるため、コンパイラの制御権限の範囲外であり、コンストラクタやデストラクタの実行タスクを malloc/free に課すことはできません。したがって、C 言語には、動的なメモリ割り当てと初期化作業を完了できる演算子 new と、メモリのクリーンアップと解放作業を完了できる演算子 delete が必要です。 new/deleteはライブラリ関数ではないことに注意してください。

4. C プログラムは C 関数を呼び出すことがよくありますが、C プログラムは動的メモリの管理に malloc/free しか使用できません。

5. New は、malloc とコンストラクターの実行と考えることができます。 new からのポインタは型情報を直接伝えます。 Malloc は void ポインタを返します。

質問 16: TCP 通信と UDP 通信の違いは何ですか? IOCPとは何ですか?

回答:

1.TCP はコネクション指向、UDP はコネクションレスです

2.TCP は保証されますが、UDP 送信は保証されません

3 .TCP は非効率ですが、UDP は非常に効率的です

4.TCP はストリームに基づいており、UDP はデータ パケットに基づいています

5.TCP は重要なデータを送信し、UDP は重要でないデータを送信します

##IOCP の正式名は I/O Completion Port で、中国語では I/O 完了ポートと訳されます。

IOCP は、アプリケーションに I/O イベントを効率的に通知できる非同期 I/O API です。

select() や他の非同期メソッドの使用とは異なり、ソケット [socket] は完了ポートに関連付けられているため、通常の Winsock 操作を続行できます。ただし、イベントが発生すると、オペレーティング システムによって完了ポートがキューに追加されます。その後、アプリケーションはコア層にこの完了ポートを問い合わせることができます。

質問 17: 同期 IO と非同期 IO の違いは何ですか?

回答:

A. 同期

いわゆる同期とは、関数呼び出しが発行されたときに、結果が得られるまで呼び出しが返されないことを意味します。

この定義によれば、実際、ほとんどの関数は同期的に呼び出されます (sin isdigital など)。

しかし、一般的に、同期と非同期について話すときは、他のコンポーネントの協力が必要なタスク、または完了するまでに一定の時間がかかるタスクを特に指します。

最も一般的な例は SendMessage です。

この関数は特定のウィンドウにメッセージを送信し、相手がメッセージを処理するまでこの関数は戻りません。

相手の処理が終了した後、この関数はメッセージ処理関数が返した値を呼び出し元に返します。

B. 非同期

非同期の概念は同期の反対です。

非同期プロシージャ呼び出しが発行された場合、呼び出し元は結果をすぐには取得しません。

この呼び出しを実際に処理するコンポーネントは、呼び出しの発行後にステータスと通知を通じて発信者に通知するか、コールバック関数を通じて呼び出しを処理します。

質問 18: C の静的関数と静的変数について説明してください。

回答:

(1) クラスの静的データ メンバーはコンパイル時に作成され初期化されます。これらは、このクラスのオブジェクトが作成される前に存在し、どのオブジェクトにも属さず、静的クラスのメンバー変数ではなく、オブジェクトに属します。クラスの静的データ メンバーのコピーは 1 つだけあり、このクラスのすべてのオブジェクトで共有されます。

(2) クラスの静的メンバー関数は、特定のオブジェクトではなくクラス全体に属し、クラスのすべてのオブジェクトで共有されます。

1. 静的メンバー変数は、類似したオブジェクト間の情報共有を実現します。

2. 静的メンバーはクラスの外部に保存され、クラスのサイズは含まれません。

3. 静的メンバーは、名前空間内のクラスに属するグローバル変数であり、データ領域の rw セグメントに格納されます。

4. 静的メンバーはクラスの外部でのみ初期化できます。

5. クラス名 (オブジェクトが生成されていない場合も) またはオブジェクトを通じてアクセスできます。

1. 静的メンバー関数の重要性は、情報共有やデータ通信にあるのではなく、静的データ メンバーを管理し、静的データ メンバーのカプセル化を完了することにあります。

2. 静的メンバー関数は静的データ メンバーにのみアクセスできます。理由: 非静的メンバー関数の場合、呼び出し時に this ポインターがパラメーターとして渡されます。静的メンバー関数はオブジェクトではなくクラスに属し、このポインターを持ちません。

質問 19: 記憶についてのあなたの理解について教えてください。

回答:

1. スタック - コンパイラによって自動的に割り当ておよび解放されます

2. ヒープ - 通常はプログラマによって割り当ておよび解放されます。プログラマが解放しない場合プログラム終了時 OS

3により再利用される可能性あり グローバル領域(静的領域)、グローバル変数と静的変数をまとめて格納 初期化済みのグローバル変数と静的変数は同一領域にあり、初期化されていないグローバル変数変数と初期化されていない変数は同じ領域に格納され、初期化された静的変数は隣接する別の領域に格納されます。 - プログラム終了時に解放

4. 定数用の特別な場所もあります。 -

5 プログラムコード領域はプログラム終了時に解放され、バイナリコードが格納されます。

関数本体で定義された変数は通常スタック上にあり、メモリを割り当てる malloc、calloc、realloc などの関数によって割り当てられた変数はヒープ上にあります。グローバル変数は、すべての関数の本体外で定義されます static 修飾子を追加した後は、どこに配置されてもグローバル領域(静的領域)に格納されます すべての関数の本体外で定義された static 変数は、ファイル内で有効であり、関数本体内で定義された static を使用することは、関数本体内でのみ有効であることを意味します。また、関数内の「adgfdf」などの文字列は定数領域に格納されます。

関連記事:

125 の基本的な C# 面接の質問と回答を共有する

関連動画:

PHP 職場を席巻する面接の質問に関する詳細なビデオ チュートリアル

以上がC/C+ の面接での 19 の質問のうち、何問正しく答えることができますか? - 個人記事 シフの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。