自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LifeGoesOn

永远年轻

  • 博客(158)
  • 资源 (3)
  • 收藏
  • 关注

原创 IDEA错误,打不开某一个特定的java文件

其他文件都可以正常打开,但是偏偏一个类文件打不开,构建没问题,运行没问题,这个类也在运行,也打出了日志,返回了结果。?????然后我就打了 debug,等到他要跳进这个方法执行的时候总会显示吧,结果,debug走到这里之后,直接啥也不显示了。????我右键这个文件,利用 git 显示与别的 版本比较,这样总能对比的时候显示一个视图吧?结果如下图:报了个异常,看这样子,idea 这个用 java 开发的软件,直接把异常抛到界面来了?这个异常:java.io.EOFException这个异常...

2020-12-18 18:50:07 2095 3

原创 计算机网络:TCP协议建立连接的过程为什么是三次握手而不是两次?【对比网上的两种说法个人思考】

网上关于这个问题吵得很凶,但是仔细看过之后我更偏向认为两种说的是一样的。首先我们来看看 TCP 协议的三次握手过程如上图所示:解释一下里面的英文:里面起到作用的一些标志位就是TCP报文首部里的内容,ACK确认标志位,SYN同步标志位,ack确认号;两端的状态CLOSED 就是连接关闭状态,LISTEN状态就是监听状态,SYN-SENT就是同步已发送状态,SYN-RCVD就是同步已接受状态,ESTABLISHED就是连接已建立状态。三报文挥手的过程如下:客户端发送连接请求:头部SYN=1

2020-11-04 11:58:53 895

原创 java的各种集合为什么不安全(List、Set、Map)以及代替方案

