网络(总结)

汇总---网络

@(汇总)[网络, 汇总]css

HTTP

http协议

1.HTTP是计算机经过网络进行通讯的规则
2.HTTP是一种无状态的协议(不创建持久的链接,服务端不保留链接的相关信息,浏览器发出请求和服务器返回响应是一个没有记忆的过程)html

解释http协议的头部的各个属性是什么

HTTP 请求头里面都有些啥/哪些字段?

Alt text

Allow:服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding:文档的编码(Encode)方法。
Content-Length:表示内容长度。
Content-Type:表示后面的文档属于什么MIME类型。
Date:当前的GMT时间。
Expires:应该在何时认为文档通过期,从而再也不缓存它?
Last-Modified:文档的最后改动时间。
Location:表示客户应当到哪里去提取文档。
Refresh:表示浏览器应该在多少时间以后刷新文档,以秒计。
Server:客户应该在Authorization头中提供什么类型的受权信息?
Set-Cookie:设置和页面关联的Cookie。
WWW-Authenticate:客户应该在Authorization头中提供什么类型的受权信息?mysql

http请求头,请求体,cookie在哪一个里面?url在哪里面

http响应头里面有些什么

Alt text

响应头与请求头总结

请求头:
Accept: text/html,image/*(浏览器能够接收的类型)
Accept-Charset: ISO-8859-1(浏览器能够接收的编码类型)
Accept-Encoding: gzip,compress(浏览器能够接收压缩编码类型)
Accept-Language: en-us,zh-cn(浏览器能够接收的语言和国家类型)
Host: www.it315.org:80(浏览器请求的主机和端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(某个页面缓存时间)
Referer: http://www.it315.org/index.jsp(请求来自于哪一个页面)
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)(浏览器相关信息)
Cookie:(浏览器暂存服务器发送的信息)
Connection: close(1.0)/Keep-Alive(1.1)(HTTP请求的版本的特色)
Date: Tue, 11 Jul 2000 18:23:51 GMT(请求网站的时间)linux

响应头:
Location: http://www.it315.org/index.jsp(控制浏览器显示哪一个页面)
Server:apache tomcat(服务器的类型)
Content-Encoding: gzip(服务器发送的压缩编码方式)
Content-Length: 80(服务器发送显示的字节码长度)
Content-Language: zh-cn(服务器发送内容的语言和国家名)
Content-Type: image/jpeg; charset=UTF-8(服务器发送内容的类型和编码类型)
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务器最后一次修改的时间)
Refresh: 1;url=http://www.it315.org(控制浏览器1秒钟后转发URL所指向的页面)
Content-Disposition: attachment; filename=aaa.jpg(服务器控制浏览器发下载方式打开文件)
Transfer-Encoding: chunked(服务器分块传递数据到客户端)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务器发送Cookie相关的信息)
Expires: -1(服务器控制浏览器不要缓存网页,默认是缓存)
Cache-Control: no-cache(服务器控制浏览器不要缓存网页)
Pragma: no-cache(服务器控制浏览器不要缓存网页)
Connection: close/Keep-Alive(HTTP请求的版本的特色)
Date: Tue, 11 Jul 2000 18:23:51 GMT(响应网站的时间)ios

http缓存控制;

HTTP头中哪些是和缓存相关的

http1.1协议报文首部字段中与缓存相关的字段程序员

1.通用首部字段
Cache-Control:控制缓存的行为
Pragma:值为no-cache时禁用缓存es6

2.请求首部字段
If-Match:比较ETag是否一致
If-None-Match:比较ETag是否不一致
If-Modified-Since:比较资源最后更新的时间是否一致
If-Unmondified-Since:比较资源最后更新的时间是否不一致面试

3.响应首部字段
ETag:资源的匹配信息算法

4.实体首部字段
Expires:实体主体过时的时间
Last-Modified:资源最后一次修改的时间sql

网络分层结构。

  • OSI分层 (7层):
    物理层、数据链路层、网络层、应用层、传输层、会话层、表示层。

五层协议(5层):
物理层、数据链路层、网络层、应用层、运输层。

  • TCP/IP分层(4层):
    网络接口层、 网际层、运输层、 应用层。

  • 每一层的协议以下:
    物理层:RJ4五、CLOCK、IEEE802.3 (中继器,集线器,网关)
    数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
    网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
    传输层:TCP、UDP、SPX
    会话层:NFS、SQL、NETBIOS、RPC
    表示层:JPEG、MPEG、ASII
    应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

  • 每一层的做用以下:
    物理层:经过媒介传输比特,肯定机械及电气规范(比特Bit)
    数据链路层:将比特组装成帧和点到点的传递(帧Frame)
    网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
    传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
    会话层:创建、管理和终止会话(会话协议数据单元SPDU)
    表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
    应用层:容许访问OSI环境的手段(应用协议数据单元APDU)

HTTP,TCP,UDP分别在哪些层

HTTP(超文本传输协议):应用层
TCP(传输控制协议):传输层
UDP(用户数据报协议):传输层

tcp/udp区别

TCP提供面向链接的、可靠的数据流传输;传输单位称为TCP报文段;TCP注重数据安全性

UDP提供的是非面向链接的、不可靠的数据流传输;传输单位称为用户数据报;UDP数据传输快,由于不须要链接等待,少了许多操做,可是其安全性却通常。

TCP对应的协议和UDP对应的协议
TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登录的端口,使用23端口,用户能够以本身的身份远程链接到计算机上,可提供基于DOS模式下的通讯服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。因为网络设备不少,无链接的服务就体现出其优点。
(3) TFTP(Trival File Tran敏感词er Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

当你访问一个网站时,会用到哪些协议?

在和服务器创建链接时,用的是 TCP 仍是 UDP?

在地址栏输入url中间会经历什么

  • 首先在电脑中查找目标主机。若是本地 DNS 缓存存在,它使用该信息。不然,执行 DNS 查询,直到 IP 地址被发现。
  • 而后,浏览器打开一个 TCP 链接到目标主机,并将根据 HTTP 1.1 的请求服务器查找所需的资源,并使用 HTTP 协议的响应,将数据发送到浏览器。
  • 而后浏览器使用 HTML 解析器来从新建立这就是后来提交给你在屏幕上的文档结构。若是发现给外部资源,例如图片, CSS 文件,JavaScript 文件的引用,这些被传递的方式做为 HTML 文档自己相同。
    (后面可能会设计到浏览器渲染问题)

浏览器的渲染过程

  1. 浏览器会将HTML解析成一个DOM树。
  2. 将CSS解析成 CSS Rule Tree 。
  3. 根据DOM树和CSSOM(CSS对象模型)来构造 Rendering Tree。
  4. 有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系,而后计算出每一个节点在屏幕中的位置。
  5. 再下一步就是绘制,即遍历render树,绘制每一个节点。

PS:html页面加载和解析的流程

  1. 用户输入网址,浏览器向服务器发出请
    求,服务器返回html文件;
  2. 浏览器开始载入html代码,发现<head>标签内有一个<link>标签引用外部CSS文件;
  3. 浏览器又发出CSS文件的请求,服务器返回这个CSS文件;
  4. 浏览器继续载入html中<body>部分的代码,而且CSS文件已经拿到手了,能够开始渲染页面了;
  5. 浏览器在代码中发现一个<img>标签引用了一张图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码;
  6. 服务器返回图片文件,因为图片占用了必定面积,影响了后面段落的排布,所以浏览器须要回过头来从新渲染这部分代码;
  7. 浏览器发现了一个包含一行Javascript代码的<script>标签,赶快运行它;
  8. Javascript脚本执行了这条语句,它命令浏览器隐藏掉代码中的某个<div>(style.display=”none”)。忽然少了这么一个元素,浏览器不得不从新渲染这部分代码;
  9. 终于等到了</html>的到来,浏览器泪流满面……
  10. 等等,还没完,用户点了一下界面中的“换肤”按钮,Javascript让浏览器换了一下<
    link>标签的CSS路径;
  11. 浏览器召集了在座的各位<div><span><ul><li>们,“大伙儿收拾收拾行李,咱
    得从新来过……”,浏览器向服务器请求了新的CSS文件,从新渲染页面。

几个重要的概念:
(1)Reflow(回流):浏览器要花时间去渲染,当它发现了某个部分发生了变化影响了布
局,那就须要倒回去从新渲染。
(2)Repaint(重绘):若是只是改变了某个元素的背景颜色,文字颜色等,不影响元素周
围或内部布局的属性,将只会引发浏览器的repaint,重画某一部分。 Reflow要比Repaint更
花费时间,也就更影响性能。因此在写代码的时候,要尽可能避免过多的Reflow。

reflow的缘由:
(1)页面初始化的时候;
(2)操做DOM时;
(3)某些元素的尺寸变了;
(4)若是 CSS 的属性发生变化了。

减小 reflow/repaint:
 (1)不要一条一条地修改 DOM 的样式。与其这样,还不如预先定义好 css 的 class,然
后修改 DOM 的 className。  
 (2)不要把 DOM 结点的属性值放在一个循环里当成循环里的变量。
 (3)为动画的 HTML 元件使用 fixed 或 absoult 的 position,那么修改他们的 CSS 是不
会 reflow 的。
 (4)千万不要使用 table 布局。由于可能很小的一个小改动会形成整个 table 的从新布
局。

http2懂多少

(真懂不了不少,由于没有怎么实践过,我直接说了本身的理解)
HTTP 2.0与HTTP 1.1区别
一、什么是HTTP 2.0
HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议(是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提高网络速度,优化用户的网络使用体验)。

二、与HTTP 1.1相比,主要区别包括

  1. HTTP/2采用二进制格式而非文本格式
  2. HTTP/2是彻底多路复用的,而非有序并阻塞的——只需一个链接便可实现并行
  3. 使用报头压缩,HTTP/2下降了开销
  4. HTTP/2让服务器能够将响应主动“推送”到客户端缓存中

三、HTTP/2为何是二进制?
比起像HTTP/1.x这样的文本协议,二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。

四、为何 HTTP/2 须要多路传输?
HTTP/1.x 有个问题叫线端阻塞(head-of-line blocking), 它是指一个链接(connection)一次只提交一个请求的效率比较高, 多了就会变慢。 HTTP/1.1 试过用流水线(pipelining)来解决这个问题, 可是效果并不理想(数据量较大或者速度较慢的响应, 会阻碍排在他后面的请求). 此外, 因为网络媒介(intermediary )和服务器不能很好的支持流水线, 致使部署起来困难重重。而多路传输(Multiplexing)能很好的解决这些问题, 由于它能同时处理多个消息的请求和响应; 甚至能够在传输过程当中将一个消息跟另一个掺杂在一块儿。因此客户端只须要一个链接就能加载一个页面。
五、消息头为何须要压缩?
假定一个页面有80个资源须要加载(这个数量对于今天的Web而言仍是挺保守的), 而每一次请求都有1400字节的消息头(着一样也并很多见,由于Cookie和引用等东西的存在), 至少要7到8个来回去“在线”得到这些消息头。这还不包括响应时间——那只是从客户端那里获取到它们所花的时间而已。这全都因为TCP的慢启动机制,它会基于对已知有多少个包,来肯定还要来回去获取哪些包 – 这很明显的限制了最初的几个来回能够发送的数据包的数量。相比之下,即便是头部轻微的压缩也能够是让那些请求只需一个来回就能搞定——有时候甚至一个包就能够了。这种开销是能够被节省下来的,特别是当你考虑移动客户端应用的时候,即便是良好条件下,通常也会看到几百毫秒的来回延迟。
六、服务器推送的好处是什么?
当浏览器请求一个网页时,服务器将会发回HTML,在服务器开始发送JavaScript、图片和CSS前,服务器须要等待浏览器解析HTML和发送全部内嵌资源的请求。服务器推送服务经过“推送”那些它认为客户端将会须要的内容到客户端的缓存中,以此来避免往返的延迟。

三次握手&四次挥手

三次握手
第一次握手:客户端发送syn包到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,确认客户的SYN,同时本身也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

四次挥手
与创建链接的“三次握手”相似,断开一个TCP链接则须要“四次挥手”。

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了。可是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,个人数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

tcp三次握手的缺点

常见状态码

1XX  表示消息
2XX  表示成功
3XX  表示重定向
4XX  表示请求错误
5XX  表示服务器端错误

常见HTTP状态码
200 OK
表示请求成功 一切正常
301 Moved Permanently
永久重定向,客户请求的文档在其余地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL
302 Found
临时重定向,相似于301,但新的URL应该被视为临时性的替代,而不是永久性的。
304 Not Modified
客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还能够继续使用。
400 Bad Request
请求出现语法错误。
403 Forbidden
资源不可用。
404 Not Found
没法找到指定位置的资源。
405 Method Not Allowed
请求方法对指定的资源不适用(方法:GET、POST、HEAD、Delete、PUT、TRACE等)。
500 Internal Server Error
服务器出现错误,不能完成客户的请求。
501 Not Implemented
服务器不支持实现请求所须要的功能。

全部状态码

2开头 (请求成功)表示成功处理了请求的状态代码。
200 (成功) 服务器已成功处理了请求。 一般,这表示服务器提供了请求的网页。
201 (已建立) 请求成功而且服务器建立了新的资源。
202 (已接受) 服务器已接受请求,但还没有处理。
203 (非受权信息) 服务器已成功处理了请求,但返回的信息可能来自另外一来源。
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
206 (部份内容) 服务器成功处理了部分 GET 请求。

3开头 (请求被重定向)表示要完成请求,须要进一步操做。 一般,这些状态代码用来重定向。
300 (多种选择) 针对请求,服务器可执行多种操做。 服务器可根据请求者 (user agent) 选择一项操做,或提供操做列表供请求者选择。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不一样位置的网页响应请求,但请求者应继续使用原有位置来进行之后的请求。
303 (查看其余位置) 请求者应当对不一样的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305 (使用代理) 请求者只能使用代理访问请求的网页。 若是服务器返回此响应,还表示请求者应使用代理。
307 (临时重定向) 服务器目前从不一样位置的网页响应请求,但请求者应继续使用原有位置来进行之后的请求。

4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
400 (错误请求) 服务器不理解请求的语法。
401 (未受权) 请求要求身份验证。 对于须要登陆的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。
405 (方法禁用) 禁用请求中指定的方法。
406 (不接受) 没法使用请求的内容特性响应请求的网页。
407 (须要代理受权) 此状态代码与 401(未受权)相似,但指定请求者应当受权使用代理。
408 (请求超时) 服务器等候请求时发生超时。
409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
410 (已删除) 若是请求的资源已永久删除,服务器就会返回此响应。
411 (须要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412 (未知足前提条件) 服务器未知足请求者在请求中设置的其中一个前提条件。
413 (请求实体过大) 服务器没法处理请求,由于请求实体过大,超出服务器的处理能力。
414 (请求的 URI 过长) 请求的 URI(一般为网址)过长,服务器没法处理。
415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
416 (请求范围不符合要求) 若是页面没法提供请求的范围,则服务器会返回此状态代码。
417 (未知足指望值) 服务器未知足"指望"请求标头字段的要求。

5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误多是服务器自己的错误,而不是请求出错。
500 (服务器内部错误) 服务器遇到错误,没法完成请求。
501 (还没有实施) 服务器不具有完成请求的功能。 例如,服务器没法识别请求方法时可能会返回此代码。
502 (错误网关) 服务器做为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前没法使用(因为超载或停机维护)。 一般,这只是暂时状态。
504 (网关超时) 服务器做为网关或代理,可是没有及时从上游服务器收到请求。
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

401和403区别?

401 (未受权) 请求要求身份验证。 对于须要登陆的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。

304与200读取缓存的区别

200 (成功) 服务器已成功处理了请求。 一般,这表示服务器提供了请求的网页。
302 (临时移动) 服务器目前从不一样位置的网页响应请求,但请求者应继续使用原有位置来进行之后的请求。

304是什么意思?有没有方法不请求不通过服务器直接使用缓存。

304 Not Modified
客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还能够继续使用。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
(强缓存和协商缓存的命中和管理)

304 404

• 304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还能够继续使用。
• 404 找不到页面 404 Not Found没法找到指定位置的资源。

https的原理,加密方式,怎么加密的

排序

实现一个快排

#include <iostream>
 
using namespace std;
 
void Qsort(int a[], int low, int high)
{
    if(low >= high)
    {
        return;
    }
    int first = low;
    int last = high;
    int key = a[first];/*用字表的第一个记录做为枢轴*/
 
    while(first < last)
    {
        while(first < last && a[last] >= key)
        {
            --last;
        }
 
        a[first] = a[last];/*将比第一个小的移到低端*/
 
        while(first < last && a[first] <= key)
        {
            ++first;
        }
         
        a[last] = a[first];    
/*将比第一个大的移到高端*/
    }
    a[first] = key;/*枢轴记录到位*/
    Qsort(a, low, first-1);
    Qsort(a, first+1, high);
}
int main()
{
    int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
 
    Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*这里原文第三个参数要减1不然内存越界*/
 
    for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
    {
        cout << a[i] << "";
    }
     
    return 0;
}/*参考数据结构p274(清华大学出版社,严蔚敏)*/

