自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JavaFX+MySQL实现图书管理系统(包含完整代码)

表格绑定数据,模糊查询,JDBC封装,按钮点击切换页面

2023-12-01 01:35:05 2904 28

原创 defer关键字

到遇到panic时,遍历本协程的defer链表,并执行defer。在执行defer过程中,遇到recover则停止panic,返回recocver处继续向下执行。没有遇到recover,遍历完本协程的defer链表后,向stderr抛出panic信息。在没有defer的情况下,其实函数的返回就是与return一致的,但是有了defer就不一样了。因为第一个执行的defer中的异常语句会覆盖main中的异常,然后被第二个执行的defer捕获。:return之后的语句先执行,defer后的语句后执行。

2025-04-13 22:14:47 414

原创 操作系统内存管理

1G的内存,游戏占用了512MB,浏览器占用了128MB,音乐占用256MB.如果我们关闭浏览器空闲内存为256MB.但是如果这个256MB不是连续的,这就会导致没有空间再打开一个200MB的程序。单片机的CPU直接操作内存的物理地址,这就导致在内存中同时运行两个程序是不可能的,有可能会出现第一个程序在2000的位置写入新的值将会擦掉第二个程序存放在相同位置上的内容。,并且操作系统会提供一种机制将不同进程的虚拟地址和不同内存的物理地址映射起来。:1.保存在段寄存器中2.最重要的是包含段号–用作段表的索引。

2025-04-05 22:11:23 259

原创 GMP调度模型

比如当G中包含创建新协程的时候,M创建了G’,为了继续执行G,需要把G’交给M‘执行,也就造成了很差的局部性,因为G’和G是相关的,最好放在M上执行,而不是其他的M‘。时启动程序后的编号为0的主线程,这个M对应的实例会在全局变量runtime.m0中,不需要在heap上分配,M0负责执行初始化操作和启动第一个G,在之后M0就和其他的M一样了。假设每个P的本地队列只能存3个G。G2在创建G7的时候,发现P1的本地队列已满,需要执行负载均衡(把P1中本地队列中前一半的G,还有新创建的G转移到全局队列)

2025-03-29 22:13:49 1063

原创 dockerSDK-Go语言实现

本文基于开发一个在线代码运行平台的项目需求上,所以需要挂载目录以达到获得执行文件的目的。首先在docker-compose 文件中,当前容器一定要跟宿主机的套接字进行挂载。创建docker客户端。

2025-03-21 21:56:46 585

原创 Redis大key

由于大key的value很大,执行读取时可能阻塞线程,这样Redis整体的每秒查询率会下降,并且客户端超时会增加,网络带宽会上涨,配置这些报警监控有助于我们发现大key的存在。大key的定义与value的大小和元素数量有关,但这个定义并不是绝对的,而是相对的,具体取决于系统的使用场景和性能要求。2.阻塞请求:对大key的操作可能耗时过长,阻塞redis单线程,影响其他请求的响应时间。3.网络阻塞:读取大key时,返回的数据包过大,可能占满网络带宽,影响其他服务通信。

2025-03-01 21:58:20 984

原创 计网-数据链路层

1.如图所示,主机A,B,C,D,E通过一根总线进行互连,主机A要给主机C发送数据,代表帧的信号会通过总线传输到总线上的其他各主机,那么主机B,D,E如何知道所收到的帧不是发送给她们的,主机C如何知道发送的帧是发送给自己的。这是因为在网络层要讨论的是多个网络互连的问题,是讨论分组怎么从一个网络,通过路由器,转发到另一个网络。(在发送前采用零比特填充法,对数据部分进行扫描,每5个连续的比特1后面就插入1个比特0,这样就确保了帧定界在整个帧中的唯一性,)接收方主机收到有误码的帧后,不会接收改帧,将其丢弃。

2025-02-16 17:26:42 755

原创 解数独力扣

