美文网首页
Android面试知识点(五)*

Android面试知识点(五)*

作者: 书虫大王X | 来源:发表于2021-06-22 09:52 被阅读0次
2、HTTP与HTTPS 的区别:
  • HTTP:超文本传输协议,一种接收和发布HTML页面的方法,用于在web浏览器和服务器之间传递消息;它以明文方式传输数据,且不接受任何形式的数据加密(容易被人截取消息)。
  • HTTPS:超文本传输安全协议,HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
  • 端口:HTTP是80端口,HTTPS是443端口
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  • HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
4、操作系统的常见进程调度算法:
  • 最高响应比优先法:算法原理:响应比R定义如下: R =(W+T)/T = 1+W/T
    其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。
    1、算法优点:由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于最短作业优先算法,从而采用最高响应比优先方式时其吞吐量将小于采用最短作业优先算法法时的吞吐量。
    2、算法缺点:由于每次调度前要计算响应比,系统开销也要相应增加。

  • 多级反馈队列调度算法:是一种根据先来先服务原则给就绪队列排序,为就绪队列赋予不同的优先级数,不同的时间片,按照优先级抢占CPU的调度算法。算法的实施过程如下:
    1、按照先来先服务原则排序,设置N个就绪队列为Q1,Q2...QN,每个队列中都可以放很多作业;
    2、为这N个就绪队列赋予不同的优先级,第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低;
    3、设置每个就绪队列的时间片,优先权越高,算法赋予队列的时间片越小。时间片大小的设定按照实际作业(进程)的需要调整;
    4、进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
    5、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。
    6、对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了时间片为N的时间后,若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。
    7、在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业即抢占式调度CPU。

6、TCP的拥塞控制:
  • 在网络中,一般两台主机不是直接相连的,中间可能隔了多个路由器。我们发送的数据要经过路由器的转发才能到达目的主机。这些路由器不是直接就可以转发的,它们需要先将接收到的数据放入自己的内存(可能还要做一些处理),再从中取出进行转发。

  • 这里就面临一个问题:路由器的内存是有限的,若同一时间到达某个路由器的数据太多,这个路由器将无法接收所有的数据,只能将一部分丢弃;或者同一台路由器数据太多,后面到达的数据将要等待较长的时间才会被转发。网络中的数据太多,导致某个路由器处理不过来或处理地太慢,这就是网络拥塞。若是对于TCP这种有重传机制的传输协议,当发生数据丢失时,重传数据将延长数据到达的时间;同时,高频率的重传,也将导致网络的拥塞得不到缓解。拥塞控制,就是在网络中发生拥塞时,减少向网络中发送数据的速度,防止造成恶性循环;同时在网络空闲时,提高发送数据的速度,最大限度地利用网络资源。

  • 拥塞控制的方法:
    1)端到端拥塞控制:在这种拥塞控制方法中,由发送数据的端系统自己来判断是否拥塞,然后调整传输速率。比如说发送的数据已经超时却还没有接收到确认报文,数据往返时延过高,接收到对同一个数据段的重复确认......都可以认为是网络拥塞的现象;若发送端检测到这种现象,就应该降低发送数据的速率,若没有,则可以慢慢提高速率;
    2)网络辅助的拥塞控制:由网络中的路由器来告诉发送方,网络的拥塞情况。一般有两种方式:(1)路由器直接向发送端发送报文,告知网络拥塞情况;(2)路由器更改数据段中的某个标志,来提示网络中的拥塞情况,然后数据将这个标志携带到目的主机,再由目的主机根据这个标志,向发送端发送报文,告知拥塞情况(被包含在确认报文中);

  • TCP的拥塞控制方法:
    1)如何限制TCP的传输速率:TCP发送数据采用的是流水线的方式。TCP的每一个数据段都有一个序号,而TCP维护一个发送窗口来发送数据,这个窗口实际是一个区间。所有序号位于这个窗口内的数据段都会被一次性发送,而不需要等待之前发送的数据段被确认。而每当最早发送出去的数据段被确认,窗口就会向前移动,直到移动到第一个没有被确认的序号,这时候又会有新的数据段序号被包含在窗口中,然后被发送出去。所以限制数据发送速率最好的方式就是限制窗口的大小。在发送方的TCP程序会跟踪和维护一个叫做拥塞窗口的变量,用来进行拥塞控制。拥塞窗口被称为cwnd。在TCP发送端,所有被发送但是还没收到确认的数据段必须落在这个窗口中,所以,当网络拥塞时,TCP程序将减小cwnd,而网络通畅时,增大cwnd,以此来控制数据发送的速率。
    2)TCP如何检测网络中是否拥塞:若发送一条数据段后,成功接收到了接收方的确认报文,则可以认为网络没有拥塞;若发送出一条数据段后,在规定时间内没有收到确认报文(丢失或时延太大),则可以认为网络出现了拥塞;若连续收到接收方对同一条报文的三次冗余确认(也就是四次确认),则可以推测那条报文丢失,即发生了拥塞。

  • 快速重传就是指:若发送方接收到对同一条报文的三次冗余确认(也就是四次确认),就认为这条报文的下一条已经丢失,于是不管计时器是否超时,都直接重传这条报文的下一条。

  • TCP判断拥塞的方式就是检测有没有丢包。

