2023 年のコンピューター セキュリティ研究面接の基本的な専門的な質問 (データ構造、アルゴリズム、コンピューター言語、コンピューター ネットワーク、データベース、オペレーティング システム、数学)


以下の専攻関連の基本的な質問は、2022年夏の面接準備中に断続的に作成し、最終的にアモイ大学に行きましたが、この内容が大学院進学を目指す学生の参考になれば幸いです。少ないほど良い、速いほど遅い、あまり心配しなくてもいいと思います、ゆっくりしたほうが速いです!

データ構造

ヒープ、スタック、キュー、リンク
リストなどのデータ構造 ツリー: 赤黒ツリー、二分木のさまざまな枝など
図: オイラー グラフ: ハミルトニアン グラフ
検索アルゴリズム、ハッシュ アルゴリズムなど

Q: データ構造の定義

論理構造(コレクション、線形構造、ツリー構造、ネットワーク構造)、ストレージ構造、データ操作

Q: 配列とリンクリストの違い

配列の記憶領域はスタック上に割り当てられ、記憶密度が高く、必要な記憶領域のサイズがあまり変化せず、事前にサイズが決定できる場合には、配列を使用してデータを記憶するのが適切です; リンク リストの記憶領域はヒープ上に動的に適用されます。配列の長さが大きく変化し、データのサイズを事前に見積もることができない場合は、記憶にリンク リストを使用することをお勧めします。(1
)配列はメモリ内で連続している; (2) 配列を使用する前に、配列の長さを事前に固定する必要があり、配列サイズの動的な変更はサポートされていない; (3) 配列の要素が増加すると、配列が超過する可能性がある(4) 配列の要素が減るとメモリの無駄が発生する; (5) 配列を追加または削除するときに他の要素を移動する必要がある; (1) リンクされたリストは動的メモリ割り当ての方法を採用しており、メモリ

不連続 (2) 要素の動的な追加または削除をサポート (3) 必要に応じて malloc または new を使用してメモリを適用でき、未使用の場合は free または delete を使用してメモリを解放できます。

Q: ハッシュテーブル、競合に対処する方法

キーワードと値(Key-Value)に従って直接アクセスされるデータ構造です。つまり、キーワード key とマッピング関数 Hash(key) を通じて対応する値 value を計算し、キーと値のペアをテーブル内の位置にマッピングしてレコードにアクセスし、検索を高速化します。 1. オープンアドレス方法
重複したアドレスに基づいて、アドレスがインクリメントされ、線形に検出されてハッシュされ、2 回検出されてハッシュされ、擬似ランダムに検出されてハッシュされます。
2. チェーンアドレス方式。与えられたハッシュ関数で得られた同じハッシュアドレスを持つキーワードをすべて同じ線形連結リストに格納し、その連結リストをキーワード順に並べるチェーンアドレス方式は、頻繁な挿入、削除に適しています。
3. 再ハッシュ、複数の異なるハッシュ関数の同時構築

Q:二分探索木のメリットとデメリット(検索はできるがメンテナンスができない)

長所: 高い検索効率、単純な挿入および削除アルゴリズム、および同様の検索時間の複雑さ 短所
: 挿入順序に応じて、最悪の場合、二分探索ツリーは単一の分岐ツリーに縮退する可能性があります。つまり、すべてのノードが同じ側​​、このとき、検索の時間計算量は O(N)

バランス バイナリ ツリーです。つまり、厳密にバランスの取れた BST (バランス係数が 1 を超えない) です。この場合、検索プロセスは BST と同じですが、AVL には最悪の BST (単一分岐ツリー) が存在しない点が異なります。したがって、検索効率は最高であり、最悪の場合は O(logN) 程度になります。
バイナリバランス ツリーの厳密なバランス戦略では、検索構造 (挿入、削除操作) を確立するコストと引き換えに、検索効率が犠牲になります。安定した O(logN) 検索時間の複雑さ
赤黒ツリー: ソート バイナリ ツリーには不均衡な問題があります。左側のサブツリーは非常に長いかもしれませんが、右側のサブツリーは非常に短いため、クエリのパフォーマンスが低下します (logn が n に縮退します)。フルバランスバイナリツリーは層数を確保できる 平均的にクエリ効率は高いが、メンテナンスが非常に面倒で、挿入や削除のたびにツリー構造が大幅に調整される可能性が高い。赤黒ツリーは、完全不平衡と完全平衡の間の二分木であり、各ノードが赤と黒の 2 色を持ち、同じ数の黒ノードがそのノードを通過して任意の葉ノードに到達するという一連のルールを通じて、 [ツリーの最大レイヤー数は 2 倍のギャップしかありません] ため、挿入と削除の効率が向上するだけでなく、ツリーのバランスが比較的取れ、クエリ効率も良くなります。

Q: 赤黒木の概念と特性の紹介

自己平衡型二分探索木、1. ノードは赤または黒です。2. ルート ノードは黒です。3. 各リーフノードは黒い空のノード (NIL ノード) です。4 それぞれの赤いノードの子は両方とも黒です。(各リーフからルートまでのすべてのパス上に 2 つの連続する赤いノードが存在することはできません) 5. 任意のノードから各リーフまでのすべてのパスには、深さの差が 1 倍である同じ数の黒いノードが含まれます。内では、検索時間の計算量 O(logN )

Q:赤黒ツリーの応用で、赤黒ツリーは実現できますか?

