C++ 面试题总结

1、进程和线程的区别?

进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

一个程序至少一个进程,一个进程至少一个线程。

进程线程的区别:

  • 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
  • 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。

     一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

     进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程

  • 执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  • 线程是处理器调度的基本单位,但是进程不是。
  • 两者均可并发执行。

 

2、堆内存和栈内存的区别?

总结:
1 栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等
2 堆:为成员分配和释放,由程序员自己申请、自己释放。否则发生内存泄露。典型为使用new申请的堆内容。

除了这两部分,还有一部分是:
3 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。

 

3、一个程序从编译到执行的过程?

一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接。

 

4、自己实现一个atoi函数;

剑指offer

 

4、解释一下虚拟内存;

虚拟内存是一种内存管理技术,虚拟内存技术的核心就是利用了局部性原理,把所要运行的进程中的数据不全部加载到内存中执行,而是加载一部分,当CPU在请求页表时,发现页表中的页表条目中的有效位为0但是被虚拟存储系统分配了的虚拟页时,就会把这个虚拟页从磁盘中调度到内存中。

5、如何判断一个二叉树是不是平衡二叉树?coding-后序遍历优化算法。

剑指offer, 判断左右子数的高度。这题需要用优化算法实现。

6、解释一下C++虚函数;

基类指针指向派生类对象,调用派生类重写的函数。

7、声明和定义的区别?

定义分配了内存,声明没有分配内存

8、static关键字的作用?修饰变量时呢?修饰函数时呢?

静态变量,静态函数是改变作用域的。整个程序。

9、解释关键字作用:extern,volatile

extern是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。

volatile是一个类型修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值