やっとお経になりました——1.ノバテクノロジー

6954 ワード

前に交通銀行のクレジットカードセンターを面接したことがありますが、職場の主な質問項目をテストして、書くことはありません.
ノバのC++面接は最初の技術面です.
 
ポジションC++開発者
最初に聞いたのはすべてプロジェクトです
いくつかの核心的な問題:
一.オブジェクト向け:
1.3要素:パッケージ、継承、マルチステート(マルチステートのみを解釈させ、ここでは3つを列挙する)
カプセル化は、客観的な物事を抽象的なクラスにカプセル化し、クラスは自分のデータと方法を信頼できるクラスやオブジェクトだけに操作させ、信頼できない情報を隠すことができる.簡単に言えば、クラスは、データをカプセル化し、これらのデータを操作するコードの論理エンティティです.1つのオブジェクトの内部では、一部のコードまたは一部のデータはプライベートであってもよく、外部からアクセスできません.このようにして、オブジェクトは内部データに対して異なるレベルの保護を提供し、プログラム内の関係のない部分が意外に変更されたり、オブジェクトのプライベート部分が誤って使用されたりすることを防止する.
継承とは、あるタイプのオブジェクトに別のタイプのオブジェクトのプロパティを取得させる方法です.レベル別の概念をサポートします.継承とは、既存のクラスのすべての機能を使用し、元のクラスを再記述することなく拡張できる能力です.継承によって作成された新しいクラスを「子クラス」または「派生クラス」と呼び、継承されたクラスを「ベースクラス」、「親クラス」または「スーパークラス」と呼ぶ.継承概念の実装方式には,実装継承,インタフェース継承,可視継承の3種類がある.(1)継承の実装とは、追加の符号化を必要とせずにベースクラスの属性と方法を直接使用する能力を指す.(2)インタフェース継承とは、属性とメソッドの名前のみを使用するが、サブクラスが実装しなければならない能力を指す.(3)ビジュアル継承とは,サブフォーム(クラス)がベースフォーム(クラス)の外観とコードを実現する能力を指す.
マルチステートとは、クラスインスタンスの同じ方法が異なる場合に異なる表現形式を持つことを意味する.簡単な理解は物事の多種の形態で、専門的な解釈:同じ実現インタフェースで、異なるインスタンスを使って異なる操作を実行します.マルチステートメカニズムは、異なる内部構造を持つオブジェクトが同じ外部インタフェースを共有できるようにします.これは、異なるオブジェクトに対する特定の操作は異なるが、共通のクラスによって同じ方法で呼び出すことができることを意味する.
 
2.(1)対象に向かう思考で1本の水を説明するには、どのような種類を定義する必要がありますか?(2)コーヒーをもう1缶あげます.同時に2つのものを説明します.どうやって修正しますか.
ディスカッション後の答え:「コンテナ」クラスをベースクラスとして定義し、プライベート属性容積;「瓶」類と「缶」類を定義するのは派生類で、「容器」類、私有属性材料などを継承する.水類はインタフェースを介して「瓶」類(継承「容器」類)にアクセスし、1本の水コーヒー類を得るインタフェースを介して「缶」類(継承「容器」類)にアクセスし、1缶のコーヒーを得る(このように水類、コーヒー類などを定義する必要があり、さらに抽象化し、属性を追加する必要がある)
あるいは直接水やコーヒーなどを容器類のプライベート属性として書いていますが、これではあまり修正しにくいような気がします.(2つの質問は一緒に聞いたのではなく、最初は1本の状況だけを考えて、瓶類だけをベース類としたので、コーヒーの缶を説明するときにベース類を再修正しなければなりません)
 