常见的排序算法

常见排序算法复杂度

说下选择排序,冒泡排序的实现思路

快速排序

算法是一种稳定的算法吗?
它的最坏复杂度是多少?
平均复杂度呢?
最坏:O(n2) 平均:O(n*log2n) 不稳定 空间复杂度:O(log2n)~O(n)

11.经常使用的排序算法有哪些,介绍一下选择排序。

选择排序:它的工做原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到所有待排序的数据元素排完。
| 排序方法 | 平均 | 最好 | 最坏 | 辅助存储 | 稳定性 |
| :-------- | -------:| :--: |-------| -------| -------|
| 选择排序 | O(n^2) | O(n^2) | o(n^2) | O(1) | 不稳定 |

function selectSort(arr){
   var len=arr.length;
   var temp;
   for(var i=0;i<len-1;i++){
      for(var j=i+1;j<len;j++){
         if(arr[j]<arr[i]){
            temp=arr[j];
            arr[j]=arr[i];
            arr[i]=temp;
         }
       }
      i++;
     }
    return arr;
  }

实现两个数组的排序合并

我一开始先合并再排序,他不乐意,而后我用了相似插入排序的方法。

介绍两种排序算法

快速排序(不稳定):
平均:O(nlog2^n)
最好:O(nlog2^n)
最坏:O(n^2)
辅助存储:O(nlog2^n)

