自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 裴蜀定理与欧几里得算法——蓝桥杯真题中的应用

对于任意两个整数a和b,如果它们的最大公约数是d,那么可以找到整数x和y,使得a和b的最大公约数d可以表示为它们的整数线性组合。

2024-10-27 10:54:42 588

原创 回溯算法(递归+回退)——1基础理论

所以他的算法效率并不高。2、递归到第三层的叶子结点后,由于已选集合大小==k,所以终止搜索,向不在向下递归,这就是递归的终止条件。3、想要写出递归,我们要寻找出这个问题的重复子问题,因为递归就是把一个大问题拆分成小的、重复的子问题。在搜索遍历到叶子节点后,由于递归的性质,会逐层回退,当前结点中的状态会转变成上一层结点原来的状态。第二节的图片解析说明了,搜索的返回条件就是找到k个元素的符合条件的组合就回退,枚举下一个可能。上一节讲到,回溯法本质就是通过递归枚举所有的可能,返回符合情况的结果。

2024-09-22 08:40:02 865 2

原创 JavaEE 第23节 TCP的流量控制与阻塞控制详解

流量控制(Flow Control)和拥塞控制(Congestion Control)是TCP协议中的两个重要机制,虽然它们都涉及到数据流的管理,但它们的作用和处理对象是不同的。如图,两种机制相辅相成,保证数据可靠传输的情况下实际发送窗口大小Min拥塞窗口大小接收窗口大小它们相辅相成,前者保证接收方不会被数据淹没,后者确保网络不会因过载而失效,从而共同保证数据的可靠传输和网络的高效利用。TCP段笼统讲就是TCP数据报↩︎。

2024-09-09 08:54:31 970

原创 JavaEE第22节 TCP段(报文)结构剖析

接收端因为要接收多个这种TCP段,而因为网络传输的不稳定性,到达的TCP段可能是缺失的乱序的,甚至因为重传机制还可能发送重复的TCP段给到接收端。头部长度,也叫数据偏移(Data Offset),我们知道TCP段头部长度是可变的,通过这个字段就可以知道该TCP段头部的具体是在那个范围了。在传输层,TCP段的起始位置不用管,只用知道偏移量(头部长度)即可,起始位置在IP层有专门字段封装。-1,但是在数据发送是TCP段的发送量会受到滑动窗口这个机制的影响,而滑动窗口的大小一般最大就是2。

2024-09-01 08:27:19 1585

原创 JavaEE 第20节 用TCP套接字实现简单回显服务器

Java中TCP套接字的使用(实现一个简单的回显服务器)

2024-09-01 08:19:26 893

原创 JavaEE第19节 用UDP套接字实现简单回显服务器

使用JAVA,进行UDP协议网络编程

2024-08-31 08:21:13 1015

原创 JavaEE 第21节 UDP数据报结构剖析

本篇文章会围绕UDP报文的结构,对此协议展开详细的讲解,比如报文中每个字段的作用、以及填写方式。阅读完这篇文章,你会对UDP数据报结构有个透彻的认识,进而体会UDP协议持有相关特性的原因。

2024-08-31 08:13:31 1298

原创 【dp力扣】环绕字符串中唯一的子字符串

