インタビュアー:AとBの違いについて話

ネットワーク

TCPとUDPの違い

  1. UDP:コネクション信頼性の低いデータグラム指向。UDPデータグラム指向のデータ伝送方式を使用して、信頼性の高い伝送を確保するためのメカニズムはありません、パケット損失は処理されません。データをどのように大ブロックのトランスポート層にアプリケーション層は、トランスポート層の送信ブロックとしてオリジナルモデル、従ってUDPパケットは、サブアプリケーション層で動作する必要があります。UDPの利点は以下のとおりです。伝送速度、要求の少ないデータの信頼性のために比較的強いに適用されるリアルタイム通信のシナリオ。
  2. TCP:接続を確立するために、3ウェイハンドシェイクを通過する必要があり、TCPの確認応答機構、シリアル番号、確認番号、再送タイムアウトが、TCPデータストリームのための信頼性の高い伝送、意味のない長さの制限のTCPを確実にデータを送受信し、柔軟な、しかし、TCPが発生することができますパッケージの問題を貼り付けます。

ピアが受け取っていることを確認する方法UDPsendto?
あなたが送信されている保証UDP終了メッセージを達成する必要がある場合はUDPプロトコル自体は、そのような機能を持っていない、確認応答メカニズムは、アプリケーション層とUDP再送タイムアウトメカニズムで実現することができます。

違いHTTP2とHTTP1

  1. HTTP2、テキスト解析に基づいて、バイナリ解析、HTTP1.xに基づいて、よりを持つテキストの書式、シーンの堅牢性を与えられたバイナリ解析で統一がたくさんあってもよいが、HTTP2なり、便利で良い堅牢性
  2. 多重化は、すなわち、接続の共有、すなわち、各要求は、接続共有メカニズムとして使用されます。要求IDに対応し、そのような接続要求が複数存在してもよく、各要求は一緒にランダムな混合に接続することができ、その後、受信機は、終了リクエストのリクエストIDに応じてそれらの異なる要求サービスに起因し得ます。
  3. ヘッダヘッダ圧縮、重複を避けるために、すなわちヘッダ送信パーティフィールドヘッダ部分を、通信キャッシュを保持それぞれは、ヘッダサイズの伝送が減少しています。
  4. サーバプッシュ、それは単にサーバ側での要求に進めることができるリソースAを要求し、そのようなクライアントとして、複数のデータを送信し、サーバ側では、A、B、Cになり、クライアントに送信されます。クライアントは、次回のBを要求した場合、cはすることができ要求を開始していない、キャッシュから直接読み取ります。

違いHTTP1.0とHTTP1.1

  1. HTTP1.0ヘッダーのキャッシングは、主としてもし修飾-のでに使用され、標準的な操作を行うキャッシュの決意を満了した場合、未修飾-ので、その後HTTP1.1は、より多くのキャッシュ制御戦略例えばエンティティタグを導入もしマッチ、もし-なしマッチ、およびヘッド制御キャッシュキャッシュポリシーのより多くの選択肢。
  2. 帯域幅の最適化とネットワーク接続の使用は、送信リソース部分HTTP1.0は、要求されたリソースのある部分のみを可能にし、HTTP1.1範囲リクエストヘッダのヘッダフィールドが導入され、サポートしない、すなわち、戻りコードは206(部分コンテンツ)です。
  3. 例えば409のようなエラー通知、応答エラー・ステータス・コードでHTTP1.1で新しい24、(競合)の管理は、リソース要求とリソース競合の現在の状態を表し、410(ゴーン)サーバ上のリソースは永続的で表します性質は削除します。
  4. 各サーバはHTTP1.0で固有のIPアドレスをバインドするHostヘッダ処理は、そのため、メッセージ内の要求URLは、ホスト名(ホスト名)を介して取得できませんでした。HTTP1.1要求および応答メッセージは、Hostヘッダフィールドをサポートする必要があります。
  5. 長い接続、HTTP 1.1サポート長いコネクタ(PersistentConnection)と要求パイプライン(パイプライン)プロセスは、TCP接続でHTTP要求と応答を複数送信してもよいし、HTTP1.1で消費と遅延を低減する接続確立を閉じますデフォルトの接続で有効になって:キープアライブ、ある程度の欠点HTTP1.0が接続を作成するには、各要求を補います。

