勉强算是面经——1.诺瓦科技
之前還面試過交通銀行信用卡中心,測試崗位主要問的項目,沒啥好寫的。
諾瓦的C++面試算是第一個技術面。
?
崗位C++開發人員
開始問的都是項目
幾個核心的問題:
一.面向對象:
1.三要素:封裝,繼承,多態? (只讓解釋多態,這里把三個都列出來)
封裝,把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。簡單的說,一個類就是一個封裝了數據以及操作這些數據的代碼的邏輯實體。在一個對象內部,某些代碼或某些數據可以是私有的,不能被外界訪問。通過這種方式,對象對內部數據提供了不同級別的保護,以防止程序中無關的部分意外的改變或錯誤的使用了對象的私有部分。
繼承,是指可以讓某個類型的對象獲得另一個類型的對象的屬性的方法。它支持按級分類的概念。繼承是指這樣一種能力:它可以使用現有類的所有功能,并在無需重新編寫原來的類的情況下對這些功能進行擴展。通過繼承創建的新類稱為“子類”或“派生類”,被繼承的類稱為“基類”、“父類”或“超類”。繼承概念的實現方式有三類:實現繼承、接口繼承和可視繼承。
(1)實現繼承是指直接使用基類的屬性和方法而無需額外編碼的能力;
(2)接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力;
(3)可視繼承是指子窗體(類)使用基窗體(類)的外觀和實現代碼的能力。
多態,是指一個類實例的相同方法在不同情形有不同表現形式。簡單的理解就是事物的多種形態,專業的解釋:同一個實現接口,使用不同的實例而執行不同的操作。多態機制使具有不同內部結構的對象可以共享相同的外部接口。這意味著,雖然針對不同對象的具體操作不同,但通過一個公共的類,它們(那些操作)可以通過相同的方式予以調用。
?
2.(1)用面向對象的思維去描述一瓶水,需要定義哪些類?
(2)再給你一罐咖啡,同時描述兩件物品,需要怎么修改?
討論后的答案:定義“容器”類作為基類,私有屬性容積;
定義“瓶子”類和“罐子”類都是派生類,繼承“容器”類,私有屬性材料等;
水類通過接口訪問“瓶子”類(繼承“容器”類),得到一瓶水
咖啡類通過接口訪問“罐子”類(繼承“容器”類),得到一罐咖啡
(這樣還需要定義水類、咖啡類等,需要進一步抽象,并添加屬性)
或者直接把水、咖啡等寫成容器類的私有屬性,但感覺這樣不太好再修改。
(兩個問題不是一起問的,我一開始只考慮了一瓶的情況,只把瓶類作為基類;所以再跟進描述一罐咖啡時要重新修改基類)
?
二.數據結構:
1.基本概念:數據結構就是研究數據的邏輯結構和物理結構以及它們之間相互關系,并對這種結構定義相應的運算,而且確保經過這些運算后所得到的新結構仍然是原來的結構類型。
主要的邏輯結構:數據之間的相互關系。
- 集合 結構中的數據元素除了同屬于一種類型外,別無其他關系(把這個忘了)。
- 線性結構 數據元素之間一對一的關系
- 樹形結構 數據元素之間一對多的關系
- 圖狀結構或網狀結構 結構中的數據元素之間存在多對多的關系
2.重點問題了圖結構
(網上復制來的一些基本概念,沒有引申鄰接矩陣和遍歷)
-
圖(Graph)是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為:G(V,E),其中,G表示一個圖,V是圖G中頂點的集合,E是圖G中邊的集合。在圖中的數據元素,我們稱之為頂點(Vertex),頂點集合有窮非空。在圖中,任意兩個頂點之間都可能有關系,頂點之間的邏輯關系用邊來表示,邊集可以是空的。
-
圖按照邊的有無方向分為無向圖和有向圖。無向圖由頂點和邊組成,有向圖由頂點和弧構成。弧有弧尾和弧頭之分,帶箭頭一端為弧頭。
-
圖按照邊或弧的多少分稀疏圖和稠密圖。如果圖中的任意兩個頂點之間都存在邊叫做完全圖,有向的叫有向完全圖。若無重復的邊或頂點到自身的邊則叫簡單圖。
-
圖中頂點之間有鄰接點、依附的概念。無向圖頂點的邊數叫做度。有向圖頂點分為入度和出度。
-
圖上的邊或弧帶有權則稱為網。
-
圖中頂點間存在路徑,兩頂點存在路徑則說明是連通的,如果路徑最終回到起始點則稱為環,當中不重復的叫簡單路徑。若任意兩頂點都是連通的,則圖就是連通圖,有向則稱為強連通圖。圖中有子圖,若子圖極大連通則就是連通分量,有向的則稱為強連通分量。
-
無向圖中連通且n個頂點n-1條邊稱為生成樹。有向圖中一頂點入度為0其余頂點入度為1的叫有向樹。一個有向圖由若干棵有向樹構成生成森林。
-
這部分自 Ouyang_Lianjun 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/qq_35644234/article/details/57083107?utm_source=copy
3.雙向鏈表
一個雙向鏈表插入節點,沒有要求寫代碼,只是讓說思路。
代碼從??途W上找的
鏈接:https://www.nowcoder.com/questionTerminal/041cee693bba44519d277286dd062ccd?orderByHotValue=2&pos=14&mutiTagIds=580
來源:??途W
#include <iostream>
#include <stdio>
#include <stdlib>
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;
}
?
三.其實面試官還打算問一些網絡的問題,但我前兩個回答的實在太差,人家也沒有必要再問了。
總結
以上是生活随笔為你收集整理的勉强算是面经——1.诺瓦科技的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSM房屋租赁系统,房屋合租系统 租房系
- 下一篇: localStorage和session