埋め込まれた面接筆記試験の質問 (10 日目)


序文

この記事では引き続き筆記試験と面接について解説していきます。

1. 配列とリンクリストの違い

1.内存:

配列はメモリの連続ブロックを使用して要素を格納し、各要素はメモリ内の固定サイズのスペースを占有します。この格納方法により、配列へのアクセスが高速になり、インデックスを使用して任意の位置の要素に直接アクセスできます。

リンク リストでは、分散したメモリ ブロックを使用して要素を格納し、各要素 (ノード) をメモリ内のどこにでも配置できます。各ノードには、データを格納するセクションと次のノードへのポインターが含まれています。この格納方法により、挿入および削除操作がより柔軟になりますが、要素にアクセスするにはリンク リスト全体を走査する必要があります。

2.性能:

配列のアクセス速度は速く、インデックスを介して任意の位置の要素に直接アクセスでき、計算量はO(1)です。ただし、要素を挿入および削除する場合、連続性を維持するために他の要素を移動する必要があるため、時間計算量は O(n) になります。

リンク リストから要素を挿入および削除する場合、ポインタのポイントを変更するだけでよいため、挿入と削除の時間計算量は O(1) に達する可能性があります。ただし、要素にアクセスする場合は、リンク リストをたどる必要があり、時間計算量は O(n) です。

3.操作复杂度:

配列の挿入および削除操作には他の要素を移動する必要があるため、操作は複雑になります。要素の挿入や削除を行うシーンが多い場合、配列のパフォーマンスはリンク リストほど良くありません。

連結リストの挿入および削除操作は、ポインタのポインタを変更するだけでよく、操作の複雑さは低いです。リンク リストは、頻繁に挿入および削除操作が必要なシナリオに適しています。

数组适合于需要频繁访问元素的场景,而链表适用于需要频繁插入和删除元素的场景。

2. メモリアライメントとは何ですか?

メモリ アラインメントとは、データを保存するときに特定のルールに従ってデータをメモリに配置するプロセスを指します。

3. IICのタイミング

1. 開始信号: マスターデバイスは、通信が開始されることを示すローレベル信号を送信します。

2. デバイス アドレス: マスター デバイスはスレーブ デバイスのアドレスを送信します。これは主に、通信するスレーブ デバイスを指定するために使用されます。アドレスは 7 ビットのスレーブ アドレスと読み取り/書き込みビットで構成されます。読み取り/書き込みビットは、マスターデバイスが読み取り操作を実行したいのか書き込み操作を実行したいのかを示すために使用されます。

3. 肯定応答信号: 各アドレスまたはデータが送信された後、送信側は SDA ライン (シリアル データ ライン) を解放し、受信側は肯定応答ビットを送信します。正しいデータを受信した場合は、ローレベルの応答(ACK)信号が送信され、受信したデータが正しくない場合、または応答が必要ない場合は、ハイレベルの非応答(NACK)信号が送信されます。

4. 読み取りまたは書き込み操作: マスターデバイスは、データを送信することによって読み取りまたは書き込み操作を完了します。読み取り操作では、スレーブ デバイスはマスター デバイスにデータを送信し、書き込み操作では、マスター デバイスがスレーブ デバイスにデータを送信します。

5. 停止信号: マスターデバイスは、通信の終了を示すためにハイレベルの停止信号を送信します。

4、静的役割

static キーワードは、C 言語の静的変数、静的関数、静的グローバル変数、および静的ローカル変数に使用できます。それらの特定の機能には、変数のライフサイクル、スコープ、および他のファイルに対する可視性の制御が含まれます。

5. tty デバイスの確認方法

ls /dev/tty* を使用します
ここに画像の説明を挿入します

6. 指定されたファイルコマンドを検索します。

1. find コマンドを使用します。

find <路径> -name <文件名>

<path>: 検索の開始パスを指定します。ルート ディレクトリ/、現在のディレクトリ、またはその他の指定されたディレクトリにすることができます。
-name <ファイル名>: 検索するファイル名を指定します。ワイルドカードは、任意の文字を表す * など、あいまい一致に使用できます。

