TCP 粘包 / 拆包的原因应该这么解决?
🦅 概念 TCP 是以流的方式来处理数据,所以会导致粘包 / 拆包。 拆包:一个完整的包可能会被 TCP 拆分成多个包进行发送。 粘包:也可能把小的封装成一个大的数据包发送。 🦅 原因 应用程序写入的字节大小大于套接字发送缓冲区的大小,会发生拆包现象。而应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包现象。 待发送数据大...
🦅 概念 TCP 是以流的方式来处理数据,所以会导致粘包 / 拆包。 拆包:一个完整的包可能会被 TCP 拆分成多个包进行发送。 粘包:也可能把小的封装成一个大的数据包发送。 🦅 原因 应用程序写入的字节大小大于套接字发送缓冲区的大小,会发生拆包现象。而应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包现象。 待发送数据大...
本文整合了 Java8 Optional的使用详解 与 Optional 优雅的使用 null,以 JDK Optional 为主线。 1. 为什么需要 Optional null 本身语义模糊: 是”值不存在”? 是”查询失败”? 是”尚未初始化”? Optional<T> 用类型系统显式表达”值可能不存在”,让调用方必须面对空值分支。 2. 常用创建...
1、背景 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。 我非常喜欢这种自动装配的机制,所以在自己开发中间件和公共依赖工具的时候也会用到这个特性。让使用者以最小的代价接入...
机器学习与深度学习 Coursera-ML-AndrewNg-Notes [教程/笔记]吴恩达老师的机器学习课程个人笔记 d2l-ai/d2l-zh [教程/笔记]《动手学深度学习》:面向中文读者、能运行、可讨论。中英文版被60多个国家的400多所大学用于教学。 apachecn/AiLearning [教程/笔记]AiLear...
文章以纯面试的角度去讲解,所以有很多的细节是未曾铺垫的。 单纯通过一篇文章来想要在面试中答出AQS、公平锁&&非公平锁以及ReentrantLock的加解锁🔐流程是很难的,强烈建议看完之后自己去翻下源码。 鉴于很多同学反馈没看懂【对线面试官】系列,基础相关的知识我确实写过文章讲解过啦,但有的同学就是不爱去翻。
https://www.iocoder.cn/JUC/sike/ReentrantReadWriteLock/ 1. 简介 重入锁 ReentrantLock 是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。然而,读服务不存在数据竞争问题,如果一个线程在读时禁止其他线程读势必会导致性能降低。所以就提供了读写锁。 ...
技术架构图
redis使用规范 一、键名设计 1、key名设计 1. 禁止包含特殊字符(比如空格、换行、单双引号以及其他转义字符) 2. 建议以业务名为前缀,以冒号分割来构造一定规则的key名(比如业务名:表名:id) 比如:teach:leeson_id:21 3. 控制key的长度 key太长量一大起来就会非常占用内存 2、value设计 1. 拒绝大key操作 禁用超过10K的...