面经2

作者:ymlo
链接:https://www.nowcoder.com/discuss/244052?type=post&order=time&pos=&page=1
来源:牛客网

一面面试官很友好的给我过了,下午到了泰富酒店,面试地点在三层。
我看一面写的代码都在二面面试官手上,对方人很好。
1、自我介绍,很简略的带过
2、讲一下实习的工作
3、介绍C++新特性,对智能指针的理解
4、C++的三大特性,对它们怎么理解的

1.封装
突破了C语言函数的概念,封装可以隐藏实现细节,使得代码模块化。

2.继承
继承可以扩展已存在的代码模块(类);达到代码重用的目的。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

3.多态
接口重用,多态可以使用未来,即当前的框架不需改变也可以使用后来的代码。
————————————————
版权声明:本文为CSDN博主「michael019」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/michael019/article/details/48844945
5、多态的原理
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数

用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。

存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。

6、常用设计模式,写一个单例模式

class singleton
{
private:
singleton(){};
static Singleton* instance;
public:
static singleton* getInstance()
{
return instance;
}
}
singleton* singleton:: instance = new singleton();

7、程序:有序链表合并、硬币组合方案(dp)最少硬币: Min[i] = min(Min[i], Min[i - type[j]] + 1)
硬币组合数: dp[k][j] += dp[k-type[i]][j-1]
/*
struct ListNode {
int val;
struct ListNode next;
ListNode(int x) :
val(x), next(NULL) {
}
};
/
class Solution {
public:
ListNode* Merge(ListNode* list1, ListNode* list2)
{
if(list1 == nullptr){
return list2;
}

      if(list2 == nullptr){
        return list1;
    }
    
    if(list1->val <= list2->val){
        list1->next = Merge(list1->next, list2);
            return list1;
    }
    else{
        list2->next = Merge(list1,list2->next);
            return list2;
    }
    
}

};
8、linux查找含有“xxxx”的文件名//grep -rn abc.txt
9、git 查询提交记录 rebase//git log
10、反问环节。

posted @ 2019-09-08 10:52  xjyxp01  阅读(107)  评论(0编辑  收藏  举报