Java基础
[编程语言教程]

HashMap

  • jdk1.7版本,底层是数组+链表,元素的插入使用头插法,可能形成数据丢失或环形链表。
  • jdk1.8版本,底层是数组+链表+红黑树,元素的插入使用尾插法,数据覆盖的情况。
  • 扩容机制:LoadFactory默认0.75,创建空数组重新Hash。
  • resize线程不安全:多线程之间put操作的覆盖;形成环形链表,get时陷入死循环。
  • hash方法混合高低位(16位异或),降低冲突概率。
  • 2的幂次:1.7判断n-1&hash进行计算位置,2的幂次减少Hash碰撞,1.8判断新增位计算位置;此外,元素能够均匀分布在数组上。
  • 重写equals必须重写HashCode。
  • Tips:结扩危哈幂

ConcurrentHashMap

  • 安全失败:迭代器在拷贝的集合遍历,对原集合的修改不会抛出异常。
  • jdk1.7版本,底层是数组+链表,使用Segment分段锁,继承了可重入锁ReentrantLock,尝试获取锁时存在竞争,自旋,阻塞。get方法没有用锁,但是高效且同步,元素和节点指针用volatile修饰。HashEntry封装键/值对。
  • jdk1.8版本,底层是数组+链表+红黑树,使用CAS和synchronized同步,CAS->自旋->sync。Node封装键/值对。
  • Tips:结安锁得元。

ArrayList

  • 底层是数组,查找访问速度快,增删效率低,线程不安全。

LinkedList

  • 底层是双向链表,增删效率高,查找访问速度慢,线程不安全。

TCP

  • 三次握手:SYN,seq -> SYN,ACK,seq,ack -> ACK,seq,ack。防止过期的连接再次传到被连接的主机。
  • 四次挥手:FIN,seq -> ACK,seq,ack -> FIN,ACK,seq,ack -> ACK,seq,ack。
  • 可靠传输:重排序,丢弃重复数据,应答机制,超时重发机制,流量控制,拥塞控制。

UDP

  • 无连接,即发送数据之前不需要建立连接。
  • 传输效率高,不保证可靠交付。

Http和Https

Http Https
80端口 443端口
明文传输 SSL加密传输(公钥加密,私钥解密)
无证书 CA申请证书(证明公钥正确性)
无状态连接 加密传输,身份认证

Http请求内容

  • 请求行:方法字段(GET,POST),url字段,http协议版本。
  • 请求头:User-Agent(浏览器类型),Accept(内容类型),Host(主机地址)。
  • 请求数据:post方法中,数据以key value的形式发送请求。

get和post的区别

  • get的请求数据再url上,post的请求在http的包内。

  • get的长度有限制(浏览器限制),post理论上没有限制。

  • get产生一个TCP数据包(header和data),服务器响应200;post产生两个TCP数据包,先发送header,服务器响应100,再发送data,服务器响应200。

粘包和拆包

  • Nagle优化算法封包。

  • 报文末尾加入换行符表示完整信息。

  • 消息头声明长度,根据长度获取报文。

  • 规定报文长度,不足部分空位补齐。

BIO、NIO、AIO模型

BIO NIO AIO
没有线程可用时阻塞等待连接和数据传输。 处理并发:创建线程执行连接请求。 耗资源。 Channel,Selector,ByteBuffer组成。 Channel注册到Selector后监听,判断返回值处理请求和数据。 无需轮询,IO操作的状态改变后,系统会通知相应的线程处理。

TCP/IP网络协议

  • 应用层:用户面向应用程序的统称。

  • 传输层:提供应用程序间的通信。

  • 网络层:定义了IP地址格式。

  • 网络接口层:接受IP数据包并通过网络发送;网络上接收物理帧,抽出IP数据报文交给IP层。

ping指令的原理

  • 用来检测主机之间是否可通信。

  • 基于ICMP协议,发送回送应答消息,如果源主机在一定时间内收到,则认为主机可达。

  • 先根据ip地址在网络层中传播,再根据mac地址由数据链路层传到目标主机。

多路复用

  • Select:监听的fd数量限制,轮询。
  • Poll:大量fd的数组拷贝,无大小限制,水平触发。
  • Epoll:没有并发连接数量的限制,利用文件映射内存加速与内存空间的消息传递,水平触发和边缘触发。

序列化

  • 对象实现Serializable接口,转换为字节流便于在网络上传输和保存在本地文件。

Java基础

原文地址:https://www.cnblogs.com/ash1523590342/p/13461625.html

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Java基础