自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

深夜敲代码

分享日常编程学习

  • 博客(76)
  • 收藏
  • 关注

原创 从零开始的抽奖系统创作(4)

其他模块较为简单不再概述该模块开启一个事务,当活动创建错误时需要将数据库中的数据回滚。

2025-05-23 22:20:03 786

原创 从零开始的抽奖系统创作(3)

今天我们来实现奖品模块以及活动模块。

2025-05-22 08:15:33 387

原创 从零开始的抽奖系统创作(2)

配置:在Linux服务器上通过隧道开放Redis的6379端口号可以在idea上下载插件Redis Helper刷新后在右侧找到插件点击加号添加Redis服务1.名称(随便,便于标识)2.本机就行3.在Linux隧道绑定的端口号4.Test测试验证,出现绿色即成功连接[email protected]("从redis中获取value : " + stringRedisTemplate.opsForValue().get("key1"));@Test。

2025-05-20 22:02:26 1284

原创 从零开始的抽奖系统创作(1)

我们将项目中出现的异常分成Controller,Service的异常(暂时,有例外再添加)//@Data 会生成自己的equals hashcode 方法 不会生成父类的@Data@EqualsAndHashCode(callSuper = true) //生成父类的equals hashcode 方法/*** 异常码* 参考 ServiceErrorCodeConstant 下的异常码*//*** 异常信息*///为了序列化@Data。

2025-05-14 10:54:14 639

原创 如何对登录用户的密码进行加密/加盐

是指把任意⻓度的输⼊消息数据转化为固定⻓度的输出数据的⼀种密码算法. 摘要算法是。

2025-05-12 08:36:21 635

原创 Spring AOP---面向切面编程由认识到使用

切点 = @Pointcut 注解(声明切点) + 切点表达式(定义规则)切点表达式是切点的一部分, 它决定了切点的“筛选规则”.切点通过切点表达式定义一套规则, 这个规则表名了对哪些方法生效/拦截哪些方法(是一个集合), 描述哪些方法可能成为连接点也可以写在 pt()中:(可以复用,推荐)//公共切点表达式。

2025-05-01 22:12:40 1187

原创 在项目中如何对Map List等对象序列化及反序列化

我们知道,在自定义类中,若想完成序列化必须要实现接口。那么在实现后如何进行序列化呢?

2025-05-01 17:14:24 1216

原创 【SpringBoot】基于mybatisPlus的博客管理系统(2)

调用JwtUtils中我们写的方法进行校验不符合预期的话再拦截之前记得向response传入一些值哦@Slf4j@Component@Override//从header中获取token//利用token获取信息进行校验//token不符合预期。

2025-04-30 23:08:34 1062

原创 【SpringBoot】基于MybatisPlus的博客管理系统(1)

blogInfos.stream().map(x -> {转换规则, return y}): 对 List 中的每一个元素根据指定规则进行转换(x: 原来的元素;y: 转换后的元素).collect(Collectors.toList()): 将转换后的 Stream 转换为一个新的 List。使用blogInfos.stream().map()与lambda表达式实现遍历 (或者使用for循环)DO(Data Object)/PO(Persistant Object): 持久层/数据层对象。

2025-04-29 23:38:05 749

原创 Spring--统一数据返回格式与统一异常处理

强制登录案例中, 我们共做了两部分⼯作1. 通过Session来判断⽤户是否登录2. 对后端返回数据进⾏封装, 告知前端处理的结果(设置status401等)回想我们在给前端返回时进行了一个统一的数据包装如果能将返回的数据全部都包装为Result那么代码就更加健壮了(方便后续的添加修改)参考拦截器,我们肯定不会对原来的方法返回结果直接一个一个修改。SpringBoot也对此功能进行了支持使用方法:统⼀的数据返回格式使⽤和的⽅式实现。

2025-04-23 11:00:02 492

原创 Spring--拦截器

实现HandlerInterceptor接⼝,并重写其所有⽅法记得交给Spring进行管理(加@Component注解)@Slf4j@Component@Override@Override@OverridepreHandle()⽅法:⽬标⽅法执⾏前执⾏. 返回true: 继续执⾏后续操作;返回false: 中断后续操作.postHandle()⽅法:⽬标⽅法执⾏后执⾏afterCompletion()⽅法:视图渲染完毕后执⾏,最后执⾏要完成拦截登录功能就可以在。

2025-04-23 10:19:13 352

原创 mybatis练习---留言板

下面写一个留言板项目,将留言的信息保存在数据库中,在每次调用前端时,刷新界面。

2025-04-21 08:31:33 370

