软件开发常见笔试面试题整理

1、面向对象和面向过程的区别是什么?

面向过程

概念 面向过程是一种以过程为中心的编程思想,它是一种基础的顺序的思维方式,面向对象方法的基础实现中也包含面向过程思想
特性 模块化 流程化
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开
发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展

面向对象

概念
面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。
特性
抽象、 封装、继承、多态

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低

2、测试报告的内容包括?

3、介绍一下瀑布模型。

4、高并发设计。

5、微服务优点。

6、项目管理,更改项目。

7、快速排序

8、new、delete、malloc、free关系

delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

9、引用与指针有什么区别?

  1. 引用必须被初始化,指针不必。

  2. 引用初始化以后不能被改变,指针可以改变所指的对象。

  3. 不存在指向空值的引用,但是存在指向空值的指针。

10、基类的析构函数不是虚函数,会带来什么问题?

【参考答案】派生类的析构函数用不上,会造成资源的泄漏。

11、构造函数:对变量进行初始化,在对象被创建是被自动调用。

12、析构函数:完成对象被删除前的一些清理工作,在对象的生存期即将结束的时刻被自动调用。

13、函数重载:两个以上具有相同函数名,但是形参个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪个函数,就是函数的重载。

14、C和C++的区别?
C是面向过程的语言,C++是面向对象的语言
C++中new和delete是对内存分配的运算符,取代了C中的malloc和free
C++中有引用的概念,C中没有
C++引入了类的概念,C中没有
C++有函数重载,C中不能

C变量只能在函数的开头处声明和定义,而C++随时定义随时使用

15、指针和引用的区别
指针保存的是指向对象的地址,引用相当于变量的别名
引用在定义的时候必须初始化,指针没有这个要求
指针可以改变地址,引用必须从一而终
不存在空应引用,但是存在空指针NULL,相对而言引用更加安全

引用的创建不会调用类的拷贝构造函数

16、const关键字至少有下列n个作用:
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:
const classA operator*(const classA& a1,const classA& a2);
  operator的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:
classA a, b, c;
(a * b) = c; // 对a
b的结果赋值
  操作(a * b) = c显然不符合编程者的初衷,也没有任何意义。

你可能感兴趣的:(C++)