面试题目总结(3)UDP怎么可靠,Java的集合类

      最后更新:2022-07-17 23:20:46 手机定位技术交流文章

      1.如何使UDP协议可靠?

      UDP 它不是连接协议,因此它具有低资源消耗和快速处理的优点,所以通常音频、视频和普通数据在传输时使用更多的UDP,因为它们对接收结果没有太大的影响,即使它们偶尔会丢失一个或两个包。

      为什么UDP是可靠的?

      为什么不直接使用 tcp可靠的协议?TCP是基于公平的可靠通信协议,但在某些恶劣的网络条件下,TCP不能提供正常的通信质量保证,要么成本过高。为什么要对UDP提供可靠的保证,究其原因就是在保证通信的时延和质量的条件下尽量降低成本,

      因此有一个可以解决的RUDP改进:

      端到端连接问题:一般端口直接和端口通信涉及NAT过境,TCP在NAT过境中很难实现,UDP过渡NAT相对简单。如果可靠的端到端通信一般由路由协议解决,场景包括:end-to-end文件传输,音频视频传输,交互命令传输等。

      网络环境传输问题:在某些Wi-Fi或3G/4G移动网络下,需要可靠的通信,减少延误,如果TCP通信被大大延迟,这会影响用户体验。例如,实时操作,如基于Web的通信、语音对话、多面白板写作等。这些场景可以专业化 RUDP 解决这些问题的方法。

      宽带竞争问题:有时客户数据上传需要打破TCP公平性限制,以实现高速、低延迟和稳定,换句话说, 需要用特殊的流量控制算法按客户端上传带宽.例如:播放音频视频,这种场景使用鲁DP实现不仅压缩带宽,它还可以改善通信的稳定性,避免经常重叠的TCP类似的连接。

      传输路径优化问题:在高延误要求的某些场景中,应用层继电器用于优化传输路径.即动态智能选择路径,此时双方都采用路由模式进行传输,中间延迟用于优化继电器选择延迟.还有一种基于传输吞吐量的场景类别,例如:服务间的数据分布、数据备份等,这种场景通常使用多个平行继电器来提高传输速度。它还将建立在RUDP上(这两个点将在后面描述)。

      资源优化问题:某些场景为了避免 TCP 的三次握手和四次挥手的过程,会采用 RUDP 来优化资源的占用率和响应时间,提高系统的并发能力,例如 QUIC。

      那么如何使它在UDP上变得可靠呢?答案是重新传输。

      包括预定转播,请求转播,选择转播

      RUDP通过重复传输保证可靠,重播引起了两个问题,一个是延时,一个是重传的带宽,因此,发射器将设计一个窗口拥挤机制,以避免并行带宽的超容问题。传统的交通堵塞算法分为四个部分:慢启动、避免交通堵塞、处理交通堵塞和快速恢复

      2.Java中的设置类是什么

      分数: 设置, 库克, 列表, 地图

      Java中的集合类分为四个主要类,由四个不同的接口所代表,它们是设置 、 列表 、 队列和地图.                         其中Set、List、Queue都继承自Collection接口。

      ·集合表示不能重复的元素的序列。

      列表表示可以重复的元素的有序集合。

      队列代表一个前端队列(FIFO)。

      · Map代表具有映射关系(key-value)的集合。

      Java提供了许多实现类的集合,它们是这些接口的直接或间接实现类,最常用的是HashSet、TreeSet、ArrayList、LinkedList、ArrayDeque、HashMap和TreeMap。

      加分回答

      上述集合类的接口或实现,所有都位于Java.under util,这些实现的大多数是非线性安全的。虽然非线程安全,但这些班级的表现更好。如果你需要使用一个安全的集合类,您可以使用集合工具类,该工具类提供的  synchronizedXxx()方法可以用于将这些集合包成线程安全的集合。

      集合类,开始于同时,当多个线程读数据时解锁,以提高读取的性能。允许在多个线程写数据时锁定,确保所有写字操作都是线程安全的。所有这些类都采用了更复杂的算法,当你加锁时,你不会锁住整个收藏,这确保在同时写入时的性能更好。

      与CopyOnWrite开始并使用集合类写时复制技术为了实现共写操作,它复制底层的数组。当线程读取集合中的数据时,它直接从集合 itself中读取数据,不会加锁。当线程将数据写入集合时,集合将复制下一个新的阵列,然后执行该新组的写操作。因为所有的书面操作都是数组的副本,因此它很安全。

      3.双亲委派机制

      jvm 对class 文件采用的是 按需加载的方式,需要时才会加载,采用双亲委派模型进行加载

      双向分配模型依赖于三层负载器:

      1. 启动类加载器:这个类加载器负责加载存放在<JAVA_HOME>lib目录,或者被-Xbootclasspath参数所指定的路径中存放的,而且是Java虚拟机能够识别的类库加载到虚拟机的内存中。

      2. 扩展类加载器:这个类加载器负责加载<JAVA_HOME>libext目录中,或者被java.ext.dirs系统变量所指定的路径中所有的类库。

      3. 应用程序类加载器:这个类加载器负责加载用户类路径(classpath)上所有的类库。

      双亲分配模型的工作过程是:,如果一个类负载器收到一个类负载请求,它不会首先尝试单独装载这个类,相反,将此请求分配给主载体完成,每一层都是如此。因此,所有负载请求最终应发送到最顶端的启动类负载器,只有当主负载器反馈不能完成负载请求本身时,子负载器将尝试自己完成负载.

      两党派代表团模式的优点是:,Java中的一个类与其类载体具有优先级的层次关系.例如,Java class.lang.Object,储藏在罐子里,无论哪种类负载器要负载该类,最后,它们都分配给在模型顶部的启动类负载器进行负载,因此,可以保证对象类在所有类型的程序载体环境中都是相同的类。避免重叠类装载,保护程序安全,避免修改coreapi

      4. Spring IOC

      碘化物意味着控制逆转,它是面向对象的编程设计思想,春是两个主要核心之一。没有这种想法,我们需要维持物体与物体本身之间的依赖关系。很容易使物体之间的耦合过高.尤其是在大型项目中,物体与物体之间的关系非常复杂,这对于代码的维护是非常有害的。IoC可以解决这个问题,它可以帮助我们保持对象与对象之间的依赖关系,减少对象之间的耦合.春天提供了一个ioc容器,那是豆工厂。同时,ioc具有非常强大的功能,叫做di,也就是依赖注入,我们可以通过配置或者xml文件的方式将bean所依赖的对象通过name(名字)或者type(类别)注入进这个beanFactory中,因为这种依赖性注射,实现类与依赖类之间的分离,如果在一个复杂的系统中,类之间的依赖关系尤为复杂。首先,这对于维护晚期代码是非常有害的,ioc是一个很好的方法帮助我们解决这个问题,它帮助我们维持类与类之间的依赖关系,降低了耦合性,我们不需要依靠某种类型的班级,而且,当弹簧容器开动时,弹簧容器将帮助我们自动创造所有豆子,这样,我们不需要花时间在运行我们的程序过程中创造这些豆子,速度就快了许多。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/29946.html

          热门文章

          文章分类