我们已经知道多线程下会有各种不安全的问题,都知道并发的基本解决方案,这里对出现错误的情况进行一个实际模拟,以此能够联想到具体的生产环境中。一、List 的不安全1.1 问题看一段代码:public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < 3; i++){ new Thread(()-

2020-10-13 22:09:08 679

原创 Idea的springMVC项目,jsp页面的EL表达式失效问题,数据显示不出来。

一、问题在做一个demo,因为很久没有重新用 jsp 页面直接 EL 取数据了,遇到了问题,记录一下。简单来说就是用 EL 在 jsp 页面里面从域中用 ${ xxx } 取数据:但是浏览器对应页面的位置是空白。也没有显示 ${ xxx } 这个表达式的字符串本身。二、前置条件:已经引入了 jstl 和 taglibs 的依赖;引入依赖之后在 jsp 页面的头部需要添加命名空间,也就是 <%@ taglib prefix=“c” uri=“http://java.sun.com/j

2020-10-13 21:20:09 1209 1

原创 ConcurrentHashMap源码解析,多线程扩容

前面一篇已经介绍过了 HashMap 的源码:HashMap并不是线程安全的,他就一个普通的容器,没有做相关的同步处理,因此线程不安全主要体现在:put、get 等等核心方法在多线程情况下,都会出现修改的覆盖,数据不一致等等问题。比如多个线程 put 先后的问题,会导致结果覆盖,如果一个 put 一个get,也可能会因为调度问题获取到错误的结果;多线程操作有读有写的时候,可能会出现一个典型异常:ConcurrentModificationException另外扩容的时候,hashmap1.7 的实

2020-10-12 15:37:34 1868 1

原创 juc包:使用 juc 包下的显式 Lock 实现线程间通信

一、前置线程间通信三要素:多线程+判断+操作+通知+资源类。上面的五个要素,其他三个要素就是普通的多线程程序问题,那么通信就需要线程间的互相通知,往往伴随着何时通信的判断逻辑。在 java 的 Object 类里就提供了对应的方法来进行通知,同样的,保证安全的判断采用隐式的对象锁,也就是 synchronized 关键字实现。这块内容在:java多线程:线程间通信——生产者消费者模型已经写过。二、使用 Lock 实现线程间通信那么,我们知道 juc 包里提供了显式的锁,即 Lock 接口的各

2020-10-09 17:35:35 130

原创 java多线程:线程池和阻塞队列

一、线程池定义和使用jdk 1.5 之后就引入了线程池。1.1 定义从上面的空间切换看得出来,线程是稀缺资源,它的创建与销毁是一个相对偏重且耗资源的操作,而Java线程依赖于内核线程,创建线程需要进行操作系统状态切换。为避免资源过度消耗需要设法重用线程执行多个任务。线程池就是一个线程缓存,负责对线程进行统一分配、调优与监控。(数据库连接池也是一样的道理)什么时候使用线程池?单个任务处理时间比较短;需要处理的任务数量很大。线程池优势?重用存在的线程,减少线程创建、消亡的开销,提高性能、提高响应

2020-10-08 10:59:01 3354

原创 java多线程:线程的实现

一、用户线程 && 内核线程线程:一般分为 用户线程(ULT) 和 内核线程(KLT)。用户线程:用户程序实现,不依赖操作系统核心,应用提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/内核态切换,速度快。内核对ULT无感知,线程阻塞则进程(包括它的所有线程)阻塞。也就是说用户程序管理。内核线程(KLT):系统内核管理线程(KLT),内核保存线程的状态和上下文信息,线程阻塞不会引起进程阻塞。在多处理器系统上,多线程在多处理器上并行运行。线程的创建、调度和管理由内核

2020-10-08 10:15:24 584

原创 Windows下的 Redis 安装教程

一、下载Redis 的 Windows 版本只有 github 上下载才行,打开网址:https://github.com/tporadowski/redis/releases这里不用 msi 完成,直接下载 zip 文件解压然后用命令来。下载第二个。二、解压配置解压,配置一下环境变量,将解压存放的位置 xxx\Redis 加到 path 里。示例:打开命令行窗口,输入命令:redis-server.exe已经显示服务启动,等待连接了。但是这里就可以看到中间有

2020-09-21 22:01:57 643

原创 java里的锁总结(synchronized隐式锁、Lock显式锁、volatile、CAS)

一、介绍首先, java 的锁分为两类:第一类是 synchronized 同步关键字,这个关键字属于隐式的锁,是 jvm 层面实现,使用的时候看不见;第二类是在 jdk5 后增加的 Lock 接口以及对应的各种实现类,这属于显式的锁,就是我们能在代码层面看到锁这个对象,而这些个对象的方法实现,大都是直接依赖 CPU 指令的,无关 jvm 的实现。接下来就从 synchronized 和 Lock 两方面来讲。二、synchronized2.1 synchronized 的使用如果修饰的

2020-09-17 10:07:13 406

原创 MySQL的事务机制和锁(InnoDB引擎、MVCC多版本并发控制技术)

一、事务(数据库的事务都通用的定义)1.1 事务定义事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。事务通常以 BEGIN TRANSACTION 开始,以COMMIT 或 ROLLBACK 操作结束:COMMIT 即提交,提交事务中所有的操作、事务正常结束;ROLLBACK 即回滚,撤销已做的所有操作,回滚到事务开始的状态。1.2 事务的四种特性ACID: 原子性,一致性,隔离性,持久性。ACID属性含义原子性(Ato

2020-09-15 21:23:15 464

原创 java的内部类以及lambda表达式

内部类内部类是指在一个外部类的内部再定义一个类。内部类的出现,再次打破了Java单继承的局限性。内部类可以是静态 static 的,也可用 public,default,protected 和 private 修饰。(而外部顶级类即类名和文件名相同的只能使用 public 和 default)。注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两个类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。**编译完成后出现 outer.class 和outer$inner

2020-09-13 15:46:17 433

原创 HashMap源码解析、jdk7和8之后的区别、相关问题分析

一、概览HashMap<String, Integer> map = new HashMap<>();这个语句执行起来,在 jdk1.8 之前,会创建一个长度是 16 的 Entry[] 数组,叫 table,用来存储键值对。在 jdk 1.8 后,不在这里创建数组了,而是在第一次 put 的时候才会创建数组叫 Node[] table ,用来存储键值对。二、源码的成员变量分析声明部分:HashMap 实现了 Map 接口,又继承了 AbstractMap,但是 Ab

2020-09-07 12:28:42 297

原创 类文件的结构、JVM 的类加载过程、类加载机制、类加载器、双亲委派模型

一、类文件的结构我们都知道,各种不同平台的虚拟机,都支持 “字节码 Byte Code” 这种程序存储格式,这构成了 Java 平台无关性的基石。甚至现在平台无关性也开始演变出 “语言无关性” ,就是其他语言也可以运行在 Java 虚拟机之上,比如现在的 Kotlin、Scala 等。实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java 虚拟机步包括 Java 语言在内的任何语言绑定,他只和 “Class 文件” 这种特定的二进制文件格式所关联,Class 文件中包含了 Java 虚拟机指令集、符

2020-09-06 14:57:05 181

原创 JVM内存区域,分代策略,垃圾收集算法,垃圾收集器

本文整理自周志明老师的《深入理解Java虚拟机-JVM高级特性与最佳实践》第3版的第二章和第三章。加上了一些网上拼拼凑凑的图片,个人认为很多博客复制来复制去,最后的东西都看不懂,所以还是码了一下知识点,也用作自己记忆。一、一个命令上面的结果显示了 jvm 的模式:Client VM(-client),为在客户端环境中减少启动时间而优化;Server VM(-server),为在服务器环境中最大化程序执行速度而设计。在文件路径:jdk-11.0.7+10\lib 下面可以更改 jvm.cfg

2020-09-05 10:48:16 355

原创 java多线程:Volatile关键字&&DCL单例模式,volatile 和 synchronized 的区别

Volatile 英文翻译:易变的、可变的、不稳定的。一、volatile 定义及用法多个线程的工作内存彼此独立,互不可见,线程启动的时候,虚拟机为每个内存分配一块工作内存,不仅包含了线程内部定义的局部变量,也包含了线程所需要使用的共享变量的副本,是为了提高效率。在之前的示例中,线程不安全的问题,我们使用线程同步,也就是通过 synchronized 关键字,对操作的对象加锁,屏蔽了其他线程对这块代码的访问,从而保证安全。这里的 volatile 尝试从另一个角度解决这个问题,那就是保证变量

2020-09-04 10:58:04 179

原创 java 的 ThreadLocal

除了前面一直讲的加锁的同步方式之外,还有一种保证一种规避多线程访问出现线程不安全的方法就是使用 ThreadLocal。在多线程环境下,每个线程都有自己的数据,一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有自己的能看见,不会影响其他线程。ThreadLocal 能够放一个线程级别的变量,其本身能够被多个线程共享使用,并且又能够达到线程按安全的目的。说白了,ThreadLocal就是为了在多线程环境下保证成员变量的安全。最常用的地方,就是为每个线程都绑定一个数据库连接,http请求、用户身

2020-08-20 16:41:34 151

原创 多线程的指令重排问题:as-if-serial语义,happens-before语义;volatile关键字,volatile和synchronized的区别

一、指令重排问题你写的代码有可能,根本没有按照你期望的顺序执行,因为编译器和 CPU 会尝试指令重排来让代码运行更高效,这就是指令重排。1.1 虚拟机层面我们都知道CPU执行指令的时候,访问内存的速度远慢于 CPU 速度。为了尽可能减少内存操作带来的 CPU 空置的影响,虚拟机会按照自己的一些规则将程序编写顺序打乱:即写在后面的代码在时间顺序上可能会先执行,而写在前面的代码会后执行。当然这样的前提是不会产生错误。不管谁先开始,总之后面的代码在一些情况下存在先结束的可能。1.2 硬件层面在硬件层

2020-08-19 17:52:12 390

原创 线程的定时调度:Timer和Timertask

一、线程的定时调度 timer和timertask任务定时调度:我们可以通过 java.util 的 Timer 和 Timertask 实现定时启动某个线程。java.util.Timer:类似闹钟的功能,本身实现的就是一个线程;java.util.TimerTask:一个抽象类,本身他就实现了 Runnable 接口,所以该类具备多线程的能力。通过 Timer 的 schedule 方法就可以进行安排,指定开始时间、指定间隔时间等等。测试使用代码:/*** 借助timer和timer

2020-08-19 15:52:57 457

原创 java多线程:线程间通信——生产者消费者模型

一、背景 && 定义多线程环境下,只要有并发问题,就要保证数据的安全性,一般指的是通过 synchronized 来进行同步。另一个问题是,多个线程之间如何协作呢?我们看一个仓库出货问题(更具体一些,快餐店直接放好炸货的架子,不过每次只放一份)假设仓库中只能存放一件商品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走进行消费;如果仓库中没有商品,那么生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止;如果仓库中放有产品,消费者可快速取走并消费,否

2020-08-19 11:04:48 757

原创 java多线程:线程同步synchronized(不同步的问题、队列与锁),死锁的产生和解决

0、不同步的问题并发的线程不安全问题:多个线程同时操作同一个对象,如果控制不好,就会产生问题,叫做线程不安全。我们来看三个比较经典的案例来说明线程不安全的问题。0.1 订票问题例如前面说过的黄牛订票问题,可能出现负数或相同。线程创建方式&&黄牛订票模拟0.2 银行取钱再来看一个取钱的例子:/* 模拟一个账户*/class Account{ int money; String name; public Account(int money,

2020-08-18 13:30:58 1240 2

原创 线程的优先级&& 守护线程

一、线程的优先级java 提供了一个线程调度器来监控程序种启动后进入就绪状态的所有线程,线程调度器按照线程的优先级决定应该调度哪个线程来执行,优先级高的被优先调度。优先级用数字来表示,范围从 1 到 10:Thread.MIN_ PRIORITY = 1;Thread.MAX_ PRIORITY = 10;Thread.NORM_PRIORITY = 5.优先级的设定,建议在 start() 方法的调用之前进行设定。设定方式就是 new 出线程之后:t.setPriority(Threa

2020-08-17 10:13:13 168

原创 java线程的五大状态,阻塞状态详解

一、状态简介一个线程的生命周期里有五大状态,分别是:新生就绪运行死亡运行后可能遇到的阻塞状态二、相关方法2.1 新生状态Thread t = new Thread();正如我们前面所说的,一个线程开始之后有自己的内存空间,这些工作空间和主内存进行交互,从主内存拷贝数据到工作空间。当这个语句执行的时候,线程创建,开辟工作空间,也就是线程进入了新生状态。2.2 就绪状态普通情况,一旦调用了:t.start();start 方法被调用,线程立即进入了就绪状态,表示这个线程具

2020-08-17 09:45:54 12001 1

原创 设计模式:装饰者模式介绍及代码示例 && JDK里关于装饰者模式的应用

0、背景来看一个项目需求:咖啡订购项目。咖啡种类有很多:美式、摩卡、意大利浓咖啡;咖啡加料:牛奶、豆浆、可可。要求是,扩展新的咖啡种类的时候,能够方便维护,不同种类的咖啡需要快速计算多少钱,客户单点咖啡,也可以咖啡+料。最差方案直接想,就是一个咖啡基类,然后所有的单品、所有的组合咖啡都去继承这个基类,每个类都有自己的对应价格。问题:那么多种咖啡和料的组合,都相当于是售卖的咖啡的一个子类,全都去实现基本就是一个全排列,显然又会类爆炸。并且,扩展起来,多一个调料,都要把所有咖啡种类算上重新组合一次

2020-08-16 14:01:41 237

原创 设计模式:桥接模式及代码示例、桥接模式在jdbc中的体现、注意事项

目录0、背景一、桥接模式二、使用桥接模式的源码:JDBC三、桥接模式的注意事项0、背景加入一个手机分为多种款式,不同款式分为不同品牌。这些详细分类下分别进行操作。如果传统做法,需要将手机,分为不同的子类,再继续分,基本属于一个庞大的多叉树,然后每个叶子节点进行相同名称、但是细节不同的功能实现。问题:类爆炸:类的增加基本没有任何优化,多一个就要妥妥的增加类;违反单一原则:增加一个品牌,影响每种类型下的这个品牌,增加一个类型,影响每个品牌的这个类型。一、桥接模式解决上面说的问题的方式就是使

2020-08-15 10:52:06 238

原创 设计模式:适配器模式(类适配器、对象适配器、接口适配器)

目录一、类适配器模式二、对象适配器模式三、接口适配器模式四、适配器模式应用适配器模式的工作原理:将一个类的接口转换为另一种接口,让原本接口不兼容的类可以兼容。从用户的角度是看不到适配器的,是解耦的;用户调用的是适配器转化后的目标接口方法,适配器再调用被适配者的相关接口方法。(比如用户只用type-C,要的是这个口给出的5v电压,而适配器去插插孔),这样对于用户来说,只是目标和接口交互。一、类适配器模式类适配器会有一个 Adapter 类,通过继承 src(被适配者) 类,实现 dst(目标) 接口

2020-08-14 09:39:56 342

原创 设计模式:建造者模式及在jdk中的体现,建造者模式和工厂模式区别

0、背景建造模式(Builder模式)假如有一个需求:盖房子,盖房子过程是一致的:打桩、砌墙、封顶。但是房子是各式各样的,最后盖出来的房子可能是高楼或别墅。根据直接的思路,不用设计模式思想,我们也许会:写一个 CommonHouse 抽象类,然后里面规定了打桩、砌墙、封顶三个方法;让不同房子继承这个类;最后调用的时候调用分别的方法即可。在继承抽象类、子类区分这一块,思想没有问题,问题出现这些类本身。缺点:过于简单,将产品(房子)和创建产品(房子建造流程)封装在了一起,耦合性增强了。(可

2020-08-14 09:20:22 450

原创 java的线程、创建线程的 3 种方式、静态代理模式、Lambda表达式简化线程

0、介绍线程:多个任务同时进行,看似多任务同时进行,但实际上一个时间点上我们大脑还是只在做一件事情。程序也是如此,除非多核cpu,不然一个cpu里,在一个时间点里还是只在做一件事,不过速度很快的切换,造成同时进行的错觉。多线程:方法间调用:普通方法调用,从哪里来到哪里去,是一条闭合的路径;使用多线程:开辟了多条路径。进程和线程:也就是 Process 和 Thread ,本质来说,进程作为资源分配的单位,线程是调度和执行的单位。具体来说:每个进程都有独立的代码和数据空间(进程上下文),进程间

2020-08-12 16:51:34 501

原创 设计模式:原型模式介绍 && 原型模式的深拷贝问题

0、背景克隆羊问题:有一个羊,是一个类,有对应的属性,要求创建完全一样的10只羊出来。那么实现起来很简单,我们先写出羊的类:public class Sheep { private String name; private int age; private String color; //下面写上对应的get和set方法,以及对应的构造器}然后,创建10只一样的羊,就在客户端写一个代码创建: //原始羊 Sheep sheep = new Sheep("tom

2020-08-12 15:41:10 307

原创 设计模式:工厂设计模式介绍及3种写法(简单工厂、工厂方法、抽象工厂)

0、介绍给一个背景:一个pizza订购项目,pizza本身的种类要便于扩展和维护,那么种类很多、制作过程也不少、还要完成订购的功能。按照一般的思路,类图设计如下:其中:Pizza类按照面向对象的设计思路,制作过程对应的方法在其中实现;由于需要不同的类型 Pizza,而在 prepare 步骤不同,所以 Pizza 做成抽象类,而两个不同类型的 Pizza 去继承 Pizza 类;还需要一个的 OrderPizza 类,接受预定类型,完成对应的pizza类订购操作;然后提供一个入口 Pizz

2020-08-11 10:33:59 381

原创 设计模式:单例模式介绍及8种写法(饿汉式、懒汉式、Double Checked Locking、静态内部类、枚举)

单例模式0、介绍一、饿汉式(静态常量)二、饿汉式(静态代码块)三、懒汉式(线程不安全)四、懒汉式(线程安全,同步方法)五、懒汉式(同步代码块)六、 双重检查Double Check七、静态内部类八、枚举九、总结十、单例模式在JDK里的应用0、介绍单例模式,就是采用一定方法,保证整个软件系统里,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(这种方法一般是静态的)。单例模式在实际开发中有 5 种写法+加 3 种。饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒

2020-08-09 16:40:54 279

原创 设计模式七大原则及代码示例

七大原则:单一职责原则;接口隔离原则;依赖倒转原则;里氏替换原则;开闭原则ocp;迪米特法则;合成复用原则。设计模式其实包含了面向对象的精髓,封装、继承、多态。

2020-08-08 11:07:18 572

原创 IP协议、IP数据报格式、DNS、DNS劫持、NAT网络地址转换

一、IP协议1.1 背景网络层一般有两种服务:一种是面向连接的虚电路服务,能够保证可靠通信,建立虚电路连接,然后通过这个连接发送分组,完了后释放虚电路。另一种是无连接的数据包服务,走什么路经都随便,但是为了到达目的地必须携带目的主机的地址,虽然如此,发送的分组还是可能误码、丢失、重复或者乱序。因为第二种做法不用提供可靠传输服务,网络中的路由器就比较价格低,而且易于维护,因特网采用的就是这种服务,它采用的就是IP协议。这种服务的好处是节省成本,那么复杂的网络处理功能都交给了更上一层的运输层,他

2020-08-06 17:23:13 1394

原创 HTTP协议,http1.0,1.1,2.0区别,http和https的区别、cookie和session

一、HTTP定义HTTP是Hyper Text Transfer Protocol 超文本传输协议 的缩写。用于从WWW服务器传输超文本到本地浏览器的传送协议,是一个无状态的协议。通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。默认HTTP的端口号为80,HTTPS的端口号为443。一般情况:HTTP协议永远都是客户端发起请求,服务器回送响应,客户端将内容拿到之后就和服务器断开来连接。这就决定了,如果客户端没有发起请求,服务器是没法推送数据

2020-08-05 16:26:04 2466

原创 打家劫舍问题1、2、3(动态规划、递归)

一、打家劫舍1你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1] 输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:

2020-08-05 12:21:44 1007

原创 快速排序partition写法(一道力扣题目引出的Lomuto和Hoare的partition方法区别)

做力扣的一道题目:169 多数元素的时候,用到了快速排序,所以复习了一下快排。一、快排快排思想就是:选定一个哨兵元素pivot;把小于pivot的元素放在pivot左边,大于pivot的放在右边,这样,划分完后pivot就在自己最终应该在的位置了;对于pivot位置的左边和右边,递归进行 1、2 的过程。其中,quickSort就是主方法,是分支递归的过程,2的步骤就是核心的partition方法,他进行划分,使得每一轮用 O(n) 的时间确定了一个元素的位置。因此快速排序的渐近时间复

2020-08-03 16:01:43 1368

原创 TCP粘包、服务器TIME-WAIT过多的问题

一、粘包TCP是基于字节流传输的,只维护发送出去多少,确认了多少,没有维护消息与消息之间的边界,因而可能导致粘包和拆包问题。粘包问题分为两种:发送方产生粘包采用 TCP 协议传输数据的客户端与服务器经常是保持一个长连接的状态,双方在连接不断开的情况下,可以一直传输数据。(一次连接发一次数据不存在粘包)但当发送的数据包过于小,那么 TCP 协议默认的会将这些较小的数据包进行合并发送(缓冲区数据发送堆压);(如果过大,取的时候纷乱了,就是拆包。)这个合并过程就是在发送缓冲区中进行的,也就是说数据

2020-07-30 11:00:28 219

原创 UDP协议、UDP和TCP优缺点对比

一、定义UDP 全称 User Datagram Protocol, 用户数据报协议。和TCP协议一样,也处于计算机网络的运输层(传输层)。但是UDP是一种不可靠的协议,正如名字,他是无连接的、面向应用报文的协议。无连接:不同于TCP的三次握手建立连接、四次挥手释放连接,UDP协议的通信双方随时可以互相发送数据;面向应用报文:对于应用层的报文,不拆、不合,保留他们的边界进行传输。(不同于TCP面向字节流、会将他们都看成连续的字节流放入自己的发送缓存,每次拿一部分组成报文)支持单播、多播、广播。

2020-07-29 16:38:21 3223 1

原创 TCP协议、TCP报文首部格式、三次握手四次挥手、流量控制、拥塞控制、滑动窗口

一、定义背景:TCP协议工作在运输层,下层的网际层,核心是IP协议,是一个不可靠的协议,因为他只是保证了数据能正确从源主机到达唯一的确定目的主机,但是传输的内容是不是被破坏,是不是按照正确顺序,没有进行处理,所以运输层的TCP协议在使用网际层的IP协议提供的服务同时,还要解决这个不可靠的问题。TCP协议,Transmission control protocol,传输控制协议。是一种可靠的运输层协议:他是面向连接的、基于字节流的协议。基于字节流:TCP协议将应用层的数据只看成一连串的字节流,

2020-07-29 10:24:42 478

原创 计算机网络复习总结:什么是OSI7层模型、5层模型、TCP/IP 4层模型,各层协议导航

个人总结整理相关计算机网络知识点,出发点是各类问题以及比较重要的部分。一、OSI 七层模型OSI 的七层模型从上到下依次是:应用层表示层会话层运输层网络层数据链路层物理层七层模型开始是某美国组织定的标准,强调的是理论,各个层需要完成的功能都很清晰,实现起来麻烦。如果一开始只是两个物理机器在通信,显然物理层就足够了,但是会出现一系列的问题,逐渐发展,计算机的最终目的已经发展到应用层,就催生了一层一层的累加,所以就需要进行区分,产生了分层,以及每一层的功能重点。各层的功能:1

2020-07-28 12:17:34 1683 1

Metronic_demo12.rar

可以改造成任何管理应用程序,后台管理系统,管理平台、OA系统、CRM系统、CMS系统等。包括HTML和Angular不同的框架基础,Metronic是世界上最受欢迎的Bootstrap管理系统前端框架,强大到你看完所有的demo也得花费不少时间。

2020-07-02

navicat150_premium_cs_x64.exe

新版navicat15,官网的原版,因为自己去官网下载发现特别慢不知道为啥,所以下完传到这里,给大家分享。试用有期限,可自行科学注册。

2020-06-29

2DPCA人脸识别提取Gabor特征,用2DPCA进行人脸识别。在Yale数据库上测试,识别率较高,速度很快。

提取Gabor特征,用2DPCA进行人脸识别。在Yale数据库上测试,识别率较高,速度很快。

2018-04-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除