var quickSort = function(arr) {
      if(arr.length <= 1) {
          return arr; 
      }
      varpivotIndex = Math.floor(arr.length / 2);
      var pivot =arr.splice(pivotIndex, 1)[0];
      var left =[];
      var right =[];
      for (var i= 0; i < arr.length; i++){
        if(arr[i] < pivot) {
          left.push(arr[i]);
        } else {
          right.push(arr[i]);
        }
      }
      return quickSort(left).concat([pivot], quickSort(right));
   };

简单选择排序(不稳定):
平均:O(n^2)
最好:O(n^2)
最坏:O(n^2)
辅助存储:O(1)
原理:它的工做原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,而后,再从剩余未排序元素中继续寻找最小(大)元素,而后放到已排序序列的末尾。以此类推,直到全部元素均排序完毕。

描述下二分查找

算法

你学过算法没,说说你都了解些什么

手写链表倒数第K个查找

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        if (pListHead == NULL || k <= 0)
            return NULL;
        ListNode *p1 = pListHead;
        ListNode *p2 = pListHead;
         
        for (int i=1; i<k; i++)
        {
            if (p1->next != NULL)
                p1 = p1->next;
            else
                return NULL;
        }
         
        while(p1->next != NULL)
        {
            p1 = p1->next;
            p2 = p2->next;
        }
        return p2;
    }
};