一般にメモリのソートに使用され、時間計算量は低く、O(logn)、STL のマップとセットは内部的に赤黒ツリーを使用、Linux プロセス スケジューリング CFS typedef int KEY_TYPE; typedef struct _rbtree_node { unsigned char color; struct
_rbtree_node
* right ; struct _rbtree_node *left; struct _rbtree_node *parent; KEY_TYPE key; void *value; } rbtree_node; typedef struct _rbtree { rbtree_node *root; ノードが共通リーフの場合、左右のサブツリーは両方とも空であり、共通リーフ ノードを直接定義します。ノードを選択し、現在のノードがリーフ ノードであると判断します










Q: 一定量のデータからデータを見つける方法:

順序付けされた配列このストレージ構造の利点は、データへのランダム アクセスをサポートし、バイナリ検索アルゴリズムを使用して検索操作の複雑さを軽減できることです。デメリットも明らかで、データの挿入や削除の際、要素の順序を維持するために、大量のデータの移動操作が必要になります。
二分探索木効率的な二分探索アルゴリズムをサポートするだけでなく、挿入および削除操作を迅速に実行できるデータ構造が必要な場合、最初のものは二分探索ツリーです。欠点は、極端な場合には、二分探索ツリーが線形リンク リストになる可能性があることです。
二分木のバランスをとる二分木には不満があったため、二分探索木の利点をベースに欠点を改善し、バランスの概念を導入しました。さまざまなバランシング アルゴリズムに従って、特定の実装用の AVL ツリー/
ジャンプ テーブルがあります。ジャンプ テーブルを使用すると、ソートされたデータをマルチレベルのリンク リスト構造で分散できます。また、データの効率的な検索もサポートし、データの挿入と削除の操作が比較的簡単です。最も重要なことは、比較的バランスの取れたバイナリを実現することです。木は数桁軽いです。欠点は、ある程度のデータの冗長性があることです。

Q:チェックセット

ユニオン検索セットはツリー型のデータ構造であり、一部の素セット (素セット) のマージやクエリの問題に対処するために使用されます。
検索 (Find): 2 つの要素が同じセット内にあるかどうかをクエリします。
マージ (ユニオン): 2 つの素なセットを 1 つのセットにマージします
。 パス圧縮: ユニオン検索の効率を向上させるために使用されます。

Q: ハフマンツリー、プレフィックスツリー(辞書ツリー)

通信やデータ伝送において最も伝送効率の高いバイナリコード(ハフマン符号)を構築したり、プログラミングにおいて平均実行時間の最も短い最良の判定処理を構築したりするために用いられる、重み付けが最短の経路を持つ木である。マッチング、単語
頻度統計 (共通のプレフィックスが 1 つのノードで保存されるため、空間を圧縮するためのトライツリー)

Q: グラフの表現: 隣接行列と隣接リスト

グラフの表現: 隣接行列と隣接リスト、

Q:DFS

前に進めなくなるまでパスに沿って進むたびに、最も近い分岐点に戻り、グラフ全体を横断するまで未訪問の分岐点を訪問します。

Q: 接続されたコンポーネント

無向グラフでは、2 つの頂点が互いに到達できる (パスを通じて間接的に到達できる) 場合、その 2 つの頂点は接続されていると言われ、グラフ G(V,E) のいずれかの 2 つの頂点が接続されている場合、その 2 つの頂点は接続されていると言われます
。は G と呼ばれ、接続グラフと呼ばれます。それ以外の場合、G は非接続グラフと呼ばれ、その中の最大接続部分グラフは接続コンポーネントと呼ばれます。
強く接続されたコンポーネント: 2 つの頂点が有向パスを通じて相互に到達できる場合、それらの頂点は強く接続されていると言われます。グラフ G(V,E) の任意の 2 つの頂点が強く接続されている場合、そのグラフ G は強接続グラフと呼ばれ、そうでない場合、グラフ G は非強接続グラフと呼ばれ、その中の最大接続部分グラフと呼ばれます。強く接続されたグラフ部分。

Q: 有向グラフに周期があるかどうかはどのように判断すればよいですか?

トポロジカルソート: 有向グラフでは、すべてのノードがソートされ、どのノードもその前のノードをポイントしていないことが必要です。
まずすべてのノードの入次数をカウントし、次に入次数が 0 のノードを分離し、このノードが指すノードの入次数を 1 つ減らします。すべてのノードが分離されるまで操作を変更し続けます。最後に in 次数 0 のノードがない場合は、サイクルが存在し、トポロジカル ソートの深さ優先検索が存在しないことを意味します。DFS はグラフ上で実行され、DFS の

パスはツリー; DFS ツリー上のノードの場合、祖先を指すエッジまたはそれ自体を指すエッジがある場合、グラフ内にループが存在します。この方法の時間計算量は DFS トラバーサルの時間計算量と同じです。 O ( V + E ) O ( V + E ) O ( V + E )

Q: オイラー図

グラフのすべてのエッジを 1 回だけ通過し、すべての頂点を横断する回路はオイラー回路と呼ばれ、オイラー回路を含む無向グラフはオイラー グラフと呼ばれます。グラフのすべてのエッジを 1 回だけ通過し、すべての頂点を横断するパスはオイラー グラフと呼ばれます。頂点はオイラーパスと呼ばれます。オイラー経路はあるがオイラー回路は含まれていない無向グラフは、半オイラー グラフと呼ばれます。
1. 無向グラフ G の場合、G が接続されており、奇数次の頂点がない場合に限り、G はオイラー グラフです。
2. 無向グラフ G の場合、G が接続されており、G 内にちょうど 0 または 2 つの奇数次の頂点がある場合に限り、G は半オイラー グラフになります。
3. 有向グラフ G の場合、G のすべての頂点が同じ強連結成分に属し、各頂点の入次数と出次数が同じである場合に限り、オイラー グラフになります。

Q: クリティカルパス

AOE ネット、エッジはアクティブなネットを表します。AOE ネットワークには、ソース ポイントと呼ばれる入次数 0 の頂点が 1 つだけあり、シンク ポイントと呼ばれる出次数 0 の頂点が 1 つだけあります。ソースポイントからシンクポイントまでのすべてのパスのうち、パス長が最も長いパスをクリティカルパスと呼び、クリティカルパス上のアクティビティをクリティカルアクティビティと呼びます。プロジェクト全体を完了する最短時間はクリティカル パスの長さであり、主要なアクティビティが期限内に完了できない場合、プロジェクト全体の完了時間は延長されます。クリティカルパスさえ発見できれば、最短の完了時間を得ることができる。

アルゴリズム

一般的に使用されるアルゴリズム:
動的計画法アルゴリズム
の複雑さを超えない計算方法
特定のソート アルゴリズム、最小スパニング ツリー、最短パスなどのデータ構造アルゴリズム、ディープ検索とワイド検索、パターン マッチングなど
Web サイトに関するブラシの質問

Q; 基本的なプログラミング アルゴリズムについての質問ですが、お気に入りのアルゴリズムについて教えてください。アルゴリズムについてご存知ですか? 適用シナリオ、改善の方向性

Q: 動的プログラミングと分割統治アルゴリズムについて教えてください。

1. 動的計画法アルゴリズムは分割統治アルゴリズムに似ており、その基本的な考え方は、解決すべき問題をいくつかのサブ問題に分解し、最初にサブ問題を解決してから、元の問題の解を取得することです。これらの副問題の解決策から。
2. 分割統治法とは異なり、動的計画法によって解決される問題に適しており、分解によって得られる部分問題は互いに独立していないことがよくあります。(つまり、次のサブステージの解法は、前のサブステージの解法に基づいて、さらなる解法が実行されます)
3. 動的計画法は、最適な解を得るためにフォームを埋めることによって徐々に進めることができます。解決。

Q: アルゴリズムの定義

アルゴリズムとは、問題を解決するための方法と手順、アルゴリズムを測定するための基準、有限性、正確性、実現可能性、0 個以上の入力と 1 つ以上の出力、時間計算量: プログラムが実行されるおよその回数、および
非- 実行時間 (時間はマシンに関係します)、空間の複雑さ: 実行中にプログラムが占有する最大メモリ空間、正確性、可読性、堅牢性、高効率、および低ストレージ

Q: 各ソート アルゴリズムの時間計算量、クイック ソートとハッシュ ソート、特定のアルゴリズムのプロセスとステップ、およびアルゴリズムの特徴

Q: ダイクストラアルゴリズムとフロイドアルゴリズム

1. 重み付きグラフの単一ソース最短経路問題は貪欲なアルゴリズムですが、ダイクストラ アルゴリズムは、グラフ内の指定された 2 つの点間の最短距離と経路を見つけたり、点の各ペア間の距離を計算したりするのにより適しています。頂点が比較的大きい; 2

. フロイド アルゴリズムは古典的な動的計画法アルゴリズムです 1) 頂点 vi から頂点 vk への最短パスを Lik として設定し、頂点 vk から vj への最短パスを Lkj として設定し、頂点 vi から頂点へのパスをvj を Lij として、次に vi から vj への最短パスは次のとおりです: min((Lik+Lkj),Lij)、vk の値がグラフ内のすべての頂点である場合、vi から vj への最短パスを取得できます 2) vi から vk または vk から vj への最短経路
Lik の場合 最短経路 Lkj も同じ方法で取得されます。
時間計算量: O(n²)、フロイド アルゴリズムの時間計算量は O(n^3)
空間計算量: O ( n )、O ( n 2 )

