Android开发实习生常用面试题

1、 活动Activity的启动模式

Standard(标准模式)

活动默认的启动方式

singleTop(栈顶复用模式)

在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。

singleTask(栈内复用模式)

每次启动该活动时,系统首先会在返回栈中检查是否存在该实例,如果发现已存在则直接使用该实例,并把这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。

singleInstance(单实例模式)

启用一个新的返回栈管理这个活动,解决共享活动实例的问题。


2、 活动在其生命周期的四种状态

一个活动在其存在,也就是生命周期中一共存在四种状态:

运行:位于栈顶,系统最不愿意回收的活动。

暂停:不是栈顶的位置,但是在界面依旧可见,并不是每一个活动都占满整个屏幕,当系统内存比较低的时候会回收。

停止:不是栈顶的位置,完全不可见,仍然会存一些成员变量的内容,当其他地方需要内存的时候会回收。

销毁:从返回栈中移除之后,系统最喜欢的就是回收这种活动。


3、 Activity的生命周期

管理活动声明周期(Managing the activity lifecycle):

onCreate():该回调在系统创建活动时触发,必须实现此回调。必须在此处调用setContentView()以定义活动界面的布局当onCreate()完成后回调onStart()。

onStart():在onCreate()退出时,活动进入开始状态,并且活性变得对用户可见。

onResume():在活动开始与用户交互前,系统将调用此回调。此时,活动位于活动对战的顶部,并捕获所有用户输入。该onResume()方法实现了应用程序的大多数核心功能onPause()回调始终遵循onResume()。

onPause():当活动失去焦点并进入暂停状态时,系统将调用。不应该使用onPause()保存应用程序或用户数据,进行网络调用,或执行数据库事务。一旦onPause()执行完毕,接下来的回调是onStop()或onResume(),根据活动进入暂停状态以合会发生什么。

onStop():onStop()当用户停止或销毁该活动时,将调用。系统将调用的下一个回调是onReatart(),如果活动返回与用户交互,或者是onDestory()该活动完全终止。

onRestart():当处于“已停止”状态的活动即将重新启动时,系统将调用此回调。onRestart()从活动停止时回复其状态,之后回调是onStart()。

onDestory():在活动被销毁之前,系统将调用此回调此回调是活动收到的最后一个回调。onDestroy()通常实现可以确保在销毁活动或包含活动的流程时释放活动的所有资源。


4、 TCP的三次握手与四次挥手

三次握手

• 第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。SYN=1,seq=x

• 第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器接收、发送正常。ACK=1,ack=x+1,SYN=1,seq=y

• 第三次:客户端发给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常.seq=x+1,ACK=1,ack=y+1

四次挥手

• 第一次挥手:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态

• 第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态

• 第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)

• 第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。


5、 OkHttp的优点

①允许连接到同一个主机地址的所有请求,提高请求效率 

②共享Socket,减少对服务器的请求次数 

③通过连接池,减少了请求延迟

④缓存响应数据来减少重复的网络请求

⑤减少了对数据流量的消耗 

⑥自动处理GZip压缩


6、 http和https的区别

①HTTPS协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。

②HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

③、HTTP和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

④、HTTP的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)


7、 TCP与UDP的特点

TCP和UDP都是传输层的协议,它们起到的最基本功能都是将IP提供的主机-主机传递服务扩展到端-端的进程级,通俗来说,就是把数据段从一个电脑上面的一个应用传递到另一个电脑上面的一个应用上面。除此之外,它们还都有的功能是差错检测功能,注意,只是检测功能,即都能发现错误,但是对于错误的处理就不相同了。

UDP协议:User Datagram Protocol,即用户数据报协议。提供了不可靠的无连接传输服务。它使用IP传输报文,但增加了对给定主机上多个目标进行区别的能力。它的结构比较简单,但是对于差错的控制是不可靠的。