HTTPとHTTPSの違い

  1. HTTPSプロトコルは、証明書は、一般的に支払う自由少し必要で、証明書を要求するCAが必要です。
  2. HTTPプロトコルはTCPの上で動作し、すべての内容はクリアテキストで送信され、HTTPSは、SSL / TLS上で動作し、SSL / TLSは、すべての送信内容が暗号化されている、TCP上で実行されます。
  3. ポートが同一でないとHTTPおよびHTTPS接続を使用して、完全に異なっている、前者は443であり、80です。
  4. HTTPSは、効果的に抗乗っ取りの大きな問題を解決するためにハイジャック演算子を防ぐことができます

GETとPOSTの違い

  1. 代わりにURL、POSTリクエストのボディにリクエストパラメータをGET。
  2. 、リクエストはURLだけをエンコードすることができますPOSTリクエストのサポート、複数のエンコーディングをGET。
  3. URLで渡されたリクエストパラメータをGETすることは制限された長さ、ないPOSTです。
  4. URLで直接露光パラメータは、あなたが機密情報を転送することができないため、POSTよりも安全GET。
  5. 唯一のTCPコネクション一度作っGET、POSTは、2つのTCP接続を送信します。サーバに応答して、ブラウザは、その後、データを送信するPOSTため、ブラウザはまずヘッダ、100は継続サーバの応答を送信し、GET要求のために、ブラウザは、HTTPヘッダとデータは、一緒にサーバ応答200(リターンデータ)を送信します200 OK(リターン・データ)。2つのパケットを送信しますないすべてのブラウザは、FirefoxはPOST中に1回だけ送信されます。

選択してファイルディスクリプタの違い

  1. 記述子量:ビットマップは、記述子は上限が監視することができる選択し、epollファイルディスクリプタは、数に制限されません
  2. 軽量のデータコピー:各呼び出しを選択し、マニュアルコレクションセットのFDを必要とし、FDセット各選択呼び出しはカーネルモードために、ユーザーモードからコピーする必要があり、同時にすべてが、それぞれがカーネルへの呼び出しで渡されたトラバース必要が選択FD 。epollは、ユーザー状態のコピーにユーザーモード、カーネルモードにカーネルモードが必要です。
  3. 使いやすいインターフェイス:FDモニターセットを追加するときに選択し、まだ集中監視FDに保存]を選択し、データ構造の配列を使用する必要があります。epollファイルディスクリプタは懸念の各サイクルを設定する必要はありません。
  4. イベントコールバック機構:イベントがコールこのコールバック関数に応答して発生した場合、つまり、関係を確立ファイルディスクリプタ赤黒木の使用の根底には、ファイルディスクリプタイベントオブジェクトをマウントして、すべてのイベントは、ドライバファイルディスクリプタ・コールバックにおけるデバイス(NIC)に追加されます。イベントはrdlist二重にリンクされたリストに追加してカーネルにep_poll_callbackと呼ばれるこのコールバックメソッドは、それが起こるのだろう。あなたはイベントがepoll_waitがイベントを確認呼び出すと、あなただけがrdlistが空でない場合は、ユーザーモードに発生するレプリケーション・イベントを置く。eventpollオブジェクトrdlist二重リンクリストへの準備ができてイベントをチェックする必要がある、とのイベントの数を返します。ユーザこの操作時間複雑度はO(1)です。
  5. 知識拡大:ビットマップをFD_SETする記述を追加し、これは1ビットの位置に対応する記述です。イベントはタイムアウト期間内に準備ができている場合、ポーリング決意を使用して選択し、すぐに戻ります]を選択し、選択戻り記述子の数。このようFD_SETビットマップの準備ができました記述子は、ビットマップは、削除された選択ビットマップを横断し、準備ができていない、また、アイコンのビットマップ記述子が準備ができているが記載されています。
  6. 3 fdset図のように表現するための3つの選択ビットの使用とは異なり、ポインタたpollfd実装をポーリングします。

レベルトリガとエッジトリガの差

  1. LT(レベル)レベルのイベントがepoll_waitトリガイベントの準備ができて検出されたファイルディスクリプタのデフォルトは、すぐに処理されないこと、またはプロセスの一部のみ、イベントがepoll_waitは、直ちに第2の呼のイベントがepoll_wait時間を返し、バックトリガ・イベント、およびその後のデータ処理をれるepoll_wait。データバッファの処理が終了するまで、イベントがepoll_waitはすぐに戻りません。
  2. データが完全に処理されていない場合、イベントの準備ができたら、ET(エッジ)エッジトリガが、それはすぐに対処する必要があり、第2の呼のイベントがepoll_wait、イベントがepoll_waitは戻りません。そのエッジ・トリガのデータ処理唯一のチャンス、エッジ・トリガ一度読んで唯一の非ブロッキングをサポートしています。

