基础知识面试

线程与进程的区别

  • 一个程序至少有一个进程,一个进程至少有一个线程。
  • 线程的划分尺度小于进程,使得多线程程序的并发性高。
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
  • 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  • 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

get和post的区别

  • GET一般用于信息获取,POST一般用于修改服务器上的资源,对所发送的信息没有限制。
  • Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。
  • Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节。
  • Post顾名思义,就是为了将数据传送到服务器端,对所发送的信息没有限制。Get就是为了从服务器段取得数据。而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据。Post的信息作为http请求的内容,而Get是在Http头部传输的。
  • get 方法用Request.QueryString[“strName”]接收。post 方法用Request.Form[“strName”] 接收,也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。注意:虽然两种提交方式可以统一用Request(“strName”)来获取提交数据,但是这样对程序效率有影响,不推荐使用。一般来说,尽量避免使用Get方式提交表单,因为有可能会导致安全问题。
  • 在以下情况中,使用 POST 请求:
    • 无法使用缓存文件(更新服务器上的文件或数据库)
    • 向服务器发送大量数据(POST 没有数据量限制)
    • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

TCP协议和UDP协议

  • UDP是面向无连接的,不可靠的数据报服务;TCP是面向连接的,可靠的字节流服务。
  • 每一条TCP连接只能有两个端点(一对一),可传递大量数据,在通信之前要建立可靠连接。
  • UDP不许要先建立连接,通信的时候会直接向网络中发送数据,适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。
  • HTTP协议是建立在TCP协议之上的一种应用

HTTP与HTTPS协议

  • HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求
  • HTTP协议的不安全性:HTTP(超级文本传输协议)HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
  • HTTPS协议的初衷:(安全套接字层超文本传输协议)HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
  • HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
  • HTTPS和HTTP的区别主要如下:
    • https协议需要申请证书,一般免费证书较少,因而需要一定费用。
    • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
    • HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包,而HTTPS需要12个包。

TCP的可靠性

TCP的可靠性是通过发送序号(Seq)和确认序号(ACK)来实现的。ack=seq+1;

2XX、3XX、4XX、5XX分别代表的含义

  • 1XX-信息类(Information),表示收到Web浏览器请求,正在进一步的处理中
  • 2XX-成功类(Successful),表示用户请求被正确接收,理解和处理例如:200 OK
  • 3XX-重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。
  • 4XX-客户端错误(Client Error),表示客户端提交的请求有错误 例如:404意味着请求中所引用的文档不存在。
  • 5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理:如 500
   100  Continue   继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
   200  OK         正常返回信息
   201  Created    请求成功并且服务器创建了新的资源
   202  Accepted   服务器已接受请求,但尚未处理

   301  Moved Permanently  请求的网页已永久移动到新位置。
   302 Found       临时性重定向。还是请求原地址,但是会被转移到其他的url处理
   303 See Other   临时性重定向,需要发送新的URL。
   304  Not Modified 自从上次请求后,请求的网页未修改过。

   400 Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
   401 Unauthorized 请求未授权。
   403 Forbidden   禁止访问。
   404 Not Found   找不到如何与 URI 相匹配的资源。

   500 Internal Server Error  最常见的服务器端错误。
   503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

Cookies和Session的主要区别

1)session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。
2)session中保存的是对象,cookie中保存的是字符串。
3)session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。
4)session默认需要借助cookie才能正常工作。如果客户端完全禁止cookie,session这种方法将失效。但可以URL重写。
5)session在用户会话结束后就会关闭了,但cookie因为保存在客户端,可以长期保存。
6)cookie:是服务端向客户端写入的小的片段信息。cookie信息保存在服务器缓存区,不会在客户端显现。当你第一次登陆一个网站,服务器向你的机器写得片段信息。你可以在Internet选项中找到存放cookie的文件夹。如果不删除,cookie就一直在这个文件夹中。
7)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
8)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
9)建议:将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中

七层协议的介绍

  • OSI分层(7层) :物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
  • TCP/IP分层(4层) :网络接口层、网际层、运输层、应用层。
  • 五层协议(5层) :物理层、数据链路层、网络层、运输层、应用层。
  • 每一层的作用如下:
    • 物理层:激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。
    • 数据链路层 :数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
    • 传输层 :第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
    • 会话层 :会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
    • 表示层 :表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
    • 应用层 :为操作系统或网络应用程序提供访问网络服务的接口。

TCP/IP 中,每一层对应的协议

  • 应用层 :FTP(文件传送协议)、Telenet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议。
  • 表示层:JPEG、MPEG、ASII
  • 会话层:NFS、SQL、NETBIOS、RPC
  • 传输层:TCP、UDP、SPX
  • 网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
  • 数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
  • 物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)
    ICMP协议:因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
    TFTP协议:是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
    HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
    DHCP协议: 动态主机设置协议(Dynamic Host ConfigurationProtocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
    NAT协议:网络地址转换(NAT,Network AddressTranslation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
    DHCP协议:一个局域网的网络协议,使用UDP协议工作,用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
    DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串

ARP协议的工作原理

完成IP地址到MAC地址的映射。
1):首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2):当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
3):当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
4):源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。 广播发送ARP请求,单播发送ARP响应。
RARP协议:
RARP是逆地址解析协议,作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。

