首页 > 寒武纪C++软件研发日常实习生面经,已发offer。
头像
牛客464349491号
编辑于 2021-03-04 07:37
+ 关注

寒武纪C++软件研发日常实习生面经,已发offer。

寒武纪C++软件研发日常实习生面经,已发offer

时间:2021223日,形式电话面试,大概30min

个人背景:哈工大通信本硕,半路出家,计算机基础很差

心态:生平第一次应付企业面试,非常紧张

开场是自我介绍,和聊简历,这一块就不多说了。我的简历写得很满,学科竞赛拿了三次省奖一次国奖,但都和计算机无关,所以聊不出所以然。

然后被单方面提问,全程内容以C++八股文为主,没有录音,所以问题的提问顺序没能完全记住,但大致的题目还是***不离十的。

一上来就是经典老题,谈一谈mallocnew

我一顿口胡,说了这么些:

1.newC++的关键字,malloc是头文件stdlib.h里的库函数,newC++新添加的,mallocC语言里就有的

2.new自动计算所需内存大小,malloc要手动输入内存大小作为函数参数,比如4*sizeof(int)

3.newmalloc更高级,他的底层实现本身就包含了malloc

4.newmalloc更方便,除了第2条讲的无需设置内存大小,new配合构造函数和函数重载时用起来很给力,比如申请一个链表节点或者树的节点时,new加构造函数可以很简短的申请节点并赋值,malloc由于返回(void*)还需要强制转换,再加上其它语句对节点各个成员依次赋值,代码看起来就冗长繁琐,没有new美观。

5.newmalloc更安全(这里他突然打断我问我为什么更安全,我直接慌了,我一顿瞎说,但自知说的不对,非常尴尬)

最后,他告诉我,他最想听到的是“new调用了构造函数和析构函数”,我赶紧道歉,“对不起老师,我太紧张了,没讲出来,其实这个点我是知道的”

第二题,类(class)、结构体(struct)和联合(union)的区别

1.我上来先把union和其他两个区分开来,说classstruct共同点挺多的,但是union和另外两个差别太大,除了写起来格式很像,没啥共同点,union最大的特点是它某个成员可以不确定,然后我讲了一下十字链表表示稀疏矩阵时union的运用。

2.classC++里独有的,是C++面向对象特性的重要体现之一。三者都是C/C++共有的(废话)

3.然后我发了一个暴论“结构体是一种特殊的类”,并坦言“我以前好像在某个技术论坛上看过这句话”(当时真怕他继续深入问下去)C++里,class能有的,struct里也都允许拥有,比如说各种类型的成员,构造函数和析构函数。

4.struct默认成员是公有的,class则默认成员是私有的

应该没说全,但他最后还是放我走了

第三题,CC++的区别

1.C是面向过程,C++是面向对象(不愧是我,大一学生都知道的常识,被我严肃的单独列为一点)

2.C++里添加了newdelete,是mallocfree的升级版本。

3.C++string类标识字符串,C里只能用char类型数组表示字符串

4.C++里有强大的STL库,各种封装好的数据结构拿过来直接用就好了,C语言必须自己动手丰衣足食。

5.一入门打印hello world时用的头文件不一样,一个是iostream,一个是stdio.h(我可真不知羞耻)

6.C++里有函数重载

7.C++添加了“引用”,还有关键词autonullptr等等

其实我还能说很多,但是C++的很多新增东西,我只知道名字和概念,不深入了解,真怕他打断并深入问

应该还是没说全,但他还是放了我一马

第四题,浅拷贝和深拷贝的区别

这个我上来就背错八股文了……我给他讲的是
string str=”hello world”;
string str(”hello world”);

的区别,也就是拷贝初始化和直接初始化的区别(前者需要先构造一个字面量字符串”hello world”,在拷贝给s,后者直接赋值)

后来在面试官的引导下发现自己背错地方了TT,然后改口:

浅拷贝只是拷贝一个指针(头指针),并没有新开辟一个地址,拷贝的指针和原来的指针指向同一块地址。其余剩余的内容,自己根据头指针按序寻址;

深拷贝不仅拷贝值,还开辟出一块新的空间用来存放新的值

勉强过关

第五题,谈一谈const类型的引用,这个我直接破防了。

我说我知道两种const类型的指针以及他们的区别,我也知道指针和引用的区别,但congst类型引用俺是真的想不起来了。(在他打断我之前,我还真给他背了背指针和引用的区别)

第六题,简要说明C++的内存分区

这块我没准备,吓坏了,机智的我假装电话信号不好,让他再说一遍问题,然后他接着补充“比如堆区,栈区,静态变量区,全局变量区(global)”

我方寸大乱,开始口胡,堆区就是newmalloc申请内存的区,可以释放和析构。栈区就是我们大多数情况下声明变量的区。静态变量区?是static吗?这个我知道(然后开始给他背诵static的特性:文件独有,对其他文件隐藏;可以记录被函数修改过的值;直接初始化为0或者空指针)。全局变量区?这个我有点忘记了。。。。(后来才发现静态变量和全局变量是一个意思,泥马)

其实总共六个区,我只说了三个。这也是老八股了,我这个答得太差了,具体参考链接

https://chenqx.github.io/2014/09/25/Cpp-Memory-Management/

最后,让我问他两个问题,我随便问了两个,结束面试。

当晚,Hr问我能不能来实习,能来的话就提offer了。

第三天的上午收到录用通知邮件。

更多模拟面试

全部评论

(22) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