试题小结4

Java中有哪些集合类

Java语言中提供了很多种集合类,常用的包括以下几种:

  1. List(列表):List是一种有序的集合,可以包含重复的元素。常用的实现类包括ArrayList、LinkedList、Vector等。
  2. Set(集):Set是一种不允许重复元素的集合,没有顺序之分。常用的实现类包括HashSet、TreeSet等。
  3. Map(映射):代表具有映射关系(key-value)的集合,Map是一种键值对映射的集合,每个键对应一个值,键不能重复。常用的实现类包括HashMap、TreeMap、LinkedHashMap等。
  4. Queue(队列):Queue是一种先进先出(FIFO)的集合,常用的实现类包括LinkedList、PriorityQueue等。
  5. Stack(栈):Stack是一种后进先出(LIFO)的集合,常用的实现类包括Stack、LinkedList等。
  6. Deque(双端队列):Deque是一种既可以在队列头部插入元素又可以在队列尾部插入元素的集合,常用的实现类包括ArrayDeque、LinkedList等。 除了以上提到的集合类,Java语言还提供了很多其他的集合类,如BitSet、Hashtable、IdentityHashMap等。

上面所说的集合类的接口或实现,都位于java.util包下,这些实现大多数都是非线程安全的。虽然非线程安全,但是这些类的性能较好。如果需要使用线程安全的集合类,则可以利用Collections工具类,该工具类提供的synchronizedXxx()方法,可以将这些集合类包装成线程安全的集合类。

 java.util包下的集合类中,也有少数的线程安全的集合类,例如Vector、Hashtable,它们都是非常古老的API。虽然它们是线程安全的,但是性能很差,已经不推荐使用了。

 从Java 5开始,Java在java.util.concurrent(JUC)包下提供了一批支持高效并发的集合类,这些类既实现了线程安全,又保证了可靠的性能。这些集合类按照名字可以分为两大类,它们分别以Concurrent开头或CopyOnWrite开头。

 以Concurrent开头的集合类,在多线程读取数据时则没有加锁,以提高读取的性能。在多线程写入数据时加锁,来保证所有写入操作是线程安全的。这些类都采取了比较复杂的算法,在加锁时不会锁住整个集合,从而保证并发写入时具有更好的性能。

 以CopyOnWrite开头的集合类,采用写时复制技术来实现并发写操作,它复制的是底层的数组。当线程读取集合中的数据时,它直接读取集合本身的数据,不会加锁。当线程向集合写入数据时,该集合会在底层复制一份新的数组,然后对这个新数组执行写入操作。由于所有写入操作都是对数组的副本的操作,所以它是线程安全的。

这些集合类可以根据具体需求选择使用。

TCP协议的首部结构 

TCP尽管是面向字节流的,和UDP面向数据报不一样,但是TCP传送的每一个数据单元却是报文段。每一个TCP报文段分为首部和数据两部分,首部的各个字段都很好的体现了TCP的每个功能。TCP报文段首部的前20个字节是固定的,后面有4*n(整数)个字节是根据需要可选的,所以TCP首部的最小长度是20字节。首部字段分别是:源端口、目的端口、序号、确认号、数据偏移、保留、紧急URG、确认ACK、推送PSH、复位RST、同步SYN、终止FIN、窗口、检验和、紧急指针、选项。

加分回答

首部字段的意义分别是:

  • 源端口:占2字节。
  • 目的端口:占2字节。
  • 序号:占4字节。序号范围是[0,2^23-1],共2^23(4 294 967 296)个序号。当序号达到2^23-1时候,下一个序号就回到0。TCP是面向字节流的,在一个TCP连接中传送的字节流的每一个字节都按顺序编号。整个TCP的起始序号必须在建立时确认,首部中的序号字段指的是这个报文段所发送的数据的第一个字节的序号。例如报文序号是101,携带的数据共100个字节,所以这个报文的第一个字节序号是101,最后一个字节的序号是200。下一个报文段就从201开始。
  • 确认号:占4字节。是希望收对方下一个报文段的第一个数据字节的序号。例如序号中讲的,序号就是201。
  • 数据偏移:占4位。指出TCP数据的起始位置和TCP报文段的起始处相差多少。也可以理解为数据偏移就是TCP首部字段的长度。
  • 保留:占6位。保留为以后使用,当前置为0。
  • 紧急URG:当URG=1时,说明紧急指针字段有效。告诉系统这个报文中有紧急的数据,应该尽快处理,优先级最高。
  • 确认ACK:仅当ACK=1时,确认号字段才有效。当ACK=0时,确认号无效。TCP中有规定在TCP连接建立之后,所有传送的报文段ACK都必须为1。
  • 推送PSH:发送方将PSH置为1后,表示当前命令之后希望收到对方的相应,推送很少用,不做深究。
  • 复位RST:当RST=1时,表示TCP中出现严重的差错,必须释放连接然后再重新建立连接。RST=1还可以用来拒绝一个恶意的报文段。
  • 同步SYN:在连接建立时用来同步序号。当SYN=1并且ACK=0时,表示这是一个连接请求报文段。若对方同意连接,就应该在响应报文中使SYN=1并且ACK=1。所以SYN=1表示这是一个连接请求或者连接接受报文。
  • 终止FIN:用来释放一个TCP连接。当FIN=1时,表示报文段的发送方的数据已经发送完毕,要求释放连接。
  • 窗口:占2字节。指的是发送这个报文段那方的接收窗口。窗口值告诉对方从确认号算起,接收方目前允许对方发送的数据量,因为接收方的数据缓存空间是有限的。
  • 检验和:占2字节。检验和字段的检查范围包括首部和数据两个部分。和UDP一样需要在首部之前添加12字节的伪首部,算法这里不做深究。
  • 紧急指针:占2字节。只有URG=1时才有用,表示这个报文段中紧急数据的字节数。
  • 选项:长度可变,最长可达40字节,当没有选项时,TCP首部长度就是20字节。

