ネットワークプログラミングのインタビューの質問を仕上げ(C)

1:並行性と並列性とは何ですか?

これは、複数のタスクを処理するために、同時プロセッサを指します。それは、多くの異なるタスクを処理するために、並列プロセッサまたはマルチコアプロセッサの複数を指します。同時場所同時に(同時)論理的、物理的に並列に同時に起こります。

 

2:プロセスとスレッドロックロックの役割? 

スレッドロック:誰もが、主に、コードブロックのロックを処理するために使用されているに精通しています。ときに、セグメント・コードで最も唯一の実行スレッドでコードまたは同じ時点でロックの使用、方法のブロック。複数のスレッドが同じオブジェクトのロック方法/コード・ブロックへのアクセスがある場合、同時に一つだけスレッドが残っているスレッドの実装では、実行後のコードセグメントを実行するために、現在のスレッドを待たなければなりません。しかし、スレッドの残りの部分は、オブジェクトの非ロックブロックにアクセスすることができます。   

プロセスロック:また、プログラムの独立性は、各プロセスがリソースへの他のプロセスへのアクセスによって制御することができないという理由だけで、同じオペレーティングシステム、共有リソースにアクセスする複数のプロセスを制御するために、しかし、あなたは、ローカルシステムを制御するためにセマフォを使用することができます(OS基本的な知識)。

 

3:非同期非ブロックされるかを説明?

まず第一に、あなたは、同期および非同期であるかを知る必要があります。

同期および非同期操作はIOをやって始まった後、同期の点では、インタラクティブなアプリケーションとカーネル用のユーザー・プロセスを指している操作のためかどうかポーリングIOの準備ができて見ることがIO操作と待ち時間をトリガしますが、非同期ユーザプロセスを指しがトリガされますその事自身、およびIO操作が完了したときは、IOの完了を通知されます。同期方法は、その呼び出しを示したら、呼び出し側は、フォローアップの方法の実施を継続するためには、メソッドの実装が完了するのを待たなければなりません。あなたが始めると方法は、それはフォローアップの方法を実行し続けることが可能な方法の実装を完了するために、発信者を待たずに、すぐに返すようにすることを非同期メソッドを示しています。通常、我々は、実行の方法との間の同期方法がシリアライズされている、スレッド内で動作する方法を記述します。

銀行出納係、例えば:

同期:携帯電話を買いにモールに行くためにお金を取得する必要があり、あなたは、銀行でお金ラインを引き出すために銀行のカードを保持してお金を取得し、(同期IO、自分の読み取りと書き込みを使用してJava IOの契約を使用している場合)の携帯電話を見るためにモールに行く必要があります。

非同期:自分自身を排出し前に携帯電話を見てみましょうするためにモールの真ん中のラインアップには、お金を引き出すために戻ってきます。(非同期IOを使用する場合は、JavaのOSが処理するために委託され、OSが非同期IO操作用APIをサポートする必要がある)IOの読み取りと書き込みは、あなたはOSのアドレスとサイズバッファのデータ(銀行カードとパスワードを渡す必要があります)。

ブロッキングおよび非ブロッキング処理の際にデータにアクセスするさまざまな方法のために、IO動作を取るために準備の状態に応じて、白色の読み取りまたは書き込み動作方法であると言っ

実装は、読み取りや書き込み機能の下のブロックモードは、非ブロックモードを待って、すぐにステータス値の読み取りや書き込みメソッドの戻ります。

銀行出納係、例えば:

妨害:ATMの引き出しキュー、あなたは待つ必要が(IOをブロックするために使用する場合、Javaは呼び出しが読み取りおよび書き込みを完了させるためには戻りませんブロックされています)。

ノンブロッキング:テラーカウンター、番号を取り、その後、他の何かをやって椅子に座って、あなたは、ないあなただけ行くことができない数にして等号放送の契約が通知されます、あなたは常にロビーに並んマネージャーに依頼することができ、ロビーマネージャーもあればと言っていませんでしたいいえ、あなたがに行くことができない(非ブロックIOの使用、あなたは読み書きができない場合は、JavaコールはIOイベント通知ディスパッチャは、読み取りおよび書き込み、その後、読み取りおよび書き込み、完了するまで継続的にループを読み、書き込みを続けることができたときに、すぐに戻ります)。

