自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Cookie-Session-Token-JWT/系统设计

Cookie是服务器发送到客户端(通常是浏览器)并存储在本地的小块数据。它就像是服务器给用户的一张“便签”,用于记录一些信息,并在后续请求中由浏览器自动携带。Session(会话)是服务器端用来跟踪用户状态的一种机制。可以将其想象为服务器为每个用户创建的一个“临时档案”,记录用户的活动信息。Token是一种加密的字符串,通常由服务器生成并交给客户端,用于身份验证。是最常见的 token 类型。

2025-03-15 14:12:06 1018

原创 跨源资源共享机制/安全机制

跨域是指浏览器在执行脚本时,从一个源(由协议、域名、端口组成)尝试访问另一个不同源的资源。由于浏览器的同源策略(Same-Origin Policy),这种跨源请求会被默认阻止,以保护用户免受恶意网站攻击。同源的定义:只有当协议、域名和端口完全一致时,才算同源。示例和不同源(协议不同)。和不同源(域名不同)。适用场景:需要更灵活的控制逻辑。代码示例@Component@Override说明:通过拦截请求手动设置 CORS 头,适合复杂场景。跨域问题。

2025-03-03 15:46:55 524

原创 Golang快速上手02/Golang基础

谈及 defer 原理,defer 语句将延迟操作压栈,压栈数据包括:函数名、函数参数(临时)地址。后面的所有怪用都基于这一原理,defer 语句可以修改和访问本该已卸载的内存。defer 压栈后实际对地址又进行了一次引用,因此 Golang 的垃圾回收机制(GC)实际没有卸载这些内存。语句的对象是一个函数,将函数作为一个新的线程运行。defer语句将操作压栈,在结束时逆序执行。defer语句用于操作延迟到函数结束执行。continue:跳转到下一个循环。,可以简单认为是一个线程或协程。

2025-02-28 21:31:36 903

原创 Golang快速上手01/Golang基础

code// 定义切片var slice []int // 注意:[3]int / [...]int 都是数组不是切片var b = make([]int, 5) // slice,map,channel,第一个参数为类型,第二个参数为长度,第三个参数为容量和数组类似,只是数组里不要写数字slice是对数据的引用,而非拷贝切片是一种数据类型也是一种操作// 切片操作append和copy都是对数据的拷贝,也叫深拷贝。

2025-02-27 22:06:24 1057

原创 pandas概念复习/python-pandas

可能返回临时对象,赋值目标不确定。:引用原始数据,修改会影响原对象。可能修改副本而非原数据,触发。:独立对象,修改不影响原数据。,更明确且未来兼容性更好。

2025-02-24 20:18:39 867

原创 手撕跳表/数据结构

昨天leetcode每日一题是跳表,之前学redis就没去写跳表,这次就逃不过了。这里使用了len数组,来表示每个数字之间的间隔,方便复杂的查询功能。

2025-02-24 15:41:44 381

原创 Redis中的主从/Redis八股

replication buffer是直接传输给slave的缓存,是只有多个的,详情可以在增量同步中理解(这里和黑马的不一样,比黑马的详细)通过内存产生快照,并在子进程生成RDB的时候,主进程把新的指令写入repl_baklog中,后续发送给slave,方便同步最新数据。限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构,减少master压力。,它用于实时传输写命令,且大小是动态的,因为对于同步速度较慢的从服务器,需要更多的内存来缓存数据。

2025-01-07 21:24:34 1217 1

原创 Redis中的Red Lock/Redis锁

time2 - time1 是否 < TTL | ±------------------------------+| 获取当前时间 time2,计算 | | 向所有实例发起释放锁的请求,清理锁状态 |如果超出指定时间(如 5 秒)未能完全解锁,锁依赖 TTL 自动过期。** 快速解锁**:立即发送解锁请求,对失败的节点启动。如果卡死的节点恢复,异步重试或状态检测会自动清理锁信息。:定期检查锁状态,确保所有节点上的锁都被清理。思考:解锁失败,是否要一直请求?

2025-01-06 12:24:07 1294

原创 Redis的优势/Redis八股01

是 Redis 高性能的核心设计之一。互斥锁实现示例(Java)

2025-01-06 12:22:17 901

原创 图论基础算法/DFS+BFS+Trie树