オペレーティングシステム

プロセスとスレッドの違い

  1. アドレス空間:このプロセスのアドレス空間を共有するのと同じプロセス内のスレッド間、およびプロセスは、別のアドレス空間です。
  2. リソースがありますなど、メモリ、I / O、CPUと同じプロセスを共有し、このプロセスのリソース、開いているファイル、信号、内のスレッドは、しかし、のプロセス(スレッドは、独自のユニークなデータ・スタック、シグナルマスクの文字、コンテキストデータ、エラー番号を持っています)独立した間のリソース
  3. プロセスがクラッシュした後、それが保護されたモードで、他のプロセスに影響を与えませんが、全体のプロセススレッドの崩壊は死んでいます。だから、マルチプロセス、他のものより堅牢なマルチスレッド。
  4. プロセスを切り替え、資源消費、高効率。だから、プロセス内の頻繁な切り替え、より有効に活用スレッドに来るとき。特定の変数の同時動作を共有すると同時に、要求されたとしている場合同様に、唯一のスレッドが処理できないで使用することができます
  5. 実行:シーケンスプログラムの実行順序と入口を実行している各個々のプロセス流入路。スレッドが独立して実行することはできません。しかし、それはアプリケーションによって制御される複数の実行スレッドを提供し、アプリケーションに応じて存在している必要があります。
  6. スレッドは、プロセッサスケジューリング処理の基本単位であるリソースのリソース割り当ておよび管理の基本単位です。
  7. 両方が同時に実行することができます。

マルチスレッドを使用する際に、マルチプロセスを使用する場合は?
高い資源管理と保護要件は、コストや効率性、複数のプロセスの使用を制限しません。
所要時間資源の保護と管理が非常に高くない高効率の要件、頻繁な切り替え、複数のスレッドを使用しています。

静的および動的ライブラリの違い

  1. 静的ライブラリが実行可能プログラムに議事のリンク段階で複製され、各プログラムは、静的ライブラリ静的ライブラリは、コードのコピーを持って呼び出します。
  2. DLLは、プログラムへのリンク段階中にコピーされませんが、プログラムは、プログラムの呼び出しのためのメモリに、システムによって、実行時に動的にロードされます。動的ライブラリを使用する利点は、一度だけ、動的ライブラリシステムにロードされ、異なるプログラムは、このように多くのメモリを節約し、メモリ内の同じ動的ライブラリのコピーを取得することができます。

スタックとヒープの違い

  • 地域からの静的なメモリ割り当て:それはコンパイラによって自動的に割り当てられて、解放されて、それは良い思い出ですプログラムに割り当てられた時間をコンパイル、プログラムの全体実行中に、このメモリが存在している、プログラム全体が解放されるように最後まで実行されますこうしたグローバル変数や静的変数として。
  1. 資源のスタックとヒープ割り当ては、すべての動的allocaの機能の実装により、割り当てられています。
  2. スタック上に割り当てられた:それもされ自動的に割り当てられ、コンパイラによって解放された機能を実行する際に、ある記憶部の機能は、スタック上のローカル変数を作成することができ、これらのメモリセルは、自動的に機能実行の終了時に解放されます。集中操作に内蔵されたスタックメモリ割り当て命令プロセッサは、その動作効率は、一般的に高いが、メモリの制限された量を割り当てることに留意されたいです。
  3. ヒープから調剤:また、動的メモリ割り当てと呼ばれ、それがアプリケーションプログラマによって行われ、手動で解除されます。メモリ空間をヒープに割り当てられ、それは速やかに、それを解放しなければならない場合はそれ以外のプログラムでメモリリークやその他のエラーは、実行中の出現につながります。
  4. 頻繁な割当ておよび割当て解除異なるサイズの(malloc関数/フリー)ヒープは、必然的手順の効率低下をもたらす、断片の多くで、その結果、メモリ空間の不連続性につながる、スタックの観点では、この問題を持っていないであろう。
  5. ヒープのメカニズムは非常に複雑です。たとえば、ヒープメモリを割り当てるために、あなたは、オペレーティング・システムは、システムがアプリケーション・プロセスを受信したときに、空きメモリアドレスのリストは、記録されていることを知っている必要があり、最初のスペースは、アプリケーション・ヒープ・スペース・ノードよりも大きい見つけ、リンクリストをトラバースし、自由ノードのリンクリストからノードを削除し、プログラム空間に割り当てられたノード。delete文のコードが正しく、このメモリ空間を解放するように、ほとんどのシステムでは、それは、この割り当てのサイズの最初の部分のメモリアドレス空間に記録されます。また、見つかったヒープ・ノードのサイズの大きさに起因必ずしもアプリケーションに正確に等しくない場合、システムは自動的にフリーリストに過剰の一部。明らかに、スタック割り当てよりもヒープの効率ははるかに低いです。

