面试准备android
Posted 酷叮喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试准备android相关的知识,希望对你有一定的参考价值。
清明节放假,从周一等到周五都没有见到阿里的三面电话,但是城市没有变灰。。本宝宝心里苦,但是本宝宝不说(╥﹏╥)。没事,总会有伯乐喜欢我这种勤奋好学的程序猿的。小部分的操作系统,另外的tcp协议和http协议明天有空再整理上来。
-----------我是乐观的分割线----------------
37、Window内存管理方式:段存储,页存储,段页存储。(虚拟存储器调度方式)
分页存储:地址空间、内存空间划分成大小相当的区域“页”,用户程序放入其中,实现了离散分配。(有效地提高内存的利用率)
分段存储:分成大小不等的段,每段定义一组逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。(反映程序的逻辑结构,便于段的共享与保护)(容易在段间留下许多碎片,造成存储空间利用率降低。)
段页式存储:两者结合,系统应为每个进程设置一个段表,包括每段的段号,该段的页表始址和页表长度。每个段有自己的页表,记录段中的每一页的页号和存放在主存中的物理块号。
(优点:(1) 它提供了大量的虚拟存储空间。(2) 能有效地利用主存,为组织多道程序运行提供了方便。
缺点:(1) 增加了硬件成本、系统的复杂性和管理上的开消。(2) 存在着系统发生抖动的危险。(3) 存在着内碎片。(4) 还有各种表格要占用主存空间。 段页式存储管理技术对当前的大、中型计算机系统来说,算是最通用、最灵活的一种方案。)
38、(linux操作系统)虚拟内存。
虚拟存储器是由硬件和操作系统自动实现存储信息调度和管理的。使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换
(为什么需要虚拟http://www.jb51.net/LINUXjishu/43203.html )
39、虚拟地址、逻辑地址、线性地址、物理地址的区别。
逻辑地址(Logical Address):包含在机器语言指令中用来指定一个操作数或一条指令的地址。这种寻址方式在80x86著名的分段结构中表现得尤为具体,它促使windows程序员把程序分成若干段。每个逻辑地址都由一个段和偏移量组成,偏移量指明了从段开始的地方到实际地址之间的距离。
线性地址(linear address)(也称虚拟地址 virtual address):是CPU所能寻址的空间或者范围,是一个32位无符号整数,可以用来表示高达4GB的地址,线性地址通常用十六进制数字表示,值的范围从0x00000000到0xffffffff。
物理地址(physical address)(实实在在的地址,机器中的内存容量范围。):用于内存芯片级内存单元寻址。它们与从微处理器的地址引脚按发送到内存总线上的电信号相对应。物理地址由32位或36位无符号整数表示。
-----------走过路过不要错过系列书籍-------------
推荐书籍:《深入理解现代操作系统》
------------------------------------
1、OSI与TCP/IP各层的结构与功能,都有哪些协议。
开放系统互联(Open System Interconnection)(7层)
(具体http://www.ha97.com/3215.html 一点都不想看=-=)
TCP和UDP的区别
TCP (Transmission Control Protocol传输控制协议)和UDP(User Datagram Protocol用户数据报协议)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;
而UDP则不为IP提供可靠性、 流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。当注重数据传输的完整性、可控制性和可靠性时,选TCP协议。当强调传输性能时,如:音频和多媒体应用,选UDP。
TCP协议和UDP协议特性区别总结:
1. TCP协议在传送数据段的时候要给段标号;UDP协议不
2. TCP协议可靠;UDP协议不可靠
3. TCP协议是面向连接;UDP协议采用无连接
4. TCP协议负载较高,采用虚电路;UDP采用无连接
5. TCP协议的发送方要确认接收方是否收到数据段(3次握手协议)
6. TCP协议采用窗口技术和流控制
TCP支持的应用协议主要 有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系 统)、TFTP(通用文件传输协议)等.TCP/IP协议与低层的数据链路层和物理层无关,这也是TCP/IP的重要特点
2、TCP报文结构。(呵呵呵。。哪天用到蓝牙了我可能才知道它的结构是什么。。)
报文(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。
3、TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用。
【建立TCP连接】(三次握手)
-》客户端发送一个带SYN标志的TCP报文(报文1)到服务器端,表示希望建立一个TCP连接。-》服务器发送一个带ACK标志和SYN标志的TCP报文(报文2)给客户端,ACK用于对报文1的回应,SYN用于询问客户端是否准备好进行数据传输。-》客户端发送一个带ACK标志的TCP报文(报文3),作为报文2的回应。-》至此,一个TCP连接就建立起来了。(tcp标志位,有6种分别为:SYN(synchronous建立联机) 、ACK(acknowledgement 确认) 、PSH(push传送) 、FIN(finish结束)、 RST(reset重置) 、URG(urgent紧急);)
CLOSED: 表示初始状态。
LISTEN: 表示服务器端的某个SOCKET处于监听状态,可以接受连接
SYN_RECV: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本 上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态 时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
SYN_SENT: 这个状态与SYN_RECV遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状 态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
ESTABLISHED:表示连接已经建立了。
【终止TCP连接】(四次挥手)(timewait和2msl http://www.cnblogs.com/zmlctt/p/3690998.html )
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。原则是主动关闭的一方发送一个FIN报文来表示终止这个方向的连接,收到一个FIN意味着这个方向不再有数据流动,但另一个方向仍能继续发送数据,直到另一个方向也发送FIN报文。
-》客户端发送一个FIN报文(报文4)给服务器,表示我将关闭客户端到服务器端这个方向的连接。-》服务器收到报文4后,发送ACK报文(报文5)给客户端,序号为报文4的序号加1。-》服务器发送一个FIN报文(报文6)给客户端,表示自己也将关闭服务器端到客户端这个方向的连接。-》客户端收到报文6后,发回一个ACK报文(报文7)给服务器,序号为报文6的序号加1。至此,一个TCP连接就关闭了。
FIN_WAIT_1: 其实FIN_WAIT_1和FIN_WAIT_2状态的都是表示等待对方的FIN报文。而区别是FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
FIN_WAIT_2:实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。当对方close一个SOCKET后发送FIN报文给自己,你系统会回应一个ACK报文给对 方,此时则进入到CLOSE_WAIT状态。接下来呢察看你是否还有数据发送给对方,如果没有的那么 close这个SOCKET,发送FIN报文给对方,也即关闭连接。
LAST_ACK: 被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。
4、TCP拥塞控制。
(http://www.cnblogs.com/fll/archive/2008/06/10/1217013.html )
TCP的拥塞控制由4个核心算法组成:“慢启动”(Slow Start)、“拥塞避免”(Congestion voidance)、“快速重传 ”(Fast Retransmit)、“快速恢复”(思想是“数据包守恒”原则)。
6. TCP滑动窗口与回退N针协议。
(http://yiluohuanghun.blog.51cto.com/3407300/1302638 )
7. Http的报文结构。
(http://www.cnblogs.com/biyeymyhjob/archive/2012/07/28/2612910.html )
HTTP请求报文由请求行、请求头部(header)、和请求数据组成
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。
HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。
http和https的区别
先说下https:https可以简单地理解为http的安全版,https全称是安全超文本传输协议,使用了安全套接字层传输协议SSL进行加密传输
再具体说区别:
第1点:http是明文传输,而https则是加密传输
第2点:使用https协议需要到CA申请证书
第3点:http默认传输端口是80,而https的默认传输端口是443
第4点:https比http安全(在于SSL协议的使用)
https主要用于解决:
信任主机的问题
通讯过程的数据泄漏与修改
12.Cookie与Session的作用与原理
HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。
由于HTTP协议是无状态的,即客户端和服务器端,都没有必要记录对方的动作。但是在有些情况下,保持对方的状态,于是便出现了cookie和session.
cookie是位于客户端保持状态的方法。通过扩展http协议实现,在服务器通过在响应头部添加特殊的字段(set-cookies),使浏览器生成相应的cookie,cookie有作用范围和生存时间,如果请求的资源在其作用范围内,且cookie有效,其就将cookie发给服务器。
cookie有保存在内存的,也有保存在硬盘里的。可以实现浏览器之间的共享。
session是一种在服务端保持状态的方法,当服务器要为某个请求创建session时,其首先检查客户端请求报头里是否有session-id,如果有的话,则说明此前已经创建过,服务器就按照sessionid 把其检测出来。如果没有session-id,则服务器创建一个session,并分配一个与其关联的session-id,session-id将在响应头中,交给客户端,让其保存。而session-id的可以以cookie的方式在客户端保存起来。
13.电脑上访问一个网页,整个过程是怎么样的:DNS、HTTP、TCP、OSPF、IP、ARP。
1)DNS把域名解析成对应的IP
2)发送一次请求,服务器返回一个永久重定向响应,这样浏览器就知道要访问的正确网址
3)发送请求html的请求,这个连接过程基于TCP/IP三次握手四次挥手的,建立连接
4)服务器返回一个html响应
5)浏览器根据渲染引擎解析返回的html响应,呈现内容
6)继续发送内嵌在html文件其他资源的请求,比如css、js、图片资源等
7)加载整个页面
14、Ping的整个过程。ICMP报文是什么?
ICMP也叫互联网控制报文协议,是IP层的组成部分,ICMP主要用于传递差错报文以及一些不可达信息。ICMP报文分为查询报文和差错报文,当IP传输发生错误的时候会产生一个差错报文,这个报文会发送给源主机,源主机根据这个报文做出处理。
ping过程:相同网段:
1)主机A要去Ping主机B, 主机A会封装两层报文,主机A先检查自己MAC地址中是否有B的MAC地址,如果没有就向外发送一个ARP广播包
2)交换机收到这个ARP后,会检查在交换机中是否包含B的MAC地址,如果有就直接返回给A;如果没有就向所有端口发送ARP,该网段的主机的MAC如果与B的MAC地址不同就丢弃,如果主机B收到了该ARP就马上返回相同格式的ARP
3)这时主机A已经有了B的MAC地址,就把B的MAC地址封装到ICMP报中,向主机B发送一个回显请求
4)主机B收到该报文后,知道是主机A的一个回显请求,就会返回一个相同格式的报文。这样就完成了同一个网段的Ping的过程
再说不同网段:
1)主机A要去Ping一个不同网段的主机C,主机A会去找网关转发
2)如果主机A不知道网关的MAC地址,就会发送一个ARP广播一下,这样就知道了网关的MAC地址
3)网关收到主机A的ICMP报文,根据上面的目的IP,会去查找路由表,找到一个出口指针,给主机C发送一个ICMP报文
4)如果网关不知道主机C的MAC地址,就会给网关内所有的主机发送一个ARP,从而找到主机C的MAC地址
5)主机C收到主机A的报文就会给主机A发送一个回显请求。这样就完成了不同网段的Ping的请求
15.C/S模式下使用socket通信,几个关键函数。
服务端涉及的关键函数有ServerSocket,accept(),IO流,close(),
客户端涉及的函数有Socket,IO流,close()
16、路由器与交换机区别
路由器包含了交换机的功能,交换机主要的作用是扩展接口。比如原来只有一个接口,但是有两个人需要使用,这时就可以使用交换机来扩展接口,两个人使用各自的宽带账号上网,所以彼此的网速不会受到影响。而路由器处理扩展接口,还可以一个账号多个人上网,然而由于所有人共用一个上网账号,必然彼此的网速会收到影响,所以经常会出现,一个人在下载文件的时候,其他人的上网速率会下降的情况。
----------------------------------
推荐书籍:《TCP/IP协议族》
以上是关于面试准备android的主要内容,如果未能解决你的问题,请参考以下文章
Android 岗社招面试该怎么准备?这份面试指南你一定要看看
Android 岗社招面试该怎么准备?这份面试指南你一定要看看
Android 岗社招面试该怎么准备?这份面试指南你一定要看看