また、例えば:トラブルのビジネスを行うには、銀行のラインで私を知らせるために、彼は私がそれを排出したときに、この数は、その後、彼はないだろうと述べ、ロビーマネージャーに語ったので、この人は突然、中毒、タバコを外出する必要の自身が有罪見つけます上にこの操作を待ってブロックされ、これは自然である非同期ノンブロッキング+方法
 

4:ルータやスイッチの違いは?   

異なる(1)作業レベル。最初のスイッチはOSI / RMオープンアーキテクチャのデータリンク層で動作しているルータは、OSIモデルのネットワーク層の設計を開始するが、それは、第二の層です。それが動作するように、OSIの第2層(データリンク層)で動作するスイッチは比較的簡単であるため、OSIの第3層(ネットワーク層)におけるルータながら、プロトコルは、より多くの情報を得ることができ、ルータが可能よりインテリジェントなフォワーディング決定。   

異なる(2)データ転送は、オブジェクトに基づいています。スイッチは、転送データの物理アドレスまたはMACアドレスに宛先アドレスによって決定されます。ルータは、データ転送先アドレスを決定するために、ネットワークの異なるID番号(IPアドレス)を使用します。IPアドレスがソフトウェアで実装され、時には第3層プロトコル・アドレスまたはネットワーク・アドレスのアドレスと呼ばれる、ここで、ネットワーク機器を記載しています。MACアドレスは、通常、分布にカードのメーカーから来ているハードウェアであり、そして一般的には、変更することはできません、カードに硬化し、続いています。IPアドレスは通常、ネットワーク管理者またはシステムによって自動的に割り当てられます。   

(3)従来のスイッチが衝突ドメインがスプリットブロードキャストドメインにすることはできません分割することができ、そしてルータが依然として同じブロードキャスト・ドメインに属しているネットワークスイッチにより接続スプリットブロードキャスト・ドメインであることができ、ブロードキャストデータパケットは、スイッチに接続されているすべてのネットワークセグメントに伝播しますいくつかのケースでは、交通渋滞やセキュリティの脆弱性につながります。異なるブロードキャストドメインに割り当てられますセグメント上のルータに接続され、データ放送は、ルータを通過しません。スイッチ上記第3層はVLAN機能を有するが、ブロードキャストドメインを分割してもよいが、通信サブブロードキャストドメインとの間の通信ではなく、それらの間の通信は、依然としてルータを必要とします。   

(4)ルータは、ファイアウォールサービスを提供しています。ルータ特定のアドレス、パケット転送の転送はルーティングプロトコルパケット及び未知のターゲット・ネットワークをサポートしていないことだけフォワードパケットがブロードキャストストームを防止することができる、送信していません。

 

5:DNSとは何ですか?

DNSは、WebスペースIPでのドメイン名であるので、人々できるドメイン名の登録を介してサービスサイトへ簡単にアクセスできます。IPアドレスは、メモリを容易にするために、IPアドレスの代わりにドメイン名の使用は、サイトのアドレスを特定し、サイトを識別し、ネットワーク上の数値アドレスです。DNSは、変換プロセスのIPアドレスへのドメイン名です。DNSドメインネームサーバによって行わ分析作業。

 

6:生産者-消費者モデルのシナリオと利点は?

プロデューサーコンシューマー・モデルは、プロセス指向のプログラミングモデルに属します。実際のソフトウェア開発プロセスでは、多くの場合、次のシーンに遭遇:他のモジュールによって処理するための責任があるデータを生成するための責任のモジュールは、(モジュールがここに幅広いがあり、クラス、関数、スレッド、プロセスなどをすることができ)。消費者と呼ばれ、データ処理モジュールと、データ生成モジュールは、それが適切プロデューサーと呼ばれます。生産者と消費者だけ抽象でなく、プロデューサ/コンシューマモデルでは十分ではありません。また、このモードは仲介者として、生産者と消費者の間にバッファを持っている必要があります。バッファへのメーカデータは、データバッファと消費者から採取しました。

