10、描述一次网络请求的流程
1)域名解析
浏览器会先搜索自身DNS缓存且对应的IP地址没有过期;若未找到则搜索操作系统自身的DNS缓存;若还未找到则读本地的hotsts文件;还未找到会在TCP/IP设置的本地DNS服务器上找,如果要查询的域名在本地配置的区域资源中,则完成解析;否则根据本地DNS服务器会请求根DNS服务器;根DNS服务器是13台根DNS,会一级一级往下找。
2)TCP三次握手
客户端先发送SYN=1,ACK=0,序列号seq=x报文;(SYN在连接建立时用来同步序号,SYN=1,ACK=0代表这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使SYN=1,ACK=1)
服务器返回SYN=1,ACK=1,seq=y, ack=x+1;
客户端再一次确认,但不用SYN了,回复服务端, ACK=1, seq=x+1, ack=y+1
3)建立TCP连接后发起HTTP请求
客户端按照指定的格式开始向服务端发送HTTP请求,HTTP请求格式由四部分组成,分别是请求行、请求头、空行、消息体,服务端接收到请求后,解析HTTP请求,处理完成逻辑,最后返回一个具有标准格式的HTTP响应给客户端。
4)服务器响应HTTP请求
服务器接收处理完请求后返回一个HTTP响应消息给客户端,HTTP响应信息格式包括:状态行、响应头、空行、消息体
5)浏览器解析HTML代码,请求HTML代码中的资源
浏览器拿到html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,向服务器发起一个http请求,如果返回304状态码,浏览器会直接读取本地的缓存文件。否则开启线程向服务器请求下载。
6)浏览器对页面进行渲染并呈现给用户
7)TCP的四次挥手
当客户端没有东西要发送时就要释放连接(提出中断连接可以是Client也可以是Server),客户端会发送一个FIN=1的没有数据的报文,进入FIN_WAIT状态,服务端收到后会给客户端一个确认,此时客户端不能发送数据,但可接收信息。
11、HttpUrlConnection 和 okhttp关系
两者都可以用来实现网络请求,android4.4之后的HttpUrlConnection的实现是基于okhttp
- Bitmap对象的理解
- looper架构
- ActivityThread,AMS,WMS的工作原理
- 自定义View如何考虑机型适配
在onMeasure()
的getDefaultSize()
的默认实现中,当view的测量模式是AT_MOST或EXACTLY时,View的大小都会被设置成子View MeasureSpe
c的specSize
.子view的MeasureSpec
值是根据子View的布局参数和父容器的MeasureSpec
值计算得来。当子view的布局参数是wrap_content时,对应的测量模式是AT_MOST,大小是parentSize
,
- 自定义View的事件
- AstncTask+HttpClient 与 AsyncHttpClient有什么区别?
- LaunchMode应用场景
- AsyncTask 如何使用?
- SpareArray原理
- 请介绍下ContentProvider 是如何实现数据共享的?
- AndroidService与Activity之间通信的几种方式
- IntentService原理及作用是什么?
原理:IntentService
是继承Service的一个抽象类,它在onCreate()
方法中创建了一个HandlerThread
,并启动该线程。HandlerThread
是带有自己消息队列和Looper
的线程,根据HandlerThread
的looper
创建一个Handler,这样IntentService
的ServiceHandler
的handleMessage()
方法就运行在子线程中。handleMessage
中调用了onHandleIntent()
方法,它是一个抽象方法,继承IntentService
类需要实现该方法,把耗时操作放在onHandleIntent()
方法中,等耗时操作运行完成后,会调用stopSelf()
方法,服务会调用onDestory()
方法消毁自己。如果onHandleIntent()
中的耗时操作未运行完前就调用了stopSelf()
方法,服务调用onDestory()
方法,但耗时操作会继续运行,直至运行完毕。如果同时多次启动IntentService
,任务会放在一个队列中,onCreate()
和onDestory()
方法都只会运行一次。
作用:用来处理后台耗时操作,如读取数据库或是本地文件等。
- 说说Activity、Intent、Service 是什么关系
- ApplicationContext和ActivityContext的区别
- SP是进程同步的吗?有什么方法做到同步?
- 谈谈多线程在Android中的使用
- 进程和 Application 的生命周期
- 封装View的时候怎么知道view的大小
- RecycleView原理
- AndroidManifest的作用与理解
最后
写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
厂面试真题+项目实战源码》,点击传送门,即可获取!**