二.データ構造:
1.基本概念:データ構造はデータの論理構造と物理構造及びそれらの間の相互関係を研究し、この構造に対して相応の演算を定義し、そしてこれらの演算を経て得られた新しい構造が依然として元の構造タイプであることを確保する.
主な論理構造:データ間の相互関係.
  • 集合構造のデータ要素は同じタイプに属する以外に関係がない(これを忘れた).
  • 線形構造データ要素間の一対一の関係
  • ツリー構造データ要素間の一対多の関係
  • 図状構造または網状構造におけるデータ要素の間には、多対多の関係がある
  • .
    2.図面構造に重点を置いて問題を解決した(ネット上で複製されたいくつかの基本概念は、隣接行列と遍歴を引用していない)
  • 図(Graph)は、頂点の無限非空集合と頂点との間のエッジの集合からなり、通常、G(V,E)と表され、Gは図を表し、Vは図Gの頂点の集合であり、Eは図Gのエッジの集合である.図のデータ要素では、頂点(Vertex)と呼ばれ、頂点の集合は空ではありません.図では、任意の2つの頂点間に関係がある可能性があります.頂点間の論理関係はエッジで表され、エッジセットは空であってもよい.
  • 図は、エッジの有無方向によって無方向図と有方向図に分けられる.無方向図は頂点とエッジからなり、有方向図は頂点と弧からなる.弧には弧の尾と弧の頭があり、矢印の端が弧の頭である.
  • 図は、エッジまたはアークの数に応じて、疎図および稠密図を分割する.図中の任意の2つの頂点の間にエッジが存在する場合を完全図と呼び、有向のものを有向完全図と呼ぶ.重複するエッジまたは頂点が自分のエッジにない場合は、単純図と呼ばれます.
  • 図の頂点間には隣接点、依存概念がある.無方向図頂点の辺数を度と呼びます.図面の頂点には、入度と出度があります.
  • 図のエッジまたはアークに重みがあることを網と呼ぶ.
  • 図中の頂点間には経路が存在し、2つの頂点の存在経路は連通していることを示し、経路が最終的に開始点に戻るとリングと呼ばれ、重複しないものを単純経路と呼ぶ.いずれの頂点も連通している場合、図は連通図であり、有向は強連通図と呼ばれる.図にはサブ図があり、サブ図が極大連通であれば連通成分、有向であれば強連通成分と呼ばれる.
  • は図に連通しておらず、n個の頂点n−1個のエッジを生成ツリーと呼ぶ.図中の1つの頂点に0を入力し、残りの頂点に1を入力する有向ツリーがあります.1つの有向図は、いくつかの有向樹からなる森林を生成する.
  • この部分はOuyang_からLianjunのCSDNのブログ、全文の住所はクリックして下さい:https://blog.csdn.net/qq_35644234/article/details/57083107?utm_source=copy

  • 3.双方向チェーンテーブル
    双方向チェーンテーブル挿入ノードは、コードを書く必要はありません.ただ考えを言わせます.コードは牛客のネット上から探しました
    リンク:https://www.nowcoder.com/questionTerminal/041cee693bba44519d277286dd062ccd?orderByHotValue=2&pos=14&mutiTagIds=580出典:牛客網#include #include #include template < typename T> typedef struct ListNode{      struct ListNode* prio;      struct ListNode* next;      T data; }LISTNODE; // value data struct ListNode* Insert(ListNode* head,T value,T data){      ListNode* node=NULL;      ListNode* node2=NULL;      if (!head)          return NULL;      else {          node=head;          while (node->data!=value){              node=node->next;          }          if (node==NULL)              return NULL;          else {              if (node->next){                  node2->prio=node;                  node2->next=node->next;                  node2->data=data;                  node->next=node2;                  node->next->prio=node2;              }              else {                  node2->prio=node;                  node2->next=NULL;                  node2->data=data;                  node->next=node2;              }          }      }      node=head;      return node; } struct ListNode* deleteP(ListNode* head,T data){      if (head==NULL){          return NULL;      }      else {          ListNode* node=NULL;          ListNode* node2=NULL;          for (node=head;node!=NULL;node=node->next){              if (node->data==data && node->next!=NULL){                  node->prio->next=node->next;                  node->next->prio=node->prio;              }              else if (node->data==data && node->next==NULL){                  node->prio->next=NULL;              }              else                  return NULL;          }      }      node=head;      return head; }
     
    三.実は面接官はネットの質問をするつもりですが、私の前の2つの答えは本当に悪いので、他の人に聞く必要はありません.