勉强算是面经——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.双向链表

一个双向链表插入节点,没有要求写代码,只是让说思路。
代码从牛客网上找的

链接:https://www.nowcoder.com/questionTerminal/041cee693bba44519d277286dd062ccd?orderByHotValue=2&pos=14&mutiTagIds=580
来源:牛客网

#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;

}

 

三.其实面试官还打算问一些网络的问题,但我前两个回答的实在太差,人家也没有必要再问了。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值