自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 爬虫练习1

GlidedSky爬刷题网站第一关答案及其解析。开发实战》这本书的作者发布的一站式爬虫练习平台。

2025-07-11 20:10:33 1840 1

原创 @Override注解

通过在 `Dog` 类中的 `makeSound` 方法上使用 `@Override` 注解,我们明确表示这个 `makeSound` 方法是覆盖 `Animal` 类中的 `makeSound` 方法。- 如果父类的方法是 `static` 的,子类中覆盖的方法不能使用 `@Override` 注解,因为静态方法不能被覆盖,而是被隐藏。3. **避免错误**:如果不使用 `@Override`,可能会不小心覆盖了一个你并不打算覆盖的方法,或者忘记覆盖某个方法。

2025-06-01 14:51:16 304

原创 双检锁(Double-Checked Locking)单例模式

2. **双重检查**:在 `getInstance()` 方法中,首先检查 `objectMapper` 是否为 `null`,如果是,则进入同步块。1. **volatile 关键字**:确保 `objectMapper` 变量在多线程环境下的可见性,即一个线程对 `objectMapper` 的修改对其他线程立即可见。- **序列化**:确保 `ObjectMapper` 实例是线程安全的,因为 Jackson 的 `ObjectMapper` 是线程安全的,可以直接在多线程环境中使用。

2025-05-21 15:27:09 681

原创 `application-{env}.yml` 配置文件来实现多环境配置

Spring Boot 会自动加载 `application.yml` 或 `application.properties` 中的配置,并与激活的环境配置文件中的配置合并。这些文件通常命名为 `application-{env}.yml`,其中 `{env}` 是环境的名称,如 `dev`、`test`、`prod` 等。- **application.properties**:在 `application.properties` 文件中指定激活的配置文件。在每个配置文件中,你可以定义该环境特有的配置项。

2025-05-21 15:03:00 511

原创 RestController注解和Controller注解有什么区别?

**用途**:`@RestController` 是一个组合注解,它是 `@Controller` 和 `@ResponseBody` 的结合。- **用途**:`@Controller` 是一个通用的注解,用于标记一个类为 Spring MVC 的控制器。- **@Controller**:返回值通常是一个视图名称或 `ModelAndView` 对象,需要通过视图解析器来渲染视图。- **@Controller**:适用于传统的 Web 应用,需要渲染页面(如 HTML)。

2025-05-12 12:32:38 480

原创 spring常用注解

用途:标记一个类为 RESTful 控制器,用于处理 RESTful 请求并直接返回数据(而非视图)。用途:用于指定注入的 Bean 的名称,当存在多个相同类型的 Bean 时使用。用途:标记一个类为 Spring 的组件,使其被 Spring 容器管理。用途:标记一个类为配置类,用于定义 Spring 的 Bean 或配置。用途:标记一个类为数据访问层组件,通常用于 DAO(数据访问对象)。用途:标记一个类为控制器层组件,通常用于处理 HTTP 请求。用途:标记一个类为服务层组件,通常用于业务逻辑层。

2025-05-12 12:30:07 363

原创 Stream流

3. **并行支持**:Stream 提供了并行处理的能力,可以轻松地将单线程操作转换为多线程操作。2. **数据聚合**:使用 `sum`、`max`、`min`、`count` 等方法。1. **声明式**:Stream 提供了声明式的方式来处理数据,代码更加简洁易读。2. **链式调用**:Stream 的操作可以链式调用,形成一个操作流水线。1. **过滤和转换数据**:使用 `filter`、`map` 等方法。- `sum`、`max`、`min`、`count`:聚合操作。

2025-05-11 23:22:44 771

原创 app加固

我们之前讲的逆向,大多数都是用加密算法去加密一些明文字符串,然后把得到的结果用 Base64、Hex等进行编码后提交。加固其实也一样,只不过他通常加密的是 dex文件而已。但是 dex 文件加密以后,安卓系统是没法直接运行的。所以加固的核心,就是把 dex 文件加密,然后 app 运行过程中把 dex 文件解密,还原到内存中。一代 动态加载型 DexClassLoader 落地。二代 动态加载型。三代 代码抽取型。

2025-05-11 23:01:42 404

原创 Lambda表达式能用在哪些场景?

