成都精灵云-C++开发工程师-技术面经(30min左右)
以下是我的技术面试中遇到的问题,因为当时自己还在实习中,所以面试时没有做太多的准备,通过了笔试,但是技术面没有通过。我写下这个希望能够帮助想要去的同学去到这个公司。
我现在已经完成了面试复盘,反思了一下,确实我在面试的过程回答的问题,存在着许多问题。
同时我也感谢贵公司帮助我在后面的面试中积累经验。
以下是我面试过程中,hr问到的问题,回答可能不够充分,如果自己想深入深入的话,也可以去百度了解了解一下。
C方向:
Q:在C中哪个地方比较难?
A:指针。
Q:难在哪里?指针又是什么呐?举个例子说明指针。
A:指针可能会指向错误的地方。地址指向数据的那个箭头。难在会把指针指向错误的地方,造成一些错误。
百度学习了解及补充:在新建过程中可能会产生野指针,造成空间浪费。
Q:发生栈溢出,堆溢出是什么情况?
A:调用递归的时候。
Q:为什么呐?
A:递归层层调用,会开辟新的空间,当它超过了程序开辟的空间,也就是栈,就会导致栈溢出。
Q:为什么是栈溢出,不是堆溢出?
A:因为这是简单的空间溢出,堆溢出是指针的溢出。
百度学习了解及补充:
堆:堆是在程序进行动态分配时的内存。在使用new,malloc的时候可能会产生堆溢出。
栈:栈是在保存函数列表,函数参数和函数返回地址的内存。在函数递归的空间太多的时候会产生栈溢出。
C++方向:
Q:抽象,继承,多态,封装,你最熟悉的地方是哪一个?
A:多态。
Q:多态是什么?
A:我是举的例子:父子类使用虚函数实现。当时说了很多废话。
Q:使用多态的好吃是什么?
A:实现了多样性。
上面的回答确实是不及格的。
百度学习了解及补充:多态是一种基于继承的、使用虚函数产生的父子类。
好处:结构清晰,便于理解;增加了程序的可扩充性,利于后期代码扩展、维护.实现了对修改屏蔽、对扩展开放。
计算机方面:
Q:计算机最重要的四个东西是什么,请按重要顺序排列?
A:计算机组成原理,操作系统,数据结构,计算机网络。
我也不知道是不是这样的,自我理解,网上也没有查到。
计算机组成原理:
Q:CPU,显卡那些是用什么链接的?
A:总线。
他当时给我的答案是主板,我当时没有反应过来,现在想说主板上也有布线呀,这个没什么好说的。
操作系统:
Q:进程和线程的区别?
A:进程是一个资源调度的最小的单位,一个进程可以包含多个线程 线程是一个程序最小的调度单位。
Q:用什么创建一个进程;用什么创建一个线程?
A:fork(),pthread()。
Q:线程之间通过什么通信?
A:信号量。
百度学习了解及补充:
进程和线程的区别:
一个进程可以包含多个线程,线程在进程的内部。
进程之间的资源是独立的,线程之间的资源则是共享的。
每个进程都有独立的虚拟地址空间,也有之间独立的文件描述符表,同一进程的多个线程之间则共用这一份虚拟地址空间和文件描述符表。
进程是操作系统中资源分配的基本单位,线程是操作系统中调度执行的基本单位。
多个进程同时执行时,如果一个进程崩溃,一般不会影响其他进程,而同一进程内的多个线程之间,如果一个线程崩溃,很可能使得整个进程崩溃。
进程的上下文切换速度比较慢,而线程的上下文切换速度比较快。
进程的创建/销毁/调度开销大,线程的创建/销毁/调度开销相对少很多。
进程创建:vfork(),fork();线程创建:pthread_create()。
线程之间的通信:可以通过共享的数据进行通信,也可以通过信号量通信。
进程之间的通信:通过管道通信。
Q:编译四个步骤的是什么?
A:当时我把四个顺序忘记了,预处理,编译,汇编,链接。
Q:预编译是怎样的一个操作?
A:生成.i的文件,这里当时紧张忘记了,应该是对一些文件进行提前处理。
Q:在程序中预处理的代码有哪些?
A:include,define,typedef
百度学习了解及补充:
预处理:gcc -E 生成.i文件;处理宏定义和include的命令;预编译#if,#else等;添加行号,删除注释等。
编译:gcc -S 生成.s文件;代码优化,汇总,语法分析等。
汇编:gcc -c 生成.o文件;根据汇编工具和特殊平台生成二进制形式。
链接:gcc -c 生成可执行文件;
Q:动态库和静态库的区别是什么?
A:静态库是提前加载到程序中,动态库是在程序运行的过程中,当要用到的时候才会被调用。
Q:在哪调用动态链接库?
A:应该就是我们使用的资源库中。
百度学习了解及补充:在lib里面,使用gcc -l链接库
静态库:ar crs 库文件名 依赖文件 生成.a文件。浪费资源空间;在运行程序时,不需要静态库存在,方便移植;优化升级不方便,需要重新编译和链接库;运行速度快。
动态库:gcc -fPIC -c hello.c -o hello.o;gcc -shared -o libhello.so hello.o 生成.so文件。占用资源空间小;在运行程序时,动态库必须要存在;运行速度相对较慢;优化升级比较方便,不需要重新链接动态库。
计算机网络:
Q:tcp/ip协议簇,有那些那些协议?
A:http,dns,smtp,ftp等
Q:用户端和客户端通信使用的协议,tcp协议中用什么的协议?
A:我不知道,被问蒙了
百度学习了解及补充:
其他:
Q:主要通过那些网站获取学习知识?
A:主要是b站和csdn网站,刷题主要靠牛客。
#成都精灵云科技有限公司#