Q: 最小スパニングツリー、プリムとクスラル

プリム: 時間計算量は O(n²) で、まずノードを決定し、このノードから開始し、貪欲アルゴリズムを使用して最小の重みを持つエッジを見つけます。接続されたグラフのすべての頂点がカバーされるまで、含まれる頂点の数を徐々に増やします。

Kusral 氏によると、時間計算量は O(eloge) (e はネットワーク内のエッジの数) であるため、エッジが疎なネットワークの最小スパニング ツリーを見つけるのに適しており、最小スパニング ツリーの初期状態は次のとおりです。 n 頂点、エッジなし 接続グラフ T = (V, {})、概要グラフの各頂点は、それ自体で接続コンポーネントを形成します。E でコストが最小のエッジを選択します。このエッジに接続されている頂点が T の異なる連結コンポーネント上にある場合は、このエッジを T に追加します。そうでない場合は、このエッジを破棄して、コストが最も低い次のエッジを選択します。T 内のすべての頂点が連結コンポーネントを形成するまで、以下同様です。

Q: バイナリ ツリーの順序どおりの走査と再帰は許可されます。

スタックを利用して実現;
void INOrderTraverse(BiTNode *T){ if(T){ INOrderTraverse(T->lchild); // 左の子を走査するdisplayElem(T); // ノードデータを操作する関数のメソッドを呼び出すINOrderTraverse( T- >rchild); // 右側の子をトラバースします} // ノードが空の場合は、前のレイヤーに戻りますreturn; }







Q: 基数ソートの速度を向上させるにはどうすればよいですか?

基数ソートの複雑さから、複雑さに影響を与える大きなパラメータは基数の選択であることがわかります。多くの人が基数ソートを使用する場合、デフォルトの基数は 10 ですが、これによりアルゴリズムの複雑さの定数が大幅に増加するため、配列の長さが長い場合は、より大きな基数を選択するとパフォーマンスが向上する可能性があります。アルゴリズムのベースを 1000 に変更します

Q: 分割統治思考と動的計画法思考の関係と違い

Q: NP 問題と動的計画法との関係と違い

Q: 配列内の連続データを削除するにはどうすればよいですか? 文字列 i から j を削除します

コンピュータ言語

C++:オブジェクト指向、継承、カプセル化、ポリモーフィズム、仮想関数、純粋仮想関数
C言語:ポインタ、内部ストレージ、実装機構など
Python言語
Java言語

Q: ポインタは下部でどのように実装されますか?

Q: どのようなプログラミング言語に精通していますか?

Q: 最下層の Python と C++ の違い

Q: Java と Python の違い、オブジェクト指向の理解方法、インターフェイスとは何ですか

Java は静的型付け言語、Python は動的型付け言語です。Python の変数は動的ですが、Java の変数は静的で事前に宣言する必要があります。Python にはプロセス指向の設計手法を使用するプログラムが多く、後から追加されます
。 Javaはポインタを使わずにC++を実現するもので、主にオブジェクト指向の設計手法を採用しており、多くの概念がoopの概念となっています。プロセス指向、比較的シンプルで直観的、オブジェクト指向、比較的抽象的で洗練されているが、過度に抽象化されやすい;
Python のライブラリは、GPU 操作、ニューラル ネットワーク、インテリジェント アルゴリズム、データ分析、画像処理、科学技術コンピューティング、 Java には Python ほどオープン ソース ライブラリが多くありません。多くのライブラリは営利企業によって内部的に使用されるか、jar パッケージとしてリリースされ、元のコードを見ることができません。Java は商業開発に偏っており
、一方、Python はデータ分析に適しています。

これは一種のプログラミング思考であり、プロセス指向の考え方から移行したもので、この問題の各ステップとシーケンスにより多くの注意を払い、より直接的かつ効率的で、必要に応じて直接プログラミングを開始できます。やるべきことをやる; オブジェクト指向の考え方では、参加者が誰であるか、要件にどのようなオブジェクトが含まれているか、およびこれらの各オブジェクトが何をする必要があるかに重点が置かれます。モジュールとオブジェクトに分割すると、保守と拡張が容易になります。
データとそのデータに対する操作メソッドを、相互依存する全体オブジェクトとしてまとめます。類似したオブジェクトの共通性を抽象化してクラスを形成します。クラス内のデータのほとんどは、このクラスのメソッドでのみ処理できます。クラスは単純な外部インターフェイスを通じて外部との関係を持ち、オブジェクトはメッセージを通じて相互に通信します。プログラムの流れは使用するユーザーによって決定されます。簡単に言えば、すべてのものはオブジェクトです。
カプセル化、継承、ポリモーフィズム。

Q: JAVA オブジェクト指向プログラミングには、カプセル化、継承、ポリモーフィズムという 3 つの主要な機能があります。

カプセル化: 基本的な考え方は、「詳細を隠す」ことと「データのセキュリティ」を実現し、外部からアクセスする必要のないオブジェクトのメンバー変数とメソッドをプライベート化し、これらにアクセスしたいという開発者の希望を満たすパブリック メソッドのみを提供することです。データとロジック、データのセキュリティの確保 セキュリティとプログラムの安定性。すべてのコンテンツは外部には表示されません。
継承: サブクラスは親クラスのプロパティとメソッドを継承し、拡張できます。他の機能も継承し、発展を続けます。
ポリモーフィズム: 同じメソッドを実行すると、同じタイプのオブジェクトが異なる動作特性を示すことがあります。ポリモーフィズムは、継承された上位変換と下位変換、インターフェイス コールバック、メソッドの書き換えとオーバーロードを通じて実現できます。メソッドのオーバーロード自体はポリモーフィズムの現れで​​す。

Q: ポインターと参照の違い

ポインタ: 他の変数のメモリアドレスを保存する変数です. ポインタは保存したメモリアドレスが指す値に * でアクセスします; 参照
:他の変数のエイリアスです. 一度初期化すると変更できません. 参照自動間接化を備えた関数と見なすことができます コンパイラによって取得された自動間接化値と同等の永続定数ポインタ、つまり、コンパイラは * の追加を支援し、参照の内部実装はポインタです。

1. ポインタは最初に定義してから初期化し、繰り返し割り当てることができます。参照は定義時に初期化する必要があります。一度初期化されると変更することはできません。これはconst
の定義に似ています。 4. ポインタは複数レベルにすることができ、参照は 1 レベルのみにすることができます。5.ポインタは値を参照するために (*) を必要とし、参照は値を直接取得できます。6. ポインタは算術演算をサポートしますが、参照はサポートできません。



Q: 再帰と参照の違いは何ですか?

再帰: プログラムが直接的または間接的に自身を呼び出す方法を指し、複雑で巨大な問題を単純化し、微分された小さな問題の解決に重点を置くことで大きな問題を解決できます。
参照は変数の新しい定義ではなく、既存の変数のエイリアスです。コンパイラは参照変数用にメモリ空間をオープンせず、参照される変数と同じメモリ空間を共有します。

Q: デストラクターはどのような場合に使用するのですか?

コンストラクター (メソッド) は、オブジェクトの作成後にオブジェクトによって自動的に呼び出される最初のメソッドです。これは宣言されたすべてのクラスに存在し、特別なメンバー メソッドです。この役割は、いくつかの初期化タスクを実行することです。Php は __construct() を使用してコンストラクターを宣言しますが、宣言できるのは 1 つだけです。

デストラクター (メソッド) は構築メソッドの逆で、オブジェクトが破棄される前にオブジェクトによって自動的に呼び出される最後のメソッドです。これは、PHP5 で新しく追加されたコンテンツです。ファイルを閉じたり、メモリを解放したりするなど、オブジェクトを破棄する前に特定の操作を実行するために使用されます。クラス内でいくつかのポインター変数を宣言する場合、通常はデストラクターで実行します
。 space の場合、システムはポインター変数が指すスペースを解放しないため、自分で削除する必要があり、通常、この削除はデストラクターに配置されます。

Q: static 静的変数の使用法は?

関数内のローカル変数の値は、関数呼び出しの終了後に消えず、元の値を保持することが望まれます。つまり、ローカル変数によって占有されていた記憶ユニットは解放されず、次回関数が呼び出されたときにも保持されます。の場合、変数は最後の関数呼び出しの終了時の値を保持します。このとき、ローカル変数は静的ローカル変数(静的ローカル変数)として指定する必要があります。

静的ローカル変数は、静的メモリ領域内のメモリ位置を割り当てます。プログラムの実行中は解放されません; (2) 静的ローカル変数への初期値の割り当てはコンパイル時に実行されます。つまり、初期値の割り当ては 1 回だけです; (3) 初期値が割り当てられていない場合静的ローカル変数の場合、コンパイル時に初期値 0 (数値変数の場合) または null 文字 (文字変数の場合) が自動的に割り当てられます (4) 静的ローカル変数は関数の実行後も存在しますが、呼び出しが終了すると、他の関数はその呼び出しを参照できなくなります。

Q: Java にはポインタがありますか?

ポインタを定義しないと、すべてのオブジェクト変数はポインタになり、ポインタを使用したい場合でも非ポインタ オブジェクト変数は存在しません。これがポインタの一般化と強化です。
これはポインタではなくオブジェクト変数と呼ばれるようになりましたが、これは概念的な希薄化と弱化です。ポインタの加算や減算、*、-> などの演算子はありません。これはポインタを簡略化したものです。

Q: Java の GC 原理は何ですか?

GC とはガベージコレクションの意味で、メモリの扱いはプログラマにとって問題になりやすい部分ですが、Java が提供する GC 機能は、オブジェクトがスコープを超えているかどうかを自動的に監視し、自動的にメモリを回収するという目的を達成します。CPU、メモリ、IO の間には大きなパフォーマンスの差があります。

Q: C++ と Java の違いは何ですか?

Java は C++ よりも信頼性が高く、構文はより簡潔で、完全なオブジェクト指向です。Java は、JVM 上で実行する場合に移植性が高くなります。Java はメモリの割り当てとリサイクルを必要とせず、自動的に行われます。ポインタの概念ですが、配列を直接使用します; C++ の多重継承の代わりにインターフェイスを使用します。

Q: 参照はパラメータを渡すことができますか?

参照型の値をパラメータに渡すと、メモリ内のこの値のアドレスがローカル変数にコピーされるため、このローカル変数の変更は関数の外部に反映されます。
ポインタに相当し、参照型を渡す場合はポインタの転送に相当します。

Q:C言語のmalloc関数とは何ですか?C言語のreturnは複数の値を返しますか?

スタック内のメモリブロックに適用すると、強制型変換が必要な void* が返され、解放には free を使用、

変数の定義からプログラムの最後までグローバル変数を使用、
配列アドレス方式では、戻り値の要素が配列、および使用 配列のアドレスは仮パラメータとして使用され、
構造体アドレス メソッド、構造体ポインタは仮パラメータ構造体ポインタに渡されます。

Q: スタックオーバーフローの原因は何ですか?

関数呼び出しが深すぎる (再帰など)。動的適用後にスペースが解放されない。

Q: プログラムのコンパイルと実行のプロセスはどのようなものですか?

コンパイル、アセンブル、リンク、ロード

Q: 5,000 行のコードを使ったら何をしますか?

コンピュータネットワーク

コンピュータネットワーク:7層モデル、各種通信プロトコル、各層の伝送プロセスなど

Q: コンピュータネットワークの階層化概念や OSI の 7 層モデルも分割統治の概念ですか?

階層化は主に分業によって行われ、機能をブロックに分割できますが、分割統治の各小さな部分には関連性がなく、7 層モデルでは、各層のサービスは次の層に基づいています。層

Q:各層と各層のプロトコルについて

トランスポート層は主に、信頼性の高い伝送と信頼性の低い伝送、エラー制御、フロー制御、多重化と逆多重化などを含む、プロセスに対する一般的なデータ伝送サービスを提供し、ネットワーク層は主に、ルーティングの選択、エラー制御を含むホストへのデータ伝送サービスを提供します
。 、フロー制御、輻輳制御など。データリンク層は主に、フレーミング、エラー制御、フロー制御、アクセス制御などを含む、同じリンク上のホストにデータ送信サービスを提供します。物理層は主に、伝送媒体上でデータビットストリームを伝送すること
。特定の伝送媒体を指すものではなく、伝送媒体と通信手段との間の差異を可能な限り遮蔽することを意味する。

Q: 回線交換、パケット交換、パケット交換の違いは何ですか?

Q: コンピュータネットワーク: スリーウェイハンドシェイク

無効な接続要求セグメントが突然サーバーに送信されることを防ぐために、エラーが生成されます。期限切れの接続要求セグメント: クライアントによって送信された最初の接続要求セグメントは失われませんが、ネットワーク ノードに長時間留まるため、接続が解放されてから一定の時間が経過するまで遅延します。これはすでに有効期限が切れたセグメントであることが判明しました。しかし、サーバーは無効な接続要求セグメントを受信した後、それをクライアントが再度送信した新しい接続要求と誤認しました。次に、確認メッセージ セグメントがクライアントに送信され、接続の確立に同意します。「スリーウェイ ハンドシェイク」が使用されていないと仮定すると、サーバーが確認を送信する限り、新しい接続が確立されます。クライアントは接続を確立するリクエストを発行していないため、サーバーの確認を無視し、サーバーにデータを送信しません。しかし、サーバーは新しいトランスポート接続が確立されたと考え、クライアントがデータを送信するのを待っています。このようにして、サーバーの多くのリソースが無駄になります。「スリーウェイハンドシェイク」方式を採用することで、上記の現象を防ぐことができます。

Q:ジワンの4つの波

サーバーはクライアントからの切断要求を受信した時点で未送信のデータが存在する可能性があるため、このとき最初に切断要求を受信したことを示すACKを返信します。データが送信されるまで待ってから FIN を送信し、サーバーからクライアントへのデータ送信を切断します。

Q: クライアントの TIME_WAIT 状態の意味は何ですか?

4 回目に手を振るとき、クライアントからサーバーに送信された ACK が失われる可能性があり、TIME_WAIT 状態を使用して、失われた可能性のある ACK メッセージが再送信されます。サーバーが ACK を受信しない場合、FIN を再送信します。クライアントが 2*MSL 以内に FIN を受信した場合、サーバーが ACK を受信せずに FIN を再送信し続けることを防ぐために、ACK を再送信し、再度 2MSL 待機します。
MSL (最大セグメント寿命) は、ネットワーク内のセグメントの最大生存時間を指します。2MSL は、送信と応答に必要な最大時間です。クライアントが 2MSL までに FIN を再度受信しない場合、クライアントは ACK が正常に受信されたと推測し、TCP 接続を終了します。

Q: フロー制御とは何ですか? フロー制御の目的?

送信者がデータを送信する速度が速すぎて受信者が受信できない場合、パケットは失われます。パケットロスを避けるために、受信者が時間内に受信できるように送信者の送信速度を制御します。これがフロー制御です。フロー制御の基本的な目的は、TCP の信頼性の側面であるパケット損失を防ぐことです。

Q: フロー制御を実現するにはどうすればよいですか?

主な方法は、受信側から返される ACK に自身の受信ウィンドウのサイズが含まれ、そのサイズを使用して送信側のデータ送信を制御することです。

Q: フロー制御によってデッドロックが発生しますか? デッドロックの発生を回避するにはどうすればよいでしょうか?

送信者がウィンドウ 0 の応答を受信すると、送信者は送信を停止し、受信者からの次の応答を待ちます。しかし、送信プロセス中にウィンドウが 0 ではない応答が失われた場合、送信者は待機しており、受信者は送信者が応答を受信して​​新しいデータの受信を待っていると考え、両者はお互いを待機することになります。 、デッドロックが発生します。

フロー制御によって引き起こされるデッドロックを回避するために、TCP は永続タイマーを使用します。このタイマーは、送信者がゼロウィンドウ応答を受信するたびに開始されます。時間が経過すると、受信者にウィンドウ サイズを尋ねるメッセージを積極的に送信します。受信側が依然としてゼロ ウィンドウを返した場合は、タイマーをリセットして待機し続けます。ウィンドウが 0 でない場合は、応答メッセージが失われたことを意味します。この時点で送信ウィンドウをリセットして送信を開始し、デッドロックの発生を回避します。

Q: 輻輳制御とウィンドウについて簡単に説明します

① スロースタートアルゴリズム ② 輻輳回避アルゴリズム ③ 高速再送アルゴリズム ④ 高速回復アルゴリズム
高速再送とは、タイムアウトが発生せず、送信者がネットワークエラー輻輳があると誤認しないように、連続 3 回の確認を受信した直後に再送することを意味します。(スロースタート閾値)
送信ウィンドウ swnd と受信ウィンドウ rwnd がほぼ等しいと前述しましたが、輻輳ウィンドウの概念が導入されているため、このときの送信ウィンドウの値は swnd = min(cwnd, rwnd) となります。 )、つまり、輻輳ウィンドウと受信ウィンドウの最小値。
輻輳ウィンドウ cwnd を変更するためのルール:
ネットワークに輻輳がない限り、cwnd は増加します
が、ネットワークに輻輳がある場合、cwnd は減少します。

Q: 輻輳制御とフロー制御の違い

輻輳制御: 輻輳制御はネットワークに作用します。ネットワークに過剰なデータが注入されるのを防ぎ、過剰なネットワーク負荷を回避します。一般的に使用される方法は次のとおりです: (1) 低速起動、輻輳回避 (2) 高速リロード パス、迅速な回復。
フロー制御: フロー制御は受信側に作用し、受信側がパケット損失を防ぐために時間内に受信できるように送信側の送信速度を制御します。

Q: MAC アドレスがあるのに、なぜ IP アドレスが必要なのでしょうか?

世界中にはさまざまなネットワークが存在するため、それぞれ異なるハードウェア アドレスが使用されます。これらの異種ネットワークが相互に通信できる場合、非常に複雑なハードウェア アドレス変換作業を実行する必要があるため、ユーザーまたはユーザー ホストがこの作業を完了することはほとんど不可能です。しかし、統一 IP アドレスはこの複雑な問題を解決します。インターネットに接続されているホストは統一された IP アドレスを持つだけでよく、ARP を呼び出す複雑なプロセスが必要ないため、それらの間の通信は同じネットワーク (仮想相互接続ネットワークまたは略して IP ネットワーク) に接続するのと同じくらい簡単で便利です。ソフトウェアが自動的に実行し、呼び出しプロセスはユーザーには見えません。

Q: コンピュータネットワークの核となる考え方

1. 分散思考 - パケット交換
2. 階層化思考: 階層化の利点は結合を減らすことです. 上位層は下位層の実装には関心がなく、下位層によって提供されるサービス (インターフェイス) のみを考慮します。このようにして、
層間の通信を標準化できます。正規化はレイヤー間の独立性を意味します。、独立して開発でき、この設計は、トランスポート層の TCP/UDP/DCCP/STCP、ネットワーク層の IPv4/IPv6、データリンク層のイーサネット、VLAN、WIFI、ワイヤレス 3G など、優れた柔軟性と拡張性をもたらします。 4G、5G プロトコルなど、レイヤード モードには再帰的機能があり、オーバーレイ ネットワーク、VPN、さまざまなトンネルなど、論理的な意味での任意のカプセル化と再カプセル化が可能であり、ネットワークの拡張性が大幅に向上します。
思考 – 伝送制御: TCP の輻輳制御により、ネットワークがより公平かつ安定になり、システムの耐障害性が向上し、システムが正常に動作し続けることが可能になります。

Q: http と https の違いは何ですか?

1. HTTP はクリア テキスト伝送であり、HTTPS は安全な SSL 暗号化伝送プロトコルです。
2. HTTP ポートには 80 を、HTTPS ポートには 443 を使用します。
3. HTTP 接続はステートレスであり、HTTPS プロトコルは SSL+HTTP プロトコルによって構築されます。
(ステートレスとは、データ パケットの送信、送信、受信が互いに独立していることを意味します)

Q: データリンク層とトランスポート層のフロー制御の関連性と違いは何ですか?

1. データリンク層のフロー制御はポイントツーポイントですが、トランスポート層のフロー制御はエンドツーエンドです。
2. データリンク層のフロー制御の方式として、受信側は確認フレームを受け付けられない場合には応答を行わない。トランスポート層のフロー制御方法は、受信者がスライディング ウィンドウを通じて送信者に通知することです。

Q: データリンク層とネットワーク層のセキュリティを確保するにはどうすればよいですか?

Q; データリンク層のデータを直接サブネットに転送できますか?

Q: NAT? ARQ プロトコル? ICMPプロトコル?

Q: 同期送信と非同期送信について教えてください。

Q: TCP と UDP の違いは何ですか?

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

オペレーティング システム: ジョブ スケジューリング、プロセス スケジューリング、メモリ管理など。

Q: プロセスとスレッド、スレッドとプロセスの類似点と相違点

プロセスはオペレーティング システムのリソース割り当ての基本単位であり、スレッドはプロセッサ タスクのスケジューリングと実行の基本単位です (プロセス内の実行フローとしても理解できます)。スレッドはプロセスの一部です。スレッドは同じプロセスの複数のプロセスは、プロセスのアドレス空間とリソースを共有し

、プロセス間のアドレス空間とリソースは互いに独立しています。プロセスがクラッシュした後、保護モードでは他のプロセスに影響を与えませんが、スレッドがクラッシュすると、プロセス全体が死んでしまいます。したがって、マルチプロセッシングはマルチスレッドよりも堅牢です。

Q: OS には何が実装されていますか?

これは、コンピュータ ハードウェア上のソフトウェアの最初の層であり、ハードウェア システムの最初の拡張であり、コンピュータ システム リソース (ファイル、デバイス、プロセッサ、メモリ) のマネージャ、およびユーザーとコンピュータ間のインターフェイス (コマンド インターフェイス、GUI グラフィカル ユーザー インターフェイス) です。 )、同時実行性(並列、マルチ CPU)、共有、仮想、非同期(リソースが限られているため、プロセスの実行は最後まで一貫性がなく、予測できない速度で進行します)。