Lambda表达式是Java 8引入的一种强大特性,它允许以简洁的方式表示匿名函数(即没有名字的函数)。Lambda表达式可以用于许多场景,尤其是在与函数式接口、Stream API、并发编程等结合时,能够显著简化代码并提高开发效率。是 Java 8 引入的一个注解,用于标记一个接口为函数式接口。Lambda表达式可以与`CompletableFuture`、`ExecutorService`等并发工具结合使用,简化并发任务的编写。Lambda表达式可以用于事件处理,尤其是当事件处理器接口是函数式接口时。

2025-05-11 22:58:49 498

原创 Java 1.8(也称为Java 8)

Java 1.8(也称为Java 8)是Oracle于2014年发布的一个重要版本,引入了许多新特性和改进,极大地提升了Java语言的表达力和开发效率。Java 1.8对并发编程进行了显著增强,例如引入了`CompletableFuture`类。Stream API是Java 1.8引入的一种新的集合操作方式,允许开发者以声明式的方式处理集合数据。Java 1.8引入了全新的日期时间API,位于`java.time`包中。方法引用提供了更简洁的语法,可以直接引用已有的类或对象的方法。

2025-05-11 22:19:52 531

原创 ArrayList和LinkedList区别

在性能特点上,我需要提到 ArrayList 在随机访问时效率高,因为数组的索引访问是 O(1) 的,而 LinkedList 因为需要遍历节点,随机访问是 O(n) 的。关于内存占用,我需要指出 ArrayList 的内存使用相对规律,因为数组的存储是连续的,而 LinkedList 的节点存储是分散的,每个节点还需要额外的空间存储指针。这对于用户理解两者的内存特性很重要。最后是适用场景,比如 ArrayList 更适合频繁随机访问的场景,而 LinkedList 更适合频繁插入和删除的场景。

2025-05-09 10:14:54 355

原创 标签语句分析

如果 `tempTagNameSet` 为 `null`,则用一个空的 `HashSet` 替代,避免后续代码中出现 `NullPointerException`。- 创建一个 `Optional` 对象,如果 `tempTagNameSet` 为 `null`,则返回一个空的 `Optional`;- 如果 `Optional` 是空的(即 `tempTagNameSet` 为 `null`),则返回一个新的空 `HashSet`;如果 `tagsStr` 为空或 `null`,应该提供一个默认值。

2025-05-06 11:06:23 1014

原创 QueryWrapper