还需要加一个遍历来表明是不是最后一个字母,比如apple是一个单词,在字典树,是一个数组,其中有一条这样的指向a->p->p->l->e是这样,我需要直到遍历到e这个数组直到是有一个单词的结尾,那么就加一个变量表明这里可以是一个结尾。去遍历腐烂橘子的位置,先污染周围的新鲜橘子,然后删除旧的污染橘子,因为周围的被污染过了,把新的污染橘子加进去,就是二次污染了。如果从新鲜橘子走的话,肯定是遍历腐烂橘子的位置,这个时候如果很远的地方才有腐烂橘子,那么要隔很久才能污染,这里会有更加复杂的逻辑计算,所以不采用。

2024-12-22 20:53:13 1016

原创 详解快排+归并排序+堆排序 附源码

选择基准元素在快速排序中,选择一个基准元素(pivot)。常见的做法是选取最右边的元素()作为基准。分区过程快速排序通过分区操作将数组分为两部分:一部分包含所有小于基准元素的值,另一部分包含所有大于基准元素的值。在此过程中,两个指针 l和r会在数组的两端移动:l从左边开始,寻找第一个大于基准元素的元素。r从右边开始,寻找第一个小于基准元素的元素。如果l小于r,则交换这两个元素,直到l和r相遇。基准元素交换在l和r相遇后,基准元素会交换到l或r。

2024-12-21 16:19:56 705

原创 08贪心算法/代码随想录

一样的思路,也都是先排序,这里是按照数组中第一个元素的大小排序,后面根据数组第二个元素是否大于第二个数组的第一个元素来进行循环迭代计算的。按照数组第二个元素大小排列,选取第一个元素的大小为一个衡量点,小于它的都可以被引爆。有人会问,合并完后,不更新为原来的第二个元素吗,其实仔细想想就知道了,因为合并了,相当于是之前数组的结合体,肯定是包括之前的元素的,所以不会对后面结果有影响,相当于直接改变了之前的数组。注意,数组都是先被筛入结果集然后更改,因为变量存的是数组的引用,是地址,改变值,对应的地址上的值改变。

2024-11-28 22:05:59 653

原创 08贪心算法/代码随想录

直接抽象的去想这题,会比较难写,我们比作为实际问题,没跳跃一次就相当于建一条桥,问建最少建多少个桥到目的地。先来一个旧桥的图纸,(有了图纸,就一定会建,所以先res=1),然后就是确定新桥的图纸在哪,等到旧桥所有可能的地方都观察过了,确定合适的旧桥,旧桥就可以建完毕了。这里的,我们到达了最后一个元素,就不需要建桥了,如果正好跳跃的元素最大值就是最后一个元素,就会导致再在原地建一次桥,使结果大于1。其实很简单,画一个图。很简单,只要搞清楚逻辑,局部最优就是,给10找5,给20,有10找10,没10找5。

2024-11-27 22:08:16 727

原创 08贪心算法/代码随想录

第一眼看到的想到的写法排序+双指针。先对两个数组排序遍历食物数组(遍历的迭代遍历也可以当成指针),然后依次满足小孩数组(通过一个指针),如果大于等于小孩数组对应元素的值就位移小孩数组那个指针。再维护一个count变量来记录大小。其实很简单,画一个图。如果出现不连续的摆动序列,直接取索引为i-1作为摆动序列的值就可以,这个可以画图理解下。这个时候灵神的写法,小孩数组的指针位移量起始就是count值,直接返回即可。这种情况,只有取最新的i-1才为最优解。一般解题步骤,代码随想录。摆动序列(力扣376)

2024-11-26 20:07:35 921

原创 07回溯算法/代码随想录

如果我加上判断,符合的就一直递归下去,最后直接返回答案,也就是我刚刚说的逻辑,不行的话,就false再回到一开始分岔的地方。(前面的题目不需要是因为最后返回的结果不是在同一个数据结构上修改,而是新建的互不影响,当然这不是本题的关键,关键还是回溯思想,这只是题目的一个小tips)与全排列的区别是,因为有重复,所以我另外一个1就不能使用。所以单层循环的结构是一致的,只是具体的判断满足条件的方法以及数据的维度不一样(这里是二位递归,需要对每一个元素进行判断和递归,而n皇后由于行上也有限制,所以只需要一位递归)。

2024-11-26 20:03:49 932

原创 07回溯/代码随想录

组合总和(力扣39)如图:构建树形结构,只准每一层的最左边的分支来重复使用上一层父节点的值。在横向来看,其它子分支不允许,并逐渐减少元素(每次减少左边分支可以重复的元素),最后得出完整的一层。在垂直方向还是与这一层同理,下一层最左边可以重复用父节点的值,然后逐渐构建水平方向的分支。一定要保证分支逐渐减少左边分支可以重复的元素,这样才能保证结果集不会出现重复的内容。组合总和(力扣40)

