- 博客(105)
- 收藏
- 关注
原创 [Java 算法] 字符串
2.将两个字符串 第 i 位 × 第 j 位 存放在 tmp[] 的 i+j 位;中心扩展算法 , 分别枚举奇数长度以 i 为中心的子串 , 和偶数长度以 i 为中心的子串。从最低位开始拼字符串 , 最低位在字符串的起始位置 , 最终得到的数是逆序的。相加 : 前一位的进位 t+=两数的当前位 , 满 2 进 1 : t%2。,逐字符地去对比其他所有字符串。,不断缩小公共前缀的范围。字符串数组看作一条链,
2026-04-06 21:39:43
101
1
原创 [Java 算法] 动态规划(4)
若 len[j] + 1 > len[i]:说明找到了更长的子序列,更新 len[i] = len[j] + 1,同时 cnt[i] = cnt[j](个数继承自 j)若 len[j] + 1 == len[i]:说明找到了长度相同的新子序列,累加计数 cnt[i] += cnt[j]cnt[i]:以 nums[i] 结尾的、长度为 len[i] 的最长递增子序列的个数。再遍历所有 i,累加所有 len[i] == maxLen 的 cnt[i],即为答案。
2026-04-05 20:08:15
375
原创 [Java 算法] 归并排序
2.合并两个有序数组 : 双指针 cur1 = left,cur2 = mid+1。1.划分区间 : [left,mid] , [mid+1,right]3.拷贝回 nums 数组 , 范围 [left , right]
2026-04-01 22:59:13
377
6
原创 [Java算法] 递归(1)
当 -2147483648 去掉符号 2147483648 会超出 整型 2147483647;我们就按 2147483647 次处理 , 最后再单独处理一次即可。每次转移的圆盘应该是最上面的(A.size()-1)最小的哪个 , 而不是转移 0 下标的。再顺着递归一层层回溯相乘,最后外层统一用倒数规整负幂,全程避开数值越界。宏观角度看待 : 认为这个函数一定能完成排序工作。实际代码完全不会报错,直接大胆传。
2026-04-01 22:57:34
185
3
原创 [Java 算法] 快速排序和快速选择排序(※)
需要交换 left+1 和 i , 此时如果 i==++left , 是自己根自己交换;注意 : 由于 left+1 位置为已经排好序了的元素 , 所以能让 i++: 需要交换 right-1 和 i , 此时如果 i == --right,也是自己自己跟自己交换 , 交换完成退出循环(因为此时 i == right)[left+1,i-1] 为 1;[i,right-1] 为待排序元素;[right,len-1] 为 2。left : 用来标记 0 的最右端 , 包含 left。
2026-03-31 21:53:22
261
2
原创 [Mybatis] MyBatis 保姆级入门全套笔记
* 查询尽量不要用 select ***,写字段,效率更高。多表查询用 LEFT JOIN / INNER JOIN,不要用子查询。参数传递一律用 #{ }。排序、表名、列名用 ${ }。模糊查询用 concat ('%', #{key}, '%')。开启驼峰命名自动映射,不用写 resultMap单表:基础 CRUD多表:LEFT JOIN 轻松搞定动态排序:${sort}模糊查询:concat 安全写法参数安全:#{ } 防注入。
2026-03-30 22:54:27
1153
3
原创 [Mybatis] MyBatis 快速入门教程(2)
也可以通过@Param , 设置参数别名 , 如果使用别名 , 那么 #{ } 中的属性名必须和@Param 设置的一样。如果想要服用结果集 , 需要使用 id 属性给结果集起别名 , 在使用@ResultMap 注解来复用结果集。可以根据 IDEA 自动生成 XML 的 SQL 的格式 , 只需要填写注解类似的 SQL 语句。注意 : 如果遇到代码中无 高亮显示 , 可能是 IDEA 索引缓存损坏 , 请重启 IDEA。上述代码已经编写了很多查询相关的代码,并演示问题 , 此处不再演示。
2026-03-30 19:23:09
436
2
原创 [MyBatis] MyBatis 快速入门(1)
表示 Mybatis 中的 Mapper 接口;程序运行时 , 框架会自动生成接口的实现类对象 , 交给 Spring 进行 IOC 管理。JDBC 操作数据库太麻烦 : 手动获取连接 , 关闭连接;持久层 : 持久化操作层 , 通常是指数据访问层(dao) , 是用来操作数据库的。规范 : Mabatis 持久层接口规范一般命名为 xxxMapper。注意 : 如果报错 , 请检查 password 和数据库连接。Mybatis : 持久层框架 , 用于简化 JDBC 开发。
2026-03-28 19:27:42
264
6
原创 [Java EE 进阶] Spring Boot 日志全面解析 : 配置与实战
获取日志对象 : 通过LoggerFactory.getLogger(类名.class)获取 , 归属于(org.slf4j 包)输出日志内容 : 通过日志对象的 info()等方法打印日志//获取日志对象//输出日志logger.info("-------- -------- 自定义日志 -------- --------");return "打印日志";
2026-03-28 19:18:51
1108
5
原创 [Java 算法] 动态规划2
返回值问题 : 由于多加一行一列 , dp 数组中的 [i,j] 映射到原路径中应该是 [i-1,j-1];所以最终返回的位置是原路径中的 [m-1,n-1] , 对应到 dp 数组中就是 dp[m][n]由于到达 [i,j] 位置 可以从 [i-1,j] ,或者从 [i,j-1] 走一步到达;所以dp[i][j] = dp[i-1][j]+dp[i][j-1]无障碍物时 : dp[i][j] = dp[i-1][j]+dp[i][j-1]dp[i][j] : 到达 [i,j] 位置的最小下降路径。
2026-03-25 20:26:58
655
3
原创 [Java 算法] 动态规划(1)
状态转移方程 : dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])状态表示 : dp[i] = 到达第 i 级台阶所需要的最小花费。
2026-03-25 12:13:51
76
3
原创 [Java 算法] 贪心(1)
③ 用 StringBuffer 来拼接 : 由于 String 类型为不可变类型 , 每次拼接都需要创建新的对象 , 浪费内存空间。找 15 元时 , 优先用 10 块钱找零 , 5 块钱可以留着给 10 块找零。通过大根堆找到最大的元素 , 减半再放入大根堆 , 同时修改数组和 , 循环往复 , 便可找到最小的操作次数。④ 判断特殊情况 : ['0','0'] : 拼接为 "00";直接返回 "0" , 而非 "00"① 整型转字符串 : strs[i] = nums[i]+"";
2026-03-25 12:12:01
368
2
原创 [Java EE 进阶] SpringBoot 配置文件全解析 : properties 与 yml 的使用与实战 (ULTRA)
概述 | HutoolHutool 是一个 Java 工具包类库 , 对文件 , 流 , 加密解密 , 转码 , 正则 , 线程 , XML 等 JDK 方法进行封装组成的 Util 工具类。
2026-03-22 18:53:13
795
30
原创 [Java EE 进阶] SpringBoot 配置文件全解析:properties 与 yml 的使用(1)
本文介绍了SpringBoot配置文件的两种主流格式:properties和yml。properties采用键值对形式,简单但冗余;yml采用树形结构,支持复杂数据类型,可读性更好。文章详细讲解了两种格式的语法规则、读取方式及实际应用场景,并通过对象、List、Map等复杂类型的配置案例进行对比分析。最后总结了两种格式的优缺点及适用场景,建议日常开发优先使用yml格式,特殊场景考虑properties格式。
2026-03-22 13:56:03
447
5
原创 [Java 算法] 模拟
其余行 : 两个元素为一组 , 每个周期加上一个公差 , 例如 第 i 行 , 周期为 0 , 两个元素的下标表示为 : (i , d-i);(其中 d 为公差)② String 类型为不可变类型 , 使用时需要配合 StringBuilder 和 char[] 类型来使用。第 0 行和最后一行 : 在行数的基础上每个周期 , 加上一个公差(d = 2n-2)① 周期次数放在 if-else 判断外 , 以免产生死循环。
2026-03-18 16:12:54
421
11
原创 [Java 算法] 位运算(1)
<(左移) , >>(右移) , ~ (按位取反)& (按位与) : 有 0 为 0| (按位或) : 有 1 为 1^(按位异或) : 相同为 0 , 相异为 1;或者使用无进位相加。
2026-03-18 16:10:45
344
4
原创 [Java 算法] 前缀和(2)
使用以上示例 出现这种情况 , 先执行 hash.put(sum, hash.getOrDefault(sum, 0) + 1), 将 hash[sum] = 1;sum 累加 nums[j] : 动态计算 nums[i] 到 nums[j] 的和 , 不重不漏。后缀积 : last[i] 表示 , 下标 i 右侧所有元素的乘积(不包含 nums[i])前缀积 : pre[i] 表示 , 下标 i 左侧所有元素的乘积(不包含 nums[i])练习三 : 和可被 k 整除的子数组。
2026-03-15 23:56:25
416
11
原创 [Java EE 进阶] 一文吃透 Spring IoC&DI:核心概念 + 实战用法 + 面试考点
本文深入解析了Spring框架的核心机制IoC(控制反转)和DI(依赖注入)。通过汽车制造案例,对比传统高耦合开发与Spring解耦方案,阐释IoC将对象创建权交给容器、DI实现依赖注入的核心思想。详细介绍了Bean存储的五种类注解(@Controller/@Service等)和@Bean方法注解,以及三种依赖注入方式(属性/构造方法/Setter注入)。针对多Bean注入问题,提出@Primary、@Qualifier和@Resource三种解决方案。最后总结IoC与DI的关系,指出这是理解Spring框
2026-03-15 16:01:49
1497
16
原创 [Java 算法] 前缀和(1)
要计算到 (i,j) 位置的所有元素和,需要把「左边一行的和」+「上边一列的和」,但左上角 (i−1,j−1) 被重复加了两次,所以要减一次,最后加上当前元素 arr[i][j]构建前缀和数组:prefix[j] = arr[1]+arr[2]+...+arr[j]后缀和:last[i] = nums[i] + ... + nums[len-1]前缀和:pre[i] = nums[0] + ... + nums[i-1]中心下标判断 : pre[i]== last[i+1]
2026-03-15 01:36:57
184
2
原创 [Java EE 进阶] 一文吃透 Spring IoC&DI:核心概念 + 实战用法 + 面试考点(1)
以 “造一辆车” 为例,传统开发中对象的创建和依赖关系由自身控制:汽⻋依赖⻋⾝,⻋⾝依赖底盘,底盘依赖轮;所有的对象都通过 new 手动创建;当底层组件(如轮胎尺寸) 发生变化时 , 整个调用链上的所有代码都需要修改 , 程序耦合度高 , 可维护性差car.run();int size;
2026-03-12 23:44:59
416
8
原创 [Java 算法] 二分查找进阶
34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)if(len == 0||nums[len-1]<target||nums[0]>target){//把数组为空必免指针越界的优先级排到最高return ret;//找左端点//找左端点时,如果存在则最后mid会落在left处,经过处理会让两个指针重合,退出循环,返回结果}else{//判断双指针重合处是否是端点= target){return ret;//找右端点left = 0;
2026-03-11 21:20:25
379
原创 [Java 算法] 二分查找
34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)if(len == 0||nums[len-1]<target||nums[0]>target){//把数组为空必免指针越界的优先级排到最高return ret;//找左端点//找左端点时,如果存在则最后mid会落在left处,经过处理会让两个指针重合,退出循环,返回结果}else{//判断双指针重合处是否是端点= target){return ret;//找右端点left = 0;
2026-03-10 23:17:54
758
7
原创 [Java 算法] 滑动窗口 2
让 in 进入窗口 , 通过getOrDefault(in,0)+1 , 完成修改 in 对应 value 的操作 : 如果 map 中包含 in , 则使 value+1;如果 map 的长度大于 2 , 让 out 出窗口 , 则让 left 指针右移 , 并处理 out 的 value。更新最长窗口长度 : 当前窗口的和 == target。扩展右指针 : 遍历数组 , 逐个加入当前窗口。收缩右指针 : 当前窗口的和>target。算法原理 : 哈希表+滑动窗口。左右指针 = 0 ,
2026-03-09 22:42:48
75
5
原创 [Java EE 进阶]Spring Web MVC 入门 (从零搭建 Spring Boot 图书管理系统)
本文介绍了一个基于Spring Boot的图书管理系统实现方案。系统包含用户登录验证和图书管理两大功能模块,采用Maven构建,使用Lombok简化代码开发。关键技术点包括:1) 通过配置Maven插件解决Lombok注解处理问题;2) 实现RESTful接口进行用户验证(/user/login)和图书列表查询(/book/getList);3) 前端使用Bootstrap框架,通过AJAX与后端交互。系统提供完整的图书增删改查功能界面,包括登录页、图书列表页和编辑页。测试数据显示,系统能正确处理用户登录验
2026-03-04 16:05:05
258
原创 [Java 算法] 滑动窗口 1
不重复 : 让右指针元素加入 , 更新长度 , 右指针右移 , 再判断(重复或不重复)大于 : 更新结果 , 出窗口 (让左指针元素出窗口)->接着判断。重复 : 让左指右移动 , 再判断(重复或不重复)扩展右指针 : 遍历数组 , 逐个先后移动。收缩做指针 : 窗口内 0 的数量>k 时。1.进窗口 : 让右指针元素进窗口。2.判断 sum 是否>=t。方法一 : 用数组模拟哈希表。小于 : 让右指针进窗口。判断右指针元素是否重复?方法二 : 使用哈希表。
2026-02-26 15:34:49
240
原创 [Java EE 进阶] Spring Web MVC 入门 (2)
lombook 是一个注解 ,用来简化大量模板化代码(如 getter/setter/构造方法) , 而 @Data 是一个组合注释 , 相当于加了以下注释。后端服务 : ① 提交留言 : 用户输入留言信息后 , 后端需要把留言信息保存起来;② 展示留言 : 页面展示时 , 需要从后端获取到所有的留言信息。加法计算器功能 , 对两个整数进⾏相加 , 需要客⼾端提供参与计算的两个数 , 服务端返回这两个整数计算的结果。限制 HTTP 请求方式(GET,POST,PUT,DELETE)
2026-02-26 10:06:51
869
原创 [Java EE 进阶]Spring Web MVC 入门 (请求)
访问不同的路径 , 就是发送不同的请求 , 在发送请求时 , 可能会带一些参数 , 所以学习 Spring 的请求 , 主要是学习如何传递参数到后端以及后端如何接收。("/User2")注册路由路径 , 可以修饰类和方法 , 访问路径为类路径+方法路径 , 支持 GET , POST 多种请求方式;: 但有多个参数时 , 前后端进行参数匹配时 , 是以参数的名称进行匹配的 , 因此参数的位置是不影响后端获取参数的结果。可以上传任意格式的文本 , 可以上传 text,json,xml,html 等。
2026-02-11 23:42:57
1165
5
原创 [Java EE 进阶] Cookie和Session
Cookie是客户端浏览器的轻量级文本数据,由服务器通过Set-CookieHTTP响应头下发给客户端,客户端会将其保存,后续向同一服务器发送请求时,会自动通过CookieHTTP请求头携带该数据,实现客户端侧的会话标识。存储位置:客户端浏览器(内存/本地文件,依Cookie属性而定);核心作用:存储会话令牌(SessionId)、少量非敏感的用户信息;特性:可被客户端修改/伪造,因此后端使用Cookie时必须做校验。Session是服务器端为每个客户端创建的专属会话对象,本质是一个。
2026-02-11 12:46:40
833
1
原创 简单介绍 JSON
使用 objectmapper.writeVakueAsString(Java 对象) -> 生成 JSON 字符串。objectmapper.readValue(Json 字符串 , 目标类.class)如果需要转换集合 , 需要用 TypeReference 指定泛型类型。无参构造器和所有属性的 get/set 方法。Jackson(Spring 框架内置)
2026-02-08 23:31:20
590
2
原创 Spring生态
Spring 生态是一套分层 , 解耦且高度协同的技术体系所有产品围绕 Spring Framework(Spring 核心框架)构建 , 核心框架是整个生态的基础与核心依赖 , 其他产品(Spring Boot , Spring Cloud 等)都是在其基础上的封装 , 扩展或领域化增强 , 最终形成"核心奠基 , 上层赋能 , 领域聚焦"的完整技术栈 , 支撑从单体应用到分布式微服务的全场景开发。
2026-02-08 22:08:46
792
2
原创 [Java EE 进阶] SpringBoot 快速入门
此处使用专业版 IDEA② 项目代码http://127.0.0.1:8080/hello或者使用 postmanhttp://127.0.0.1:8080/hello浏览器输入 URL 之后 , 发起请求 , 就和服务器之间建立了连接
2026-02-04 22:18:48
257
1
原创 [Java EE] 网络原理(3) https
HTTPS是HTTP的安全增强版本,通过SSL/TLS加密层实现数据传输的机密性、完整性和身份验证。与HTTP明文传输不同,HTTPS采用加密传输,默认使用443端口,并需要CA机构颁发的数字证书。HTTPS结合对称加密(高效)和非对称加密(安全)机制,通过数字证书防止中间人攻击。证书包含服务器公钥、域名和CA签名,客户端通过校验证书有效性和完整性确保通信安全。密钥协商后,后续数据传输使用对称加密,兼顾安全性与效率。
2025-12-24 20:11:14
768
5
原创 [Java EE] 网络原理(2) http
HTTP协议是应用层协议,基于TCP/IP工作,用于客户端和服务器间传输超文本数据。HTTP报文由请求/响应行、报头和正文组成,通过空行分隔。请求方法包括GET(获取资源)和POST(提交数据),GET参数通过URL传递,POST通过请求体传递。响应包含状态码和响应数据。URL编码确保特殊字符正确传输。使用工具如Fiddler可分析HTTP流量,Postman可构造请求。HTTP具有无状态、明文传输等特点,是互联网核心协议之一。
2025-12-21 22:58:37
1667
13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