面经--腾讯

腾讯视频搜索部门 — 一面(两个小时)

远程写代码

二分查找和二叉树两个结点的最低公共子结点

介绍项目

大端模式和小端模式

0x12345678
地址:0x00 0x01 0x02 0x03
大端:0x78 0x56 0x34 0x12
小端:0x12 0x34 0x56 0x78
大端就是数据的高位保存在内存的低位,即倒序
小端就是数据的低位保存在内存的低位,即正序

HTTP协议Keep-Alive模式

HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HTTP协议为无连接的协议);当使用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。

Keep-Alive模式如何判断数据已接受完成

Keep-Alive模式发送玩数据HTTP服务器不会自动断开连接,所有不能再使用返回EOF(-1)来判断

1. 使用消息首部字段Conent-Length

服务器是预先知道内容大小,用Conent-Length

2. 使用消息首部字段Transfer-Encoding

  1. 服务器是不可能预先知道内容大小,这时就可以使用Transfer-Encoding:chunk模式来传输 数据
  2. 一边产生数据,一边发给客户端,服务器就需要使用Transfer-Encoding: chunked

浏览器是做什么的

用来解析网页,解析HTML文件的

哪些情况会导致Linux系统变慢,如何查看

  • CPU:top
  • 内存:free
  • 硬盘:iotop

用户态和内核态的区别

查看进程和端口号占用情况

查看进程:ps | grep ***
查看进程和端口号使用情况:netstat -apn

进程通信的方式

  1. 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
  2. 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
  3. 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  4. 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  5. 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
  6. 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
  7. 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

在浏览器中输入网址按回车后发生了什么

  1. 连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把URL解析为ip,如果url里不包含端口号,则会使用该协议的默认端口号。

    DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS可以看做是一个树状结构,该请求将一直发送到根直到得到结果。

  2. 请求 连接成功建立后,开始向web服务器发送请求,这个请求一般是GET或POST

  3. 应答 web服务器收到这个请求,进行处理。从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。为了告知浏览器,,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。
  4. 关闭连接 当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。

301,302的区别;500指什么

3** 重定向

  • 301 : 代表永久性重定向
  • 302 : 代表暂时性重定向

    500 服务器内部错误

搜索推荐是用什么实现的

Trie树结构

TCP/UDP的区别

HTTP使用TCP还是UDP

TCP三次握手

对于抓取网页中js代码怎么处理,静态页面又怎么处理

sellect和epoll的区别

5亿搜索词中,找到出现次数最多的top100

5亿搜索词
一个搜索10个字,20个字节
5亿 * 20字节 = 100亿字节 = 10,000,000,000B = 10G
可以一次放入内存,则先用hash统计词频,再用取出大跟堆