原创 Mybatis---入门

1.什么是MyBatis?1.什么是MyBatis?MyBatis是⼀款优秀的框架,⽤于简化JDBC的开发。MyBatis本是 Apache的⼀个开源项⽬iBatis,2010年这个项⽬由apache迁移到了google code,并且改名为MyBatis。2013年11⽉迁移到Github.在上⾯我们提到⼀个词:持久层持久层:指的就是持久化操作的层, 通常指数据访问层(dao), 是⽤来操作数据库的总而言之,Mybatis就是一个用于更加方便与数据库交互的框架。

2025-04-04 17:43:36 1069

原创 Java实现一个验证码校验(SpringBoot配置练习)

请求:请求响应: 验证码图⽚内容浏览器给服务器发送⼀个这样的请求, 服务器返回⼀个图⽚, 浏览器显⽰在⻚⾯上2. 校验验证码是否正确请求: /captcha/check请求请求参数: captcha=xn8d //用户输入验证码响应:true根据⽤⼾输⼊的验证码, 校验验证码是否正确. true: 验证成功. false: 验证失败。

2025-04-02 12:12:40 324

原创 Spring----ioc

其实IoC我们在前⾯已经使⽤了, 我们在进行前后端访问时,在后端类上⾯添加和@Controller 注解, 就是把这个对象交给Spring管理, Spring 框架启动时就会加载该类. 把对象交给Spring管理, 就是IoC思想.IoC: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器.什么是控制反转呢?也就是控制权反转. 什么的控制权发⽣了反转?

2025-03-26 23:12:24 858

原创 解决 Not allowed to load local resource 问题

记录一下遇到的问题:html跳转本地资源,用相对路径。绝对路径也行,不过要加入一些配置,可以自行搜索。网络路径也行,慢了一点。

2025-03-25 22:41:14 328

原创 每日一题---根据二叉树创建字符串

还有要注意最后返回的StringBuffer要把头部与尾部的()去除,使用substring()进行裁剪。然后就是注意细节:当左边为空,右边不为空时,还需要额外打印一个“()”思想:按照先序遍历的思想,在遍历打印数字之前打印一下()先序遍历是先打印根节点,然后递归左右节点。

2025-03-20 13:02:33 128

原创 每日一题---二叉树的公共祖先

通过递归来遍历整个二叉树,递归函数的作用就是寻找该节点是否是p/q,并且能够回到(回溯)之前的节点(祖先)用于向右边寻找,最终通过结束条件返回祖先。第二种情况回溯到右边也没找到,就认为另一个也在左边,并且在该节点下面,在最后判断右边为空,直接返回左节点即可。第一种情况,会回溯到祖先继续向右寻找,这样从下面向上找,找到了就返回该节点,保证了找到的一定是最近的公共祖先。先分析一下这道题的特点:这道题一定能找到公共祖先。细节:当在左边找到p/q时,向右边寻找是否有另一个。2.如果在右边就返回该节点。

2025-03-20 11:44:26 218

原创 每日一题---从中序与后序遍历序列构造二叉树

而由于中序遍历是 左根右 打印,可以根据后序遍历得到的根节点把数组分为左右两树。是相同子问题,并且终止条件是后序遍历的下标为0或中序遍历左下标 > 右下标(一会讲解):再后序遍历中从尾部找根节点,通过map获取下标,然后递归给左右节点完成建树。对于每一个后序遍历的靠后的节点都会把中序遍历分割后的数组分为左右两树。:HashMap(元素,下标)装填中序遍历方便根据后序遍历得到的。显然,由于后序遍历是 左右根 打印,最后一个数即为根节点。注意:递归是先构建右子树,因为后序遍历的最后是右边。

2025-03-19 22:01:32 318

原创 每日一题---二叉树的后序遍历(非递归)

如果是这种情况,右边被标记,那左边一定早被打印了(1.右为空2.右已经打印)当这样标记完成之后,如果其为右节点,则根节点就可以打印了。第二步细节:打印条件是要么右树为空,要么右树已经打印过。当第一次打印时,一定是左右同时为空,打印后标记这个节点。3.如果不满足,继续将该点入栈进入其右树重复上述操作。2.拿出一个栈中节点(出栈)判断其是否满足打印条件。1.一直入栈到左树末端(因为先打印左树)注:下文的打印在代码中均为入顺序表的意思。为了标记这个打印过的节点,引入tmp节点。思路一出,实现代码还不手到擒来。

2025-03-19 20:23:02 300

原创 每日一题---翻转二叉树

