李洪强经典面试题146-网络

李洪强经典面试题146-网络

 

网络

http请求方式?

一般,HTTP的请求方式有3种,分别是:POST、GET、HEAD。POST和GET方法是用于数据发送的。html

POST:它将要发送的数据单独放在一个流中进行发送,而不是附加在URL地址后面,这样作的好处是这些数据不会出如今URL地址中。程序员

GET:它将要发送的数据直接添加在URL后面,如:www.sina.com.cn?username=""&password="",这样的好处是能够直接将数据加在URL后,而不需在用另外的流来发送这些数据,可是缺点也显而易见,它将用户的信息显示出来了。web

HEAD:它是请求资源的元数据方法。在具体的应用中,我暂时还没遇到过,也不去对它进行研究,须要是在学习。面试

Http定义了与服务器交互的不一样方法,最基本的方法有?

  • URL全称是资源描述符,咱们能够这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操做。编程

  • GET通常用于获取/查询资源信息,而POST通常用于更新资源信息。json

socket编程简述

它是基于TCP/IP协议,Socket就是一个能够连通网络上不一样计算机程序之间的管道,把一堆数据从管道的A端扔进去,则会从管道的B端(也许同时还能够从C、D、E、F……端冒出来)。管道的端口由两个因素来惟一确认,即机器的IP地址和程序所使用的端口号。数组

Socket能够支持数据的发送和接收,它会定义一种称为套接字的变量,发送数据时首先建立套接字,而后使用该套接字的sendto等方法对准某个IP/端口进行数据发送;接收端也首先建立套接字,而后将该套接字绑定到一个IP/端口上,全部发向此端口的数据会被该套接字的recv等函数读出。如同读出文件中的数据同样。浏览器

TCP/IP的socket提供下列三种类型套接字。 流式套接字、数据报式套接字、原始式套接字。安全

客户端编程步骤:服务器

1:加载套接字库,建立套接字(WSAStartup()/socket());



2:向服务器发出链接请求(connect());



3:和服务器端进行通讯(send()/recv());



4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

经常使用第三方库:1,Asyncsocket库

asihttp代码原理,异步请求的原理,异步请求最大数目,为何只能这么多?

ASIHTTPRequest是一个简易使用的类库,经过包装CFNetwork API 来简化 和服务器端的通信. 它编写的语言是Objective-C 可以应用于Mac OS X and iPhone 平台的应用程序.

异步: 请求经过事件触发->服务器处理(这是浏览器仍然能够做其余事情)->处理完毕这个数量是跟cpu有关的,并发性取决于cpu核数,每一个核只能同时处理一个任务.4核cpu理论上能够并发处理4个任务,若是按http来算就是4个请求,可是cpu是抢占式资源,因此通常来讲并发量是要根据任务的耗时和cpu的繁忙度来计算4个左右只是个经验值你开10个短耗时的任务和几个长耗时任务的效率是不一样的。

JSONKit、SBJson、TouchJSON和原生的区别?

JSONKit、SBJson、TouchJSON(性能从左到右,越右越差,主要就是性能上的差异)

App须要加载超大量的数据,给服务器发送请求,可是服务器卡住了如何解决?

1> 设置请求超时
2> 给用户提示请求超时
3> 根据用户操做再次请求数据

HTTP的通讯的 发送请求、接收响应 包含哪些内容?OC中是怎样实现的?

  1. 请求:一个请求包含如下内容:
  2. 请求行:包含了请求方法、请求资源路径、HTTP协议版本
    GET /XXServer/resources/images/1.jpg HTTP/1.1
  3. 请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息

    • Host: 192.168.1.105:8080 // 客户端想访问的服务器主机地址
    • User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0
      // 客户端的类型,客户端的软件环境
    • Accept: text/html, / // 客户端所能接收的数据类型
    • Accept-Language: zh-cn // 客户端的语言环境
    • Accept-Encoding: gzip // 客户端支持的数据压缩格式
    • 请求体:客户端发给服务器的具体数据,好比文件数据
    • OC中请求NSURLRequest
    • 发送给服务器的请求包含:
    • 请求行: 包含了请求方法、请求资源路径、HTTP协议版本
    • 请求头: 对客户端的环境描述、客户端请求的主机地址等信息
    • 请求体: 客户端发给服务器的具体数据
    • 默认超时时常:60s
    • 响应:
    • 一个响应包括:
    • 状态行:包含了HTTP协议版本、状态码、状态英文名称 HTTP/1.1 200 OK
    • 响应头:包含了对服务器的描述、对返回数据的描述
    • Server: Apache-Coyote/1.1 // 服务器的类型
    • Content-Type: image/jpeg // 返回数据的类型
    • Content-Length: 56811 // 返回数据的长度
    • Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间
    • 实体内容:服务器返回给客户端的具体数据,好比文件数据
    • OC中响应用NSURLRespose:返回给客户端的回应包含:

      • 状态行 : 包含了HTTP协议版本、状态码、状态英文名称
      • 响应头 : 包含了对服务器的描述、对返回数据的描述
      • 实体内容:服务器返回给客户端的具体二进制数据

      • 经常使用属性: expectedContentLength (下载时返回文件的长度)

        suggestedFilename(建议保存的文件名)