Q: 割り込み関連ですか?

割り込みにより CPU はカーネル状態からユーザー状態に変更され、オペレーティング システムによる CPU の制御が戻ります。
割り込みが実行中の命令、内部割り込み、外部割り込み (クロック割り込み、I/O デバイス割り込み) に関連しているかどうか)
命令が実行されるたびに、外部割り込みによって実行されるかどうかを確認します。割り込みタイプ -> 割り込みベクタ テーブル。
アプリケーションはシステム コールを通じてオペレーティング システム カーネルのサービスを要求でき、システム内のさまざまな共有リソースは、オペレーティング システム カーネルの統合制御。そのため、共有リソースに関連するすべての操作 (ストレージ割り当て、I/O 操作、ファイル管理など) は、システム コールを通じてオペレーティング システム カーネルにサービス リクエストを行う必要があります。

Q: ミューテックスはクリティカル セクションのリソース問題をどのように解決しますか?

複数の同時プロセスがクリティカル セクションのリソースにアクセスする必要がある場合、クリティカル セクションにアクセスできるのは 1 つのプロセスだけであり、他のプロセスはアクセスできません。他のプロセスは、クリティカル セクションに入るプロセスのアクセスが終了するまで待機する必要があります。クリティカル セクションにアクセスすること。これは相互排他です。

