- 博客(291)
- 资源 (6)
- 收藏
- 关注
原创 二叉树遍历练习题
由后序遍历确定子树的根,后序遍历从后向前看,最后一个元素为根,和前序遍历刚好相反,从后向前看后序遍历,应该是根,右,左,根据中序遍历确定子树的左右区间。通过前序遍历找到子树的根,在中序遍历中找到根的位置,然后确定根左右子树的区间,即根的左侧为左子树中所有节点,根的右侧为右子树中所有节点。B的左子树:JGDHK B的右子树:空 C的左子树:ELIM C的右子树:F。7的左子树: 4 7的右:空 9的左子树:6 9的右子树:2。D的左子树的根:G D的右子树的根:H E的右子树的根:I。
2024-07-01 16:19:02 241
原创 guli商城业务逻辑-基础篇笔记
删除只能使用逻辑删除,也就是把数据库里的删除字段从0改成1,数据不可以真正的删除掉,所以就要用到mybatis-plus的逻辑删除来执行数据库操作。找到我们之前逆向生成的代码,用的是人人代码逆向生成项目生成的,具体流程看我之前的文章。因为接口的后端api地址跟后台地址不一致,需要通过注册api网关的方式转发来解决。这里先处理人人后台的后端,后面在对接上guli的接口。单独创建一个异常类,他的作用就是用来统一处理异常的。为了避免重复的造轮子,先创建出来一个公共的类category.vue。
2024-06-16 22:25:12 1268
原创 Python 爬取淘宝指定搜索商品评论 标题 销量 计算sign
只需要替换原来的Cookie和token即可使用,自动计算对应链接地址的sign直接使用即可。需要注意是一个账号爬取过多会有验证码。
2024-06-14 14:20:53 412
原创 CTF-Misc学习笔记
我要加密的字符串为 " beyondlight" ,在上表中寻找与明文字母对应的数字组合,组合中第一个数字为横坐标,第二个数字为纵坐标,两个数字共同定位明文字符。在密码学中,凯撒密码(Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。2.密文中出现的数字范围为1-5,超出这个范围的数字可能是与明文相同的数字。这个可以查看不同的色彩通道。
2024-06-04 14:01:25 431
原创 web安全基础学习笔记
index.php是一个用PHP语言开发的网站的首页,index是普遍意义上的“首页”,也就是你输入一个域名后会打开一个页面,基本上就是index.xxxx(基本上首页都不会把index.xxxx显示在url里,但也不绝对) 使用index.php~下载到源代码。eregi函数在进行匹配的时候,如果碰到%00会意味着字符串的结束,因此我们只需要传入%001234,他截取到%00后匹配的时候就会变成111,111在1114中,成功绕过。只要通过让他的语句结果为真就可以进行注入,找到注入点让他的结果不一样。
2024-06-03 20:07:52 935 1
转载 创建一个vue项目(webpack 和 vue-cli3)
解释一下这个命令,这个命令的意思是初始化一个项目,其中webpack是构建工具,也就是整个项目是基于webpack的。所以选第一个独立放在一个文件。vue create project-name //project-name是你要创建的文件夹名字。Sass/SCSS (with dart-sass) //运行处时速度比node块。Linter / Formatter //规范层面。
2024-05-17 13:15:29 181
原创 黑马guli商城项目初始化-SpringCloud微服务项目初始化使用SpringCloudAlibaba快速搭建分布式系统
*** 1、如何使用Nacos作为配置中心统一管理配置* 1)、引入依赖,* 2)、创建一个bootstrap.properties。* 3)、需要给配置中心默认添加一个叫 数据集(Data Id)gulimall-coupon.properties。默认规则,应用名.properties* 4)、给 应用名.properties 添加任何配置* 5)、动态获取配置。* @RefreshScope:动态获取并刷新配置* @Value("${配置项的名}"):获取到配置。
2024-05-16 10:58:13 766
原创 Redis学习笔记
业务阻塞后会出现极端情况,一个线程的锁超时释放后,这个进程结束阻塞的同时也会把另一个线程的锁给释放掉了。先刷新用户的token如果不存在就接着往下走,然后走到下一个拦截器中拦截。目前都是同步进行的,优化方案是使用异步。使用独立的线程来解决耗时的部分。解决方案,存放一个线程标识,是自己的锁才能释放不释放别人的锁。在之前的写法高并发的场景下库存会出现超卖的问题。使用map结构来计算同一个线程进入了多少次锁。先操作数据库在写入缓存出现异常的情况较少。乐观锁是用来解决更新数据时候的并发问题,添加redis线程锁。
2024-05-14 10:19:25 924
原创 linux使用docker 安装mysql redis
https://hub-stage.docker.com/ 前往这里搜索容器来部署。每个容器都有独立的运行环境。
2024-04-24 17:22:00 532 2
原创 归并排序算法
然后得到了一个新的序列,然后对比两个序列的头部看看那个序列的头部最小。第一次排序完成后就会得到一个新的数组,然后重复以上操作继续两两合并。然后把两个序列内容进行排序对比头部移动到新的序列里面去。例如这个数组,进行从大到小的顺序来合并。最后只剩下一组序列,归并排序就到最后了。
2024-04-09 17:53:45 249
原创 我的创作纪念日
提示:你过去写得最好的一段代码是什么?提示:当前创作和你的工作、学习是什么样的关系。提示:可以和大家分享最初成为创作者的初心。提示:在创作的过程中都有哪些收获。提示:职业规划、创作规划等。
2024-03-25 21:08:08 310
原创 【哈希表】Java
给每份数据分配一个编号,放入表格(数组)建立编号与表格索引的关系,将来就可以通过编号快速查找数据1.理想情况编号当唯一,数组能容纳所有数据2.现实是不能说为了容纳所有数据造一个超大数组,编号也有可能重复解决1.有限长度的数组,以【拉链】方式存储数据2.允许编号适当重复,通过数据自身来进行区分。
2024-03-17 20:03:43 133
原创 数据结构中的堆(Java)
在堆的操作中,非叶子节点的重要性体现在维护堆的性质(如最大堆或最小堆)方面。非叶子节点是指至少有一个子节点的节点,它们位于堆的上层。在二叉堆(Binary Heap)中,非叶子节点的数量总是等于总节点数的一半(向上取整)。在堆(Heap)这种数据结构中,节点被分为两类:叶子节点(Leaf Nodes)和非叶子节点(Non-Leaf Nodes)。叶子节点是指没有子节点的节点,它们位于堆的最底层。在堆中,叶子节点的数量总是大于或等于非叶子节点的数量。该方式适用索引为0起点的堆。
2024-03-12 22:28:15 455
原创 ensp实验
network 192.168.1.0他直连的网段 0.0.0.255网段的反掩码。同样的另一台交换机也是一样,lsw2配置完lsw4也要配置。配置好接口的ip地址根据这个ip地址做地址池分配就可以了。acsess只允许通过这个254vlan10的这一个区域。设置完成后设置vlan10的ip地址也就是他的网关。dhcp动态协议给他一个范围他自行分配ip地址。开启他的dhcp 选择他的模式为global。陪完整对应的ip地址之后可以配置ospf了。根据接口的网段来分配ip地址,从大到小的方式。
2023-12-24 01:10:18 1249
原创 软考软件设计师-存储管理-文件管理-计算机网络(中
只有后面没有在使用的才能进行替换,比如3后面的0和2都是马上需要访问到的所以不能换,1排在最后面优先把1替换掉把1换走把3换进来。逻辑块是5我们直接求他的最后一块是多少,第一块是5一共要装256块因为第一块已经装上了那就是256-1减去第一块。接口就是往前推算,从3这个内存块开始,最近使用过8,1,2就不能把他们换走,往前看最久一次使用的是7所以先把7给换走。访问到0的时候0是有的不需要置换,当访问到33在里面没有所以需要置换进去。只要在内存块中没有的都是缺页面的,比如内存块701一直到2才是没有缺页的。
2023-09-23 02:06:23 523
原创 软考软件设计师-计算机组成与体系结构(上
根据前驱图画出六个进程中是v先操作还是p先操作。例如先执行a然后在释放执行b。然后在P2中 S2执行前要先保证a先执行完成了P(a)先把a给锁定住,等a执行完成后在执行s2,执行后又释放Vc和Vd【【2023软件设计师备考】软考中级 | 软件设计师考点理论精讲【零基础适用】】 【精准空降到 41:49】
2023-09-20 17:54:46 1839
原创 Mysql的视图
1.视图可以看做一个虚拟的表,本身是不存储数据的。视图的本质可以看作是存储起来的select语句2.视图中涉及到的表都统称为基表3.针对视图多DML操作,会影响到对应基表中的数据。反之亦然4.视图本身的删除,不会导致基表中数据删除。5.视图的应用场景:针对小型项目,就不推荐使用视图。6.视图的的有点:简单控制。
2023-02-12 20:15:31 437
原创 hutool请求使用POST或者GET响应中文乱码问题解决方案
请求的时候后面加上CharsetUtil.后面是根据响应类型来使用编码,我用的是GBK就能返回中文了。
2022-12-12 20:46:08 3039
原创 通过JAVA删除Linux上带特殊格式和中文名文件
因为我要通过流上传文件到本地处理,处理完成后进行删除,但是有些流文件包含中文名和特殊字符导致无法删除。带有特殊格式的中文名文件,无论怎么转义删除都提示没有这个文件,导致无法删除。
2022-12-02 09:34:00 388
原创 【脱壳修复】脱壳修复IAT
如果脱壳后没有秀发IAT那也只能在你的电脑上运行,无法在别人电脑上运行,因为IAT是为了提升软件的兼容性,软件启动后每次运行都会获取当前电脑的API函数地址,脱壳后就会损坏IAT也就无法获取机器的API函数地址。可以通过od 右键 查看所有模块调用 来查询目前程序所调用的API函数地址。
2022-10-22 20:58:05 206
原创 【脱壳-寻找OEP】壳常用的函数寻找OEP
我们这次用GetProcAddres来测试,载入我们的测试文件然后Cttrl+G输入GetProcAddress获取函数的地址下断点,但是下的是条件断点,只针对函数加载进行记录而不是进行下断。但是这里的数据有几千行不知道哪一行是我们要定位的数据,我们在他的代码段设置访问断点然后一直按住F9往下运行一直到他被断下来为止。这次我们用的是特殊OD。之后一直F9停下来的就会出现代码段,这就是我们的OEP了,但是这个方法不太好用不建议使用。设置esp的记录为记录值,因为esp的栈顶数据读入的第一条肯定是他。
2022-10-20 22:54:59 350
原创 【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)
本次教程用的还是用UPX的加密,直接载入这个文件可以看到一个pushad,每个pushad都有他对应的popad,他的作用就是把右边的寄存器内容压入栈中,popad就是把压入栈中的内容进行还原。我们到堆栈里给他设置一个硬件访问断点,因为他是从第一个开始弹出所以要在第一个地址里设置断点,所以等到他pop出来还原的时候也就是解码完成了,就可以顺着找到oep。对比后发现他把内容都给压入到栈中了,到popad那一步的时候他又会把压入的内容还原到堆栈中去。跳过去就是我们的OEP了。
2022-10-19 23:15:16 473
原创 【脱壳-寻找OEP】通过内存定位OEP实现脱壳
注意:不需要去断加壳程序原本的代码断,因为他本身的代码断是做解密 还原 写入的,没必要在他本身做断点。这次用的也是UPX的壳,载入特殊od后可以看到upx的壳是在我们原始oep的代码外面,UPX0里面才包含我们的原始入口点,UPX1是不包含的,UPX1这块就对 解密 还原 写入这三个步骤进行操作,然后写入到UPX0这个输入表中,也就是我们真实的OEP入口代码地址。设置完后F9运行,可以发现他断在了我们的入口点处,代码已经解密完成了,加壳程序已经还原了他的代码,这也是还原后执行的第一行代码段被我们断了下来。
2022-10-19 21:42:49 539
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人