自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 爬楼梯解法

它意味着爬到第 x 级台阶的方案数是爬到第 x−1 级台阶的方案数和爬到第 x−2 级台阶的方案数的和。很好理解,因为每次只能爬 1 级或 2 级,所以 f(x) 只能从 f(x−1)f和 f(x−2) 转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。我们不难通过转移方程和边界条件给出一个时间复杂度和空间复杂度都是 O(n)的实现,但是由于这里的 f(x)只和 f(x−1)与 f(x−2)有关,所以我们可以用「滚动数组思想」把空间复杂度优化成 O(1)。每次你可以爬 1 或 2 个台阶。

2023-07-19 20:49:32 85

原创 如何在项目中实现多线程

队列中存放任务信息,当线程池中的线程进行任务处理,主动去队列领取任务,队列将任务弹出并交由线程执行,所有线程谁先执行完,就领取行的任务,直到队列中没有任务。线程生命周期:首先通过继承thread或者实现runnable接口来创建一个线程,当调用线程的start方法,线程进入就绪状态,如果这时处理器有资源运行此线程,线程就进入运行状态,如果线程内部调用了sleep就会放弃cpu资源,返回到阻塞状态,线程等待某个通知,sleep时间到了之后,如果其他线程发送通知,那么当前线程就从阻塞状态变为就绪状态恢复执行。

2023-07-14 11:13:22 218 1

原创 JVM常见知识点

(4)堆内存:Jvm进行垃圾回收的主要区域,存放对象信息,分为新生代和老年代,内存比例为1:2,新生代的Eden区内存不够时时发生MinorGC,老年代内存不够时发生FullGC。(2)复制算法: 将内存分为两块,只使用一块,进行垃圾回收时,先将存活的对象复制到另一块区域,然后清空之前的区域。(1)引用计数法:已淘汰,为每个对象添加引用计数器,引用为0时判定可以回收,会有两个对象相互引用无法回收的问题。GCRoot有:虚拟机栈中引用的对象,方法区中静态变量引用的对象,本地方法栈中引用的对象。

2023-07-13 11:30:15 69 1

原创 二叉树的路径总和

求二叉树的路径总和,考虑用递归,从当前节点 root 到叶子节点的路径,满足其路径和为 sum。假定从根节点到当前节点的值之和为 val,我们可以将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为 sum - val。若当前节点就是叶子节点,那么我们直接判断 sum 是否等于 val 即可(因为路径和已经确定,就是当前节点的值,我们只需要判断该路径和是否满足条件)。函数会遍历二叉树中的所有路径,并检查路径上的节点值之和是否等于目标和。

2023-07-12 20:50:59 176 1

原创 二叉树的最小深度

使用深度优先搜索的方法,遍历整棵树,记录最小深度。对于每一个非叶子节点,我们只需要分别计算其左右子树的最小叶子节点深度。这样就将一个大问题转化为了小问题,可以递归地解决该问题。

2023-07-10 20:45:07 32 1

原创 Redis常见知识点

redis的默认持久化机制,通过父进程fork一个子进程,子进程将redis的数据快照写入一个临时文件,等待持久化完毕后替换上一次的rdb文件。其实Redis不是完全多线程的,在核心的网络模型中是多线程的用来处理并发连接,但是数据的操作都是单线程。以日志形式记录每一次的写入和删除操作,策略有每秒同步、每次操作同步、不同步,优点是数据完整性高,缺点是运行效率低,恢复时间长。(3)redis执行命令是单线程的,避免了上下文切换带来的性能问题,也不用考虑锁的问题。(1)任务时常超过缓存时间,锁自动释放。

2023-07-09 20:57:37 148 1

原创 判断平衡二叉树

具体做法类似于二叉树的前序遍历,即对于当前遍历到的节点,首先计算左右子树的高度,如果左右子树的高度差是否不超过 111,再分别递归地遍历左右子节点,并判断左子树和右子树是否平衡。这是一个自顶向下的递归的过程。height§=max(height(p.left),height(p.right))+1,p 是非空节点。要判断一棵树是否为平衡二叉树,二叉树每个节点的高度差不能相差超过1.可以定义一个height函数,height§=0,p 是空节点。

2023-07-09 20:49:57 92 1

原创 如何求二叉树的最大深度

而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1)O(1)O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。如果我们知道了左子树和右子树的最大深度 lll 和 rrr,那么该二叉树的最大深度即为max(l,r)+1。

2023-07-07 20:18:30 68 1

原创 二叉树是否对称

我们将根节点的左子树记做 left,右子树记做 right。递归的比较 left,left 和 right.right,递归比较 left,right 和 right.left。如果相当,比较 left 的左节点和 right 的右节点,再比较 left 的右节点和 right 的左节点。left 和 right 不等,或者 left 和 right 都为空。镜像对称,就是左右两边相等,也就是左子树和右子树是相当的。左子树 的左孩子 == 右子树 的右孩子。左子树 的右孩子 == 右子树 的左孩子。

2023-07-06 20:34:07 60 1

原创 MySQL常见知识点

记录的内容不同:binlog中记录的是数据库语句的逻辑操作,以文本格式的形式存储,易于读取和理解。redolog中记录的是对数据库页的物理修改操作,以二进制格式的形式存储,其主要目的是为了在数据库崩溃时进行恢复操作。而redolog用于记录InnoDB存储引擎的物理变更,即对数据页的修改等,它是在页面级别上进行记录的。只有当持有排他锁的事务释放锁之后,其他事务才能获得该资源的锁。实现分页缓存:可以将查询结果缓存在应用程序的内存中,下次需要获取相同页的数据时,可以直接从缓存中获取,避免再次进行数据库查询。

