- 博客(53)
- 收藏
- 关注
原创 微服务智慧交通管理平台 - 项目实现(结合Qoder搭建)
智慧交通管理平台是基于Spring Cloud微服务架构开发的综合性交通管理系统,包含用户认证、交通监控和应急指挥三大核心功能模块。
2025-12-26 17:52:43
734
原创 综合交通运行协调与应急指挥平台项目说明
基于 Spring Boot 3 + Spring Cloud + Vue3 的微服务架构交通运行监测与应急指挥平台。
2025-12-26 17:24:05
557
原创 学习笔记整理(部分)
技术要点摘要 对象创建与存储 new操作流程:分配堆内存→调用构造函数→返回对象引用 对象存储:实例在堆区,引用在栈区 Spring创建方式:构造器/工厂方法/XML配置/注解自动装配 性能排查 CPU 100%排查:定位高负载进程→分析线程堆栈→优化问题代码 慢查询优化:检查执行计划→优化索引/SQL→分析服务器资源 缓存与安全 Redis签到设计:使用Bitmap存储,key格式sign:user_id:年月 JWT签名:验证令牌真实性,防篡改 数据结构与测试 ArrayList vs LinkedLi
2025-12-09 11:08:57
544
2
原创 敲easy!!!如何完成项目接口~跟着接口文档来All in(Swagger,Apifox)
*** 消息状态码*//*** 消息内容*//*** 数据对象*/状态码1XX 信息。表⽰临时响应并需要请求者继续执⾏操作2XX 成功。操作被成功接收并处理3xx 重定向。客户端必须执⾏⼀些其他操作才能完成其请求。4xx 客户端错误。请求包含语法错误或无法完成请求5xx 服务器错误。这些错误可能是服务器本⾝的错误,⽽不是请求出错另外在实际的开发中,我们也可以@Getter/** 定义状态码 */SUCCESS (1000, "操作成功"),
2025-09-23 15:42:40
1159
原创 前缀和 后缀和 --- 寻找数组的中心下标
给你一个整数数组 nums ,请计算数组的 中心下标。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1。
2025-04-29 19:50:56
279
原创 前缀和 --- 二维前缀和
如果我们能处理出来从 [0, 0] 位置到 [i, j] 位置这⽚区域内所有元素的累加和,就可以在 O(1) 的时间内,搞定矩阵内任意区域内所有元素的累加和。递推⽅程是:sum[i][j]=sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1]+matrix[i - 1][j - 1]请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和,接下来q行,每行4个整数x1, y1, x2, y2,分别代表这次查询的参数。
2025-04-29 19:31:03
551
原创 二分查找 --- 在排序数组中查找元素的第⼀个和最后⼀个位置
◦ 当 mid 落在 [resLeft, right] 的区间的时候,也就是 arr[mid] >= target。说明[mid + 1, right] (因为 mid 可能是最终结果,不能舍去)是可以舍去的,此时更新 right 到 mid 的位置,继续在 [left, mid] 上寻找左边界;说明 [left, mid] 都是可以舍去的,此时更新 left 到 mid + 1 的位置,继续在[mid + 1, right] 上寻找左边界;
2025-04-24 21:16:33
218
原创 MyBatis操作数据库---从入门到理解
请求流程如下:浏览器发起请求,先请求Controller,Controller接收到请求之后,调⽤Service进⾏业务逻辑处理,Service再调⽤Dao,但是之前为了简单,我们Dao层的数据是Mock(虚假的、自己编造的)的,真实的数据应该从数据库中读取。我们不但要拼接每⼀个参数,⽽且还要按照模板代码的⽅式,⼀步步的操作数据库,并且在每次操作完,还要⼿动关闭连接等~⽽所有的这些操作步骤都需要在每个⽅法中重复书写。在Mybatis当中我们可以借助⽇志,查看sql语句的执⾏、执⾏传递的参数以及执⾏结果。
2025-04-24 21:01:59
980
原创 网页版五子棋项目的问题处理
• 在addHandler 之后,再加上⼀个.addInterceptors(newHttpSessionHandshakeInterceptor()) 代码,这样可以把之前登录过程中往HttpSession中存放的数据(主要是User对象),到WebSocket的session中.⽅便后⾯的代码中获取到当前用户信息。由于handlerMatch 在单独的线程中调⽤.因此要考虑到访问队列的线程安全问题.需要加上锁。• 在玩家连接好的过程中,随时可以通过userId来查询到对应的会话,以便向客户端返回数据。
2025-03-30 21:24:24
330
原创 项目---网页版五子棋
WebSocket是从HTML5开始⽀持的⼀种⽹⻚端和服务端保持⻓连接的消息推送机制理解消息推送:传统的web程序,都是属于"⼀问⼀答"的形式.客户端给服务器发送了⼀个 HTTP 请求, 服务器给客户端返回⼀个HTTP响应.这种情况下,服务器是属于被动的⼀⽅.如果客户端不主动发起请求,服务器就⽆法主动给客户端响应.
2025-03-30 15:55:12
1186
1
原创 追溯初心:记录、分享与交流的动力之源
而当我们回顾自己的历程,追溯最初的初心时,或许会发现,真正的成就感并非来自于获得了多少赞赏和认可,而是来自于通过自己的努力,带来了价值,做出了贡献。这份初心,将继续激励着我们,在创作分享的道路上不断前行。而每一个创作者的背后,都隐藏着一份独特的初心,它如同一颗种子,驱动着他们不断耕耘,最终开花结果。学习是一个持续不断的过程,在这个过程中,我们会阅读大量的书籍、文档、博客文章,观看各种各样的视频教程。日常学习过程中的记录和分享,是一种自我提升和共同进步的有效途径,它能够将个人的学习成果转化为集体的智慧财富。
2025-03-28 21:22:00
458
原创 滑动窗⼝(同向双指针)--- ⽔果成篮
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
2025-03-12 21:17:54
288
原创 滑动窗⼝(同向双指针)---将x减到0的最⼩操作数
给你一个整数数组 nums 和一个整数 x。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。如果可以将 x 恰好 减到 0 ,返回 最小操作数;否则,返回 -1。示例 1:输入:nums = [1,1,4,2,3], x = 5输出:2解释:最佳解决方案是移除后两个元素,将 x 减到 0。示例 2:输入:nums = [5,6,7,8,9], x = 4输出:-1。
2025-03-11 19:24:34
346
原创 滑动窗⼝(同向双指针)---最⼤连续1的个数III
给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数。示例 1:输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1]最长的子数组长度为 6。示例 2:输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3输出:10。
2025-03-11 18:30:16
590
原创 滑动窗⼝(同向双指针)---⽆重复字符的最⻓⼦串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
2025-03-10 15:04:23
165
原创 滑动窗⼝(同向双指针)---⻓度最⼩的⼦数组
给定一个含有 n 个正整数的数组和一个正整数 target。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:1。
2025-03-10 14:03:56
380
原创 双指针---四数之和
题目链接问题分析(易忽略点)代码解决执行用时题目链接给你一个由 n 个整数组成的数组 nums ,和一个目标值 target。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):a、b、c 和 d 互不相同你可以按 任意顺序 返回答案。示例 1:输入:nums = [1,0,-1,0,-2,2], target = 0。
2025-03-05 20:12:00
380
原创 双指针---三数之和
题目链接问题分析代码解决执行用时题目链接给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= j、i!= k 且 j!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。
2025-03-05 14:07:26
398
原创 双指针---和为s的两个数字
• 对于nums[left] ⽽⾔,此时 nums[right] 相当于是 nums[left] 能碰到的最⼤值(别忘了,这⾥是升序数组哈~)。iii. 当 nums[left] + nums[right] > target 时,同理我们可以舍去nums[right] (最⼩的数都满⾜不了)。• 那对于 nums[right] ⽽⾔,由于此时两数之和是⼩于⽬标值的, nums[right] 还可以选择⽐ nums[left] ⼤的值继续努⼒达到⽬标值,因此 right 指针我们不动;
2024-12-20 22:18:32
387
原创 双指针---有效三角形的个数
题目链接 [有效三角形的个数](https://leetcode.cn/problems/valid-triangle-number/description/)问题分析代码解决执行用时。
2024-12-19 21:57:11
895
原创 双指针---盛最多水的容器
◦ 如果改变右边界,⽆论右边界移动到哪⾥,新的⽔⾯的⾼度⼀定不会超过左边界,也就是不会超过现在的⽔⾯⾼度,但是由于容器的宽度减⼩,因此容器的容积⼀定会变⼩的。当我们不断重复上述过程,每次都可以舍去⼤量不必要的枚举过程,直到 left 与right 相遇。期间产⽣的所有的容积⾥⾯的最⼤值,就是最终答案。如果改变左边界,新的⽔⾯⾼度不确定,但是⼀定不会超过右边的柱⼦⾼度,因此容器的容积可能会增⼤。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。枚举出能构成的所有容器,找出其中容积最⼤的值。
2024-12-18 21:52:37
311
原创 双指针---快乐数
题目链接 [快乐数](https://leetcode.cn/problems/happy-number/description/)问题分析代码解决执行用时。
2024-12-17 20:52:24
744
原创 双指针---复写0
题目链接 [复写0](https://leetcode.cn/problems/duplicate-zeros/description/)问题分析代码解决执行用时。
2024-12-16 21:35:35
783
原创 双指针---移动0
题目链接 [移动0](https://leetcode.cn/problems/move-zeroes/description/)问题分析代码解决。
2024-12-15 22:11:29
395
原创 SpringBoot⼊⻔、Spring Web MVC
Spring Web MVC是基于Servlet API构建的原始Web框架,包含在Spring框架中。通常被称为Spring MVCSpring MVC是⼀个实现了MVC模式的Web框架SpringBoot可以添加很多依赖,借助这些依赖实现不同的功能.SpringBoot通过添加SpringWebMVC框架,来实现web功能.
2024-11-21 21:34:49
1124
原创 ~死锁是什么,如何避免死锁
死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。
2024-10-23 13:48:43
460
原创 ~TCP是如何保证可靠传输的;~三次握手 四次挥手
数据分段:TCP将数据分割成多个段,并为每个段添加TCP头信息,这样可以在传输过程中更有效地管理和控制。序列号:每个TCP段都有一个序列号,接收方通过序列号来重组数据,确保数据按正确的顺序到达。:接收方在成功接收到一个TCP段后,会发送一个确认应答(ACK)给发送方,告知其已成功接收该段。如接收方未收到某个段,则不会发送确认,发送方会在超时后重发未确认的段。:如果发送方未收到确认应答,它会重传丢失的数据段。TCP使用超时重传机制和快速重传机制来保证数据段的可靠性。
2024-10-23 13:36:48
566
原创 ~Java多线程是如何实现数据共享的?Java创建线程池的接口是什么?参数 LinkedBlockingQueue 的作用是什么?Servlet是否是线程安全的?
BLOCKED: 使用 synchronized 的时候, 如果锁被其他线程占用, 就会阻塞等待, 从而进入该状。线程1 能够获取到锁, 并执行方法. 线程2 会阻塞等待, 直到线程1 执行完毕, 释放锁, 线程2 获取到。RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作. 调用 start 方法之后, 并正在。NEW: 安排了工作, 还未开始行动. 新创建的线程, 还没有调用 start 方法时处在这个状态.进程和进程之间不共享内存空间. 同一个进程的线程之间共享同一个内存空间.
2024-10-22 18:30:24
817
原创 多线程案例 单例模式--懒汉模式下理解双重 if 判定 / volatile(线程安全);阻塞队列--生产者消费者模型;定时器;线程池
后续的线程, 不必加锁, 直接就通过外层 if (instance == null) 就知道实例已经创建了, 从而不再尝试获取锁了. 降低了开销。加锁 / 解锁是一件开销比较高的事情. 而懒汉模式的线程不安全只是发生在首次创建实例的时候. 因此后续使用的时候, 不必再进行加锁了.定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”. 达到一个设定的时间之后, 就执行某个指定好的代码。在 Java 标准库中内置了阻塞队列. 如果我们需要在一些程序中使用阻塞队列, 直接使用标准库中的即可.
2024-10-22 18:23:52
1119
原创 多线程带来的的风险--关于线程安全;synchronized 关键字--监视器锁;volatile 关键字;wait 和notify;wait 和 sleep 的对比
如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的。
2024-09-26 20:38:06
975
原创 ~关于 CAS 机制、ABA问题、偏向锁、synchronized 实现原理、信号量、Callable
偏向锁不是真的加锁, 而只是在锁的对象头中记录一个标记(记录该锁所属的线程). 如果没有其他线程参与竞争锁, 那么就不会真正执行加锁操作, 从而降低程序开销. 一旦真的涉及到其他的线程竞争, 再取消偏向锁状态, 进入轻量级锁状态.Callable 是一个 interface . 相当于把线程封装了一个 “返回值”. 方便借助多线程的方式计算结果.Callable 和 Runnable 相对, 都是描述一个 “任务”. Callable 描述的是带有返回值的任务,
2024-09-25 21:57:57
499
原创 进程和线程的区别;线程的多种创建方式;Thread 类及常见方法;线程的状态
为了让业务更快的办理好,三个人分别负责一个事情,分别申请一个号码进行排队,自此就有了。线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对用户层提供了一些 API 供用户使。每个客户来银行办理各自的业务,但他们之间的票据肯定是不想让别人知道的,而上面我们的公司业务中虽然是。一家公司要去银行办理业务,既要进行财务转账,又要进行福利发放,还得进行缴社保。不同的执行流,但因为办理的都是一家公司的业务,所以票据是共享着的。RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.
2024-09-25 21:17:47
829
原创 Java的JDBC编程,数据库连接方式区别及Statement和PreparedStatement有什么区别
创建数据库连接Connection创建操作命令Statement使用操作命令来执行SQL// 查询操作(读)// 新增、修改、删除操作(写)处理结果集ResultSet释放资源。
2024-09-20 22:29:04
526
原创 MYSQL常用基本操作总结
SQL查询中各个关键字的执行先后顺序: from > on> join > where > group by > with > having >select > distinct > order by > limit。insert into 表(字段)values(value1),(value2);insert into 表(字段)values(value);select 字段1 别名1, 字段2 别名2 from 表;from 表1,表2 where 条件;from 表1,表1 where 条件;
2024-09-18 16:29:11
1309
1
原创 LinkedList与链表
LinkedList的官方文档LinkedList的底层是双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。
2024-04-27 19:50:03
1063
原创 ArrayList与顺序表
ArrayList是以泛型方式实现的,使用时必须要先实例化ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList。
2024-04-26 19:35:44
1346
1
原创 初步认识泛型
通俗讲就是:返回的Object数组里面,可能存放的是任何的数据类型,可能是String,可能是Person,运行的时候,直接转给Integer类型的数组,编译器认为是不安全的。这个问题,也是曾经的一个面试问题。在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。在编译的过程当中,将所有的T替换为Object这种机制,称为:擦除机制。通过命令:javap -c 查看字节码文件,所有的T都是Object。方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) {
2024-04-25 19:54:26
798
1
原创 包装类&简单认识泛型
一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。----- 《Java编程思想》对泛型的介绍。泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。
2024-04-24 20:09:22
927
1
原创 List的介绍
在集合框架中,List是一个接口,继承自Collection。List的官方文档站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作。List中提供好的方法,具体如下(常见):注意:List是个接口,并不能直接用来实例化。如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口。
2024-04-24 19:30:49
265
原创 时间和空间复杂度
算法效率分析分为两种:第一种是效率,第二种是效率。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是随着计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以如今已经不需要再特别关注一个算法的空间复杂度。
2024-04-22 18:00:04
800
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