2.每到一个位置如果为空,for循环遍历1-9,通过函数判断是否能放这个数字能放开始回溯判断放下这个数字之后。3.不设结束条件,一直循环判断下去知道所有位置全部填满数字然后return true表示找到解。1.双层循环每一个位置都要去判断能不能放数字。

2025-01-25 21:17:11 262

原创 Go 语言 select 的实现原理

select是Go在语言层面提供的I/O多路复用的机制,其专门用来让Goroutine同时等待多个channel是否准备完毕:可读或可写。在Channel状态改变之前,select会一直阻塞当前线程或者goroutine。特性:case 必须是一个通信操作,主要是指对通道(Channel)进行发送或者接收数据的操作。select 语句中除 default 外,各 case 执行顺序是随机的。select 语句中如果没有 default 语句,则会阻塞等待任意一个 case满足执行条件。

2025-01-18 15:11:53 955

原创 计算机网络第二章.物理层

(使数据链路层感觉不到各种传输媒体之间的差异,只需要使用物理层服务就能传输比特流,不必关心具体怎么实现)

2024-12-08 22:11:17 763

原创 Golang 反射

在这个例子中,Serialize函数接受一个interface{}类型的对象,通过反射获取对象的类型是结构体后,遍历结构体字段。根据字段类型将字段值转换为字节切片并拼接起来,实现简单的序列化。形式)和函数参数列表。通过反射获取函数的值对象,将参数转换为反射值对象后,使用。这里展示了如何在不知道函数具体类型的情况下,通过反射来调用函数。函数用于动态地调用一个函数。方法来调用函数,并返回函数调用的结果(以。

2024-11-24 15:34:34 600

原创 Golang defer关键字

第一个例子中,当defer语句被执行时,它都会捕获t当前值的副本,并不是t的地址。由于t是在循环遍历的,每次迭代都会创建t的副本,而不是t的地址。由于t是在循环中逐一遍历的,每次迭代都会创建t的新副本。因此当main函数结束时,defer语句会按照后进先出的顺序执行,但是每个defer调用都会打印循环结束时t的最终副本,即“c”。当defer调用Close(t)时,它传递了t的当前值的副本给Close函数。这意味着每个defer调用都捕获了循环中t的当前值的副本。调用都会创建额外的栈帧。

2024-11-17 22:59:50 643 2

原创 goroutine 介绍

并发和并行的根本区别是:并发在同一时间段内一起执行,而并行强调同一时刻开始执行。线程比如打开腾讯视频然后开始下载多个视频,下载任务就是线程。但是这并不是同时进行的,只是时间片比较短切换的比较快。

2024-11-10 18:00:00 417

原创 Golang文件操作

/创建一个新文件,写入内容5句“hello,Gardon”//1.打开文件file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)//0666在windows下面没有作用if err!= nil{return//关闭文件//准备写入五句话“hello,Gardon”//写入时,使用带缓存的 *Writerfor i := 0;i < 5;i++{

2024-11-02 15:51:40 769

原创 组合总和II

跟组合总和另外两道题最明显的不同是给定数组里有重复元素,那么就要保证生成的结果集内没有重复结果,可以在递归函数中增加一个判断,判断当前循环的元素与上一个元素是否相等。抽象来说就是当上一个元素的深度遍历结束开始右移对下一个元素进行深度搜索是判断这两个元素是否相同。

2024-10-24 16:15:11 219

原创 回溯--组合(Go)

在一次循环中,先将1加入path切片。第一步先判断path切片的长度是否等于题目要求的k,若相等就结束此次循环。不相等下一步进入for循环先判断在这一分支中加上所有剩下的数是否小于k,若小于k则这个分支永远不满足题目要求立即结束(即剪枝),也就是图片中数字4这一分支。将这次的数加入path分支进入回溯,回溯符合要求结束本次回溯之后,path切片弹出2,下次循环加入3。看了代码随想录中关于这道题的视频解析,首先就是将这几个数按顺序依次列出这个数的树形结构。

2024-10-21 14:35:51 167

原创 gin框架下token令牌验证

作者的项目token里包含了用户的账号密码及角色,大家按需来定义// Claims Token结构体Username string `json:"username"`//账号Password string `json:"password"`//密码Role string `json:"role"`//角色jwt.StandardClaims //内置结构体,包含token令牌本身的信息我定义的密钥长度为七// 定义密钥。

2024-09-25 16:07:29 455

原创 gin框架下使用base64Captcha库生成图片验证码

【代码】gin框架下使用base64Captcha库生成验证码。

2024-09-24 08:56:00 383

原创 计网第一章完结

TCP/IP协议的网络接口层没有具体内容是可以互连全世界各种不同的网络接口例:(有线的以太网接口,无线电WiFi接口),所以TCP/IP结构在本质上只有上面的三层。计算机主机和服务器包含TCP/IP的所有协议,操作系统含有完整的体系结构,而路由器的最高层为网际层,只包含网际层和网络接口层。协议三要素:语法→定义所交换信息的格式,语义→定义通信双方所要完成的操作,同步→定义通信双方的时序关系。帧的’类型‘字段、IP数据报的‘协议字段’,TCP报文段或UDP用户数据段的“端口号”字段都是SAP。

2024-08-04 21:49:23 418 1

原创 Goland 通道

channel本质是一个数据结构-队列【示意图】数据是先进先出线程安全,多goroutine访问时,不需要加锁,channel本身是线程安全的channel是他有类型的,一个string类型的channel只能存放string类型的数据。

2024-07-13 15:08:11 425

原创 计网(1.1~1.4)

网络:由若干结点和连接这些结点的链路组成互联网:多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,也可 被称为“网络中的网络因特网是世界上最大的互连网络计算机网络的精确定义并未统一计算机网络的简单定义:一些互相连接的、自治的计算机的集合互连是指计算机之间可以通过有线或无线的方式进行数据通信自治是指独立的计算机,它有自己的硬件和软件,可以单独运行使用集合是指至少需要两台计算机。

2024-07-12 21:34:52 634

原创 go mod相关知识点

在 Go Module出现之前,Go语言的依赖管理方面已经推出了GOPATH和vendor,它的出现解决了GOPATH无法让多个项目共享同一个package的不同版本和vendor无法很好的管理依赖的package等问题。这种分离的设计使得go.mod文件可以灵活地修改和更新以来信息,而go.sum文件则保证了每次构建时使用的确切依赖版本和安全性。go.sum则是自动生成的文件,记录了具体版本和哈希值,以保证构建时的版本一致性和安全性。go mod 是Go语言的依赖管理工具,很大程度上简化了依赖的管理。

2024-06-24 00:17:12 189

原创 切片与底层数组的关系

diySlice3与diySlice共享同一个底层数组,而且即使切片的长度小于其容量,仍然可以访问底层数组中超出切片长度范围的元素,此时底层数组的元素为8和1,所以diySlice[0:2]的结果为8和1。diySlice的容量在make时已经定义为2,长度为切片中元素的个数即为1。另外开辟一个新的底层数组,将diySlice2的元素迁移过去,此时diySlice2和diySlice不再共享同一个底层数组,修改diySlice2中的值不会影响diySlice的值。

2024-06-02 18:04:28 367

原创 Golang----切片

最后,切片的引用会指向新的底层数组,原数组会被垃圾回收。当切片是截取已定义数组而定义时,切片是数组的一个引用,修改切片的值会直接修改数组的值。当直接通过make定义切片或直接声明切片时,切片的底层数组对程序员是不可见的,只能通过切片操作底层数组。总的来说,Go的设计者不断优化切片扩容的机制,其目的只有一个:就是控制让小的切片容量增长速度快一点,减少内存分配次数,而让大切片容量增长率小一点,更好地节省内存。Go 中切片的扩容机制是基于动态数组的,这意味着切片的底层数组会动态调整大小以适应元素的增加。

2024-06-02 16:55:30 902 1

原创 go build -o 文件名.exe 时出现找不到包的情况解决办法

在go语言下载之后,一般就去配置GOROOT和GOPATH,但是此时黑窗口运行第一个helloworld时往往会报错,经过搜索我发现是因为go.mod跟GOUROOT和GOPATH发生冲突,然后就把go.mod删除了。但是在黑窗口运行需要导入第三方库的代码时就会报错,显示找不到文件路径。就是删除GOROOT和GOPATH(确保删除干净),然后在需要go build的文件路径下 使用如下命令。打开GoModule,然后就可以成功运行go build -o 文件名.exe。

2024-05-09 15:48:56 579 1

原创 并发安全的sync.Map

1.sync.Map是线程安全的,读取,插入,删除也都保持着常数级的时间复杂度。2.通过读写分离,降低锁时间来提高效率,适用于读多写少的场景。3.Range 操作需要提供一个函数,参数 是 k,v ,返回值是一个布尔值:f func(key,value interface{}) bool。

2024-05-08 18:13:10 1334 1

原创 Golang有关Map知识点

哈希冲突是指不同的值通过哈希计算被分到相同的bucket例:解决哈希冲突的方法:Golang的map采用链地址来解决这个问题,即在同一个位置存储一个键值对链表。当发生冲突时,新的键值对会被添加到这个链表的末尾。产生冲突往往跟关键字的比较次数密切相关,产生的冲突少查找的效率就高。

2024-05-07 10:21:11 387 1

原创 VirtualBox光盘莫名消失,出现一个...GB卷下载的东西全出现在了那里解决办法

打开虚拟电脑出现了这个界面,然后之前安装的hadoop和java所在的文件目录全都不见了,光盘也不见了,试着搜了一下光盘莫名其妙不见,找到了一篇试了下,之前的虚拟电脑又回来了!------来源于一篇解决下载安装光盘后打开虚拟电脑光盘没出现解决办法的帖子。

2024-04-09 15:21:57 623 1

原创 洛谷P8772求和(Java)

记Sn为全部前n项和,这道题通过对式子变换可以得到S=(Sn-an)*an+(Sn-1-an-1)*an-1+.....+(S2-a2)*a2。举例:1 3 6 9。

2024-03-20 16:52:11 361 1

原创 198.打家劫舍Java版

通过循环使新数组的第三个元素即以后的元素都等于原有数组隔一个数相加和中间数的最大值。设新数组名字为ex,即ex[i]=Math.max(ex[i-2]+nums[i-1],ex[i-1]).其中由于新数组要比原有数组多一个长度,所以ex中下标为i的数值对应应该加nums数组中下标为i-1的数值。刚开始一点思路都没有就去找了视频和题解,然后大致看了一眼开始自己写,首先要先把数组为空,数值是0的情况和长度为1的情况挑出来,然后在写的过程中我发现长度为2的数组情况也很特殊,因此先把这些特殊情况挑出来。

2024-02-18 21:39:55 381 1

原创 移动零元素

定义一个j=0,然后一个循环遍历判断当前元素是否为0,然后使每个非零元进入nums[j++]的位置,此时经过循环新的nums数组权威非零元素,按照原来nums数组的长度在现在nums数组末位添0。题目描述:给定一个数组,把里面的零元素移动到数组的末位,同时保证非零元素的相对位置。一层循环查找每个元素是否为0,二层循环把0元素往后移动到数组末位。二:根据零元素个数在末位添零。

2024-01-23 18:01:24 417

原创 双指针字符串1768

1.获取两个字符串的长度,然后采用一个循环,条件是循环变量小于word1和word2的长度,两个if语句根据先后顺序执行当i>word1的长度时不执行第一个if语句!开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。题目描述:给你两个字符串。

2024-01-21 15:03:30 402 2

原创 P1909 [NOIP2016 普及组] 买铅笔Java

根据题目描述,可以把三种铅笔的价格存入一个长度为3的一维数组中,通过循环将不同种类的铅笔的个数及价格输入,再把P老师买这种铅笔所需钱数存入数组中,然后使用数组排序(默认为升序)进行排序,输出下标为-1的值即为所需最少花费钱数。

2023-12-10 16:38:05 179 1

原创 maven新建Java类报错Error occurred during initialization of boot layer

在这个地方添加--module-path "D:\jdk\FX\javafx-sdk-21\lib" --add-modules javafx.controls,javafx.fxml,刚开始新建类也是报这种错但是没有记录,在连接数据库的时候又出现了这个错误,声明一下我并不知道这个错误只是记录一个解决办法。刚才又实验发现,不添加程序实参只把VM那个选项取消也是可以成功运行的!上面显示找不到放置Java模块依赖,把这个选项取消点击确定页面发生变化。

2023-10-19 11:18:45 299

原创 JavaFX通过按钮点击在一个舞台上切换不同场景

JavaFX项目在刚开始创建时有两个类,一个是HelloApplication另一个是HelloController其中HelloApplication用于写各种方法并绑定不同的FXML文件,HelloController控制类处理用于控制FXML文件中的UI元素和处理逻辑。本文使用图书管理系统部分代码去展示不同。

2023-10-11 09:20:24 619 1

原创 MySQL约束

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREING KEY (外键字段名) REFERENCES 主表(主表列名);[CONSTRAINT][外键名称] FOREING KEY (外键字段名) REFERENCES 主表(主表列名)约束时作用于表中字段上的,可以在创建表/修改表的时候添加约束。概念:外键用来让两张表的数据之间进行连接,从而保证数据的一致性和完整性。概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。用于对输入的数据进行限制,以满足对数据的要求。

2023-10-01 09:15:39 62 1

原创 MySQL多表查询

关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。联合查询-union,union all:把多次查询的结果合并起来,形成一个新的查询结果集。子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询。子查询:SQL语句嵌套SELECT语句,称为嵌套查询,又称子查询。自连接查询,可以是内连接查询,也可以是外连接查询。子查询返回的结果是一列(可以是多行),这种子查询成为列子查询。

2023-09-23 15:57:17 51 1

原创 黑马程序员MySQL的DDL,DML,DQL,DCL笔记

INSERT INTO 表名 VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);INSERT INTO(字段1,字段2,...)VALUES(值1,值2,...),(值1,值2,...);UPDATE 表名 SET 字段1 = 值1,字段2 = 值2,...[WHERE 条件];注意:DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。INSERT INTO 表名(字段1,字段2...)VALUES(值1,值2,..);

