- 博客(28)
- 收藏
- 关注
原创 “三握四挥“,计算机网络中,TCP(传输控制协议)的连接建立和断开
总结起来,"三握四挥"是TCP连接建立和断开的过程,通过三次握手建立连接,通过四次挥手断开连接,确保了数据的可靠传输和连接的正常关闭。三握(Three-way Handshake)是指在建立TCP连接时,客户端和服务器之间进行的三次握手通信过程。四挥(Four-way Handshake)是指在断开TCP连接时,客户端和服务器之间进行的四次挥手通信过程。在计算机网络中,"三握四挥"指的是TCP(传输控制协议)的连接建立和断开过程。通过四次挥手,客户端和服务器完成了TCP连接的断开。
2023-09-04 10:53:55 171
原创 “seq”、“ack“和“syn“的含义
发送方发送带有"syn"标志位的TCP报文段作为连接请求,接收方收到连接请求后,回复一个带有"syn"标志位和"ack"标志位的TCP报文段作为连接确认。在TCP(传输控制协议)中,每个TCP报文段都有一个序列号,用于标识报文段在传输过程中的顺序。发送方使用序列号来对报文段进行编号,接收方可以利用序列号来重新排序报文段,以确保数据的正确顺序。在TCP中,接收方使用确认号来告知发送方已经成功接收到的数据字节的序列号。发送方接收到确认号后,可以确认数据已经成功传输到接收方,或者根据确认号进行重传等操作。
2023-09-04 10:23:32 14661
原创 通俗的理解MQ(消息队列)的解耦、异步和削峰
削峰:想象一下,你的网站突然迎来了大量的访问请求,超出了系统的处理能力。即使请求的数量很大,消息队列也可以暂存这些请求,然后按照系统的处理能力逐渐消费这些请求。而当我们引入消息队列时,发送者只需要将消息放入消息队列,然后继续自己的工作,而不需要直接与接收者进行通信。这样,发送者和接收者之间的依赖关系被解耦,它们可以独立地演化和扩展,而不会相互影响。在没有消息队列的情况下,你可能会一直等待朋友回复你的消息,期间不能做其他事情。这样,你可以异步地发送和接收消息,不需要等待和阻塞,提高了效率。
2023-08-30 09:26:04 811
原创 MyBatis 中 9 种动态 SQL 标签
Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,Mybatis提供了9种动态sql标签trim|where|set|foreach|if|choose|when|otherwise|bind。
2023-08-29 17:10:35 2714
原创 在Java开发中,通常还有哪些常见的包命名约定
Action(或Controller):Action包通常用于存放与用户交互和请求处理相关的代码,例如Web应用程序中的控制器类。这些类负责接收用户请求、处理请求参数、调用业务逻辑(通常是通过调用Biz包中的类)并生成相应的响应。Biz包中的类可以与数据访问层(如DAO)和表示层(如Action)进行交互,为应用程序提供业务逻辑的实现。包通常用于存放工具类,这些类提供一些常用的功能和方法,例如日期处理、字符串处理、文件操作等。服务层的类通常是应用程序的核心组件,处理复杂的业务逻辑,协调其他部分的工作。
2023-08-29 10:22:28 421
原创 HashMap最全知识点(一)
当 length =15时,6 和 7 的结果一样,这样表示他们在 table 存储的位置是相同的,也就是产生了碰撞,6、7就会在一个位置形成链表,4和5的结果也是一样,这样就会导致查询速度降低。,按照泊松分布的计算公式计算出了桶中元素个数和概率的对照表,可以看到链表中元素个数为 8 时的概率已经非常小,再多的就更少了,所以原作者在选择链表元素个数时选择了 8,是根据概率统计而选择的。Java 里的数组是无法自动扩容的,方法是将 Hashmap 的大小扩大为原来数组的两倍,并将原来的对象放入新的数组中。
2023-08-28 15:01:04 99
原创 冒泡排序(空间复杂度,时间复杂度,稳定性分析,代码,图解)
对于算法的稳定性而言,我们先假设,在此时序列中有两个相邻的值为 13 的元素(其它重复元素同理,不是相邻的话在冒泡的过程中也会有相邻的状态),根据判断条件 i > j , 且 A[i] == A[j] ,在做冒泡排序的时候,13 和 另外一个13之间不会发生位置的交换;冒泡排序法是把N个数通过N-1轮排序,升序排序中大的数往下沉,小的数往上浮,降序排序中小的数往下沉,大的数往上浮。冒泡排序需要进行n-1趟冒泡,每一趟需要比较n-i次,最坏情况下需要交换n-1次,故时间复杂度为。所以,冒泡排序是一种。
2023-08-24 09:48:29 3130
原创 RocketMQ消息队列
优点:单机吞吐量每秒万级,时效性毫秒级,可用性高,基于主从架构实现高可用性,消息可靠性较低的概率丢失数据。5、消费者订阅某个主题前,需要先从NameSever查找对应的Broker列表或者某个集群,从Broker当中订阅消息进行消费,同时由Broker指定订阅规则。RocketMQ主要由Producer、Broker、Consumer三部分组成,其中Producer负责生产消息,Consumer负责消费消息,Broker负责存储消息。2、服务发现,连接所有的生产者和消费者,并且定时进行心跳包发送。
2023-08-23 16:47:36 84
原创 Cookies知识点
Cookies通常存储在客户端的浏览器中,并由浏览器在每次请求时自动发送到服务器。Cookies的文件名以“cookie”开头,后跟一个等号和一个名称,例如“cookie_name=cookie_value”。当用户再次访问该网站时,浏览器会将Cookies发送回服务器,以便服务器能够识别用户并进行相应的操作。例如,如果Cookies中的登录信息被盗取,攻击者可能会使用这些信息冒充用户的身份。在使用Cookies时,需要根据实际情况进行设置和使用,以保护用户的隐私和安全。
2023-08-15 10:07:24 52
原创 ConcurrentHashMap中CAS是什么
JVM内存模型是Java虚拟机规范中定义的一套内存访问规则,用于规定多线程访问共享内存时的行为和保证线程安全。JVM内存模型规定了Java程序在执行时,内存是如何被划分和访问的。JVM内存模型将内存分为两种类型:线程私有内存和线程共享内存。线程私有内存包括程序计数器、Java虚拟机栈和本地方法栈,每个线程都有自己的一份,用于存储线程私有的数据。线程共享内存包括Java堆、方法区和运行时常量池,所有线程都共享这部分内存。JVM内存模型规定了多线程访问共享内存时的原子性、可见性和有序性。
2023-08-07 16:28:48 2193
原创 集成Spring Boot Thymeleaf模板引擎使用教程
总的来说,集成Thymeleaf很简单,相较于JSP更加简洁、且与HTML更加天然地融合,非常适合Spring Boot中使用。使用Thymeleaf非常方便,不需要像JSP那样写Java代码,编写起来更像HTML,前端开发者也更易上手。Thymeleaf是一款很方便的模板引擎,可以与Spring Boot天然配合,省去了JSP等复杂的配置。如果还有任何疑问,欢迎随时和我交流。接下来给大家讲讲在Spring Boot项目中如何使用Thymeleaf模板引擎。Thymeleaf模板中常用的语法为。
2023-07-24 20:28:37 95
原创 Spring Boot 集成 Swagger 在线接口文档
Spring Boot 集成 Swagger 在线接口文档可以帮助我们更好地管理和测试接口,提高开发效率和代码质量。下面是学习过程中的总结:1. 引入 Swagger 依赖:在 pom.xml 文件中添加 Swagger 依赖,例如 springfox-swagger2 和 springfox-swagger-ui。
2023-07-24 20:06:35 224
原创 Spring Boot 中的 MVC 支持
这里主要掌握 Spring Boot 中对 MVC 的支持,重点掌握@RestController、@RequestMapping、@PathVariable、@RequestParam 和@RequestBody 四个注解的使用方式,由于@RestController 中集成了@ResponseBody 所以对返回 json 的注解。以上四个注解是使用频率很高的注解,在所有的实际项目中基本都会遇到,必须熟练掌握。
2023-07-22 17:07:06 182
原创 Spring Boot 的项目属性配置
这里主要了解 Spring Boot 中在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后了解开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
2023-07-22 16:14:56 67
原创 Spring Boot 使用 slf4j 日志
SLF4J 即简单日志门面,不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单 Facade,允许最终用户在部署其应用时使用其所希望的日志系统。这里的意思是:只需要按统一的方式写记录日志的代码,而无需关心日志是通过哪个日志系统,以什么风格输出的。因为它们取决于部署项目时绑定的日志系统。例如,在项目中使用了 slf4j 记录日志,并且绑定了 log4j,即导入相应的依赖,则日志会以 log4j 的风格输出;
2023-07-22 15:33:36 108
原创 Spring Boot 返回 Json 数据
由于封装的 json 数据的类型不确定,所以在定义统一的 json 结构时需要用到泛型。统一的 json 结构中属性包括数据、状态码、提示信息即可,构造方法可以根据实际业务需求做相应的添加即可,一般来说,应该有默认的返回结构,也应该有用户指定的返回结构。//需要传递的数据//用户自定义相应码,注意不是服务器响应状态码。如果不需要传递详细信息还可以使用 boolean success;// 服务器回传信息。
2023-07-22 14:38:26 2671
原创 SpringBoot开发环境
可以通过格式缩进的方式表达层次结构。window-->perferences-->General-->content types,选中 Text,将 Default encoding 填入 utf-8 这样编码设置完成即可启动项目工程了。如果是使用 eclipse 可以通过 window-->preference-->Maven-->User Settings 来配置,配置方式和上面一致。window-->preference-->java-->Compiler 选择 jre,和 jdk 保持一致。
2023-07-22 14:25:23 645
原创 MySQL数据库02
直接插: 有许多无用信息, 需要假加入条件过滤。8.查询出来所有学生的平均分,并按照升序排序。7.查询出来每个科目的平均分并按照降序排序。4.查询出来每个挂的学生分别挂了哪些科目。6.查询出来个人考的最高分的学科是哪个。3.查询出来每个挂科学生,挂了几科?5.询出来指定科目的最高分是谁?1.查询出来平均分最高的科目?2.查询出来平均分最高的学生?便于打字,避免表格过长。
2023-07-22 11:04:29 213
原创 HashMap底层实现原理
Hash是一个算法蔟, 是满足某种条件的算法, 我们都叫Hash算法算法结果是固定的: 固定的输入能得到固定的结果算法过程是不可逆的: 可以从输入推到出来的结果, 但是不能从结果推到出来输入满足以上两个条件的算法, 我们都叫他Hash算法, 比如加法就是一个Hash算法3+5=8,在任何情况下,3+5都等于8,8是结果。可以从3+5推出来8,但是不能从8推出3+5什么是散列Hash?散列Hash是一种存放数据的方式,它不是简单的加法或者减法。我们现在给出一系列数据。
2023-07-21 19:21:26 66 1
原创 倒计时器、同步屏障、信号量
当多个线程到达屏障时将会被阻塞,只有这些线程的最后一个线程到达屏障后,屏障才会开门,所有被屏障拦截的线程才能继续执行,并且该屏障是可重复使用的。当有m个线程,n个资源(m > n且每个线程占用一个资源)时,Semaphore可用来控制同时访问资源的线程数量,以保证合理地使用资源。当多个线程需要执行时,若其中一个或多个线程需要等待其他线程完成某些操作后才能执行,则可用CountDownLatch实现功能。
2023-07-21 19:17:47 49 1
原创 Java-继承
当我们定义一个类型,而这个类型是一个比较泛泛的类型(范围很广泛),但其实我们需要的是一个相对来说不是那么广泛,而是比较明确的类型,那么我们就可以在在原来的类型基础上创建一个新的类型,也就意味着,原来类型中定义的所有的属性和方法都可以原封不动的继承到这个由原有扩展出来的类中,这个过程叫做继承。大白话: extends之后,只能有一个类型,不能有两个,但是那个父类可以有自己的父类,父类可以有父类,父类的父类还可以有父类,父类 n的父类,还可以有自己的父类,这个就是链式继承.先有爹后有儿子,一定是这样。
2023-07-21 13:11:25 83 1
原创 Java-封装
包括,公开,友元,默认(包), 私有,这些个过程分别对应任何地方都能访问,有关系才能访问,同一个包内可以访问,只能在该类型中访问。将相似的对象,放在一起,提取出来相同的属性以及方法的过程叫做抽象,将通过抽象过程提取的属性与方法重新放置在一个范本里面,这个范本就是类型,而生成这个范本的过程叫做封装。一个类型其实必然有一个构造方法,当我们没有显性的定义一个构造方法的时候,那么JAVA会给我们一个默认的,没有参数列表,没有方法体的构造方法。(1)如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器;
2023-07-21 13:10:23 89 1
原创 Java数组基础知识
Arrays.toString(),Arrays的一个方法,这个方法是用来将数组转换成String类型输出的,传入的参数可以是boolean,byte,char,double,float,int,long,Object,short类型的数组。数组 --> 数据容器 ,数组,存放相同类型元素的,内存连续的,大小不可改变的数据的容器叫做数组, 数组创建的格式:类型 标识符[]创建一个数组[11,3,64,56,22,88,13,14,6,17],找一个数字:99。n维数组是以n-1维数组为元素的一维数组。
2023-07-21 13:01:29 128 1
原创 Java流程控制、循环控制
switch括号内可以放的数据类型byte short int char String。while循环 , while的格式:while(boolean表达式){ }如果布尔类型的表达式结果是真,则运行if后的代码,否则运行else后的代码。for循环适用于知道循环次数的代码特征下的循环。while循环一般适用于知道退出条件的情况下。用switch实现判断一年中还剩多少天。用for循环解决鸡兔同笼问题。用for循环输出九九乘法表。if(布尔类型的表达式)switch(变量名){
2023-07-21 12:58:36 123 1
原创 JAVA基础知识
整型:byte 1个字节 short 2个字节 int 4个字节 long 8个字节。由若干标识符,字面量和符号组成的,可以通过符号推算出固定结果的式子,叫做表达式。代码块在遇见{后的每一行代码,需要缩进4个空格(java也可以用tab键)如果关系表达式的结果为true,运算后的结果是表达式1,否则为表达式2。浮点型 float 4个字节 double 8个字节。布尔型 4个字节 数组里进行优化布尔型1个字节。四类八种:整型,浮点型,字符型,布尔型。例如:age = 5;
2023-07-21 12:54:56 84 1
原创 单例模式几种写法,Java常见异常,ThreadLocal工作原理
懒汉式(线程不安全),饱汉式(线程安全),双检锁/双重校验锁(DCL,即 double-checked locking), 登记式/静态内部类 , 枚举。
2023-07-20 13:05:21 39
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人