http 的post与get区别与联系,实践中如何选择它们?

  GET POST
用途 从服务器上获取数据 向服务器传送数据提交方式
服务器解析 Request.QueryString获取变量的值 Request.Form获取提交的数据
数据大小 最大1024字节 无限制
安全性 URL中能看到提交的数据 隐藏在请求头中

知道TCP/UDP吗?说说关于UDP/TCP的区别?

  • UDP: 是用户数据报协议: 主要用在实时性要求高以及对质量相对较弱的地方,但面对如今高质量的线路不是容易丢包除非是一些拥塞条件下, 如流媒体
  • TCP: 是传输控制协议:是面链接的,那么运行环境必然要求其可靠性不可丢包有良好的拥塞控制机制如http ftp telnet 等
  TCP UDP
发送与接收 安全送达 只管发送
创建链接 是(三次握手) 否(有数据包,无需链接)
数据大小 无限制 每一个数据报64k
可靠性 可靠 不可靠
速度 慢(三次握手才能完成链接 快(无需链接)
应用 流媒体 qq

什么是三次握手与四次挥手?

  • 三次握手实现的过程:

    • 第一次握手:创建链接时,客户端发送同步序列编号到服务器,并进入发送状态,等待服务器确认
    • 第二次:服务器收到同步序列编号,确认并同时本身也发送一个同步序列编号+确认标志,此时服务器进入接收状态
    • 第三次:客户端收到服务器发送的包,并向服务器发送确认标志,随后连接成功。
    • 注意:是在连接成功后在进行数据传输。
  • 四次挥手:

    • 第一次: 客户端向服务器发送一个带有结束标记的报文。
    • 第二次:服务器收到报文后,向客户端发送一个确认序号,同时通知本身相应的应用程序:对方要求关闭链接
    • 第三次: 服务器向客户端发送一个带有结束标记的报文。
    • 第四次: 客户端收到报文后,向服务器发送一个确认序号。连接关闭。

分析json、xml的区别?json、xml解析方式的底层是如何处理的?

  1. Json与xml的区别:

    • 可读性方面:基本相同,xml的可读性比较好
    • 可扩展性方面:都具备很好的扩展性
    • 编码难度方面:相对而言:JSON的编码比较容易
    • 解码难度:json的解码难度基本为零,xml须要考虑子节点和父节点
    • 数据体积方面:json相对于xml来说,数据体积小,传递的速度跟快些
    • 数据交互方面:json与JavaScript的交互更加方面,更容易解析处理,更好的数据交互
    • 数据描述方面:xml对数据描述性比较好
    • 传输速度方面:json的速度远远快于xml
  2. JSON底层原理:

    • 遍历字符串中的字符,最终根据格式规定的特殊字符,好比{}号,[]号, : 号 等进行区分,{}号是一个字典 的开始,[]号是一个数组的开始, : 号是字典的键和值的分水岭,最终乃是将json数据转化为字典,字典中值多是字典,数组,或字符串而已。
  3. XML底层原理:

    • XML解析经常使用的解析方法有两种:DOM解析和SAX解析。
    • DOM 采用创建树形结构的方式访问 XML 文档,而 SAX 采用的事件模型。
    • DOM 解析把 XML 文档转化为一个包含其内容的树,并能够对树进行遍历。
    • 使用 DOM 解析器的时候需 要处理整个 XML 文档,因此对性能和内存的要求比较高。
    • SAX在解析 XML 文档的时候能够触发一系列的事件,当发现给定的tag的时候,它能够激活一个回调方法,告诉该方法制定的标签已经找到。
    • SAX 对内存的要求一般会比较低,由于它让开发人员本身来决定所要处理的tag。特别是当开发人员只须要处理文档中所包含的部分数据时,SAX 这种扩展能力获得了更好的体现。
    1. (补充)其余解析方式有自定义二进制解析,就是按字节去解析,电话会谈就是如此,还能够是字符串之间用特殊符号链接的数据,将此数据用特殊符号能够分割成所用数据。

http和scoket通讯的区别?socket链接相关库,TCP,UDP的链接方法,HTTP的几种经常使用方式?

  1. http和scoket通讯的区别:
    • http是客户端用http协议进行请求,发送请求时候须要封装http请求头,并绑定请求的数据,服务器通常有web服务器配合(固然也非绝对)。 http请求方式为客户端主动发起请求,服务器才能给响应,一次请求完毕后则断开链接,以节省资源。服务器不能主动给客户端响应(除非采起http长链接技术)。iphone主要使用类是NSUrlConnection。
    • scoket是客户端跟服务器直接使用socket“套接字”进行链接,并无规定链接后断开,因此客户端和服务器能够保持链接通道,双方均可以主动发送数据。通常在游戏开发或股票开发这种要求即时性很强而且保持发送数据量比较大的场合使用。主要使用类是CFSocketRef。

通讯底层原理(OSI七层模型)

  • OSI简介:OSI采用了分层的结构化技术,共分七层,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

    • 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各类传输介质的传输速率等。它的主要做用是传输比特流(就是由一、0转化为电流强弱来进行传输,到达目的地后在转化为一、0,也就是咱们常说的数模转换与模数转换)。这一层的数据叫作比特。

    • 数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层一般还提供错误检测和纠正,以确保数据的可靠传输。

    • 网络层::在位于不一样地理位置的网络中的两个主机系统之间提供链接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增长,而网络层正是管理这种链接的层。

    • 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性偏偏相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是经过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。经常把这一层数据叫作段。

  • 会话层:经过传输层(端口号:传输端口与接收端口)创建数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间须要互相认识能够是IP也能够是MAC或者是主机名)

  • 表示层::可确保一个系统的应用层所发送的信息能够被另外一个系统的应用层读取。例如,PC程序与另外一台计算机进行通讯,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另外一台则使用美国信息交换标准码(ASCII)来表示相同的字符。若有必要,表示层会经过使用一种通格式来实现多种数据格式之间的转换。

  • 应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。

