c++程序员面试宝典笔记(二)

1.介绍STL ,详细说明stl如何实现vector?

   stl 他是与容器,算法,迭代器组成。优点:1.方便的对数据进行一系列的操作:排序,搜索,插入,添加,删除等。 2. 调试程序方便和安全  3.跨平台。

  vector实质上就是一个动态数组,会根据数据的增加而扩展其空间大小。

2.多态和继承的关系及区别:  多态的基础是继承,没有继承,就没有多态。

3.指针引用? 引用具有指针的效率,又具有变量使用的方便性和直观性。引用必须初始化,不能为空,一经初始化就不再改变。

4.几种传值方式?1.不同值传递  (复制对象)不会改变原始数据,但大数据向会消耗内存和时间 2.指针传递(地址的传递)能改变原始对象。快速 4.引用传递:使用方式同值,但是效果确是指针效果。c++推荐我们使用引用来代替掉指针的传递。值的传递,我们可以使用const & .来完成。

5.设计模式理念:设计模式更多考虑的是拓展和重用性。

6.设计模式:是解决某个特定的面向对象软件问题的特定方法。同类的问题,我们使用这以种设计模式来解决:而不必再次设计解决方案。

设计模式与框架的区别:  1. 设计模式针对面向对象问题解决,而框架针对特定业务解决。 2. 设计模式更抽象,框架则已经可以用代码表示了。3.框架中可以包含多个设计模式。   框架是半成品。我们通过框架可以提高效率,减少重复而又单调的工作。

7.c和c++的结构区别:     c中的结构:仅仅是数据的集合。 c++中的结构:具有类的特性。 c中的结构变量前面需要加上struct修饰。 而c++中不需要。

8.构造函数不能为虚函数:因为现有父类再有子类,对象都没有出来,何来的方法调用呢。 析构可以是虚函数,也可以是纯虚函数。

9.多态:1.函数重载2.模版使用3虚函数    , 子类与父类的继承关系怎么说? 子继承了父的大部分资源。只有构造,析构,拷贝构造,operator= 4大函数不能够继承,还加上一个友元函数。不能继承。

10.为什么要进入抽象基类和纯虚函数? 目的是为了实现一种接口效果。 达到更好的表示客观世界。

1.介绍一下模版:他就是体现了一种通用和泛化的编程思想。  7大容器:vector list deque map set multimap multiset       stack queque qro....queue.

2.mvc:  model  view contrler  模型层(具体的类实体),视图层(用户的操作层面),控制层(业务逻辑的处理代码层) dao层。

3.举例几个进程同步的例子?!!  215

4.进程死锁:就是多个进程自己手里都具有资源,都想要别的进程的进程。相互索取,永远达不到释放资源的条件。就死锁罗

5。。。。。。。。。215题开始是进程的知识点了,我要多多看看啊。

 

6.类的静态成员和非静态成员的区别: 1.静态成员只有一个,所有该类对象所共享。可以通过类名直接调用获取 2. 非静态成员,每个对象都有自己的副本。通过对象.操作符

 7.数组与链表的区别:数组固定大小,顺序存储, 链表大小可变,而且随机存储。比较灵活。但管理起来比数组费事。

8.内存分配: 1. 静态存储区(全局区:bbs段(一个初始化为0的一段内存空间)):全局变量和static变量.程序运行期间都存在  2.栈区:局部变量。函数结束后自动释放  3.堆区:具有全局性。程序使用malloc new free delete的时候开辟和释放空间,使用灵活,但是问题也多,需要我们管理,手工分配空间手工释放空间。

9.多态的作用:1.隐藏实现细节  2.接口的重用,给外界统一的接口。

10.new delete    malloc free 的区别:  new delete 会调用构造和destructor , 而malloc不会初始化对象   free 不会调用对象的destructor。

11.static作用:1. 限制变量的作用域 2.设置变量的存储域。

12.堆栈溢出一般是什么原因导致的: 1. 无条件的递归导致而成  2.大数据结构的使用导致堆栈空间的不够用。3.没有回收垃圾资源,导致内存泄漏最后耗尽内存。

13.int (*s[10])(int)   这是个函数指针数组: 每个指针指向一个int func(int ppp) 的函数。

14.extern "C"是连接申明 :被extern "C" 修饰的变量和函数是按照C语音方式编译和连接的。

      这东西,可以把用C语言写的代码加入到c++项目中,这样就可以懒得写代码罗。嘻嘻

15.strcpy机制:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间 ,如果没有结束符,那么copy的字符数不确定。

16.把指针当作参数传给一个形参是指针的函数,即使在函数内部给该指针malloc了东东,也没有给实参malloc,所以要注意这个陷阱哦。因为指针赋值给指针相当于值赋值。除非值地址赋值给指针还差不多。

17. strcpy的实现:

   char * strcpy(char * strDest, const char * strStc){

       assert( (strDest != NULL ) && ( strStc != NULL)  );

        char *adress=strDest;

       while( ( *strDest++ =* strStc++ ) != '\0');

       return address;

   }

18.strlen的实现:

   int strlen(const char * str){

       assert( strt != NULL );

       int len;

      while( (*str++) != '\0' ){      len++;      }

        return len;

   }

你可能感兴趣的:(设计模式,C++,框架,面试,delete,destructor)