2024-11-25 20:13:41 719

原创 个人网站,欢迎大家参观

我以后会讲更多的文章放到自己的个人博客上,大家可以持续关注,csdn也会部分发放的,大家可以关注下的网站,也欢迎大家到github上提交友链,成为我的好友,要是有什么不清楚的,可以在github上提issue或者直接评论私信我www.khaoden.ltd

2024-11-24 20:24:46 232

原创 07回溯/代码随想录

这个时候再压入栈,发现终止条件,满足直接return,也验证了这句话”递归终止一般都是不是立即终止,而是到下一层递归终止“。思路是按照模板,先确定参数返回值,由于是组合,我需要知道几个数组合在一起,以及一个多少数,所以w和h的目的明确,而startIndex就代表从哪里开始遍历,这里是模仿n叉树按照性质计算,一般不需要返回值,直接插入结果即可。先确定参数,要知道目标值,其实也可以定义全局变量,因为一直不变,再定义一个k也就是几个元素,也是树的深度,h、sum其实也可以定义为全局变量,和目标值同理。

2024-11-24 20:17:42 899

原创 二叉树遍历/算法&数据结构

其实很简单,根据遍历的顺序摆放遍历顺序和添加元素的顺序,(root.left, result)代表左子树,(root.right, result)代表右子树,(root.val)代表中节点。其实很简单,参数就是要目前遍历节点在哪,返回值也同理,终止条件就是指遍历到null的时候回溯,逻辑不要想复杂,根据顺序移动上述上个递归函数即可。前序(要理解遍历的核心,先把中节点塞入,然后根据栈去模拟,先加入右节点然后是左节点,移动到左节点继续加入)后序(就是前序遍历的左右调换顺序,然后再倒叙结果数组)

2024-11-10 20:50:04 962 1

原创 05栈和队列/代码随想录

比如12323 k为3 此时滑动区间为312(大顶堆是完全二叉树,所以这里12不会变化顺序,但是这里也不重要,因为最大的元素一定在最前面,那么后面的元素就不会有影响,只要最大的不在滑动区间内就一定会被删除,这几个方法就保证了不会出问题),最大为3再往下3221(至于为什么是321,这是堆的性质,不清楚的话,我可以下期出一篇文章讲),最大还是3。这种只涉及一个方向的删除增加很适合用栈,所以只要遍历tokens,碰到数字就放入栈,然后碰到运算符就计算,记得把结果放入栈。删除字符串中所有重复相邻重复项。

2024-11-08 17:21:34 1344

原创 Java8新特性/java

区别于js的箭头函数,python、cpp的lambda表达式,java8的lambda是一个匿名函数,java8运行把函数作为参数传递进方法中。这给代码的维护和扩展带来了很大的问题,尤其当你有很多实现类时,修改接口将变得代价非常高昂。不难发现这些匿名内部类只重写了接口的一个方法,当然也只有一个方法要重写。一旦接口需要修改或增加方法,实现该接口的所有类都需要进行改动**。修饰的方法,使用上和一般的类静态方法一样。这些方法是可遇不可求的,一般都是重构写出来的代码。修饰的方法,是普通的实例方法,可以用。

2024-11-07 22:06:15 992

原创 Java-SE-面向对象/java

今天上午复习了一下java面向对象部分,作下记录,下午复习java8的内容,也会发一篇博客。晚上还会继续发昨天没发的栈和队列的题解,以及树的相关知识Java 是一门面向对象的编程语言,核心思想是将现实世界的事物抽象为程序中的对象,通过封装、继承、多态等特性,实现代码的重用和扩展。本章将详细介绍 Java 面向对象编程的各个知识点。定义类:创建对象:4.1.3 注意事项访问控制:成员变量通常使用 修饰,提供 的 Getter 和 Setter 方法,符合封装原则。构造方法:用于初始化对象

2024-11-07 15:46:43 1142

原创 04字符串算法/代码随想录

kmp算法的kmp是三位大佬的名字,其实就是一个结论,最长相同前缀后缀的值对应每一个模板串,但匹配到对用模板串一个字符的时候出现错误,根据这字符的前一个字符的最长相同前缀后缀值,把匹配的值跳转到对应的索引(就是前一个字符的最长相同前缀后缀值),这样就减少了重复匹配。不要被两个条件个唬掉了,其实一个循环就能搞定,本质上就是剩下的数组不满2k个,那么就前面一半反转,唯一区别的就算可能不满一半,这里需要注意,获取的是数组的长度,而想改变数组的内容需要通过下标获取,所以记得下标和个数的转换。

