baidu面经

1. TCP/UDP的区别

答:

  1)TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

  2)TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

    Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

  3)  UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

 4)  每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

 5) TCP对系统资源要求较多,UDP对系统资源要求较少。

2. 栈 堆 队列的区别 【堆节点的存储:直接插入到最底层,之后再和根进行比较互换位置】

答:

队列是先进先出,有出口和入口,先进去可以先出来。

栈就像一个箱子,后放上去的,可以先出来

堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。{堆是指程序运行是申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。

栈是先进后出的,但是于堆而言却没有这个特性,两者都是存放临时数据的地方。 对于堆,我们可以随心所欲的进行增加变量和删除变量,不要遵循什么次序,只要你喜欢。

堆(Heap)是应用程序在运行的时候请求操作系统分配给自己内存。

3. 拥塞控制

答: 拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

几种拥塞控制方法

    慢开始( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快恢复( fast recovery )。

4. 后序非递归遍历树的过程 根怎么知道子左节点没了


5. 事件 MYSQL事件ACID 原子 一致 隔离 持久
6. map表存储的底层 insert插入一个节点 插入到了哪里
7. vector如何动态扩增空间

答:vector是以2倍的方式动态扩增空间的,也就是说当数组满的时候,vector会重新申请原空间的2倍的一个新的数组,然后将原数组中的值拷贝过来,这样就实现了vector动态扩增空间。
8. 重载和重写

答:1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。

重写是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。


9. 多态

答:概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象.

为什么要用多态呢?

原因:我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态除了代码的复用性外,还可以解决项目中紧偶合的问题,提高程序的可扩展性.。耦合度讲的是模块模块之间,代码代码之间的关联度,通过对系统的分析把他分解成一个一个子模块,子模块提供稳定的接口,达到降低系统耦合度的的目的,模块模块之间尽量使用模块接口访问,而不是随意引用其他模块的成员变量。

多态有什么好处?

有两个好处:

1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承 
2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用,

多态在什么地方用?

可以用在方法的参数中和方法的返回类型中。

10. 虚函数 纯虚函数

答:虚函数是指在类中有关键字virtual的函数,纯虚函数首先是一个虚函数同时含有=0,比如virtual void test()=0;
11. 预编译

答:预编译又称为预处理 , 是做些代码文本的替换工作。 
处理以# 开头的指令 , 比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。

  C 编译系统在对程序进行通常的编译之前,首先进行预处理。 
c 提供的预处理功能主要有以下三种:

  1 )宏定义  
  2 )文件包含  
  3 )条件编译 
何时需要预编译:

预编译代码有助于在开发周期中缩短编译时间,特别是在以下情况中:  

    总是使用不经常改动的大型代码体。 
    程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个“预编译头”

12. TCP四层模型

答:TCP四层模型从上到下依次是:应用层、传输层、网络层和网络接口层。
13. 只有三次握手才是连接吗

答:是的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值