具体来说,UDP协议:①没有确认机制。每当接收端接收到数据段之后,进行差错校验,不论是否有误,都不会给发端进行反馈,如果有错误就丢弃。这样发端就不知道这个数据段的传输情况,这对于提升效率是有好处的。②不对报文排序 即使数据段的顺序是不对的,收端也不会返回错误或者进行排序  ③没有反馈机制进行流量控制  流量控制能够有效避免接收端处理太慢从而造成缓冲区溢出的丢包事件,但是UDP没有这方面的处理,丢了就是丢了,也不会给发送端报告错误。  ④没有超时机制   丢包了也不会重发。

这些特点导致了报文的丢弃,重复和乱序。但是我们都知道我们希望数据的完整性和顺序性,所以使用UDP的应用程序要承担可靠性方面的全部工作。

UDP优点

①它的报头开销小。UDP的头只有8字节长,但是TCP的头有20字节。报文头短,结构简单,提升了数据传输的效率。

②它是面向无连接的,不需要在传输之前建立连接。并且不用建立连接,就不需要维护连接状态。这有什么用呢?UDP的非连接性让它不需要给每一个数据报编号,和发送确认号。它的延迟就更少,实时性好。所以说,UDP更适于像视频传输那种对于正确率要求并不是很高,但是要求延迟低的应用。

③应用程序可控制何时发送数据。UDP想发送数据,直接发送即可,但是TCP就需要收到确认之后才能发送(由于拥塞和流量控制决定的)。并且遇到网络拥塞,TCP会使应用直接阻塞,无法发送。

TCP协议:Transmission Control Protocol 传输控制协议。提供了可靠的面向连接的字节流传输协议。那么和UDP协议的区别无非有两点:可靠的,面向连接的。

面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。所谓可靠传输,是TCP协议中规定了:①如何处理丢失或重复等差错情况。②如何初始化一个数据流传输 ③如何协商结束数据流传输 ④流量控制和拥塞控制机制。解释如下:

对于可靠传输,判断丢包,重复靠的是TCP的段编号以及确认号。TCP在发送数据的时候,为每个字节编号,接收端收到数据之后,经过校验无误,发回确认号,确认号为接收端等待接受的写一个字节的序号。并且它会缓存到达的乱序数据,统一排序之后传递给上层。这样就解决了丢包,重复和乱序的问题。

协商开始和结束数据传输:当协商开始数据传输的时候要发送SYN信号,请求同步,并且告知将要发送的数据序号是多少,经过三次握手两端都知道对方已经建立连接并且知道对方将要从那个序号开始发送;结束的时候一方发送FIN结束信号,另一方收到之后发送ACK确认信号,于是两端都知道连接被释放,数据传输就停止了。

流量控制和拥塞控制:TCP采用滑动窗口的方式进行流量控制,用拥塞窗口的速率调整算法(慢启动算法)来进行拥塞控制。

这些功能都是UDP所不具备的,它们都是为了可靠数据传输所提供的,但是TCP相对也有缺点。比如说延迟大,实时性不好等等。缺点看看上文UDP的优点就能对比出来了。

TCP和UDP各有优缺点,最主要的区别就是可靠与不可靠,以及是否面向连接。两者共同构成了传输层端对端数据传输的基础。


7、 有几种布局方式?

线性布局、绝对布局(比较老旧的布局,基本不用)、相对布局、网格布局、表格布局、帧布局。


8、 layout_gravity与gravity的区别?

android:layout_gravity:设置控件本身相对于父控件的显示位置。

android:gravity:设置的是控件自身上面的内容位置。


9、 Activity的缓存方法是怎么样的?

Activity的缓存方法主要有onSaveInstanceState(Bundle outState)、onRestoreInstanceState(Bundle saveInstanceState)、onCeate(Bundle saveInsanceState),Android系统的回收机制会在未经用户主动操作的情况下销毁Activity,而为了避免这种机制的系统回收Activity导致数据丢失,Android为我们提供了onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle saveInstanceState)、onCreate(Bundle saeInstanceState)用于保存和恢复数据。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容