2024-11-04 22:09:10 1096

原创 03哈希表算法/代码随想录

同理双指针法,先排序,a不能重复,重复得到的值也是一样的,所以去重a不能重复,然后开始遍历b就算a的索引+1,这个时候用到两数之和的思想,先抛开,三数之和,这里就是两数之和,我先得到需要的target,就是-a,然后知道b了,target为-a-b,这个时候构建哈希表,没有就存,有就返回。看到简单题,我就上了啊,可这,是简单吗,苦命的我啊。可以构建两个哈希表,再找值,但这不上繁琐了吗,用到上一题思想,边构建边查,哎,可以再优化,不用构建,直接查,这就形参了上面的写法,写法没有什么难点。

2024-11-03 19:36:16 1236

原创 Java-SE-泛型编程-总结/java

泛型是Java提供的一种模板机制,允许我们编写可以处理任意类型的代码。类型安全:泛型通过编译器进行类型检查,避免了强制转换的错误。继承关系:可以向上转型为接口类型,但不能变更类型参数的实际类型。通过使用泛型,我们可以编写更安全、更灵活的代码,而无需为每种类型重复实现类。这是泛型在Java中的核心价值。在Java中,如果使用ArrayList而不指定泛型类型,泛型实际上被视为Object// 强制转型这种情况下,只能把泛型当作Object使用,失去了泛型的优势。

2024-11-01 10:57:52 1060

原创 02链表算法/代码随想录

双指针写法,慢指针每次走一步,快指针每次走两步,如果有环,那么一定会相遇,因为当慢指针到环的时候,快制作一定到了,这个时候相当于快指针追慢指针,每次挪一步,一定会追到。交换节点需要三步,slow指向fast.next,fast指向slow,temp指向temp,这个时候交换好了,但是需要跳转然后继续交换,这里体现了虚拟头节点的好处,跳转后交换,fast要与前一个交换后的slow相连接,这里就可以通过虚拟头节点代替。此题递归需要传递的点就是反转后的头节点,此解法采用先返回反转后头节点再翻转。

2024-10-27 21:46:16 770

原创 设计模式引入/设计模式

可以在访问服务前后添加额外的处理逻辑(如日志、权限检查等)对客户端透明,客户端使用代理就像使用实际服务一样。重构代码时,但不能改动之前代码。是旧的咖啡制作接口,有。将对象的创建与使用分离。实现对象创建的统一接口。方便添加新的对象类型。

2024-10-23 13:38:27 881

原创 C++在vscode中的code runner配置/环境配置

vscode配置C++文件的debug需要单独设置launch.json,因为我设置的是只作用于当前项目所以步骤三的第三步要选择(gdb)lauch,如果大家想设置vscode全局的,在这里选择创建launch.json即可。这里配置只作用与当前项目中,其它项目中是失效的,这样起到了项目与项目之间隔绝,我认为类似于python中的虚拟环境,但还是有些许差别(诸如依赖方面)。记得修改code runner,code runner默认cpp配置在运行文件引用另一个文件会出问题,就比如课上的例子。

2024-10-14 18:59:40 5201

原创 01数组算法/代码随想录

拿与力扣59举例,那题是一个正方形,所以只会出现一种特殊情况就是层数为奇数的时候,需要手动添加垂直水平中间数组中的值,而这里行列是不一样的,所以终止的情况有多种,上下左右都有可能,所以直接在while循环中添加判断是比较复杂的。滑动窗口一层循环则可直接计算,尾指针先移动,满足条件时,尾指针不动,头指针+1,再判断,如果通过,则更新result。这种模拟的方法效率更高,大家在写模拟的时候,可以先将思路列举好,起始条件、终止条件、遍历写法,然后再一步一步优化。上述写法是比较快的,有些地方是较优解的。

2024-10-11 10:26:15 1303

原创 JavaSE-泛型编程-通配符/Java

作用:提供一种灵活的方式来处理未知类型的列表,同时保持类型安全。注意点:读取元素: 你可以从中读取元素,但返回的元素类型为,需要进行类型转换。添加元素: 你不能向添加元素(除了),因为编译器无法确定具体类型。类型安全: 由于编译时类型检查,使用可以避免许多常见的类型错误。用于声明引用的,不能是右值实现:上届通配符定义: 表示该列表可以是类型或的任何子类的列表。用途: 适用于只读取的场景,因为你只能安全地从中读取元素,无法添加元素(除了)。下届通配符定义: 表示该列表可以是类型或的