比如,s="abdb",在dp数组中dp[1]dp和dp[3](dp[i]含义,请看上面代码注释)两个值一定有重复的计数,因为"ab"和"abdb"中都有b这个字符。所以如果直接对dp求和,那么结果只能是>=正确答案(因为加上了重复的次数)。那么dp[i]=dp[i-1]+1。(以i为结尾,实际上,也就增加了s[i]这一个字母)。这实际上就回到了刚才的"abdb"中,dp[1]和dp[3]出现重复计数的问题了。倘若两个字符s[i]和s[i-1]是连续的,即。hash[1对应的是sArr[j]=='b'?

2024-08-30 07:57:54 1029

原创 【dp力扣】买卖股票的最佳时机III

要定义好状态表示,我们要分析这道题目到底有那些状态。最明显的,buy可买入股票),own持有股票)这两种。但是还有一个重要的状态,就是交易次数(最多两次,题目明确约束了交易次数最多两次。另一个重要的状态就是当前的天数(最大取决于prices长度。也就是说这个状态表示要包含这样的信息:【第i天】,【最终是j交易状态】,【交易了k次】也就是三个维度。所以要用用3维数组?可以,但没必要。/*own[i][j]代表第i天持有股票,交易了j次的最大利润。

2024-08-30 07:56:44 1444

原创 JavaEE 第18节 TCP&UDP优缺点(对比)

基于TCP/IP协议栈,TCP和UDP属于传输层协议。在Java生态中也分别提供了相关套接字(Socket)1的API,方便网络编程。这两种协议各有优势,我们在网络编程中要根据他们的特性,选择合适的协议进行网络编程。接下来的文章小编会详细讲解UDP/TCP两种协议的优缺点以及相关应用场景。在选择协议时,给大家做个参考。另外,本文中有一些专业名词带有脚注,点击脚注可以查看详细解释UDP的优势在于速度快、延迟低、开销小,适用于实时性要求高、不需要保证数据可靠性的场景,如视频流、在线游戏、语音通信等。

2024-08-26 09:37:32 1400

原创 最短路径[floyd算法]-----视频讲解+代码实现

求最短路径,一般有三种方法:单源最短路径--Dijkstra算法单源最短路径--Bellman-Ford算法(少考)多源最短路径--的意思是只能从指定位置开始,求其他位置的最短路径。则不同,可以求任意两点间的最短路径。本文章主要讲解floyd算法。

2024-08-26 09:36:33 996

原创 JavaEE 第17节 网络通信知识扫盲

此篇博客用于讲解网络编程中基础、必要的知识,所以即使是小白相信认真看也是能懂的。文中涉及的一些概念、专有名词也不用深究具体的实现方式,了解大体的运作流程即可。

2024-08-23 07:15:00 675

原创 JavaEE 第16节 线程安全的集合类

本文章主要介绍在多线程环境下如何线程安全的使用一些常用的集合类(顺序表和哈希表)。

2024-08-22 14:11:36 818

原创 JavaEE 第15节 JUC相关组件介绍

是一个用于并发编程的包,提供了线程安全的集合类、同步工具、并发执行框架和原子变量等,以简化和增强多线程编程的性能和可靠性。接下来介绍的这几个组件使用起来都比较简单。

2024-08-22 14:11:00 911

原创 JavaEE 第14节 深入探讨CAS:原理、应用、ABA问题及其解决办法

从当下的计算机使用环境来看,单线程程序难以满足高性能和高吞吐量的需求,而并发编程允许多个线程执行任务,有效减少等待和资源闲置。传统锁机制中,上锁和解锁的开销本身比较大,并且可能存在死锁问题。ABA问题是CAS的一个小小瑕疵。因为在特定场合才会出现这种问题,并且这种问题出现的概率非常的小。具体为什么,来看下面的解释。刚才我们在讲CAS实现原子操作的步骤中强调过,必须先判断寄存器1的值和高速缓存中的值是否相同,相同才能重新对高速缓存中的值进行修改。ABA问题实际上就出现在上面这步上。

2024-08-18 08:48:57 801

原创 JavaEE 第13节 synchronized关键字基本实现原理

锁升级意思是synchronized关键字会根据程序时的实际情况,动态的改变锁策略,从而兼顾大部分加锁环境,在能保证现成安全的情况下,又能够兼顾程序性能,可见其强大之处。在程序 圆 写完代码执行程序前,编译器+JVM还会再次检查代码,判断程序中是否有一些地方加锁是无意义的,那么就会消除这个锁。可能会增加锁的持有时间,影响并发性能,因此应根据具体情况权衡使用,不过这里不用担心,JAVA开发人员,肯定是能保证其性能的。当锁竞争激烈,自旋多次没有获取到锁的时候,轻量级锁会升级成重量级锁。

2024-08-18 08:47:51 443

原创 JavaEE 第12节 常见锁策略

本节内容不局限于JavaEE,主要是介绍多线程中锁相关的一些专业术语以及概念。自旋锁和挂起等待锁各有专长,根据实际情况使用。如果锁持有时间短,低锁竞争,采用自旋锁设计。如果持有锁时间长,高锁竞争,同步性要求高,采用挂起等待锁的设计。

2024-08-16 08:36:52 871

原创 JavaEE 第11节 定时器

定时器的概念非常简单。它在软件开发中应用非常广泛。它类似于一个提前设定好的闹钟,到达指定时间后,执行设定好的任务程序。比如在网络通信中,如果在一个时间范围内没有得到响应,那么重新尝试连接网络等。

2024-08-16 08:34:12 534

原创 JavaEE 第10节 线程池(Thread Pool)介绍

知识点多,但各个重点

2024-08-14 10:40:31 1221

原创 JavaEE 第9节 阻塞队列详解

阻塞队列是在普通队列(先进先出的数据结构)的基础上阻塞队列队列的一个典型应用场景就是“生产者消费者模型”。

2024-08-14 10:38:47 1125

原创 JavaEE 第8节 单例模式详解

单例模式以及线程安全相关措施

2024-08-10 07:46:50 892

原创 JAVA SE 文件操作和IO

JAVA的文件操作

2024-08-10 07:44:45 835

原创 JavaEE 第7节 线程饥饿及其解决办法

线程饥饿)指的是多线程中,某些线程无法获得相关资源或者执行机会(阻塞,BLOCKED)长时间如此对线程的推进和响应造成明显影响的现象左边的蘑菇头和右边的小人都是线程,左边的蘑菇头因为在所中没有自己想要的资源所以从锁中出来,但是由于它的优先级比较高一从锁里出来,转头有跑进锁里面了,完全没有给右边的小进去的机会。当饥饿到一定程度,赋予线程的任务即使完成也不在具有实际意义的时候就说明这个线程被饿死了。

2024-08-08 16:37:24 998

原创 JavaEE 第6节 内存可见性问题以及解决方法

/实现加锁count++;//什么都不做System.out.println("while循环结束");});@OverrideSystem.out.println("修改n的值为非0");System.out.println("修改完成");按照代码逻辑,我们在终端输入一个1,那么就会打印"while循环结束",但实际情况真是如此吗?请看执行结果:在输入一个1之后,程序并没有结束(正方形红点),那么就说明这个程序是有bug的。

2024-08-08 16:36:37 1364

原创 二维动态规划中的正向依赖和逆向依赖问题讲解

dp[i][j]代表从左上角(0,0位置移动到i,j位置的最短路径之和),既正向依赖。dp[m][n](从0,0开始移动到最右下角的最短路径和)就是要求的答案了。为什么是正向依赖?对于这道题目,从右上角g[0[0]到达其他任意位置g[i][j](i,j为任意数,只要不越界)的最短路径和只依赖于前面的状态。定义dp[i][j]表示从i,j位置移动到m,n(右下角)位置最少需要的血量。为什么dp二维数组不能像第一道题那样定义?假设dp[i][j]表示从0,0的起始位置,到达i,j位置需要的最少血量。

2024-08-06 09:15:39 629

原创 JavaEE 第5节 死锁产生的原因

这是我们发现,循环依赖实际上已经打破了,因为因为一号哥哥不会去大号(5号)筷子,所以五号哥哥可以拿到5号筷子,等五号哥哥炫完鸡汤后,他会把4、5号筷子都放下,然后三号哥哥就可以开炫了,以此类推直到所有线程完成任务。也就是他们同时拿其同一侧的一只筷子的时候,每一位哥哥都拿了一支筷子,但是每一个哥哥都尝不到里面的鸡汤,因为必须持有一双筷子才能尝到鸡汤的鸡肉,于是每位各个都一直干等着,这样就形成了死锁。锁的互斥性(Mutual Exclusion)是锁的基本特性,它是保证线程资源独占访问的关键,是无法干预的。

2024-08-06 09:15:15 763

原创 JavaEE 第4节 线程安全问题

刚才讲解线程安全问题的原因时,我们提到了原子性、修改同一个变量这两个关键字,这里所说的锁实际上就是。

2024-08-05 07:56:00 737

原创 JavaEE 第3节 线程安全知识铺垫2

原因在于我们创建线程用到了lambda表达式(本质还是匿名内部类创建),如果把isQuit定义在main方法内部,那么就会触发变量捕获,提示说isQuit必须是final或者effectively final的,这个细节大家要注意。之所以要用currentThread()方法获取当前线程对象,原因在于lambda表达式内部thread线程的对象都还没有创建完成,如果直接使用thread,是会报错的。当一个线程正在睡眠时,如果设置了中断标志位(调用了interrupt方法),那么sleep会。

2024-08-05 07:52:55 1174

原创 JavaEE 第2节 线程安全知识铺垫1

同一个进程的不同线程ID不一样,但是不同进程的不同线程的ID可以一样。通过jconsole查看线程状态非常实用的方式。:由于篇幅限制,这个知识点在下一篇文章详细介绍。关于锁的内容,会在之后的博客中进行详细讲解。:JVM中所有非后台线程结束,才会结束运行。:理论上讲,优先级高的线程容易别调度到。:简单理解就是run方法是否结束运行。:可以取容易辨认的名字,方便调试。

2024-08-04 10:59:38 266

原创 JavaEE 第1节 认识多线程

1、了解什么是线程、多线程、进程以及他们之间的关系2、了解多线程的优势以及各种特性3、用Java掌握多种创建线程的方法这三个名词的概念可以用一个餐馆的厨房和厨师来进行超级形象的比喻。想象一下一个餐馆的厨房。我们在梳理一下刚才所讲的比喻:注意:前台线程和后台线程除了是否能决定进程能否退出,在其他方面没有任何区别。首先,还是用刚才厨房和厨师的例子,假如说一个餐厅的客人非常的多,但是这么大的后厨,和这么多的需求只有一个厨师在卖命的炒菜,这显然是会被人骂的,餐厅早晚会倒闭。为了充分利用厨房的各种资源,把每个厨具都用

2024-08-04 10:56:47 1103 1

原创 简单了解CPU的工作原理

想要理解CPU的工作流程,以下几个寄存器一定要有所了解。在了解寄存器之前我们先了解一下这几个概念:一个指令(二进制构成,如:0010 1110等),前半段表示操作码,后半段表示操作数。

2024-06-15 07:42:42 157 2

原创 手机是如何实现多个应用程序同时运行的?

大家都知道后缀为.exe的是一个应用程序。如果不启动它,实际上就是硬盘上的一个文件。进程具有一些关键特性,比如独立性:每个进程有自己独立的地址空间,不同进程之间的地址空间是隔离的。这意味着一个进程不能直接访问另一个进程的内存区域,提供了进程间的隔离性和安全性。资源拥有者:进程拥有自己的一组资源,例如打开的文件、网络连接、CPU时间片和内存区域。这些资源是进程独立运行所必需的。状态信息:进程有自己的状态信息,包括寄存器状态、程序计数器、堆栈指针等。

2024-06-15 07:39:38 1251

原创 你是否还为不理解nextLine()、next()的程序逻辑而苦恼?

如果你在使用nextLine()或者next()或者输入了,但是!看了这篇文章你讲直到这两个方法的运行逻辑,并知道自己的问题出在了哪里。

2024-06-14 08:19:28 287

原创 JDBC操作数据库的方法

全称:Java DataBase Connectivity——java数据库连接我们知道数据库厂商有很多,比如。不同的厂商都有数据自己较为独特的API。什么是API?API——(,应用程序编程接口,简称接口是一组定义了软件组件之间交互方式的规范。它允许不同的软件系统之间进行通信和交互,使得开发者可以利用已有的功能和服务来构建自己的应用程序。JAVA标准库中,提供的各种类以及类中的各种方法(PriorityQueue等),就是API。因为是不同的厂商,他们构建的API都是不一样的。这就导致,如果。

2024-06-14 08:18:26 648

原创 IDEA上MySQL的jar包导入教程

jar包下载网址——》

2024-06-13 07:57:41 957

原创 *MySQL事务

既自己在访问数据库时,显示还有库存,但是过了一会儿有的人刚好把商品买空(把数据库内容修改了),这时候,你自然就无法成功下单。因为回滚的底层是每执行一次sql,就会把它记录到日志文件当中,在发生意外之后,重启数据库,参考之前的记录进行还原即可。但是,如果在执行一个事务期间,出现了意外,但是已经执行了一些事物的逻辑,这时候就会触发。,好像每个事务都是一个一个执行的了,但实际上在MySQL中事务之间仍然是并发执行的。小海这时想,哎呀WOC,手里揣着600元,还能在取1000元,发了发了🤩🤩🤩。

2024-06-13 07:56:32 875

原创 MySQL的基本操作

insert into student(字段1,字段2,...) values(数据1,数据2),(数据1,数据2),....;建议批量插入,因为每一次操作数据库,都是客户端和服务器直接的交互,网络开销会很大,如果频繁收取和发送信息。如果表名后面不存在任何查找条件,那么会把表中所有数据删除,但是这个表仍然存在,变成一个空表。取反:和C语言中的!,不过推荐用not)也可以只插入某几个字段,其他字段不插入,但是没有插入的数据默认为。

2024-06-12 08:25:42 878

原创 什么DS适合做数据库的索引

数据库索引具有很强大的功能,他可以在中查找特定的值,或者某一个范围的数据集合,而且非常稳定。那么什么数据结构支持它能高效的查询呢?

2024-06-12 08:24:57 341

原创 MySQL——索引

索引,有利有弊,但。

2024-06-11 08:07:35 193

原创 MySQL中的数据库约束

目录导读:约束类型1、not null(不能为空)2、unique(唯一)3、default(默认值约束)4、primary key(唯一)与unique相同点:不同点:auto_increment:5、foreign key(外键)语法形式:功能:6、check——了解即可在使用数据库的时候,为了避免插入数据出错,一般会对插入的数据进行约束(限制)。比如插入学生信息(包含学生名字):如果不对插入的数据进行约束,那么这种情况,也会插入成功:在逻辑上这显然是不成立的,因为学生的名字不能是null。为此,MyS

2024-06-10 21:14:09 2179

空空如也

空空如也

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

TA关注的人

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