Q: 生産者消費者モデル

Q: スケジュールアルゴリズム

その他の専門科目(データベース、ソフトウェア工学、コンピュータ構成原理、暗号学)

データベース: リレーショナル データベース モデル、ビューなど
ソフトウェア エンジニアリング: ソフトウェア開発モデル

Q: コンピュータのパフォーマンス指標の測定

CPU、ストレージ容量、データ入出力能力(I/Oスループット)、応答時間、消費電力などの全体的なパフォーマンス。

Q: 見る

内容がクエリによって定義される 1 つ以上のテーブルから派生した仮想テーブル。通常のテーブルの構造を持ちますが、データ ストレージは実装されていません ビューの変更: 単一テーブル ビューは通常、クエリと変更に使用され、基本テーブルのデータを変更します マルチテーブル ビューは通常、クエリに使用されます基本テーブルのデータは変更されません。

Q: データベースの見方、データベースの物理的および論理的構造

Q: SQL インジェクションの基本原理は何ですか?

Q: データベーストランザクションのアトミック操作を実現するにはどうすればよいですか? メモリーリーク?

Q: ソフトウェア開発モデル

ソフトウェアのライフサイクルは、要件分析、計画、設計、コーディング、テスト、運用、保守の6つの段階に分かれています。
1. ウォーターフォール モデル: 各ステージは 1 回だけ実行されるため、線形逐次ソフトウェア開発モデルです。
2. スパイラルモデル:インクリメンタル開発モデルの代表的なモデルの一つ。
3. 反復モデル: 反復モデルは、小さなウォーターフォール プロジェクトに似ています。各反復では、最終製品のサブセットであるリリース可能な製品が生成されます。
4. インクリメンタル モデル: 時間の経過とともに変化する線形シーケンスを使用します。
5. アジャイル モデル: アジャイル モデルは、チームワークとコミュニケーションを重視した、軽量、効率的、低リスクの開発手法であり、顧客ニーズが曖昧または変わりやすい中小規模の開発チームに適しています。

