1、谈谈堆和栈的区别?
栈(Stack)由编译器分配释放,存放函数的参数值、局部变量值等,操作方式同数据结构中的栈(先进后出)。
堆(Heap)一般由程序员分配,若程序员不释放,程序结束后由os回收,它和数据结构中的堆是两回事,分配方式确和链表类似。
数据结构中的堆采用的是数组对象而不是链表,可视为完全二叉树,特点是父结点大于(或小于)两个子结点的值(称为大顶堆或小顶堆)。
满二叉树:除最后一层无任何子结点外,每一层的所有结点都有两个子结点,简言之就是二叉树的每一层都满了;
性质:<1> 深度h(所有结点中最深的结点所在的层数[根节点是第一层])= 最大层数K
<2> 叶子结点数(第K的的结点数)为2h(k)-1
<3> 总结点数是 2k-1,且总结点数一定是奇数
完全二叉树:若二叉树的深度为h,出第h层外,其他【1-(h-1)】层的结点数都达到了最大数,且第h层所有结点都连续集中在左边。
结点的度:该结点所含的子树的个数。
二叉树的度:二叉树中所含子树最多的那个结点。
2、谈谈两台机器间最多能建立多少个持久链接及原因?
一个特定的连接我们会用同一个端口号来标识,所以最大连接数不会超过机器能指定的端口数目。
持久连接,指不必为每个request object(例如很小的gif广告图像)的传送建立一个新的TCP(socket)连接,减少TCP建立时间和相应的系统损耗。
在使用持久连接之前,HTTP规定获取每个URL资源都需要使用单独的一个TCP连接,这增加了HTTP服务端的负载,造成互联网拥塞。
使用持续连接的优点:
<1>减少TCP连接数量;
<2>在一个连接上实现了HTTP请求和应答的流水,即允许客户端发送多个请求,而不用在接收到前一个请求的应答后才发送下一条请求,极大减少时间消耗;
<3>后续请求延迟减少,无需在TCP握手是耗时,可以更加流畅的实现HTTP协议,由于持续连接的存在,报告错误后无需关闭连接,因此客户端可使用最新的协议特性发出请求,如果接收到表示错误的应答,则换用更旧的语义。
3、谈谈对 http、https、webSocket 协议的理解?
http:超文本传输协议,是网络上使用最广泛的一种网络协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。所有WWW文件都必须遵守这个标准,这个协议设计的最初目的是为了提供一种发布和接收HTML页面的方法。
优点:<1>简单快捷:客户端向服务器传送数据只需要传送请求方法和路径,常见的请求方法有Post、Get。每一种方法规定了服务器和客户联系的类型不同。由于协议简单,使服务器程序规模较小,通信快。
<2>灵活:HTTP协议允许传输任意的类型的数据对象。正在传输的类型由Content-Type加以标记。
<3>无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
<4>无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
<5>支持B/S及C/S模式。
缺点:<1>通信使用明文(不加密),可能被窃听。
<2>不验证通信方的身份,有可能遭遇伪装。
<3>无法验证报文的完整度,有可能被篡改。
HTTPS:以安全为目标的HTTP通道,简言之就是HTTP安全版。它解决了HTTP易窃听、易伪装、易篡改的确定。公式表达:HTTPS = HTTP + 加密 + 认证 + 完整性保护。
WEBSOCKET协议:是HTML5提出的一个协议规范,约定了一种通信的规范,通过握手机制,客户端和服务器之间建立一个类似TCP的连接,方便C-S之间的通信。在这之前Web交互一般是基于HTTP协议的短连接或长连接。WEBSOCKET协议本质上是一个基于TCP的协议,是先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手后创建一个用于交换数据的TCP连接,此后服务端与客户端通过此TCP连接进行实时通信。