• C++面试问题总结


    转自:http://blog.csdn.net/wangtengqiang/article/details/8061806

    1.static用法

    static 的成员函数和成员变量,可直接通过类名::函数名或类名::变量名直接访问,该函数名和变量名仅跟类相关联

    在函数名里定义的static变量,改变它的存储结构,多次调用该函数时,该变量仅被初始化一次

    全局变量与static的静态变量。改变它的作用域,全局变量的范围是整个程序,而static的静态变量的范围仅有该模块

     1.1 .h 头文件和.cpp头文件的区别

    2.多态的机制

    编绎器会为继承体系上的每一个类创建一个虚函数表,表中的每一次指向虚函数的地址。

    每个对象都会有一个虚指针指向虚函数表

    通过父类指针就可以访问到子类的函数

    3.引用跟指针

    引用必须被初始化,且引用被初始化之后就不能再修改

    4.vector<>缺陷,?vector.resize()与vector.reserve()?

    vector添加数据的时候,有时需要重新申请一片空间,一般是2倍,然后把原来的数据复制过来,并回收原来的资源

    vector.resize()会调用构造函数

    5.虚析构

    能让父类指针为了调用子类的析构函数

    6.map的底层是?

    红黑树

    7.排序

    8.仿函数类
    9.智能指针 auto_ptr   shared_ptr
    10.C++的四种转换,dynamic_cast<>与普通的转换有什么不同

    http://welfare.cnblogs.com/articles/336091.html

    11.struct对齐

    struct A

    {

    int a;

    char b;

    int c;

    }

    sizeof(A) = 12;

    struct B

    {

    int a;

    char b;

    char c

    }

    sizeof(B) = 8

    12.迭代器的五种类型

    只读迭代器

    只写迭代器

    向前的可读可写迭代器

    能向前能向后的可读可写迭代器

    随机迭代器

    13.二分查找
    14.最长子序列和 ( O(n) )

    15.i++与++i

    ++i的效率高

    16.宏定义与内联函数区别,有什么缺陷

    宏定义是在预处理时对代码替换

    内联函数具有函数的性质,能进行内型检查,它在编译时对代码替换

    17.寻找最大K个数

    快速排序的思想

    18.new与malloc有什么区别

    new是操作符,可调用构造函数

    malloc是C标准库函数,不调用构造函数

    19.SOCKET通信

    TCP:

    服务端:        

    创建SOCKET对象

    绑定地址

    设置监听个数

    等待监听(accept)

    客户端:

    创建SOCKET对象

    connect服务器

    开始通信

    最后关闭SOCKET对象

    UDP:

    服务端:        

    创建SOCKET对象

    绑定地址

    设置异步监听或调用receive进行得等待

    客户端:

    创建SOCKET对象

    绑定地址

    调用send通信

    最后关闭SOCKET对象

    20.三次握手

    第一次,客户端向服务器发送请求,序号SYN=i;,进入SYN_SEND状态

    第二次,服务端接受请求并对客户端发出应答,序号SYN=i+1,同时服务端也发送请求,序号为SYN=j,服务端进入SYN_RECEIVE状态

    第三次,客户端接受服务端的请求并发出应答,序号SYN=j+1,此包发送完毕后,进入establish状态

    21.进程调度,进程通信,线程同步

    进程通信方式:SOCKET,消息队列,共享内存,信号量,管道

    进程调度:先来先服务,优先级调度,时间轮转片,多级反馈

    线程同步:互斥锁,临界区,信号量,信号量

    22.多线程有什么缺陷

    对全局变量的访问有危险

    23.a[100] ={a,b,c}       a[5] = 0

      a[100]    a[5]未知

    24. A GetA()   ,  A& GetA() , A * GetA() ,有什么区别,缺陷

    A& GetA()返回的是引用,当返回一个局部变量的引用,对象在函数执行结束后就被释放了

    A * GetA()返回的是指针,当返回一个局部变量的指针,对象在函数执行结束后就被释放了,当返回的数据是堆上的数据,则要考虑释放

    A GetA()返回的是值,不需要担心前两个的影响,返回时会调用构造函数,降低效率

    25.海量数据(比如找最大的IP访问量之类的)

    网上有很多实例

    26.推荐看看《编程之美》,不用全看.

    27.《C++primer》(不需要全看,懂的就可以不用看),《Effective C++》,《Effecitve STL》,当然还有  数据结构与算法了

    28.熟悉strstr,strcmp,strlen,strcpy之类的C 标准库函数源码.

    百度百科上

    29.char a[]="abc"与char *b = "abc"的区别

    char a[] = "abc"是数组,在栈上的数组,并初始化为abc

    char *b = "abc"在全局区内申请一块内存并初始化为abc,然后指针b指向它

  • 相关阅读:
    gulp的入门浅析
    jade模板的使用
    Linux命令的学习
    简历的好坏
    Javascript高级程序设计 -- 第三章 -- 总结
    js基础的思维导图
    Javascript高级程序设计-问答模式
    《Javascript高级程序设计》的一些可疑点
    angular get/post 下载 excel
    IT软件开发常用英语词汇
  • 原文地址:https://www.cnblogs.com/graph/p/3345814.html
Copyright © 2020-2023  润新知