Q: ソフトウェアテストを行う理由、目的は何ですか?

ソフトウェアテストとは、ソフトウェア製品のエラーや欠陥を発見し、ソフトウェア開発者がエラーや欠陥を修正し、ソフトウェアの品質を向上させ、最終的にユーザーのニーズを満たすソフトウェア製品を提出することです。

Q: 暗号化

AES、DES
ハッシュ関数 SHA256、SHA3、SM3: ハッシュ (ハッシュ、ハッシュ) 関数。ハッシュ アルゴリズムを通じて任意の長さの入力を固定長の出力に変換し、出力はハッシュ値になります。簡単に言うと、任意の長さのメッセージを一定の長さのメッセージ ダイジェストに圧縮する機能で、情報フィンガープリントとも呼ばれます。

Q: ハッシュ関数の特徴:

圧縮: 入力は任意の長さで、出力は固定長です > 効率: 高速計算;
一方向: ハッシュ値から入力を計算することは現実的ではありません;
衝突防止:
弱い衝突: 与えられた x1、 H(x1)
= H(X2)となる x2≠ x を見つけます
。 強い衝突: H(1) = H(x となるような x1 と xz のペアを見つけます。
感度: 平文の 1 ビットの変更は重大な影響を及ぼします。
デジタル署名のハッシュ値への影響: デジタル署名は、署名者がその秘密鍵とメッセージを使用して生成するデジタル文字列であり、他の人が偽造することはできません。このデジタル文字列の有効性は、署名者の公開鍵とメッセージを使用することで検証できますデジタル署名アルゴリズム (ECDSA) SM2 は
楕円を使用します。 曲線暗号化 (ECC) によるデジタル署名アルゴリズム (DSA) のシミュレーション。ブロックチェーンは、
安全な共有分散型データ台帳です。ブロックチェーン テクノロジーは、データを共有する特定の参加者のセットをサポートします。トランザクション データの複数のソースを共有することで、データをハッシュ形式の一意の識別子によってリンクされた共有ブロックに分割し、単一の情報ソースを通じてデータの整合性を確保し、データの重複を排除し、データのセキュリティを向上させることができます。関連テクノロジ: ハッシュ関数 (SHA) -256)、デジタル署名アルゴリズム (ECDSA) など