QueryWrapper` 是 MyBatis-Plus 提供的一个非常强大的查询构造器,用于构建 SQL 查询条件。它可以帮助你在不直接写 SQL 的情况下,灵活地构造各种复杂的查询条件。以下是一些常见的用法和示例,帮助你更好地理解和使用 `QueryWrapper`。假设你有一个 `User` 实体类,其中有一个 `tags` 字段,存储的是 JSON 格式的标签集合。如果你的数据库支持 JSON 查询(如 MySQL 5.7+),可以在数据库层面完成过滤,减少内存中的处理。

2025-05-06 10:30:48 779

原创 java单元测试代码

【代码】java单元测试代码。

2025-05-05 22:40:03 320

原创 用户中心项目笔记1

这个类通常用作所有API响应的基类或模板。总之,`common` 层在项目中扮演着重要的角色,它通过提供统一的响应结构、集中管理错误码和简化业务代码,提高了代码的可读性、可维护性和开发效率。3. **简化业务代码**:业务代码中可以直接使用 `ResultUtils` 提供的快捷方法来构造响应,减少重复代码。4. **提高代码的可读性和可维护性**:将通用的响应结构、错误码和工具方法集中管理,使得代码更加整洁和易于维护。1. **统一的响应格式**:所有API响应都有统一的结构,方便客户端解析和处理。

2025-04-27 01:59:56 938

原创 ServiceImpl

Service 层是业务逻辑层,主要负责处理业务逻辑,是应用程序的核心部分。例如,如果未来需要更换业务逻辑的实现,只需要提供一个新的实现类,而不需要修改接口的使用者(Controller 层)。在软件开发中,尤其是采用分层架构(如常见的三层架构:Controller、Service、Repository)的项目中,“impl”通常是指“implementation(实现)”的缩写。总之,“ServiceImpl”是实现业务逻辑的具体类,它通过实现接口来提供具体的方法实现,是分层架构中非常重要的部分。

2025-04-27 01:36:18 640

原创 java代码审计-Servlet学习2

web相关概念:

2024-12-08 11:02:06 261

原创 java代码审计-Servlet学习1

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,是运行在 Web 服务器或应用服务器上的程序。HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。1.当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的servlet的资源路径。3.实现接口中的抽象方法。

2024-12-06 23:34:59 321

原创 bugku-web-留言板1

大小写绕过也不行</sCRipT>双写绕过可以。

2024-12-02 00:09:02 527

原创 bugku-web-login2

审计一下:想要登录成功,可以 通过输入不存在用户,用union select 构造出指定密码的md5值这样。时,只有当所有条件都为真时,整个表达式的结果才为真。如果任何一个条件为假,整个表达式的结果就为假。随便输入个账号密码bp抓包,发现个小tip是base64加密的解密。1.php可以在网站子目录查看内容拿到flag。不知道为啥用bp始终登不上hackbar可以。通常用来检查一个变量是否为空或者没有内容。查看 flag文件并输出到1.php里边。

2024-12-01 22:24:02 287

原创 buuctf-reverse-Java逆向解密

异或(XOR)操作是一种位运算,它对两个数的对应位进行逐位比较。在二进制表示中,如果两个比较位相同,则结果为0;如果不同,则结果为1。逆推(kimi写的终于tm的让他写对次了)用idea打开Reverse.class。

2024-11-30 09:28:43 660

原创 BUUCTF—Reverse—新年快乐

下载附件这一题考查的是的基本知识,先用exeinfoPE查看一下,发现是加了壳的,可以用upx进行脱壳。

2024-11-30 08:42:15 370

原创 buuctf-reverse-reverse2

`int __cdecl main(int argc, const char **argv, const char **envp)`:这是 `main` 函数的声明,它接受命令行参数和环境变量。- 如果 `pid` 非零(即父进程),调用 `waitpid(pid, &stat_loc, 0)` 等待子进程结束。- 如果 `pid` 为零(即子进程),执行循环,修改全局变量 `flag` 中的特定字符。- `__pid_t pid`:用于存储 `fork` 调用的结果,即子进程的 PID。

2024-11-30 00:40:13 476

原创 BUUCTF-reverse-reverse1

for循环是对str2做了一个转换的处理,str2里面ascii码为111的字符会被转换为ascii码为48的字符,在IDA中,选中数字按"R"键可以将数字转换为字符。strncmp(str1,str2,v3)是把str1与str2两字符串的前v3位数做一个比较,若str1=str2,返回0;一般来说,是先去找引用"flag"的代码段,然后一步步定位到关键部分,找到真正把flag加密的函数,然后手工逆向或者写解密脚本得到真正的flag。,简单的题目会有flag或者敏感数据字符等信息,方便我们定位。

2024-11-28 22:49:49 799

原创 buuctf-reverse-easyre

2024-11-28 22:04:57 125

原创 攻防世界-mobile-eassy_app

当我们点击check按钮的时候,程序会调用check方法,参数即是我们的输入字符串,check方法的实现在native-lib.so库中。对其进行解包操作,获得该so库,IDA打开找到check。

2024-11-28 21:42:40 235

原创 攻防世界-mobile- 人民的名义-抓捕赵德汉1-200

可以看到用户输入就是:fa3733c647dca53a66cf8df953c2d539的md5解密。

2024-11-28 00:12:52 221

原创 攻防世界-mobile-APK逆向

在Android开发中,`classes.dex` 是一个非常重要的文件,它是应用程序的Dalvik Executable文件,包含了应用程序的编译代码。这两行代码通过 `findViewById` 方法获取布局中的 `EditText` 和 `Button` 控件,并分别赋值给 `edit_sn` 和 `btn_register`。如果输入的序列号与预期的序列号匹配,则验证成功。- 首先,调用 `checkSN` 方法检查 `edit_userName` 和 `edit_sn` 的值是否符合某种条件。

2024-11-27 00:26:46 940

原创 攻防世界-re-CatFly

放ux里打开并执行。

2024-11-25 23:10:55 378

原创 golang学习-切片

slice 并不是真正意义上的动态数组,而是一个引用类型。slice 总是指向一个底层 array,slice 的声明也可以像array 一样,只是不需要长度。slice 和数组的区别:声明数组时,[]内写明了数组的长度,而声明sice 时,[]内没有任何字符或使用...自动计算长度。切片在操作过程中,是直接操作原效组。因此,在go语言中,我们常常使用切片代合数组。切片并不是数组或数组指针,它通过内部指针和相关属性引用数组片段,以实现变长方案。切片作为函数参数时,传引用。

2024-11-24 23:02:27 389

原创 golang学习6-指针

栈帧存储:1.同部变量。(形参与局部变量存储地位等同)3.内存字段描述值。栈帧:用来给函数运行提供内存空间。取内存于 stack 上。传地址(引用):将形参的地址值作为函数参数、返回值后传递,等号 右边的变量,代表 变量内存空间存储的数据值。当函数调用时,产生栈帧。函数调用结束,释放栈帧。等号 左边的变量,代表 变量所指向的内存空间。传值(数据据):将实参的 值 拷贝一份给形参。指针变量就是存储地址的变量。传引用:在A栈帧内部,修改B栈帧中的变量值。*p:解引用、间接引用。

2024-11-24 21:57:19 650

原创 java代码审计3-FortifySCA 代码审计⼯具

它通过内置的五大主要分析引擎:数据流语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,通过与软件安全漏洞规则集进行匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并可导出报告。数据量引擎:跟踪、记录并分析程序中的数据传递过程所产生的安全问题语义引擎:分析过程中不安全的函数,方法的使用的安全问题。结构引擎:分析程序上下文环境、结构中的安全问题控制流引擎:分析程序特定时间、状态下执行操作指令的安全问题配置引擎:分析项目配置中的敏感信息和配置确实的安全问题。4、Fortify支持语言。

2024-11-23 09:51:09 547

原创 java代码审计2-文件上传漏洞

在上传获取后缀名 开发会对后缀名限制 例如 黑名单上传(禁止上传)java、jspx、jsp、php、exe、等文件类型。绕过上传后,服务器能解析改文件就能获取一个webshll。在上传时 有可控参数 会导致 目录穿越 上传类型不严时 通过上传恶意的war包到tomcat目录webapp目录中会获得webshell。代码中并没有后缀名进行限制 造成任意上传漏洞,直接上传jsp到指定目录。1.设置上传白名单 例如只允许上传 png gif jpg等图片类型后缀。3.上传目录 禁止解析脚本文件。

2024-11-23 09:32:59 647

原创 java代码审计1-sql注入

存在报错注入。

2024-11-23 01:19:26 155

原创 Python中常用的方法,函数

变量包含任何形式的空白字符,这些字符都会被去除,然后打印出处理后的字符串。方法返回一个新的字符串,它是原始字符串去掉前导和尾随空白后的结果。中的字符串,并去除字符串两端的空白字符(包括空格、换行符。是一个Python代码片段,用于打印变量。

2024-11-22 09:54:32 152

原创 golang学习5

为结构体添加方法异常处理过程。

2024-11-22 09:51:48 257

原创 golang学习4

1,切片与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大所以可以将切片理解成“动态数组”,但是,它不是数组。map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。长度是已经初始化的空间。容量是已经开辟的空间,包括已经初始化的空间和空闲的空间。map 是一种无序的键值对的集合。make(切片类型长度,容量)3,使用make()函数创建。切片名 := [类型]{}

2024-11-18 00:21:37 176

原创 ctf-攻防世界-mobile-基础adnroid

1、获取登录账号密码jadx-gui打开文件,可以看到MainActivity主入口有账号密码输入进入checkPassword函数编写python脚本解得第一层密码为:MainActivity2将编辑框的输入,广播发送出去 可以看到AndroidMenifest中广播接收者的定义在类中 接收到广播后只是启动了NextContent在apk中找到相应的文件,后缀名改成png打开,得到flag补充:`MainActivity2`类中的广播是指通过`sendBroadcast`方法发送的一个`Intent

2024-11-17 01:40:42 1306

原创 C++基础学习

黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili

2024-11-12 11:19:41 316

原创 攻防世界——unseping

攻防世界新手练习区——unseping-优快云博客

2024-11-09 10:24:35 186

空空如也

空空如也

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

TA关注的人

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