TCP调整传输速率的算法:
  • 在没有丢包时慢慢提高拥塞窗口cwnd的大小,当发生丢包事件时,减少cwnd的大小。TCP调整拥塞窗口的主要算法有慢启动、拥塞避免以及快速恢复 ,其中前两个是TCP规范要求必须实现的,而第三个则是推荐实现的,TCP根据情况在这三者之间切换:

  • MSS:最大报文段长度,TCP双方发送的报文段中,包含的数据部分的最大字节数;
    cwnd:拥塞窗口,TCP发送但还没有得到确认的报文的序号都在这个区间;
    RTT:往返时间,发送方发送一个报文,到接收这个报文的确认报文所经历的时间;
    ssthresh:慢启动阈值,慢启动阶段,若cwnd的大小达到这个值,将转换到拥塞避免模式;

  • 慢启动:慢启动是建立TCP连接后,采用的第一个调整发送速率的算法(或叫模式)。在这个阶段,cwnd通常被初始化为1MSS,这个值比较小,在这个时候,网络一般还有足够的富余,而慢启动的目的就是尽快找到上限。在慢启动阶段,发送方每接收到一个确认报文,就会将cwnd增加1MSS的大小,于是:初始cwnd=1MSS,所以可以发送一个TCP最大报文段,成功确认后,cwnd = 2MSS;此时可以发送两个TCP最大报文段,成功接收后,cwnd = 4 MSS;此时可以发送四个TCP最大报文段,成功接收后,cwnd = 8 MSS...... 由于TCP是一次性将窗口内的所有报文发出,所以所有报文都到达并被确认的时间,近似的等于一个RTT。所以在这个阶段,拥塞窗口cwnd的长度将在每个RTT后翻倍,也就是发送速率将以指数级别增长(所以不要被慢启动这个名字误导了)。那这个过程什么时候改变呢,这又分几种情况:第一种:若在慢启动的过程中,发生了数据传输超时,则此时TCP将ssthresh的值设置为cwnd / 2,然后将cwnd重新设置为1MSS,重新开始慢启动过程,这个过程可以理解为试探上限;当到达ssthresh时,此时若继续使用慢启动的翻倍增长方式可能有些鲁莽,所以这个时候结束慢启动,改为拥塞避免模式;第三种:若发送方接收到了某个报文的三次冗余确认(即触发了快速重传的条件),则进入到快速恢复阶段;同时,ssthresh = cwnd / 2,毕竟发生快速重传也可以认为是发生拥塞导致的丢包,然后cwnd = ssthresh + 3MSS。

  • 拥塞避免:刚进入这个模式时,cwnd的大小近似的等于上次拥塞时的值的一半(这是由进入这个模式的条件决定的),也就是说当前的cwnd很接近产生拥塞的值。所以,拥塞避免是一个速率缓慢且线性增长的过程,在这个模式下,每经历一个RTT,cwnd的大小增加1MSS,也就是说,假设cwnd包含10个报文的大小,则每接收到一个确认报文,cwnd增加1/10 MSS。这个线性增长的过程什么时候结束,分为两种情况:第一种:在这个过程中,发生了超时,则表示网络拥塞,这时候,ssthresh被修改为cwnd / 2,然后cwnd被置为1MSS,并进入慢启动阶段;第二种:若发送方接收到了某个报文的三次冗余确认(即触发了快速重传的条件),此时也认为发生了拥塞,则,ssthresh 被修改为 cwnd / 2,然后cwnd被置为ssthresh + 3MSS,并进入快速恢复模式;

  • 快速恢复:快速恢复和上面两种模式不太一样,这种模式在TCP规范中并没有强制要求实现,只是一种推荐实现的模式。在快速恢复阶段,每接收到一个冗余的确认报文,cwnd就增加1MSS,其余不变,而当发生以下两种情况时,将退出快速恢复模式:
    第一种:在快速恢复过程中,计时器超时,这时候,ssthresh被修改为 cwnd / 2,然后cwnd被置为1MSS,并进入慢启动阶段;
    第二种:若发送方接收到一条新的确认报文(不是冗余确认),则cwnd被置为ssthresh,然后进入到拥塞避免模式;

