android开发的主要技术!一年后斩获腾讯T3,附赠课程+题库

安卓开发大军浩浩荡荡,经过近十年的发展,Android技术优化日异月新,如今Android 11.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS。

但是,到了各大厂商手里,改源码、自定义系统,使得Android原生系统变得鱼龙混杂,然后到了不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。

另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。

为此,我把阿里、腾讯、字节跳动、美团等公司Android性能优化实战整合成了一个PDF文档,由于内容过多的,我先介绍实战部分,之后再介绍理论部分。

TCP与UDP的区别

  • TCP面向连接的, 传输数据时,需先进行三次握手,建立连接,UDP是无连接的,发送数据之前不需要建立连接
  • TCP通过确认和重传机制,提供可靠的服务。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,而UDP不保证可靠传输,只是尽可能得交付
  • TCP面向字节流,即将数据看成一连串无结构的字节流。UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

TCP的三次握手和四次挥手

这个概念大家一定不陌生,我以前写过一篇详细关于TCP的三次握手和四次挥手的文章,可以参考,这里就不赘述

TCP流量控制

很多人会将流量控制和拥塞控制搞混,所以单独拎出来,考究细节

流量控制:如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。流量控制策略就是控制发送者的发送速度,使得接收者来得及接收,达到不丢失分组的目的。流量控制是构成TCP可靠性的一方面。

流量控制主要使用滑动窗口机制实现。下面以上图讲解滑动窗口(也叫接受窗口rwnd)的细节

主机A向主机B发送数据,开始双方确定的窗口值为400字节,这两个是前提条件。开始A发送了200字节,之后发生了分组丢失现象,B调整接受窗口大小为300字节。之后A又连续发送了300字节。此时A已经不能发送数据,需等待B的窗口信号。之后B调整窗口为100字节。接收到100字节数据后,调整窗口值为0,表示暂时不想接受数据。总共B调整了三次窗口大小,进行了三次流量控制

假如,B向A发送了零窗口的报文段后不久,B的接收缓存又有了一些存储空间。于是B向A发送了rwind=400的报文段,然而这个报文段在传送中丢失 了。A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据。这样就死锁了。为了解决这种死锁状态,TCP为每个连接设有一个持续计时器。只 要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。

TCP拥塞控制

拥塞控制,大家都能背出来,什么慢开始、拥塞避免、快重传、快恢复,大家都耳熟能详,但是有些细节问题,可以大家没有留意,比如快重传阶段后,为什么不直接进入慢开始阶段,而是进入拥塞避免阶段?

拥塞的概念:在某段时间,对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变化,这种情况叫拥塞。网络拥塞往往是由许多因素引起的,简单的提高节点处理机的速度或者扩大结点缓存的存储空间并不能解决拥塞问题。拥塞问题的是指往往是整个系统的各个部分不匹配,只有各个部分平衡了,问题才会得到解决。

拥塞控制:防止过多的数据注入到网络,导致网络中的路由器或链路过载。

流量控制和拥塞控制的区别:可以看出流量控制是一个端到端的问题,而拥塞控制是一个全局性问题,设计到所有的主机、所有的路由器。

慢开始:乘法增加

发送方维持一个拥塞窗口cwnd,大小取决于网络的拥塞程度,动态地在变化。发送窗口小于等于拥塞窗口,而发送窗口一定不能超过接收窗口。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就增大一些,以便把更多的分组发送出去。但是只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络的分组数。

开始时,如果发送大量数据包,容易导致网络中路由器缓冲空间耗尽,从而发生拥塞。所以新建连接时,cwnd初始化为1个最大报文段(MSS)大小,每经过一个迭代,拥塞窗口就乘以2,所以也称为乘法增加阶段。拥塞窗口不可能一直增大,所以一般会设置一个慢开始门限ssthresh.

  • 当cwnd<ssthresh时,使用慢开始算法。
  • 当cwnd>ssthresh时,改用拥塞避免算法。

拥塞避免:加法增大

一旦达到慢开始的初始门限ssthresh,就进入了拥塞避免阶段。每一个迭代,拥塞窗口加1,而不是加一倍

快重传

快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。快重传策略是为了防止TCP连接因等待重传计时器超时而空闲较长的时间。

快恢复

快重传和快恢复是搭配使用的,快重传完成后,立即执行快恢复算法。将ssthresh门限设置为当前拥塞窗口的一半,之后将拥塞窗口设置为新的ssthresh门限(即减半), 进入拥塞避免阶段。

这里可能会有人有疑问,为什么不直接进入慢开始阶段,更彻底得避免拥塞。**主要的原因是考虑到如果网络出现拥塞得话,就不会收到多次重复确认,所以发送方认为网络可能没有出现拥塞,所以不执行慢开始算法,而是将cwnd设置为新得ssthresh门限,执行拥塞避免算法

最后

文章不易,如果大家喜欢这篇文章,或者对你有帮助希望大家多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

由于文章篇幅问题 查看详细文章以及获取学习笔记链接:GitHub

  • Android进阶学习全套手册
    关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,HTTP、自定义view、c++、MVP、Android源码设计模式、Android开发艺术探索、Java并发编程的艺术、Android基于Glide的二次封装、Android内存优化——常见内存泄露及优化方案、.Java编程思想 (第4版)等高级技术都囊括其中。

  • Android高级架构师进阶知识体系图
    关于视频这块,我也是自己搜集了一些,都按照Android学习路线做了一个分类。按照Android学习路线一共有八个模块,其中视频都有对应,就是为了帮助大家系统的学习。接下来看一下导图和对应系统视频吧!!!

  • Android对标阿里P7学习视频

  • BATJ大厂Android高频面试题
    这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
    ATJ大厂Android高频面试题**
    这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值