Q:RSA暗号化アルゴリズム

その公開キーと秘密キーは、大きな素数のペア (100 ~ 200 桁以上の 10 進数) の関数です。公開鍵と暗号文から平文を復元することの難しさは、2 つの大きな素数の積 (これは数学的に認識されている問題です) の非対称暗号化
アルゴリズムを分解するのと同等であり、一方向関数の順方向解は単純で、逆方向の解は次のようになります。受信者は公開鍵と秘密鍵を生成し、公開鍵を公開し、送信者は元のテキストと受信者の公開鍵を計算して暗号文を取得し、受信者は暗号文と秘密鍵を復号化します。

数学

Q: 二項関係とは何ですか?

二項関係は主に 2 つの集合の要素間の関係、または集合内の要素間の関係を表します。2 つの集合 A と B が与えられた場合、R はデカルト積 A × B の部分集合であり、R は A から B までの二項関係と呼ばれます。 B.

Q: フーリエ変換とは何ですか?

フーリエ変換の目的は、時間領域(つまり時間領域)の信号を周波数領域(つまり周波数領域)の信号に変換することですが、領域が異なるため、理解の角度が異なります。同じことも変化するため、時間領域で扱うのが難しいいくつかの箇所は、周波数領域で比較的簡単に扱うことができます。

