- 博客(41)
- 收藏
- 关注
原创 深度解读一下 springcloud 的 pom.xml 用到的标签
本文介绍了SpringCloud微服务项目的Maven配置要点。核心内容包括:1) 基础项目信息配置(groupId、artifactId等);2) SpringBoot父POM和SpringCloud版本管理;3) 常用微服务依赖(Web、配置中心、服务注册等);4) 构建插件配置(打包、资源处理);5) 进阶属性配置和Profile激活。文章还提供了微服务核心组件、监控追踪等特有依赖分类,以及依赖排除、仓库配置等不常用但重要的标签。最后给出版本管理策略、依赖范围控制和模块化结构等最佳实践建议,并列出依赖
2025-12-17 14:55:06
307
原创 后端常看到的DO、DTO、BO、AO、VO、POJO这些是什么含义
摘要:后端开发中常见的数据对象命名规范包括:POJO(普通Java对象)、DO/PO(数据库映射对象)、DTO(数据传输对象)、VO(视图对象)、BO(业务对象)和AO(应用对象)。这些规范通过区分不同层次和用途的数据对象,使代码结构更清晰。小项目可简化使用,大项目建议严格分层,配合对象转换工具使用。核心思想是实现关注点分离,提高代码可读性和可维护性。(149字)
2025-12-10 10:06:01
373
原创 Redis:主动更新,读时更新,定时任务。三种的优劣势对比
本文对比分析了三种缓存更新策略:主动更新(写时更新)、读时更新(延迟加载)和定时任务(定期刷新)。主动更新实现强一致性但写性能较差,读时更新实现简单但对一致性要求高的场景不足,定时任务适合数据变化不频繁的场景但实时性差。建议根据业务特点选择策略:读多写少场景推荐读时更新为主,结合主动删除机制;强一致性要求场景补充主动更新;定时任务适合预热数据。最佳实践是混合使用多种策略,在保证性能的同时满足不同业务场景的数据一致性需求。
2025-12-10 09:03:45
963
原创 springboot使用redis,如果写入redis中a=5,数据库内a被修改为9,那redis的a会失效吗?什么时候会更新成最新的?有被读到脏数据的风险吗?
Redis中的键值不会自动失效,需要手动删除或设置过期时间。常见的缓存策略包括Cache-Aside(先更新数据库再删除缓存)、Write-Through(同步更新缓存和数据库)和Write-Behind(异步更新数据库)。这些策略都存在脏数据风险,解决方案包括双写一致性、消息队列保证最终一致性和设置较短过期时间。在SpringBoot中可通过注解实现缓存操作。最佳实践建议根据业务需求选择策略,设置合理过期时间,使用版本控制,并建立监控和降级机制。对大多数场景推荐Cache-Aside模式,结合立即更新缓存
2025-12-09 18:02:51
369
原创 后端直接返回错误信息的Map 和 抛出异常(异常机制)优劣势对比
本文对比了两种错误处理方案:函数式返回(错误码Map)和异常机制。函数式返回通过封装结果对象实现显式错误处理,但代码冗余且易遗漏检查;异常机制则通过抛出业务异常使主逻辑更清晰,结合全局异常处理器统一处理,适合深层调用链。建议优先采用异常机制,辅以函数式返回处理特殊场景,同时利用校验框架简化参数校验。总体推荐方案二(异常机制)作为主要错误处理方式。
2025-09-25 17:29:19
956
原创 CTF-Hub SQL 字符型注入(纯手动注入)
题目很明确是字符型注入,所有先尝试单引号由于输入1' 出现页面错误,且1不会出现页面错误,推断出该 sql 语句是使用单引号进行闭合的。(因为题目比较简单,已经把执行的 sql 语句一同打印在了底下)
2024-11-20 13:39:46
750
原创 pikachu SQL注入系列(post篇),无需额外工具,使用Edge浏览器自带工具注入
发现报错,不止一列,那就再次修改(为了方便结果中查找,我就 ctrl+F 搜了一下 hello)此时我们不知道他的列数(但如果是比较有经验的就可以通过他的返回:hello,我们再次使用 edge携带的默认工具,选择编辑并重新发送。我们可以发现这样一个post请求,我们看一下请求数据。这样因为3=4不成立,这样输出的结果只剩下我们要的。现在结果对了,那我们就可以试试我们想得到的数据。了,但是前面正常的 id=3 的查询比较。[第一列],[第二列][第一列],[第二列][第一列],[第二列]
2024-08-18 10:21:59
1039
原创 Pikachu 不安全的文件下载(Unsafe file download)概述 附漏洞利用案例
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
2024-06-30 10:40:39
741
原创 实验八 自定义数据类型程序设计 1. 已知结构体类型struct stud{char name[20];int age;char sex;};荷兰国旗案例,最近对问题
实验八 自定义数据类型程序设计 1. 已知结构体类型struct stud{char name[20];int age;char sex;};荷兰国旗案例,最近对问题
2023-12-28 11:47:33
1415
原创 实验六 指针程序设计 要求设三个指针变量p1,p2,p3, 使p1指向三个数中最大者,p2指向次大者,p3指向最小者
1. 从键盘输入任意三个数,要求设三个指针变量p1,p2,p3, 使p1指向三个数中最大者,p2指向次大者,p3指向最小者, 然后从大到小输出三个数。运行时分别输入3,7,5和6,-4,2,记录运行结果。2. 求一元二次方程ax2+bx+c的根。要求用函数实现。提示:一元二次方程的求根公式:3.拆分实数的整数与小数部分:输入一个实数x (0
2023-12-14 11:48:06
1292
原创 实验五 C语言函数程序设计习题 (使用函数计算两点间的距离,请编写函数fun,使用函数输出字符矩阵,使用函数求最大公约数和最小公倍数)
实验五 C语言函数程序设计习题 3. 使用函数输出字符矩阵:输入矩形的长度len、宽度width和字符ch,输出一个长宽分别为len和width的实心字符矩阵。4. 使用函数求最大公约数和最小公倍数:输入两个正整数m和n(0
2023-11-30 11:16:07
1299
1
原创 刚学C语言太无趣VC++6.0就能写出可视化界面:EasyX。(Visual C++ 6.0)
刚学C语言太无趣 推荐一个好用易学的可视化框架:EasyX。VC6.0就能写
2023-11-11 12:33:57
1094
原创 微信小程序转抖音小程序的坑:The component <xxx> used in pages/xxx/xxx is undefined
微信小程序转抖音小程序的坑:The component used in pages/xxx/xxx is undefined
2023-07-29 12:04:42
1402
原创 Jquery使用ajax的success回调函数不执行,但是能正常请求
我曾经用的是 jQuery v1.10.2这次使用的是 jQuery 最新版本。
2023-06-19 16:09:50
2492
2
原创 C语言 指针入门最大的误区:int *p=&a;a的地址赋值给的是p不是*p
在学C语言的途中,不免会遇到很多难题。相信学C和C++的同学们对指针一定有所耳闻,它也是大家在日后学数据结构的基础。重点来了:此时的&a赋值给的是p!!!或者我们可以换以下写法,看的更为清晰。可以看出,这个写法将 int 与 * 连在一起写了,我们便可以理解为:声明一个变量p,这个变量p的类型是 int* (注意,是int*不是int),然后将a变量的地址赋值给了p变量,也即 “指针p指向a”。所以我们再来对比一下指针的几种赋值:此时会发现这两种除了写法不同以外,作用却是完全相同的。
2023-03-20 14:03:58
9787
13
原创 ApplicationContextException: Failed to start bean ‘documentationPluginsBootstrapper‘;
Spring boot报错如下:org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException检测了半天,发现还是Swagger2的原因:本来使用的是3.0.0的版本:<!-- https://mvnrepo.
2022-05-29 22:28:48
1742
原创 BeanDefinitionStoreException: Failed to read candidate component class probably due to a new Java
BeanDefinitionStoreException: Failed to read candidate component class错误
2022-05-23 15:51:07
1055
原创 【Servlet】上传文件时,ServletFileUpload.isMultipartContent(req)结果一直为false
ServletFileUpload.isMultipartContent(req)结果一直为false,刚学Servlet时遇到的坑...
2022-05-20 14:29:48
2102
原创 Kotlin入门笔记(十一)JAVA函数式API的使用
前言:本教程最好在有JAVA的基础下进行学习在说 Kotlin 之前先聊聊 Java 的函数式API。Java原生中有个最为常见的单抽象方法接口---Runnable接口。这个接口中只有一个待实现的 run() 方法,定义如下:public interface Runnable { void run();}...
2022-02-23 09:58:01
1673
原创 Kotlin入门笔记(十)集合的函数式编程 API(下)
前言:本教程最好在有JAVA的基础下进行学习接上篇继续:前节链接:Kotlin入门笔记(九)集合的函数式编程 API(上)_m0_46745664的博客-CSDN博客我们就再来学习几个集合中比较常用的函数式API。map 函数 它用于将集合中的每个元素都映射成另外的值,映射的规则在Lambda表达式中指定,最终生成一个集合。比如,这里我们希望将所有水果名大写:fun main() { val list = listOf("Apple","Banana","Or...
2022-02-14 17:29:33
1121
原创 Kotlin入门笔记(九)集合的函数式编程 API(上)
前言:本教程最好在有JAVA的基础下进行学习例题:如何在一个水果集合内找到单词最长的哪个水果?或许你会这样写:val list = listOf("Apple","Banana","Pear","Grape","Watermelon")var maxLengthFruit = ""for (fruit in list) { if(fruit.length > maxLengthFruit.length) { maxLengthFruit = fruit
2022-02-13 17:49:02
1630
原创 Kotlin入门笔记(八)集合 与 遍历
前言:本教程最好在有JAVA的基础下进行学习一、List集合ListOf()按Java的List写法,Kotlin 应该:val list = ArrayList<String>()list.add("Apple")list.add("Banana")list.add("Orange")list.add("Pear")list.add("Grape")但是 Kotlin 专门内置的 listOf() 函数来简化初始化集合的写法:val list = lis
2022-02-12 16:19:43
5902
原创 Kotlin入门笔记(七)数据类 与 单例类
前言:本教程最好在有JAVA的基础下进行学习一、数据类java中:在 java 中,数据类常常要重写 equals() 、hashCode() 、toString()这几个方法。其中,equals()方法用于判断两个数据类是否相等。hashCode()方法作为equals()的配套方法也需要重写。否则会导致 HashMap、HashSet 等 hash 相关的系统类无法正常工作。toString()方法用于更清晰的输入日志,否则一个数据类将打印出来的就是一行内存地址。public ...
2022-02-11 16:43:42
933
原创 Kotlin入门笔记(六)接口 与 函数可见性修饰符
前言:本教程最好在有JAVA的基础下进行学习一、接口Kotlin的接口与Java几乎完全一致定义一个接口:interface Study{ fun readBooks() fun doHomework()}用Student实现这个接口:class Student(name : String , age : Int) : Study { override fun readBooks() { println(name + " is read
2022-02-10 12:12:54
797
原创 Kotlin入门笔记(五)类与对象,继承,构造函数
前言:本教程最好在有JAVA的基础下进行学习一、类与对象用 class 关键字来声明类,与 java 相同。eg.(1)定义一个 Person 类:class Person { var name = "" var age = 0 fun eat() { println(name + " is eating. He is " + age + " years old.") }}(2)实例化Person这个类:val
2022-02-06 12:42:35
1061
原创 Kotlin入门笔记(四)循环语句(while,for的简单讲解)
前言:本教程最好在有JAVA的基础下进行学习一、while语句的使用 while的使用与java没什么不同一、for语句的使用注意:kotlin舍弃了 for - i 循环,将java的 for ( x : xx ) 变成了 for - in 循环(写法有点像c#,但灵活了很多)下面就来讲讲kotlin的特性:kotlin特性:区间两端闭合区间 eg. val range = 0..10 (可以取0到10,两端皆闭区间) 前开后闭区间...
2022-01-30 09:55:30
1949
原创 Kotlin入门笔记(三) Kotlin 程序逻辑控制(if,when)
前言:本教程最好在有JAVA的基础下进行学习一、if语句的使用kotlin中的条件语句主要有两种实现方式:if 和 when。相同用法:fun largerNumber(num1 : Int , num2 : Int) : Int{ var value = 0 if(num1 > num2) { value = num1 } else { value = num2 } return value}不同用
2022-01-24 17:31:34
2275
原创 Kotlin入门笔记(二) Kotlin 函数的简单介绍
前言:本教程最好在有JAVA的基础下进行学习一、main函数的使用 (1) 学过java的小伙伴们应该知道,java的main方法是静态的,且写在class中。Kotlin就有所不同,一般的写法可以将main函数写在class外class Test{ }/** 我是main入口函数 **/fun main(args: Array<String>) { var test=Test(); println("main在class外执行!")}运...
2022-01-23 10:55:39
2460
原创 找不到ActivityMainBinding这个类?刚学Databinding时踩过的坑...
一、Databinding的使用在build.gradle中开启databinding的使用android { // 复制以下三行 dataBinding{ enabled = true }}二、找不到ActivityMainBinding类刚开始跟着视频做,发现找不到视频中的ActivityMainBinding类...最后发现是我的先后顺序搞错了,在界面的xml中改变根布局为layout,并设置好其中的variable。
2022-01-10 15:37:08
10875
8
为什么Thymeleaf获取不到addObject里的值
2022-08-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