那么以上就是全部题解了,欢迎大家补充更多解题思路,如有问题也欢迎大家指正!这道题比较简单,所以有许多思路,我先展示个人认为最容易理解的递归。root出栈 root.left,root.right入栈。一次出栈两个并交换再入栈,直到为空...2.使用临时变量存储递归后的节点的左右。1.先处理业务,再完成向下递归的操作。这里借用Krahets的代码进行讲解。注意与对称二叉树区分。进行出栈-交换-入栈。

2025-03-17 23:25:35 181

原创 Java---SpringMVC(2)

下文使用postman模拟客户端传递信息。 注意事项 对于包装类型, 如果不传对应参数,Spring 接收到的数据则为null 所以对于参数可能为空的数据,建议使⽤包装类型 也可以这样传入:也可以不按顺序传入:有时候前端为了保证前端代码的保密性,会把参数的名字起得后端人员难以理解,这时我们就可以借助注解@RequestParam 来重命名前后端的参数值.将前端传入的参数名“q”重命名为keyword并且使⽤ @RequestParam 进⾏参数重命名时, 参数就变成了必传参数如果不传参数

2025-03-17 22:06:04 1283

原创 每日一题---链表的回文结构

因为这道题空间复杂度为O(1),所以不能创建数组之类的额外变量。

2025-03-17 19:17:43 156

原创 每日一题---反转链表(经典老题,附大量图解)

这是一道很经典的题,因为在许多其他的链表题中都需要使用(单独实现),所以我单独整理出来,供大家参考,互相学习。

2025-03-17 17:48:12 668

原创 每日一题---相交链表(双指针)

将两个链表的长度剪成相同长度,这样就变得很简单,只是剪的过程比较麻烦,我们可以分别遍历记录链表长度再截取,这里介绍一种个人感觉比较有趣的剪法。将一个链表的节点一个一个add进入set中,判断另一个节点有重复的吗,有的话就有相交的。思路与之前差不多,只是不在进行剪了,而是进行加法。看图可知最后一定会达到判断相同节点的地方(如果有)这个思路比较简单,但是空间复杂度较高。将两个链表的长度都补充为A+B。当A循环完成之后就继续循环B。B循环完成之后就循环A。将两个链表都变成A+B。

2025-03-17 14:17:31 170

原创 每日一题---环形链表II

通过创建快慢指针,快指针fa每次走两个节点,慢指针每次走1个节点,正常没有环时,两者是永远不会相遇的,但当存在环时,由于快指针会回头,当两者相遇时就说明链表存在环。答:使用双指针,另一个新的指针从head开始(head距离成环节点的距离恰好为a),当两者相遇,相遇点即为成环节点。走到这里break时两者就相遇了,但题目要求返回成环的节点,所以我们需要找其中的数学关系,找到成环节点。设fa到相遇节点走的路程为2s , 设fa比sl多走了mb圈,那么sl的路程就是2s-mb = s。如果链表无环,则返回。

2025-03-17 13:22:58 256

原创 前端---CSS(前端三剑客)

绿⾊

2025-03-16 21:32:32 605

原创 前端---初识HTML(前端三剑客)

HTML:超文本标记语言超⽂本: ⽐⽂本要强⼤. 通过链接和交互式⽅式来组织和呈现信息的⽂本形式. 不仅仅有⽂本, 还可能包含图⽚, ⾳频, 或者⾃已经审阅过它的学者所加的评注、补充或脚注等等1.1认识 HTML 标签HTML 代码是由 "标签" 构成的.形如:标签名 (body) 放到 < > 中⼤部分标签成对出现.<h1>为开始标签,</h2>为结束标签.少数标签只有开始标签, 称为 "".开始标签和结束标签之间, 写的是标签的内容.

2025-03-16 20:10:39 1685

原创 Java---网络初识

本文章用于理解网络中的各个关键字。

2025-03-16 11:07:58 381

原创 每日一题---腐烂的苹果(广度优先搜索)

腐烂的苹果每分钟会向上下左右四个方向的苹果传播一次病菌,并导致相邻的苹果腐烂。2.每分钟腐烂苹果都会向四周扩散,将队列中的腐烂苹果弹出,并向四周扩散,使用vis记录被感染的苹果,并把被传染的苹果再次加入队列。数据范围: 1≤n,m≤1000 1≤n,m≤1000 ,网格中的值满足 0≤val≤2 0≤val≤2。其中 0 表示这个格子为空、1 表示这个格子有一个完好的苹果,2 表示这个格子有一个腐烂的苹果。给定一个 n×m n×m 的网格,其中每个单元格中可能有三种值中的一个 0 , 1 , 2。