2024-09-28 22:09:51 962

原创 WSL2/windows

windows专业版可以通过“设置>>系统>>可选功能>>更多windows功能”,勾选。查看这一行,auto就是启动,off就是关闭。与上一条一样,在更多windows功能打开。检查hyper-v是否启动。

2024-09-26 13:05:44 408

原创 makefile和CMakeLists/C++包管理器

大家可能会很奇怪,都什么年代了,还学makefile,cmake都有些过时了,为什么还要再学这个呢?我是这么看待这个问题的,cmake跨平台性还是很有有优势的,有着多年积累的底蕴,借助大模型可以很好的利用这个工具。而cmake的原理就是自动生成makefile,所以还是很值得学习makefile,了解历史的。makefile和CMakeLists。

2024-09-25 16:39:31 1223

原创 java大纲/每日思考

这份学习清单覆盖了 Java 后端开发从基础到高级的知识点,建议逐步学习并实践,以提高开发技能。

2024-09-25 10:33:56 855

原创 maven基础/java包管理器

右边maven中的Profiles(比如不同java版本)是setting.json中配置的,如果配置多个就会有多个,但是一般的Spring项目没有的,因为在生成项目的时候,我们会指定很多参数,并不是单纯的maven项目,是在pom.xml中配置的,当然也可以实现在pom.xml中配置实现不同版本的切换。当一个模块使用了其它两个模块的jar包,每个jar包都有spring-jdbc,但版本不一样,这个时候,maven有自动的调节方案,可以看到child-test3这个模块的jdbc黑了。

2024-09-23 20:23:31 2776

原创 Vercel部署/前端部署

在项目页面,点击"Settings" > “Domains”点击"Add Domain"输入你的域名,按指示添加DNS记录Vercel会自动配置SSL证书。

2024-09-21 15:28:16 1683

原创 Git补充/Git

每个开发者的本地仓库都是完整的代码库副本,包括项目的完整历史记录。:每次提交都会创建一个新的快照,记录文件在该提交时的完整状态。指向的最新提交的状态。虽然工作区的内容不会被改变,缓存区的内容会恢复到指定提交的状态。:通过将缓存区恢复到指定提交的快照来撤销暂存区的内容。模式的,可以强制禁用,这样merge的时候会生成一个新的commit。:撤回暂存区的内容,将文件从缓存区(暂存区)移除,但不影响工作区。指针到指定的提交位置,保留更改在暂存区和工作区中,:撤销工作区的修改,将文件恢复到当前分支的最新提交(

2024-09-16 22:12:54 1161

原创 C++智能指针(2)/C++新特性

make函数比起直接调用new操作符,减少了源代码的重复,保证了异常安全,并且std::make_shared和std::allocate_shared还能生成更小更快的代码不能使用make函数的情形:要自定义deleter;希望使用大括号{}来初始化对象自身重载了new和delete操作符的类系统有内存隐患,分配的对象特别大,并且有指向此对象的std::weak_ptr实例存活时间远远长于对象的最后一个std::shared_ptr笔者水平有限,有问题可以和我交流。

2024-09-15 15:30:59 1182

原创 C++智能指针/C++新特性

多个裸指针指向同一块内存地址,即使被delete了,也有可能导致改内存空间不再被使用,从而引发内存泄漏。可以使用共享指针,当该地址的引用计数缩减为0的时候,就会重载该块地址见unique_ptr的deleterreturn;fclose(fp);可以不delete内存,而关闭文件。f为共享指针的别名,可以通过这样的操作使得b指针可以访问f指针的属性,注意b和f都必须是共享指针可以使用lamda表达式、普通函数、任意函数。

2024-09-14 22:04:32 2389

原创 Vue-Router/Vue组件

别名定义别名是使用alias属性,也可以是数组进行路由的跳转id=100&title=test">查询字符串传参</router-link><router-link to="/user/007/name/ha9">路径传参</router-link><router-link :to="{path: '/content', $query:{id:100, title:test}}">动态传参--查询字符串传参</router-link>

2024-09-12 19:23:12 1333

原创 Git项目常用命令/Git

查看是否配置用户名和邮箱配置邮箱和用户名检查是否生成ssh文件夹。

2024-09-12 10:00:31 418

空空如也

空空如也

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

TA关注的人

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