cvte 软件开发c++技术面一面经
cvte 技术面一
自我介绍之后,问是否做过项目?没有就直接上代码找错or输出结果
-
//针对c里面的指针的理解 //判断输出 #include<stdlib.h> #include<stdio.h> int main(){ int a[] = {1,2,3,4,5}; int *ptr = (int *)&a + 1; printf("%d,%d",*(a+1),*(ptr-1)); return 0; } //输出结果 2,1 //int *ptr = (int *)&a + 1;必须加强制类型转换否则报错
-
//运算符sizeof的理解 //判断下列代码是否有错?问题出在哪里? #include<stdio.h> int main(){ int buffer[20]; int * pbuffer = buffer; for(int i = 0; i < sizeof(buffer);i++){ *(pbuffer++) = 0; } return 0; } //整个循环执行20*4次,而pbuffer分配了20个整数的位置,超过20以后,没有分配内存,赋值出现错误,不可行
-
virtual 关键字的作用,是否了解多态,虚函数的底层实现?析构函数能否为虚函数?析构函数能否重载?为什么?构造函数能否是虚函数?为什么?
-
是否了解内联函数?怎么实现内联函数?与宏定义有什么区别?是否所有函数都可以写成内联函数?虚函数是否可以定义内联函数?
-
了解哪些常用STL容器?选择一个认为比较熟悉的容器,vector和list的区别,优缺点?vector的底层扩容机制?为啥是2倍,1.5倍,而不是3,4倍?是否测试过?声明一个vector,数据个数按2,10,100,1090,增长,vector应该声明多大的?为什么?双向队列有什么特点?实现机制?里面的数据在内存上怎么存放(随机or有序)?
-
基本的数据结构,是否自己实现单向链表?
-
讲述一下如何判断一个单向链表是否形成环?手写代码判断两个单向链表是否相交,若相交,返回第一个相交节点(8-10分钟)。写完代码之后,问有什么可以优化的地方?
-
是否了解多线程?线程与进程的区别?进程数是否越多越好?为什么?在一个项目设计中,如何确定进程的数量?
#广州视源电子科技股份有限公司##C++工程师#