なぜ、バッファを設定します。生産者と消費者がそれぞれ二つのクラスであると仮定。あなたはプロデューサーが直接消費者のメソッドを呼び出してみましょう場合、消費者は生産者(すなわち、結合)に依存する必要があります。将来のコードの変更の消費者が生産者に影響を与える可能性がある場合。両方とも、バッファ、直接依存しない、その間に依存している場合は、対応して減少結合。消費者が直接メソッドを呼び出すプロデューサー、他の欠点があります。関数呼び出しが(またはブロッキング呼び出し)同期しているので、消費者の前に戻らない方法は、生産者はあそこに待っていました。消費者データ処理が遅い場合には、生産者は無駄に良好な時間を台無しになります。プロデューサ/コンシューマモデルを使用した後、生産者と消費者は、2つの独立した同時被写体であってもよいです。バッファにメーカーのデータが失われた生産は、次のデータに行くことができます生産しました。基本的に、消費者の処理速度に依存しないでください。実際には、このモードでは、主に並行性の問題に対処するために使用されている場合。バッファは、別の利点があります。高速または低速のは、より高速なデータを製造する場合は、バッファの利点が明らかにされています。場合、高速製造データ、プロセスへの消費者の時間、未処理データを一時的にバッファに格納することができます。プロデューサー、消費者とのゆっくりに配置されたスローダウンスピードを製造します。

生産者と消費者が強く結合されたモードは、生産者と消費者との間の直接通信することなく、容器との間の生産者 - 消費者関係によって解決されるが、キューをブロックの使用は、直接通信プロデューサがデータを生成し、スローしますキューをブロックするため、消費者は生産者と消費者のバランスに対処するために、生産と消費の問題の解決の矛盾レート生産者と消費者へのブロッキングキュー、実用的なアプリケーション、生産者と消費者のメインモードからデータを取得する必要があります容量、およびキューバッファをブロックに相当します。書き込みログファイルのためには、キューに圧入、キューデータがログスレッドから読み込まれ、我々はスレッドを置くことができるので、マルチスレッドの書き込みするのではなく、排他的に存在し、典型的な例は、ロギングでもあるログを持っているマルチスレッドが、完全な書き込みログ。

 

7:CDNとは何ですか?

CDNは、コンテンツ配信ネットワーク、すなわち、の略で、コンテンツ配信ネットワーク基本的な考え方は、ボトルネックとリンクが、より速く、コンテンツ配信、より安定したインターネットのデータ伝送速度と安定性に影響を与える可能性を避けるために、可能な限りです。負荷条件とユーザの応答時間と距離に接続された各ノードのリアルタイムネットワークトラフィックの可能なCDNシステムに応じて、仮想ネットワークからなるネットワーク全体既存のインターネットベースのサーバノードにインテリジェンスの層を配置することによってそして、サービスをリダイレクトするユーザの要求に他の総合的な情報は、ユーザーに最も近いノード。その目的は、最寄りのアドレス、インターネット網の輻輳状態の必要なコンテンツを取得するために、ユーザーを有効にして、サイトへのユーザーアクセスの応答速度を向上させることです。

 

8:LVSと役割は何ですか?

LVSは、Linuxの仮想サーバーLinux仮想サーバーで、仮想サーバーは、クラスタ[複数のマシンLBIP]です。LVSは、主に複数のサーバのロードバランシングのために使用されています。それは、高パフォーマンス、高可用性サーバーのクラスタリング技術を実現することができ、ネットワーク層で動作します。これは、スーパーサーバーを形成するために一緒に、低性能サーバーの数の組み合わせで安価です。それは、使用、シンプルな構成、およびロードバランシングの様々な方法に簡単です。これは、サーバーでも、サーバークラスタ内では動作しません、それは全体的な結果には影響しない、安定性と信頼性です。さらに、拡張性にも非常に良いです。

LVSクラスタは3層構造であります:

ロードバランサ(負荷分散装置):これは、LVSの中核である、それは我々のサイトMVCコントローラモデルのようなものです。顧客の要求は、特定のアルゴリズム自体ではないアドレスの特定のビジネスに合わせて処理するために、次のレベル別のサーバーに配布することは責任があります。層の状態で別の層は、サーバーの次の層が正常に動作していない場合、それが自動的にそれを削除し、可能なプラスを再開します、監視することができます。この層は、1つまたはいくつかのDirectorサーバーコンポーネントで構成されています。