C ++

構造体とクラスの違い

別のデフォルトのアクセス許可の継承は、クラスの継承は、デフォルトでは、民間の継承であり、デフォルトでは、公共構造体の継承です。

参照とポインタの相違

  1. ポインタは変数であり、変数は、アドレスポインタ変数の内容が格納されます。リファレンスはエイリアス変数です。
  2. 基準の定義にポインタがそのような要求ではない場合、ポインタも参照されない、NULLを指すことが初期化されなければなりません。
  3. 初期化中の実体参照への参照は、もはや他のエンティティによって参照されず、ポインタがいつでも持つエンティティの任意の型を指すことができます。
  4. sizeof物理的サイズ=はsizeof参照、ポインタのsizeofサイズ= 4(32ビットシステム)または8(64ビットシステム)変数を参照。
  5. ポインタよりも安全を参照し、エンティティ1つの増加から引用した、すなわち、プラスの参考文献、すなわち、ポインタをインクリメントし、ポインタが後方型サイズをオフセットされます。

ベクトルとリストの違い

  1. ベクトル連続ストレージ、ランダム・アクセス・サポートインデックス。
  2. ベクターのコピーの挿入および欠失を移動すると、データブロック中に存在し得る、時間複雑度はO(N)です。
  3. ベクトル相溶化剤は、多大なコストで移動するデータ・ブロックのコピーをもたらすことができます。
  4. 無駄な空間ベクトル、ベクトル乗算器2(1.5乗算のLinuxシステムの容量)を受けるの問題もあります。リザーブ機能は、不必要なコピースペース容量の拡張がもたらす原因となる、ベクトル空間を変更することができます。
  5. 二重にリンクされたリストのリストには、ポインタを介してアクセスすることができ、ランダム・アクセス・メモリ空間が連続していないサポートしていません。利点は、挿入および欠失ベクターの効率よりも効率的です。

組み合わせと継承の違い

  1. 公共の継承フォローが原則「である」、継承されています。
  2. プライベートと保護継承のフォローは原則「持っている」、組み合わされています。
  3. 継承の組み合わせとが組み合わせを選択するために使用することができる場合。開発は「高凝集と低カップリング」の原則に従うべきです。

新しい、malloc関数の違い

  1. 新しい新しい=オブジェクトコンストラクタ+演算子(malloc関数)
  2. オブジェクトのデストラクタは(無料)= +演算子は削除削除します
  3. 新しいタイプの[サイズ]は、カスタム型はデストラクタを定義している場合、それはより多くのオペレータ新しい4バイトのメモリサイズを開きます、必要なオペレータ新しい使い捨てのオープンスペースを呼び出すことにより、最下層です。

マップとunordered_mapの違い

  1. そしてKEY_VALUE unordered_mapマップメモリ​​構造に基づいて、一意のキー値によって照会することができ、インデックスは、[]アクセスを使用することができます。
  2. (非厳密の意味で平衡二分木)、下層の赤と黒のツリーの実装をマッピングする内部自己内蔵マップ赤黒木ので、マップ内のすべてのデータが順序付けされ、マップクエリ、挿入、削除動作時間の複雑さは、O(logN個)です。使用時には、<キーオペレーターを定義するためにマップします。
  3. 底部は、(I滞在に加えて)、抗冗長unordered_mapハッシュテーブルです。unordered_map内側要素は順不同であり、すなわちunordered_map、記憶素子があるか否か、同じハッシュキー値に応じて決定された場合、キーのサイズに応じてソートされません。HASH_VALUE unordered_mapキー機能と過負荷演算子==を定義する必要があります。最大の利点ハッシュテーブル大幅データ記憶及び検索時間の消費を減少させることで、時間計算量はO(1)であり、唯一のコストでより多くのメモリを消費します。

おすすめ

転載: blog.csdn.net/Vickers_xiaowei/article/details/92805031