2. 検索コマンドを使用します。

locate <文件名>

<ファイル名>: 検索するファイル名を指定します。find とは異なり、locate コマンドはデータベースベースの検索を使用するため、高速です。

7. 3回の握手と4回の手を振る

1.3回の握手

1. 最初のハンドシェイク (SYN): クライアントは、SYN (同期) フラグを持つパケットをサーバーに送信して、接続の確立を要求します。送信者は、開始値として初期シーケンス番号 (Sequence Number) を選択し、SYN フラグを 1 に設定します。

2. 2 回目のハンドシェイク (SYN+ACK): クライアントから SYN パケットを受信した後、サーバーは受信を確認し、SYN および ACK (応答) フラグを持つパケットをクライアントに送信します。また、サーバーはそれ自身の初期シリアル番号を選択し、クライアントのシリアル番号に確認応答番号として 1 を追加します。

3. 3 回目のハンドシェイク (ACK): サーバーから SYN+ACK パケットを受信した後、クライアントは確認として ACK フラグを含むパケットをサーバーに送信します。このパケットのシーケンス番号は、受信した確認応答番号に 1 を加えた値に設定されます。

ここに画像の説明を挿入します

2. 4回手を振る

1. ステップ 1 (FIN1):
接続をアクティブに閉じる当事者 (イニシエーターと呼ばれる) は、FIN (終了) フラグを含む TCP セグメントを相手に送信します。
イニシエーターはデータを送信しなくなりましたが、相手から送信されたデータを受信することはできます。

2. ステップ 2 (ACK1):
FIN メッセージを受信した後、FIN を受信する側 (パッシブ クローザーと呼ばれる) は、FIN が受信されたことを確認するために確認応答 (ACK) メッセージをイニシエーターに送信します。
パッシブ クローザーは、送信バッファと受信バッファの両方のデータが転送されるまで、残りのデータを送信できます。

3. 3 番目のステップ (FIN2):
パッシブ クローザーは、FIN フラグを含むメッセージ セグメントを送信して、接続を閉じたいことを示します。
パッシブ クローザーはデータを送信しなくなりましたが、イニシエーターからデータを受信することはできます。

4. ステップ 4 (ACK2):
パッシブ クローザーから FIN を受信した後、イニシエータはパッシブ クローザーに確認応答を送信して、FIN の受信を確認します。
イニシエーターは、相手が確認応答を受信することを確認するために、一定期間待機します。

ここに画像の説明を挿入します

8. 半密閉状態

ハーフクローズ状態とは、TCP 接続において、一方の当事者が出力ストリーム (データの送信) を閉じても、もう一方の当事者が送信したデータを受信できることを意味します。

9. バイトストリームとデータグラム

字节流(TCP):

バイト ストリームは、明確なメッセージ境界のない、データをバイトの連続ストリームとして扱う TCP の送信方法です。
TCP はデータをバイトに分割し、構造化されていない方法で接続経由で送信します。
送信者はバイト ストリームの形式でデータを受信者に送信し、受信者はバイトを受信した後に完全なデータを順番に再組み立てします。
信頼性と順序に関して、TCP はシーケンス番号、確認番号、再送信メカニズムを通じてデータの信頼性と正しい順序を保証します。

数据报(UDP):

データグラムは UDP における伝送方式であり、データを独立したデータ パケットとして扱い、各データ パケットは互いに独立しています。
UDP は、送信のためにデータを固定サイズのデータ​​グラム (通常は UDP データグラムまたは UDP パケットと呼ばれます) に分割します。
各データグラムには、送信元ポート、宛先ポート、長さなどを含む独自のヘッダー情報があり、データの識別と組み立てに使用されます。
データグラムの順序と信頼性は送信時には保証されず、受信側は受信したデータグラムの順序と完全性を保証できません。

要約する

この記事ではここで説明します。

おすすめ

転載: blog.csdn.net/m0_49476241/article/details/132243852
おすすめ