サーバープール(サーバプール):サーバーのグループ、実際にクライアント要求を実行し、通常、弊社のWebサーバー、ウェブに加えて、だけでなく、FTP、MAIL、DNS。

共有ストレージ(共有ストレージ):これは、サーバー・プールの共有ストレージ領域を提供し、同じサービスを提供し、サーバプールは、同じコンテンツを持ってみましょうことは容易です。主に、データ層と一貫性のあるデータの上層を向上させることができます。 

 

9:  nginxのと役割は何ですか?

まず、nginxのは、ApacheでHTTPサーバが同じWEBサーバの一種である、サーバー上の(例えばHTML、画像など)の静的ファイルは、HTTPプロトコルを介してクライアントに提示することができます。そのような時間スケールのユーザー、ネットワーク帯域幅、および他の製品特性とそのポジショニングと開発の制限などの設計、の初めに環境の制限にサーバー対象が異なっています。また、さまざまなWebサーバは、独自の特色を持っています。Apacheの開発期間が非常に長いですし、誰もが認める世界最大のサーバーです。その上で安定した、オープンソース、クロスプラットフォーム、および:それは多くの利点があります。あまりにも長い間、それははるかに少ない今よりも、インターネット業界の台頭だ表示されます時間。ヘビー級になるように設計されています。これは、同時実行性の高いサーバーをサポートしていません。同時アクセス数万で実行されているApacheは、サーバはメモリを大量に消費するようになります。プロセスやスレッド間のスイッチへのオペレーティングシステムは、HTTPリクエストの低い平均回答率が得られ、大量のCPUリソースを消費します。Apacheウェブサーバのすべての決定は、高性能になることができない、軽量高同時実行サーバnginxのはされて入ってきました。それは何百万人レベルのTCP接続をサポートすることができるようにnginxのは、イベント駆動型アーキテクチャをベース。高度にモジュールとフリーソフトウェアライセンスは、(オープンソース時代のああです〜)別の後、サードパーティのモジュールを有効にします。nginxのは、Linux、Windowsの、FreeBSDの、Solarisの、上で実行できるクロスプラットフォームのサーバで AIX、Mac OSのおよび他のオペレーティングシステム。

だから、nginxのは、フリーでオープンソースの高性能のHTTPサーバーとリバースプロキシサーバーであり、また、IMAP、POP3、SMTPプロキシサーバー、nginxのは、HTTPサーバとして治療部位を公開することができ、nginxのは、追加として使用することができます達成するためにバランスをとるプロキシの負荷を逆転。

nginxの役割:

1. 静的なHTTPサーバ。

2.  リバースプロキシサーバー。次に、クライアントは、その後、nginxのリバースプロキシで、クライアントに結果を返す、Webサイトの管理者が途中でnginxのを追加することができ、クライアントはnginxの、nginxのは、アプリケーションサーバに要求要求し、HTTPプロトコルのアプリケーションサーバを経由してサイトに直接アクセスを持っているでしょうサーバー。それは二つの役割が含まれ、この時間は、1が役割を演技され、役割が目標です、これはターゲットの役割にアクセスするためのプロキシによって、プロキシの役割です。(薬といえば、私たちは、チャネルの代表である、いわゆるプロキシの明確な概念を必要としますいくつかのタスクを完了すると、プロキシ処理動作と呼ばれ、店舗での生活など-ストアにアディダスのゲストは、この店は薬である、靴のペアを購入するために、エージェントの役割は、アディダスメーカーは)目標は、ユーザーの役割である、です。

3.  負荷分散。サイトは非常に大きいが訪れたときは、お金を稼ぐために幸せなウェブマスターでなく、修正をストール。もっとゆっくりサイトなので、サーバが十分ではなかったです。したがって、同じアプリケーションは、複数のサーバー上で扱う複数のマシンが多数を割り当てるユーザの要求を展開しました。利益をもたらすと同時に、限り、他のサーバが稼働しているがあるとして、それはユーザーには影響しません、ケース内のサーバーのいずれかにリンクされています。

