软件开发类应届生校园面试最常见的一些面试题

匿名网友 匿名网友 发布于: 2016-03-09 00:00:00
阅读 131 收藏 0 点赞 0 评论 0

1. 写出中序遍历二叉树的非递归算法

2. 单例模式有什么用?写一个单例模式程序

4. 死锁是什么?必要条件是什么?如何避免?

 

 

 

什么是多态?

多态即是“一个接口,多个方法”,程序运行时才决定调用哪个函数。多态允许基类赋值为它的子类对象,赋值后根据子类对象的特性

以不同的方式运行,简单的说就是可以将派生类指针赋值给基类指针。C++的多态是通过虚函数来实现的,多态实现了接口复用。

什么是虚函数?

虚函数是使用virtual关键字定义的成员函数,虚函数允许子类重新定义,其作用是为了实现多态。

什么是观察者模式?

一个目标对象管理所有依赖于它的观察者,当目标的状态发生改变时,主动发出通知,一般是通过调用观察者提供的方法实现。

常被用于实时事件处理系统,例如GUI系统中,业务数据就是目标,用户界面是观察者,当数据发生改变,界面实时变化。

什么是单例模式?

其核心是一个特殊类,单例类。该类只允许有一个实例且可以方便的被外界访问,从而满足系统的实际需求。

进程和线程的区别?

进程是程序的一次执行,线程是进程中的一段控制序列;进程是独立的,有独立的进程空间,线程位于进程空间内部,多个线程共享同一

内存空间;同一进程中的两段代码不能同时执行,除非引入线程;进程是资源分配和拥有的单位,线程是处理机调度的单位;多线程共享

大部分数据,包括全局变量,文件描述符,信号处理函数,但拥有自己的数据栈(局部变量)和优先级。

如何判断程序是由C编译程序还是C++编译程序?

使用 #ifdef  _cplusplus    …..     #endif 包围代码。因为若是C++编译程序,系统会自定义宏 _cplusplus。

谈谈const关键字的理解?

1)定义const常量,定义时即初始化;2)可以修饰函数参数,返回值,函数体,被修饰对象受到强制保护,防止意外变动,提高程序健壮性。

析构函数为什么要是声明为虚函数?

由于继承和多态的存在,当基类操作派生类,在析构时防止只析构基类而不析构派生类的情况发生。

静态链接库和动态链接库的区别?

静态链接库一般为libxxx.a,整个函数库被编译到可执行程序中,产生的文件较大,优点是不需要外部的函数库支持,但是如果静态函数库

改变,需要重新编译程序;动态链接库一般为libxxx.so,函数库不编译到目标代码,程序调用相关函数时才去加载,因此可执行文件较小,

缺点是动态申请并调用,程序运行环境依赖相应的函数库,动态库的改变并不影响执行程序,升级较为方便。

vector是怎么实现的?

vector是用动态数组实现的,当插入元素时如果capacity被占满就重新分配内存,一般是原大小的两倍。然后把原数组拷贝过去。

所以,一般情况下其访问速度同数组,只有在重新分配空间时性能才会下降。其内部使用allocator类进行内存管理。

STL是标准模板库,具有工业强度,高效的C++程序库,安全高效,方便,跨平台。由模板、容器、迭代器组成。

map是怎么实现的?

map是基于红黑树而实现,为了提高效率,做了一些改进。

什么是二叉排序树?

二叉排序树要么是空树,要么具有以下三性质:1)左子树所有结点的值小于根节点;2)右子树所有结点的值大于根节点;3)

左右子树都是二叉排序树。

二叉排序树的插入不进行结点的旋转,删除叶子节点也不需要旋转,删除非叶子节点需要做几步简单的调整操作。

红黑树和平衡二叉树有什么优缺点?

红黑树是一中特殊的二叉查找树,它的5个性质使它具有平衡特性,二叉树的平衡性能越好,效率也就越高。

红黑树的平衡性能低于AVL(平衡二叉树),但仍然能够使得最坏情况下,查找、插入、删除操作的复杂度为O(logn)。

红黑树是一种不严格的平衡二叉树。查找效率红黑树低于AVL(因为平衡性能),插入、删除结点时需要的旋转

操作次数红黑树(都在三次之内)小于AVL。红黑树和AVL时间复杂度相同,但红黑树统计性能更高。

你知道布隆过滤器吗?

就是长度为m的位数组+k个哈希函数,m和k与输入规模n和错误率E有对应公式。Bloom Filter和单哈希bitmap的区别是使用了k

个哈希函数,每个输入数据对应k个bit位,降低了冲突的概率。布隆过滤器用于大规模数据处理,有100%的召回率,用于检测

一个元素是否在集合里,若检查结果为否,则一定不在该集合,若检查结果为是,元素不一定存在于该集合。优点是查找和插入

数据的时间为常数,缺点是插入元素越多,出错的概率越大,而且不能删除元素。使用改进型的CBF,将每一个bit替换成一个计数器

就能实现删除元素的目的。

线程同步和互斥有什么区别?分别在什么情况下使用它们?

线程的同步是一种特殊的互斥,当要求访问资源需要先后顺序的时候,或者一个线程的执行依赖于另一个线程完成某种操作的时候

使用同步。当需要独占式访问资源时需要互斥。

一个生产者和多个消费者的问题,生产者和消费者是线程同步,多个消费者之间是线程的互斥。

评论列表