フーリエ変換では、周期関数 (信号) には複数の周波数成分が含まれており、複数の周期関数 (基底関数) を加算することで任意の関数 (信号) f(t) を合成できると考えられます。物理的な観点から見ると、フーリエ変換は一連の特殊関数 (三角関数) を直交基底とし、元の関数を線形変換するものであり、物理的な意味は、元の関数を各基底に投影することです。機能。

Q: 最尤推定は可能ですか? 正定行列?

与えられたデータを通じてモデルのパラメーターを推定し、既知のサンプル結果 (統計的確率) を使用して、そのような結果につながる可能性が最も高いパラメーター値を推定するパラメーター推定方法です。

ここに画像の説明を挿入
Q: 常微分方程式の解法はありますか?

Q:微積分関係の人は?

Q: 上限と下限の違いは何ですか?

Q:同等関係の証明は?

Q:命題の定義は?感嘆文は命題ですか?

Q: 単純ベイズの原理

Q: テイラー公式、テイラー級数、テイラー展開?

Q: 二次積分と二重積分の違いと関係は何ですか?

Q: シーケンスの制限はありますか?

Q:指導してもらえますか?

Q: 微分平均値定理の違いと関連性は何ですか?

Q: 方向微分ですか?

Q:グラデーションは?

Q: ロピタルの法則?

Q: 可積分関数のプロパティは何ですか?

Q: 積分の平均値定理とは何ですか?

Q: 逆関数が成立する条件は何ですか?

Q: 一貫性と継続性はありますか?

Q: n 次行列が対角化可能であるための必要十分条件は何ですか? 2. 数学的期待の性質は何ですか?

Q: 条件付き確率、総確率公式、ベイズ公式、確率論の条件付き確率、応用例を教えてください。

Q: 大きな数値の導出、偏導関数

おすすめ

転載: blog.csdn.net/Magnolia_He/article/details/127697469
おすすめ