4. 仮想ホストいくつかのサイトシェレメチェボは、ニーズのバランスをロードします。トラフィックが小さすぎるためただし、すべてのサイトが、いくつかのサイトとても良いです、コストを節約する必要性、同じサーバ上の複数のサイトに展開されます。例えば、www.aaa.comとwww.bbb.comが同じサーバー上の2つのサイトで展開、2点のドメイン名を同じIPアドレスに解決が、ユーザーがそれ2人のドメイン名を介して2つの全く異なるウェブサイト、お互いを開くことができますこれは、2台のサーバー、2つのいわゆるバーチャルホストへのアクセスのように、影響を与えません。

5. FastCGIの。nginxのは、PHPと他の言語をサポートしていませんが、それはFastCGIのことでリクエストが処理するいくつかの言語やフレームワーク(例えばPHP、PythonやPerlを)投げることができます。

 

10:keepalivedのと役割は何ですか?

keepalivedのは似ているソフトウェアのLayer2,4,7交換メカニズムLinuxクラスタを確保するために、クラスタ管理で高可用性サービスソフトウェアのが、その機能は、単一障害点を防ぐためです。

keepalivedの作品: keepalivedのは、サービスがVRRPは、高可用性クラスタを保証するソフトウェアプロトコルに基づいており、主な機能は、単一障害点を防止し、フェイルオーバ達成し、ロードバランサ実マシン間の障害分離することです。原則を理解する前に、初見のVRRPプロトコルをkeepalivedの。

VRRPプロトコル:仮想ルート冗長プロトコル仮想ルータ冗長プロトコル。あるフォールトトレラントプロトコルは、ホストがいることを確認したときに、ネクストホップルートが失敗し、他のルータの代わりに、仕事に失敗したルータは、ネットワーク通信の継続性と信頼性を維持します。

keepalivedの具体的な原理は、関連するブログお気に入りに見つけることができます!keepalivedの原則

 

11:HAProxyと役割は何ですか?

Haproxyが提供するC言語で書かれたフリーでオープンソースソフトウェアの使用であり、高可用性負荷分散、およびプロキシTCPとHTTPベースのアプリケーションを。HAProxy特に通常、彼らはや7つの治療セッションを維持する必要がウェブサイトのそれらの大きな負荷のために。現在のハードウェア上のHAProxyランニングは、数千の同時接続をサポートすることができます。Webサーバーがネットワークに公開されていない保護しながら、そして、その動作モードは、現在のセキュリティアーキテクチャに統合することが本当に簡単になります。HAProxyはイベント駆動型、単一のプロセスモデルを実装し、このモデルは、同時接続の非常に大きな数をサポートしています。メモリの制限、制約およびロックシステムスケジューラの制限ユビキタスによるマルチプロセスまたはマルチスレッドモデルで、いくつかは、数千の同時接続を処理することができます。イベント駆動型モデルより優れたユーザー・スペース・リソースと時間管理がありますので-私たちは、これらの問題を持っていないので、これらのタスク(ユーザー・スペース)、の全てを達成するために。このモデルの欠点は、マルチコアシステムでは、これらのプログラム一般的に乏しいスケーラビリティです。彼らはより多くの仕事をするために、各CPUのタイムスライス(サイクル)に最適化されなければならない理由です。

 

12:負荷分散とは何ですか?

負荷分散も負荷分散として知られているが、動的排除またはシステムの不均衡に各ノードの負荷を軽減しようとする調整システム負荷を意味します。具体的な実現方法は、それによってシステムのスループットを向上させる、各ノードと他のノードに過負荷ノードに、軽負荷、負荷分散システムのタスクを転送することです。負荷分散は、簡単にシステムの処理能力を拡大し、共有する情報サービス・メカニズムを使用して、分散システムにおけるリソースの全体的な管理を助長しています。動的負荷分散戦略は、各ノードの負荷を可能なバランスを維持するために、いつでも負荷の分布を調整、システム内の各ノードの負荷状況に応じて、動作中に、参考情報として、各ノードの負荷をシステム内に既にあります。

公開された61元の記事 ウォンの賞賛9 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_33204444/article/details/94043190
おすすめ