zoukankan      html  css  js  c++  java
  • C++面试问题汇总

    作者:勿忘心安~~
    链接:https://www.nowcoder.com/discuss/197611
    来源:牛客网

    1 C++基础:

     (1)多态是怎么样的?写个样例?

      https://www.cnblogs.com/yichengming/p/11427811.html

     (2)c和c++的区别

      https://www.cnblogs.com/yichengming/p/11427890.html

     (3)什么是虚函数?什么是纯虚函数?

      虚函数是允许被其子类重新定义的成员函数

      虚函数的声明:virtual returntype func(parameter);引入虚函数的目的是为了动态绑定;

      纯虚函数声明:virtual returntype func(parameter)=0;引入纯虚函数是为了派生接口。(使派生类仅仅只是继承函数的接口)

     (4)基类为什么需要虚析构函数?

      防止内存泄漏。假如没有虚析构函数,释放一个由基类指针指向的派生类对象时,不会去触发动态绑定,则只会调用基类的析构函数,不会调用派生类的析构函数。派生类中申请的空间则得不到释放导致内存泄漏。

     (5)当i是一个整数的时候i++和++i哪个更快?它们的区别是什么?

      考虑内建数据类型时,它们的效率差别不大(去除编译器优化的影响)。所以在这种情况下我们大可不必关心。
    现在让我们再考虑自定义数据类型(主要是指类)的情况。此时我们不需要再做很多汇编代码的分析了,因为前缀式(++i)可以返回对象的引用,而后缀式(i++)必须产生一个临时对象保存更改前对象的值并返回(实现过自定义类型++运算符定义的就知道),所以导致在大对象的时候产生了较大的复制开销,引起效率降低,因此处理使用者自定义类型(注意不是指内建类型)的时候,应该尽可能的使用前缀式地增/递减,因为他天生体质较佳。

      此外,++i返回的是对象的引用,是一个可以修改的左值。

     (6)当i是一个整数的时候i++和++i哪个更快?它们的区别是什么?

      reserve()用于让容器预留空间,避免再次分配内存;capacity()返回在重新进行分配以前所能容纳的元素数量。

     (7)如何初始化const和static数据成员

      通常在类外申明static,但是static const的整型(bool,char,int,long)可以在类中声明且初始化,static const的其他类型必须在类外初始化(包括整型数组)。

     (8)static和const分别怎么用,类里面static和const可以同时修饰成员函数吗?

      https://www.cnblogs.com/yichengming/p/11428100.html

     (9)指针和引用的区别

    本质上的区别是,指针是一个新的变量,只是这个变量存储的是另一个变量的地址,我们通过访问这个地址来修改变量。

    而引用只是一个别名,还是变量本身。对引用进行的任何操作就是对变量本身进行操作,因此以达到修改变量的目的。

    注:

    (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:
    int a=1;int *p=&a;
    int a=1;int &b=a;
    上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。

    而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。

    (2)可以有const指针,但是没有const引用(const引用可读不可改,与绑定对象是否为const无关)

    注:引用可以指向常量,也可以指向变量。例如int &a=b,使引用a指向变量b。而为了让引用指向常量,必须使用常量引用,如const int &a=1; 它代表的是引用a指向一个const int型,这个int型的值不能被改变,而不是引用a的指向不能被改变,因为引用的指向本来就是不可变的,无需加const声明。即指针存在常量指针int const *p和指针常量int *const p,而引用只存在常量引用int const &a,不存在引用常量int& const a。

    (3)指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)

    (4)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;

    (5)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。

    (6)"sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小;

    (7)指针和引用的自增(++)运算意义不一样;

    (8)指针使用时需要解引用(*),引用则不需要;

      (9)什么是

    • emplace / empalce_front / emplace_back
    • 面向对象的?面向对象的特性?有什么优点,比面向过程的语言好在哪?
    • C语言是怎么进行函数调用的?
    • C语言参数压栈顺序?
    • C语言如何处理返回值?

    2 操作系统

      (1)进程间七大通信方式

        管道(Pipe)、命名管道(Named pipe)、信号(Signal)、消息队列(Message queue)、共享内存(Shared memory)、套接字(Socket)、信号量(Semaphore)

      https://blog.csdn.net/zhaohong_bo/article/details/89552188

      命名管道和无名管道

    • 堆栈溢出
    • 进程和线程(https://www.cnblogs.com/qianqiannian/p/7010909.html)
    • 守护进程、僵尸进程、孤儿进程,守护进程的作用是什么?
    • · 协程
    • 一个文件被删除了,没有被释放是什么原因呢?
    • 弱类型、强类型、动态类型是什么(https://blog.csdn.net/endlessseaofcrow/article/details/80350347)
    • 自旋锁(https://baike.baidu.com/item/%E8%87%AA%E6%97%8B%E9%94%81/9137985?fr=aladdin)
    • · OPEN的过程
    • READ的过程
    • WRITE的过程     (https://blog.csdn.net/csu_max/article/details/38623053)
    • 操作系统是如何调度进程呢(https://blog.csdn.net/qq_35642036/article/details/82809812)
    • 消息队列
    • · malloc函数具体实现原理
    • 死锁的原因?条件?如何预防?又如何避免?如何解除?

    3 TCP网络

    • 概率题

    假设一段公路上,1小时内有汽车经过的概率为96%,那么,30分钟内有汽车经过的概率为?

    • 字节序与网络字节序
    • 超时重传、快速重传
    • 客户端服务器通信死锁如何处理?

    1) HTTP协议与TCP/IP协议的关系

    2) 如何理解HTTP协议是无状态的

    3)什么是长连接、短连接?

    4)TCP协议的长连接和短连接优点和缺点

    • · 什么是MD5?
    • · 阻塞式IO使用场景
    • · 什么是TCP粘包
    • · 拒绝服务攻击DOS
    • XSS,SQL
    • · HTTPS建立连接的过程
    • 常用的HTTP请求头与响应头

    HTTP请求头:

    HTTP响应头:

    TCP是如何保证有序传输的?

    • · POST可以获取数据吗?就是实现GET方法?

    4 数据结构与算法:

    • 堆排序和快速排序 or 快排为什么快呢?
    • 哈希表如何设计?需要利用到磁盘空间。
    • STL中hash_map扩容发生什么?

    5 数据库

      

    6 其他知识

    • UTF8和GD2312的区别
      • C++多线程对10个文件进行排序
  • 相关阅读:
    一次维护经历
    网络线用色环表示
    ★★★错误终于抓到了★★★
    帮别人装IBM本本花了两天
    好记忆不如烂笔头
    凌晨完成的内容
    好久没上网了!
    oseye问答和博文评论通知的设计思路
    简单四步设置debian的vps安全防护
    javascript 的call()与apply()的应用与区别
  • 原文地址:https://www.cnblogs.com/yichengming/p/11212014.html
Copyright © 2011-2022 走看看