2023-09-13 22:01:38 108

原创 HTML,CSS导航栏+过渡动画以及在使用同一类名情况下过渡到不同高度

导航栏使用,标签导航栏的内容装在一个盒子里,使用标签,在CSS中给标签添加posation:relative,给装导航栏内容的盒子添加posation:absolute;然后让div隐藏(隐藏有四种方式:display:none;完成整个架构之后,在鼠标覆盖标签时使下方的visibility:hidden变为visibility:visible。max-height是不同长度盒子中最大长度,此时就可以实现导航栏的下拉框可以正好适应自身内容的长度。

2023-09-08 10:16:30 332 1

原创 用html+css实现小米官网(详细代码)

观察小米官网的布局,首先他有两行导航栏,第一行导航栏相对简单,但是注意下载APP处有一个下拉设计,第二栏在logo和导航栏空白处是有一个下拉列表的,直接覆盖在轮播图上,然后轮播图下简单来看就是四个小盒子其中三个样式相同,然后就是区域展示,样式基本雷同,只需写好一个。首先是轮播图,轮播图左边还有菜单栏,滑动门样式(这个我写在了导航栏logo和菜单栏空白处作为它的下拉菜单)然后是下方的四个小盒子。一个大盒子分为上下,下边的盒子又分为左右两部分。广告处,只需一个图片。分为三部分,logo,菜单栏,搜索框。

2023-08-10 17:21:12 2568 7

仿制小米商城网页制作的

仿制小米商城网页制作的

2023-12-01

空空如也

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

TA关注的人

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