设计一种算法能够求出 某个数字是否 在10亿个数中出现过

一开始我就是说直接用O(n)复杂度的直接遍历就是,可是不满意,我就说:把这些数字分红N组吗,而后在每组中查找,仍是不满意

用bfs实现前序遍历

给千万量级的珠子,共上百种颜色,围成一个圈,求连续的包含全部颜色的最短子串的长度,并分析时间复杂度

实现洗牌算法

最短路算法(dijkstra),有负环怎么办(spfa)

1三、解释平衡二叉树,以及在数据结构中的应用(红黑树)

1四、快排的时间复杂度和空间复杂度。

关于平衡二叉树

手写第一次面试没有写出来的链表问题,要求用es6写

手写一个简单遍历算法

手写归并排序

n长的数组放入n+1个数,不能重复,找出那个缺失的数

怎么实现两个大整数的相乘说下思路

实现两个大整数的相加

智力题

用4个颜色给一个六面体上色有多少种状况

数据结构

你学过数据结构没,说说你都了解些什么

你用JS实现过一些基本的数据结构吗?

数组和链表区别,分别适合什么数据结构

单向链表怎么查找有没有环?

你对数据结构有了解吧?我想问你,1000万个结点的彻底二叉树高度是多少?

操做系统

你对操做系统有了解吧?关于进程的调度算法,你能讲一下吗?

你学过计算机操做系统没,说说你都了解些什么

[几个经常使用的操做系统进程调度算法](http://blog.csdn.net/luyafei_89430/article/details/12971171

unix中经常使用的命令行

常用的linux命令

4.线程与进程的区别及相应的应用场景

进程是资源分配的最小单位,线程是CPU调度的最小单位
Alt text

C++

C++里面,堆栈最大的不 同点是什么?

  堆和栈的区别:  
1、堆栈空间分配区别:  
一、栈(操做系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操做方式相似于数据结构中的栈;  
二、堆(操做系统): 通常由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式却是相似于链表。  
2、堆栈缓存方式区别:  
一、栈使用的是一级缓存, 他们一般都是被调用时处于存储空间中,调用完毕当即释放;  
二、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并非一旦成为孤儿对象就能被回收)。因此调用这些对象的速度要相对来得低一些。  
3、堆栈数据结构区别:  
堆(数据结构):堆能够被当作是一棵树,如:堆排序;  
栈(数据结构):一种先进后出的数据结构。

数据库

mysql与 MongoDB的区别

出了个题目让我写设计数据库

相关文章
相关标签/搜索