all people seem to need date processing这一句话的意思是全部的人彷佛都须要处理数据

   
Application all
Presentation people
Session seem
Transport to
Network need
Data date
Physical processing

设计一套大文件(如上百M的视频)下载方案

  • NSURLSession

  • 支持断点下载,自动记录中止下载时断点的位置

  • 遵照NSURLSessionDownloadDelegate协议
  • 使用NSURLSession下载大文件,被下载文件会被自动写入沙盒的临时文件夹tmp中
  • 下载完毕,一般须要将已下载文件移动其余位置(tmp文件夹中的数据被定时删除),一般是cache文件夹中
  • 下载步骤:

    • 设置下载任务task的为成员变量

      @property (nonatomic, strong) NSURLSessionDownloadTask *task;
      • 获取NSURLSession对象

        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];

      • 初始化下载任务任务

        self.task = [session downloadTaskWithURL:(此处为下载文件路径URL)];

      • 实现代理方法

        /*每当写入数据到临时文件的时候,就会调用一次该方法,一般在该方法中获取下载进度/
        -(void)URLSession:(NSURLSession )session downloadTask: (NSURLSessionDownloadTask )downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
        {

        // 计算下载进度 CGFloat progress = 1.0 * totalBytesWritten / totalBytesExpectedToWrite;

        }

        /*任务终止时调用的方法,一般用于断点下载/
        -(void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
        {

        //fileOffset:下载任务停止时的偏移量

        }

        /*遇到错误的时候调用,error参数只能传递客户端的错误/
        -(void)URLSession:(NSURLSession )session task:(NSURLSessionTask )task didCompleteWithError:(NSError *)error
        { }

        /*下载完成的时候调用,须要将文件剪切到能够长期保存的文件夹中/
        -(void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didFinishDownloadingToURL:(NSURL *)location
        {

        //生成文件长期保存的路径 NSString *file = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:downloadTask.response.suggestedFilename]; //获取文件句柄 NSFileManager *fileManager = [NSFileManager defaultManager]; //经过文件句柄,将文件剪切到文件长期保存的路径 [fileManager moveItemAtURL:location toURL:[NSURL fileURLWithPath:file] error:nil];

        }

      • 操做任务状态

        /*开始/继续下载任务/
        [self.task resume];

        /*暂停下载任务/
        [self.task suspend];

HTTP协议的特色,关于HTTP请求GET和POST的区别?

HTTP协议的特色:
- HTTP超文本传输协议,是短链接,是客户端主动发送请求,服务器作出响应,服务器响应以后,连接断开。HTTP是一个属于应用层面向对象的协议,HTTP有两类报文:请求报文和响应报文。 - HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4部分组成。 - HTTP响应报文:由三部分组成:状态行、消息报头、响应正文。

即时聊天App不会采用的网络传输方式

A UDP
B TCP 
C HTTP D FTP 参考答案:D 理由:FTP是文件传输协议,是File Transfer Protocol的简称,它的做用是用于控制互联网上文件的双向传输,所以必定不会是即时聊天使用的;UDP是面向无链接的传输层协议,数据传输是不可靠的,它只管发,无论收不收获得;TCP是面向链接的,可靠的传输层协议;HTTP是超文本传输协议,对应于应用层,而HTTP是基于TCP的。

在App中混合HTML5开发App如何实现的。在App中使用HTML5的优缺点是什么?

在iOS中,一般是用UIWebView来实现,固然在iOS8之后可使用WKWebView来实现.有如下几种实现方法: 经过实现UIWebView的代理方法来拦截,判断scheme是不是约定好的,而后iOS调用本地相关API来实现: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 在iOS7之后,能够直接经过JavaScripteCore这个库来实现,经过往JS DOM注入对象,而这个对象对应于咱们iOS的某个类的实例。更详细请阅读: OC JavaScriptCore与js交互 WKWebView新特性及JS交互 Swift JavaScriptCore与JS交互 能够经过WebViewJavascriptBridge来实现。具体如何使用,请你们去其它博客搜索吧! 优缺点: iOS加入H5响应比原生要慢不少,体验不太好,这是缺点。 iOS加入H5能够实现嵌入别的功能入口,可随时更改,不用更新版本就能够上线,这是最大的优势。

介绍一下XMPP?有什么优缺点吗?

XMPP(Extensible Messaging and Presence Protocol,前称)是一种以XML为基础的开放式实时通讯协议,是 经由互联网工程工做小组(IETF)经过的互联网标准。简单的说,XMPP就是一种协议,一种规定。就是说,在网络上传 东西,要创建链接,TCP/IP链接,创建后再传东西,而XMPP就是规定你传的东西的格式。XMPP是基于XML的协议。 优势 开放: XMPP协议是自由、开放、公开的,而且易于了解。 并且在客户端 、 服务器 、 组件 、 源码库等方面,都已经各自有多种实现。 标准: 互联网工程工做小组( IETF )已经将Jabber的核心XML流协议以XMPP之名,正式列为承认的实时通讯及Presence技术。 而XMPP的技术规格已被定义在RFC 3920及RFC 3921 。 任何IM供应商在遵循XMPP协议下,均可与Google Talk实现链接。 证明可用: 第一个Jabber(如今XMPP)技术是Jeremie Miller在1998年开发的,如今已经至关稳定;数以百计的开发者为XMPP技术而努 力。 今日的互联网上有数以万计的XMPP服务器运做着,并有数以百万计的人们使用XMPP实时传讯软件。 分散式: XMPP网络的架构和电子邮件十分相像;XMPP核心协议通讯方式是先建立一个stream,XMPP以TCP传递XML数据流,没有 中央主服务器。 任何人均可以运行本身的XMPP服务器,使我的及组织可以掌控他们的实时传讯体验。 安全: 任何XMPP协议的服务器能够独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自 带于核心XMPP技术规格中。 可扩展: XML 命名空间的威力可以使任何人在核心协议的基础上建造定制化的功能;为了维持通透性,常见的扩展由XMPP标准基金会 。 弹性佳: XMPP除了可用在实时通讯的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。 多样性: 用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各类领域;用XMPP技术开发软件,资源及支持的 来源是多样的,使得使你不会陷于被“绑架”的困境。 缺点 数据负载过重: 随着一般超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的 数据提供给多个收件人。 新的议定书正在研究,以减轻这一问题。 没有二进制数据: XMPP协议的方式被编码为一个单一的长的XML文件,所以没法提供修改二进制数据。 所以, 文件传输协议同样使用外部的 HTTP。 若是不可避免,XMPP协议还提供了带编码的文件传输的全部数据使用的Base64 。 至于其余二进制数据加密会话 (encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。

NSURLConnection的几个经常使用的代理?

  • NSURLConnectionDownloadDelegate :可以实现监听下载进度!可是下载以后,找不到下载好的文件!
  • NSURLConnectionDataDelegate 是针对数据下载提供的方法!须要注意的是,须要本身实现监听进度的业务逻辑!
  • 利用 NSURLConnection 的异步回调进行文件下载:
    • 若是是小文件下载,问题不大! 能够直接使用异步回调进行下载
    • 若是使用异步回调的方法进行大文件下载,则会出现内存暴涨的状况!
  • 内存暴涨的缘由: 大文件下载以后,默认是放在内存中的,因此下载的文件越大,越耗费内存.
  • 存在的缺点: 使用异步回调实现文件,没法监听下载进度!而且对于大文件下载,会形成内存暴涨!
  • 基于以上两点,通常,在进行文件下载的时候,使用代理回调监听下载进度!而且在下载文件的时候,手动管理内存!

NSURLConnection&NSURLSession的区别?

  • 虽然 NSURLConnection 在 iOS 9.0 中已经被废弃,可是做为资深的 iOS 程序员,必需要了解 NSURLConnection 的细节,
    • NSURLSession: 用于替代 NSURLConnection
    • 支持后台运行的网络任务
    • 暂停、中止、重启网络任务,再也不须要 NSOperation 封装
    • 请求可使用一样的配置容器
    • 不一样的 session 可使用不一样的私有存储
    • block 和代理能够同时起做用
    • 直接从文件系统上传、下载

XML是什么? XML与HTML的区别?

  • XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的惟一公共语言,虽然不一样的应用软件也支持其它的数据交换格式,但不久以后他们都将支持XML,那就意味着程序能够更容易的与Windows,Mac OS,Linux以及其余平台下产生的信息结合,而后能够很容易加载XML数据到程序中并分析他,并以XML格式输出结果。
  • XML去掉了以前令许多开发人员头疼的SGML(标准通用标记语言)的随意语法。在XML中,采用了以下的语法:
    • 任何的起始标签都必须有一个结束标签。
    • 能够采用另外一种简化语法,能够在一个标签中同时表示起始和结束标签。这种语法是在大于符号以前紧跟一个斜线(/),例如<tag/ >。XML解析器会将其翻译成<tag></tag>。
    • 标签必须按合适的顺序进行嵌套,因此结束标签必须按镜像顺序匹配起始标签,例如this is asamplestring。这比如是将起始和结束标签看做是数学中的左右括号:在没有关闭全部的内部括号以前,是不能关闭外面的括号的。
    • 全部的特性都必须有值。
    • 全部的特性都必须在值的周围加上双引号。
  • XML与HTML的设计区别是:XML的核心是数据,其重点是数据的内容。而HTML 被设计用来显示数据,其重点是数据的显示。
  • XML和HTML语法区别:HTML的标记不是全部的都须要成对出现,XML则要求全部的标记必须成对出现;HTML标记不区分大小写,XML则 大小敏感,即区分大小写。

网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题?

利用字典(图片地址为key,下载操做为value)

sip是什么?

1> SIP(Session Initiation Protocol),会话发起协议 2> SIP是创建VOIP链接的 IETF 标准,IETF是全球互联网最具权威的技术标准化组织 3> 所谓VOIP,就是网络电话,直接用互联网打电话,不用耗手机话费

TCP/IP四层模型

  • TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。

  • 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。

  • 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,而且肯定数据已被送达并接收。

  • 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都可以到达目的主机(但不检查是否被正确接收),如网际协议(IP)。

  • 网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。

文章若有问题,请留言,我将及时更正。

相关文章
相关标签/搜索