[質問] OSI 7 層プロトコルの各層が何をしているかについて話してもらえますか? 各レイヤーに共通する技術は何ですか? 最も頻繁に使用するテクニックは何ですか? それの使い方?

以前のインタビュー開発中に尋ねられたこの質問に非常に感銘を受けました。難しいとおっしゃいますが、実際にはインターネット上に標準的な答えがあります。でも、それは難しいことではなく、面接で説明することも難しい、と言っても、それは単なる定型的なエッセイです。

最初にこの質問をされたとき、私は「いつ面接官を怒らせるだろうか?」と考えていました。もし職場の新人にこの質問をしたら、間違いなく唖然とするでしょう。少なくとも私はこう尋ねます。 」

まあ、無駄ではありますが、答えるべきことは答えなければいけないので、また自分の考えで答えて、できるだけ多く答えることを忘れないでください。OSI の 7 層プロトコルは下から上に次のとおりです。

OSIレベル 回答内容
物理層 やるべきこと: ケーブル、インターフェイスの種類などのデバイスの物理的特性を定義します。
共通テクノロジ: さまざまな伝送メディア (ツイストペア、光ファイバーなど)、さまざまなインターフェイスおよびコネクタ (RJ45、USB など) );
データリンク層 実行内容: ネットワーク内のホスト間でのデータ フレームの転送、物理アドレス、MAC アドレスなどの処理、
一般的なテクノロジ: イーサネット、FDDI、PPP およびその他のデータ リンク層プロトコル、VLAN、MAC アドレスなど。
ネットワーク層 やるべきこと: ネットワーク相互接続と IP アドレス指定を担当します。
共通テクノロジ: IP、ARP、RARP、ICMP、IGMP、およびその他のネットワーク層プロトコル。RIP、OSPF、BGP などのルーティング プロトコル。
トランスポート層 やるべきこと: エンドツーエンドの信頼性の高い伝送の提供、フロー制御、再伝送などの処理、
共通技術: TCP、UDP などのトランスポート層プロトコルとさまざまなポート番号。
セッション層 やるべきこと: セッションの確立、管理、終了、
共通テクノロジー: PAP や SOCKS などのセッション層プロトコル。
プレゼンテーション層 やるべきこと: データの暗号化と圧縮、
一般的なテクノロジ: ASCII、TIFF、GIF、PCM およびその他のデータ表現およびエンコード形式。
アプリケーション層 やるべきこと: ユーザーのアプリケーション プロセスにネットワーク サービスを直接提供する;
一般的なテクノロジ: HTTP、FTP、SMTP、POP3、DNS およびその他のアプリケーション層プロトコル。

最もよく使用されるのは HTTP テクノロジです。HttpClient と OKHttp クライアントはプロジェクトでよく使用されますが、それぞれに独自の長所と短所があります (使用後の個人的な意見のみを表します)。

クライアント アドバンテージ 欠点がある
Apache HTTPクライアント - 広く使用されており、安定していて成熟しています -
完全な API と強力な機能 -
マルチスレッドをサポート、優れた接続プール管理 -
HTTPS、認証、プロキシなどの機能をサポート
- 設定が比較的複雑
- 基盤となる実装が古く、効率が OkHttp ほど良くない
- HTTP/2 はサポートされていない
OKHTTP - 高性能、高速伝送
- 多重化を使用した HTTP/2 のサポート
- Android の最新機能を使用した内部実装
- Apache HttpClient ほど広く使用されていない
- 接続プール管理は Apache ほど完璧ではない

一般に、パフォーマンスを追求する場合は、OkHttp を試してみると効果は良好です。ただし、Apache HttpClient を迅速に開発したい場合は、より良い選択です。はるか遠くでは、クライアントに加えて、Springcloud サービスの通信でも HTTP プロトコルが使用されます (これは誰でも理解できるはずです)。シンプルで柔軟、拡張しやすく、テキスト表示もデバッグしやすいので、アプリケーション層で最も利用率の高い通信プロトコルではないかと思います。

実際、HTTP/2 と HTTP/3 では、多重化、ヘッダー圧縮、サーバー プッシュなどの機能が導入されている一方で、キャッシュ、永続的な接続、断片化された送信、圧縮、非同期送信など、HTTP パフォーマンスの最適化が数多く行われています。パフォーマンス。私がよく利用する次の 4 つの方法は、サーバー側の最適化方法に基づいています。

  1. 送信データを圧縮する: テキスト データの GZIP 圧縮を有効にして、パッケージ サイズを削減します。写真やビデオなどのマルチメディア ファイルの場合は、ファイル全体をアップロードするのではなく、最初に圧縮してからアップロードするという戦略を使用します。
  2. CDN を使用する: CDN を使用して静的リソースをキャッシュおよび配布し、近くのユーザー要求に応答します。
  3. HTTP/2 の採用: HTTP/2 では、HTTP パフォーマンスを効果的に最適化できる多重化、ヘッダー圧縮、サーバー プッシュなどの機能が導入されています。
  4. TCP パラメータの最適化: 通常、Linux システム パラメータを調整することによって実現されます。たとえば、初期輻輳ウィンドウ サイズ (初期輻輳ウィンドウ) を増加します。SOCKET_RCVBUF および SOCKET_SNDBUF パラメータは、setsockopt() によって設定されます。/proc/sys/net/ipv4/tcp_layed_ack を変更して遅延応答を設定し、ACK の数などを減らします。

フロントエンドに関しては、会社にはそれを管理する専任の開発者がいますが、私がそれを管理する場合、次のことが考えられます。

  1. 非同期テクノロジーの採用: AJAX、HTTP ストリーミング (ストリーミング)、およびその他の非同期テクノロジーを使用して、インタラクティブなエクスペリエンスを向上させます。
  2. キャッシュ メカニズムを利用します。Cache-Control、Last-Modified、Etag などのキャッシュ ヘッダー情報を適切に設定し、キャッシュを最大限に活用してリクエストの繰り返しを回避します。
  3. クエリ文字列の最適化: 過度に長いクエリ文字列を避け、POST を使用してデータを送信します。

それだけだと思います。

おすすめ

転載: blog.csdn.net/kida_yuan/article/details/132497983