2025-03-15 22:46:54 278

原创 每日一题---单词搜索(深搜)

在主函数中两层循环遍历整个二维数组,找出所有满足等于单词第一个字符的,然后创建一个深搜函数,把这个节点的下标.以及第几个字母传入dfs函数,这个函数用于判断单词是否在二维数组中.时间复杂度:单词起点一共有 n2个,单词的每个字母一共有上下左右四个方向可以选择,但由于不能走回头路,所以除了单词首字母外,仅有三种选择。,我们定义这样一种搜索顺序,即先枚举单词的起点,然后依次枚举单词的每个字母。单词由相邻单元格的字母连接而成,相邻单元指的是上下左右相邻。给出一个二维字符数组和一个单词,判断单词是否在数组中出现,

2025-03-15 21:52:18 271

原创 每日一题---dd爱框框(Java中输入数据过多)

实例:3 5这道题要解决Java中输入的数过多时,时间不足的的问题。

2025-03-15 20:18:14 422

原创 每日一题---数组中两个字符串的最小距离

给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。来源:牛客网输入包含有多行,第一输入一个整数n(1≤n≤105)(1 \leq n \leq 10^5)(1≤n≤105),代表数组strs的长度,第二行有两个字符串分别代表str1和str2,接下来n行,每行一个字符串,代表数组strs (保证题目中出现的所有字符串长度均小于等于10)。输出一行,包含一个整数,代表返回的值。

2025-03-15 17:31:24 473

原创 Java---JavaSpringMVC解析(1)

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"SpringMVC"

2025-03-14 20:13:57 1137

原创 【每日一题】---字母异位词分组

从 map 中获取所有 value,构造结果列表,即 [ ["eat", "tea", "ate"], ["tan", "nat"], ["bat"] ]字符数组为 ['t', 'e', 'a'],排序后为 ['a', 'e', 't'],key 为 "aet"key 为 "aet",value 为 ["eat", "tea", "ate"]将 "tea" 添加到列表中,现在列表为 ["eat", "tea"]key 为 "ant",value 为 ["tan", "nat"]遍历字符串数组 strs。

2025-03-07 16:40:44 320

原创 Java内存模型

因此,在单个线程中,程序执行看起来是有序执行的,这一点要注意理解。语句2实际上包含2个操作,它先要去读取x的值,再将x的值写入工作内存,虽然读取x的值以及 将x的值写入工作内存 这2个操作都是原子性操作,但是合起来就不是原子性操作了。而普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。

2025-02-10 22:06:08 502

原创 Java---线程安全下的集合类

多线程环境使用 ArrayList原来的集合类, ⼤部分都不是线程安全的.Vector, Stack, HashTable, 是线程安全的(但不建议⽤), 其他的集合类不是线程安全的大多数是通过加synchronized关键字实现。

2025-02-10 13:52:17 776

原创 Java---JUC

1.定义一个类,实现callable接口2.通过匿名内部类的方式3.通过Lambda表达式的方式@OverrideSystem.out.println("执行任务...");//完成累加操作i <= 10;System.out.println("运算结束..."+"sum = " + sum);return sum;那么如何像Runnable一样搭配Thread?//搭配Future使用,获取Callable的执行结果看源码知它继承自Runnable。

2025-02-10 12:52:15 1069

原创 synchronized原理

1.基本特点1.基本特点只考虑 JDK 1.81. 开始时是乐观锁, 如果锁冲突频繁, 就转换为悲观锁.2. 开始是轻量级锁实现, 如果锁被持有的时间较⻓, 就转换成重量级锁.3. 实现轻量级锁的时候⼤概率⽤到的⾃旋锁策略4. 是⼀种不公平锁5. 是⼀种可重⼊锁6. 不是读写锁。

2025-02-09 14:32:48 650

原创 Java---锁策略及CAS

举个例子:在商场上厕所时,不同人对厕所门关不关有不同想法,有些人对此保持乐观态度,进厕所后不关门(加锁),想着人少,偷一下懒。这就是乐观锁,先不加锁,只做一下标记,或啥都不做。而有的人对此保持悲观,想着一定会有人来敲门打扰他,所以他每次上厕所都关门(加锁),这就是悲观锁。两者在对线程竞争是否激烈的态度上有区别。悲观锁认为多个线程访问同⼀个共享变量冲突的概率较⼤, 会在每次访问共享变量之前都去真正加锁.

2025-02-09 13:54:37 1022

空空如也

空空如也

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

TA关注的人

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