TCP(传输控制协议)是什么?

TCP是传输控制协议,是TCP/IP体系中非常复杂的一个协议,属于传输层协议。与UDP协议一样用于处理应用层的数据。它和UDP一样具有复用和分用的功能以及差错检测的功能。UDP的主要特点是:

  • 面向连接。应用程序在使用TCP之前必须两端之间先建立TCP连接。当确认数据传输完成之后,必须要释放TCP连接。
  • 单播。TCP只能有两个端点,进行点对点的传输,不支持多播和广播传输。
  • 可靠交付。通过TCP连接传送的数据是没有差错、不会丢失、不重复并且按序到达的。
  • 全双工通信。TCP允许连接的双方可以在任何时候发送数据,双方都有发送缓存和接收缓存。应用程序把数据给发送缓存之后就可以做其他的事情了,TCP发送缓存会在合适的时候自己把缓存中的数据发送出去。在接受的时候TCP会把数据存进接收缓存,上层应用程序会在合适的时候读取数据。也正因为是全双工通信方式,建立连接时最少需要三次信息确认,也就是三次握手,断开连接时最少需要四次信息确认,也就是所谓的四次挥手。
  • 面向字节流。TC不像UDP每一个数据报独立传输,而是在不保留报文边界的情况下以字节流的方式进行传输,这也是长连接的由来。TCP中的“流”就是指流入到进程或从进程流出的字节序列。
  • 头部开销大。最小20字节,最大60字节。加上TCP的可靠传输机制功能的影响,数据传输效率比UDP慢很多。

HTTPS协议如何保证整个传输过程安全? 

  1. SSL/TLS加密:HTTPS通过SSL/TLS协议来对传输的数据进行加密,防止数据被窃听和篡改。SSL/TLS协议使用对称加密和非对称加密相结合的方式,保证了传输数据的机密性和完整性。

  2. 数字证书:HTTPS使用数字证书来验证服务器的身份,防止中间人攻击。数字证书是由第三方机构颁发的,包含服务器的公钥、域名等信息,客户端可以使用数字证书来验证服务器的身份。

  3. 对称密钥协商:在SSL/TLS握手过程中,客户端和服务器会协商出一个对称密钥,用于加密和解密传输的数据。对称密钥只在当前会话中使用,提高了数据的安全性。

  4. HTTPS协议:HTTPS协议是HTTP协议的安全版本,它SSL/TLS协议来加密HTTP数据。HTTPS协议可以保证数据在传输过程中的机密性和完整性,防止数据被篡改和窃听。

标准回答

​ HTTPS是通过它的特点:内容加密,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。验证身份,保证拿到的证书是目标服务器的真实证书。数据完整性,通过两个摘要判断原文是否被篡改。这三点保证了整个传输过程的安全性。

加分回答

  • 内容加密:HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输。总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。
  • 验证身份:HTTPS为了保证从服务器拿到的证书是目标服务器的证书,需要对证书进行验证。简述过程:通过浏览器内置的一百多个全球知名CA机构公钥轮流解密服务器证书文件,匹配上证明是安全可靠的,否则浏览器会提示此证书不可信。
  • 数据完整性:当完成验证身份阶段之后,需要验证打开的证书内容是否被更改。简述过程:将数字证书内容拿出,使用证书中的目标服务器公钥对数字签名内容进行解密获得数据摘要(这是数据原文通过哈希算法计算的结果,一对一,不可逆。),再将原文通过哈希算法得出第二个数据摘要,两个数据摘要比较,如果一样,内容没有被修改,否则HTTPS流程终止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值