• Android高频网络面试专题必知必会


    要论时下最火的网络请求框架,当属OkHttp了。自从Android4.4开始,google已经开始将源码中的HttpURLConnection替换为OkHttp,而在Android6.0之后的SDK中google更是移除了对于HttpClient的支持,而市面上流行的Retrofit同样是使用OkHttp进行再次封装而来的。由此可见OkHttp有多强大了。

    okhttp也是面试高频的问题之一,如果只是满足于API工程师,那么面试还是有一点难度的。

    Android 关于网络的面试题

    1、简述一下OkHttp
    OkHttp是一个非常优秀的网络请求框架,已被谷歌加入到Android的源码中。目前比较流行的Retrofit也是默认使用OkHttp的。

    1、支持http2,对一台机器的所有请求共享同一个socket
    2、内置连接池,支持连接复用,减少延迟
    3、支持透明的gzip压缩响应体
    GZIP是网站压缩加速的一种技术,对于开启后可以加快我们网站的打开速度,原理是经过服务器压缩,客户端浏览器快速解压的原理,可以大大减少了网站的流量

    开GZIP有什么好处?Gzip开启以后会将输出到用户浏览器的数据进行压缩的处理,这样就会减小通过网络传输的数据量,提高浏览器启动页面的速度。

    4、通过缓存避免重复的请求
    强制缓存

    客户端第一次请求数据时,服务端返回缓存的过期时间(通过字段 Expires 与 Cache-Control 标识),后续如果缓存没有过期就直接使用缓存,无需请求服务端;否则向服务端请求数据。

    对比缓存
    对比缓存时,每次请求都需要与服务器交互,由服务端判断是否可以使用缓存。

    5、请求失败时自动重试主机的其他ip,自动重定向
    6、好用的API

    2、看过OkHttp的源码吗,简单说一下

    第一,通过一个构建者模式(Request.Builder)构建所有的request,然后分发到Dispatcher(分发器);
    第二,Dispatcher再把request分发到HttpEngine(真正干活的类)中,HttpEngine首先要看一下本次请求有没有cache(缓存),如果有缓存,就从缓存中拿到信息,然后返回给response;如果没有缓存,HttpEngine就把request分发到ConnectionPool(连接池)中;
    第三,在ConnectionPool(连接池)中,通过Connection发送请求,首先选择Route(路由)和Platfrom(平台),然后到达Server(Socket),获取到Data,然后返回response。

    3、OkHttp的使用
    1、创建OkHttpClient对象:OkHttpClient client = new OkHttpClient();
    2、创建网络请求:Request request = new Request.Builder() .url(“http://sethfeng.github.io/index.html”) .build();
    3、得到Call对象:Call call = client.newCall(request); //实际创建的是一个RealCall对象,RealCall中有一个对client对象的引用
    4、发送请求,获取返回的数据
    发送同步请求:Response response = call.excute();
    发送异步请求:

    call.enqueue(new Callback() {
    @Override
    public void onFailure(Request request, IOException e) {
    …
    }
    @Override
    public void onResponse(Response response) throws IOException {
    …
    }
    });
    

    4、volley
    https://bxbxbai.github.io/2014/09/14/android-working-with-volley/
    http://blog.csdn.net/guolin_blog/article/details/17656437

    5、如何控制TCP连接时的拥塞
    http://blog.csdn.net/yechaodechuntian/article/details/25429143

    6、三次握手
    http://blog.csdn.net/whuslei/article/details/6667471

    7、TCP、UDP区别

    8、Android客户端和服务端如何使用Token和Session
    http://wyong.blog.51cto.com/1115465/1553352

    9、Retrofit 源码

    上述android网络框架面试题解析和学习手册均整理到了PDF里面,由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的【Android网路框架学习手册】文档领取方式:点赞+关注,然后私信关键词 【学习】即可获得免费领取方式!

  • 相关阅读:
    C# 序列化与反序列化之DataContract与xml对子类进行序列化的解决方案
    C# 序列化与反序列化之Binary与Soap无法对泛型List<T>进行序列化的解决方案
    大端小端存储方案
    C# 序列化与反序列化Serialization之Json Xml Binary Soap JavaScript序列化
    C# ctpclient networkstream 使用 BinaryReader的ReadString但是使用streamReader的Readtoend不行
    C# TcpListener TcpClient
    C# System.Net.Mail.MailMessage 发邮件
    C# System.Web.Mail.MailMessage 发邮件
    离线环境下使用二进制方式安装配置Kubernetes集群
    Kubernetes基础:查看状态、管理服务
  • 原文地址:https://www.cnblogs.com/Android-Alvin/p/13930437.html
Copyright © 2020-2023  润新知