字节跳动-后端开发面试

  • 面试总结:
    1.因为投的比较晚了,10月8日下午连续进行了一面,二面,三面。总的面试体验极佳,除了讨论项目经验意外,问题涉及:进程/线程,CPU调度,C/C++ 字符串区别,网络三次握手,四次挥手;项目经历;项目需求分析;MySQL数据库的两个引擎,以及比较。编程题目包括:根号2保留10位小数;如何快速的从几十万条IP地址段中确定某一个IP是否属于其中;二叉树中的和为某一值的路径;从1-10中不重复的选择四个数,打印所有的满足24点游戏规则的算式序列。
  1. 进程和线程的区别
  • 在linux操作系统的启动过程中,启动的第一个进程是 init 进程,其它所有进程都是它的子进程;
  • 进程和线程都是一个时间段的描述,是CPU工作时间段的描述。进程和线程的主要差别在于它们是不同的操作系统资源管理方式。
  • 在CPU看来所有的任务都是一个一个的轮流执行的,具体的轮流方法就是:先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文;
  • 进程就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文;
  • 线程是共享了进程的上下文环境的更为细小的CPU时间段;且进程在执行过程中拥有独立的内存单元,而多个线程共享内存;
  • 操作系统中有多个进程,每个进程可以有1到多个线程
  1. 系统资源调度的最小单位是
  • 线程是CPU调度的基本单位。CPU调度又称时间片调度。调度单位是一个个时间片。
  1. C中char字符串和C++ 的string的区别和联系
  • char 是定义一个字符,存储一个字符,占一个字节。C++中的strign是封装好的字符串类;
  • char字符串的末尾有一个隐身的’\0‘;
  • string是C++ Standard Library (C++标准库)的一部分,需要
#include 
  • C中的string.h中提供了一系列操纵char字符串的函数例如:strcat,strncat,strcmp,strcpy,strstr 等。
  • C++的string类中提供有返回char string的接口:c_str()
  1. 网络三次握手,四次挥手的流程
  • TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。
  • TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。
  • TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接。采用4次挥手来关闭一个连接。
  • 第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
  • 第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。 从客户端的视角来看,我接到了服务端发送过来的响应数据包,说明服务端接收到了我在第一次握手时发送的网络包,并且成功发送了响应数据包,这就说明,服务端的接收、发送能力正常。而另一方面,我收到了服务端的响应数据包,说明我第一次发送的网络包成功到达服务端,这样,我自己的发送和接收能力也是正常的。
  • 第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力,服务端的发送、接收能力是正常的。 第一、二次握手后,服务端并不知道客户端的接收能力以及自己的发送能力是否正常。而在第三次握手时,服务端收到了客户端对第二次握手作的回应。从服务端的角度,我在第二次握手时的响应数据发送出去了,客户端接收到了。所以,我的发送能力是正常的。而客户端的接收能力也是正常的。
  • 四次挥手:TCP连接是双向传输的对等的模式,就是说双方都可以同时向对方发送或接收数据。当有一方要关闭连接时,会发送指令告知对方,我要关闭连接了。这时对方会回一个ACK,此时一个方向的连接关闭。但是另一个方向仍然可以继续传输数据,等到发送完了所有的数据后,会发送一个FIN段来关闭此方向上的连接。接收方发送ACK确认关闭连接。
  1. MySQL数据库的引擎有哪些,分别介绍并对比
  • MySQL数据库有多种存储引擎:比如:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE等等,最常见的也就是MyISAM和InnoDB了
  • MyISAM 不支持事务,不支持奔溃后快速恢复,使用表锁不适合高并发,追求性能,依赖操作系统管理读取和写入的缓存,只缓存索引不缓存真实数据,支持压缩
  • InnoDB 支持事务,支持外键,支持自动的灾难恢复,使用行锁支持高并发的读取,支持热备份和奔溃后的快速恢复,支持全文检索(5.6.4版本才支持,所以一些面试题由于时间原因可能这里不严谨),有自己的读写缓存管理机制,即缓存索引也缓存数据,不支持压缩

你可能感兴趣的:(C++)