2023-07-06 20:10:34 121 1

原创 力扣相同的树

给两棵树的根节点判断两棵树是否相同,若其中一棵为空那一定不相同;其次判断两棵树根节点的值是否相同,若相同再判断左子树和右子树是否相同,从而继续递归下去。

2023-07-03 19:59:24 52 1

原创 【无标题】

其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue的底层实现。TreeMap的概述:TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator)。

2023-06-08 20:10:35 42 1

原创 力扣:二叉树的中序遍历

二叉树的中序遍历:采用左根右的方式递归,定义 inorder(root) 表示当前遍历到 root\textit{root}root 节点的答案,那么按照定义,我们只要递归调用 inorder(root.left) 来遍历 root\textit{root}root 节点的左子树,然后将 root\textit{root}root 节点的值加入答案,再递归调用inorder(root.right) 来遍历 root\textit{root}root 节点的右子树即可,递归终止的条件为碰到空节点。

2023-06-07 20:24:25 53 1

原创 【无标题】

二分查找在升序数组 \textit{nums}nums 中寻找目标值 \textit{target}target,对于特定下标 ii,比较 \textit{nums}[i]nums[i] 和 \textit{target}target 的大小:如果 \textit{nums}[i] = \textit{target}nums[i]=target,则下标 ii 即为要寻找的下标;如果 \textit{nums}[i] > \textit{target}nums[i]>target,则 \te

2022-01-12 20:09:42 49

原创 每日一题:累加数

力扣每日一题:累加数一个累加序列,当它的第一个数字和第二个数字以及总长度确定后,这整个累加序列也就确定了。根据这个性质,我们可以穷举累加序列的第一个数字和第二个数字的所有可能性,对每个可能性,进行一次合法性的判断。当出现一次合法的累加序列后,即可返回 \texttt{true}true。当所有可能性都遍历完仍无法找到一个合法的累加序列时,返回 \texttt{false}false。记字符串 \textit{num}num 的长度为 nn,序列最新确定的两个数中,位于前面的数字为 \textit{fir

2022-01-10 16:16:53 152

原创 【无标题】

力扣每日一题:对于括号计算类题目,我们往往可以用栈来思考。遍历字符串 ss,如果遇到了一个左括号,那么就将其入栈;如果遇到了一个右括号,那么就弹出栈顶的左括号,与该右括号匹配。这一过程中的栈的大小的最大值,即为 ss 的嵌套深度。代码实现时,由于我们只需要考虑栈的大小,我们可以用一个变量 \textit{size}size 表示栈的大小,当遇到左括号时就将其加一,遇到右括号时就将其减一,从而表示栈中元素的变化。这一过程中 \textit{size}size 的最大值即为 ss 的嵌套深度。...

2022-01-07 19:08:27 186

原创 2021-09-01

简单分析一下smcSMC题目的核心就在于自解密时的key如果key不提供,那么考点就在于大量x86汇编中一般\x00出现的是最多的而这需要基于一定量的代码之上才能猜出,而且这种题目相对而言可玩的花招要少很多于是选择了将key由一个.init_array中的函数动态生成下一步是自解密代码如何加密放在程序中由于我们只能写出解密代码(编译前的高级语言),因此有两种方法一种是先写好代码,编译后令程序将其加密,然后作为data输出字节码,最后将字节码保存在目标程序中第二种是直接写目标程序,将需要加密的

2021-09-01 16:52:42 70

原创 12月9日实验室日志

flag都是爱你的形状wp打开压缩包发现里面含有一个加密压缩包和一个文本文档文字里提示了有两种密钥的密码,所以猜测是rsa非对称加密第二堆代码是私钥,第三堆代码是公钥,所以去在线解密:解出压缩包密码是nynuctf,然后打开压缩包发现是一道逆向题,那么首先去Exeinfo PE看看有没有壳发现是无壳而且是32位的,所以用32位的ida打开:直接进入main函数:我们分析一下函数,发现这一行将V1的值赋给了Dest然后这个for循环将Dest上的每一位都加上其对应位的数字接着这

2020-12-09 19:19:18 233

原创 11月30日题目veryeasywp

11月30日实验室日志打开压缩包发现有一串编码,是打开加密压缩包的密码看这个编码格式好像为XXencode,在线解码一波发现这串密码也不是压缩包的最终密码,其实还有一层加密,仔细一看应该是编码里字母的顺序改变了,其实这是凯撒加密,位移为3得到压缩包密码后打开,里面是一道简单的逆向题,用Exxinfo PE打开看看里面的信息,发现是无壳且要为64字节用64位的ida打开,直接进入主函数F5进行反编译,直接点进flag在这里发现一个很像flag的编码但其实在主函数里看,里面的字符串

2020-11-30 17:57:49 322

原创 11月26实验室日志

11月26日实验室日志,misc“很简单”首先拿到题目之后发现压缩包里有密码,把压缩包丢进WINHEX,拉到底,发现底部有一串类似于摩斯密码的编码然后进入摩斯密码解码,得到:这串字符直接解压压缩包发现密码不对,把大写改成小写就可以了。打开压缩包之后发现里面是一个图片和一个音频把图片丢进WINHEX,发现里面不只是一个图片,还有压缩包把图片丢进foremost分离,得到一个压缩包这个压缩包也是有密码还有个音频文件没有用,可能音频文件跟这个压缩包的密码有关,把音频文件丢进WINHEX

2020-11-26 10:41:28 266 2

空空如也

空空如也

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

TA关注的人

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