路由设备与相关层

物理层 :中继器(Repeater,也叫放大器),集线器。
数据链路层 :网桥,交换机。
网络层 :路由器。
网关 :网络层以上的设备。

常见的路由选择协议,以及它们的区别

  • RIP协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包。
  • OSPF协议 :底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。

HTTP 协议包括哪些请求?

GET:请求读取由URL所标志的信息。
POST:给服务器添加信息(如注释)。
PUT:在给定的URL下存储一个文档。
DELETE:删除给定的URL所标志的资源。
HEAD等等

TCP 对应的协议和 UDP 对应的协议

TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。

TCP对应的协议和UDP对应的协议
TCP对应的协议:
(1) FTP :定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
(2) Telnet :它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
(3) SMTP :定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。
(4) POP3 :它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。
(5)HTTP协议: 是从 Web 服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS :用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP :简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP (Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

NAT 协议、 DHCP 协议、 DNS 协议的作用

  • NAT协议 :网络地址转换(NAT,Network AddressTranslation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
  • DHCP协议 :动态主机设置协议(Dynamic Host ConfigurationProtocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
  • DNS协议 :DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

DNS域名系统,简单描述其工作原理

当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53。 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。

  • 工作原理
    1、在浏览器中输入www.didichuxing.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
    2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
    3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
    4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
    5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13个根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
    6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
  • DNS劫持
    一般而言,用户上网的DNS服务器都是运营商分配的,就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。
    比如DNS劫持后,可以返回一个运营商的中间服务器IP。访问该服务器会一致性的返回302,让用户浏览器跳转到预处理好的带广告的网页,在该网页中再通过iframe打开用户原来访问的地址。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。
  • HTTP劫持
    HTTP劫持是在使用者与其目的网络服务所建立的专用数据通道中,监视特定数据信息,提示当满足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并以弹出新窗口的形式在使用者界面展示宣传性广告或者直接显示某网站的内容。
    在运营商的路由器节点上,设置协议检测,一旦发现是HTTP请求,而且是html类型请求,则拦截处理。后续做法往往分为2种,1种是类似DNS劫持返回302让用户浏览器跳转到另外的地址,还有1种是在服务器返回的HTML数据中插入js或dom节点(广告)。
  • DNS记录污染:
    由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。
    DNS污染具有暂时性,过了TTL周期,如果不进行再污染,污染就会消失。
    DNS记录污染同劫持的不同之处,在于污染是对本来正确的DNS查询结果进行篡改,而劫持是DNS服务器自己把记录改成错误的内容。
    防止DNS 劫持可以使用非 53port 或使用 tcp 查询或使用 DNSPod 的 HTTPDNS使用 DNSAgent 来通过 HTTPDNS 解析防止HTTP劫持可以使用HTTPS 防止DNS污染的方法目前来说就是使用TCP协议代替UDP来进行DNS查询,因为TCP协议是有连接的协议需要双方握手成功才能通讯。

B+树、B-树和红黑树

  • B-树的特性:

    • 关键字集合分布在整颗树中;
    • 任何一个关键字出现且只出现在一个结点中;
    • 搜索有可能在非叶子结点结束;
    • 其搜索性能等价于在关键字全集内做一次二分查找;
    • 自动层次控制;
    • 由于限制了除根结点以外的非叶子结点,至少含有M/2个儿子,确保了结点的至少利用率,其最底搜索性能为:O(log2n)只与节点数有关,与M无关。
  • B+的特性:

    • 所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
    • 不可能在非叶子结点命中;
    • 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
    • 更适合用于数据库和操作系统的文件系统;
  • B+树的查找:对B+树可以进行两种查找运算:

    • 从最小关键字起顺序查找;
    • 从根结点开始,进行随机查找。
  • B+树是应文件系统所需而出的一种B-树的变型树。一棵m阶的B+树和m阶的B-树的差异在于:

    • 有n棵子树的结点中含有n个关键字,每个关键字不保存数据,只用来索引,所有数据都保存在叶子节点。
    • 所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
    • 所有的非终端结点可以看成是索引部分,结点中仅含其子树(根结点)中的最大(或最小)关键字。
    • 通常在B+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。

红黑树:红黑树就是用红链接表示3-结点的2-3树。
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。

  • 红黑树性质

    • 每个结点要么是红的,要么是黑的。
    • 根结点是黑的。
    • 每个叶结点,即空结点(NIL)是黑的。
    • 如果一个结点是红的,那么它的俩个儿子都是黑的。
    • 对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。
  • 红黑树的本质:红黑树是对2-3查找树的改进,只是它们对3结点的表示不同,将3-结点表示为由一条左斜的红色链接相连的两个2-结点。若指向它的链接是红色的,那么该节点为红色,红黑树都既是二叉查找树,也是2-3树。

  • 小结:

    • B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;
    • B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;
    • B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;
    • B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;

DNS使用了什么协议

DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;端口是53。
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值