7、面向对象和面向过程的区别和联系:
  • 面向过程是一种以过程为中心的编程思想,它首先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,在使用时依次调用,是一种基础的顺序的思维方式。面向过程开发方式是对计算机底层结构的一层抽象,它将程序分为数据和操纵数据的操作两部分,其核心问题是数据结构和算法的开发和优化。
  • 面向对象是按人们认识客观世界的系统思维方式,面向对象方法直接把所有事物都当作独立的对象,处理问题过程中所思考的不再主要是怎样用数据结构来描述问题,而是直接考虑重现问题中各个对象之间的关系。面向对象方法的基础实现中也包含面向过程的思想。


    image.png
  • 面向对象的四大特性:封装、继承、多态、抽象
    1) 多态:是指不同类的对象对同一消息做出不同的响应。比如同样的复制-粘贴操作,在文字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名问题。
8、接口(Interface)与抽象类(Abstract Class)的区别
  • 抽象类表示对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同点的具体概念的抽象。例如:泰迪,哈巴,二哈,阿拉斯加,秋田犬等等大小形态有很大区别,但是他们都有一些本质上相同的东西那就是他们都是狗,是狗就有耳朵,尾巴,四肢等等我们把这些给抽象出来,至于耳朵是啥样的,尾巴是长是短,颜色是啥,这需要子类实现狗这个抽象方法。
    抽象类的作用:用于隐藏:对类型进行隐藏,我们可以构造出一个固定的一组行为的抽象描述,一个行为可以有任意个可能的具体实现方式。这个抽象的描述就是抽象类。用于拓展对象的行为功能:这一组任意个可能的具体实现表现为所有可能的子类,模块可以操作一个抽象类,由于模块依赖于一个固定的抽象类,那么他是不允许修改的。同时通过这个抽象类进行派生,拓展此模块的行为功能。

  • 接口:接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。也就是:接口就是一种特殊的abstract class,但是比abstract class更加抽象。作用:(1)Java单继承的原因所以需要曲线救国 作为继承关系的一个补充。(2)把程序模块进行固化的契约,降低偶合。把若干功能拆分出来,按照契约来进行实现和依赖。(依赖倒置原则)(3)定义接口有利于代码的规范。(接口分离原则)

  • 一个东西,抽象类表示它是什么,接口表示它能做什么。

  • 抽象类:强调的是把共同(共有、相同)的属性方法, 抽象出来,统一写在一个地方(他们的实现代码是一样的),方便维护。接口: 抽象的是行为,同一种行为的不同实现方式。

  • 本质区别:类与方法的区别(抽象类可以作为多态的参数,使用时传入实现抽象类的子类)

数据结构---树的类型
  • 平衡二叉树(AVL树)
  • 满二叉树
  • 红黑树是一种自平衡二叉树,在平衡二叉树的基础上每个节点又增加了一个颜色的属性,节点的颜色只能是红色或黑色。具有以下性质:
    (1)根节点只能是黑色;
    (2)红黑树中所有的叶子节点后面再接上左右两个空节点,这样可以保持算法的一致性,而且所有的空节点都是黑色;
    (3)其他的节点要么是红色,要么是黑色,红色节点的父节点和左右孩子节点都是黑色,及黑红相间;
    (4)在任何一棵子树中,从根节点向下走到空节点的路径上所经过的黑节点的数目相同,从而保证了是一个平衡二叉树。

相关文章

网友评论

      本文标题:Android面试知识点(五)*

      本文链接:https://www.haomeiwen.com/subject/phkxwktx.html